From 642ec46a6f958e8407078f21328b96e4e4a53eb7 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Thu, 28 Sep 2023 19:05:38 +0200 Subject: [PATCH 001/121] Bring over changes from old repo --- vizro-core/examples/default/app.py | 600 +++--------------- .../src/vizro/actions/_actions_utils.py | 22 +- .../_callback_mapping_utils.py | 4 +- vizro-core/src/vizro/models/__init__.py | 8 +- .../src/vizro/models/_components/__init__.py | 4 +- .../src/vizro/models/_components/react.py | 79 +++ .../src/vizro/models/_components/table.py | 52 ++ vizro-core/src/vizro/models/types.py | 9 +- vizro-core/src/vizro/static/css/table.css | 107 ++++ 9 files changed, 351 insertions(+), 534 deletions(-) create mode 100644 vizro-core/src/vizro/models/_components/react.py create mode 100644 vizro-core/src/vizro/models/_components/table.py create mode 100644 vizro-core/src/vizro/static/css/table.css diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index f866fab4c..ebaf7b34c 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,537 +1,103 @@ -"""Example to show dashboard configuration.""" +"""Example to show dashboard configuration specified as pydantic models.""" import os import pandas as pd +import plotly.graph_objects as go +from dash import dash_table, dcc import vizro.models as vm -import vizro.plotly.express as px from vizro import Vizro -from vizro.actions import export_data, filter_interaction - - -def retrieve_avg_continent_data(): - """This is function returns gapminder data grouped by continent.""" - df = px.data.gapminder() - mean = ( - df.groupby(by=["continent", "year"]).agg({"lifeExp": "mean", "pop": "mean", "gdpPercap": "mean"}).reset_index() - ) - return mean - - -def create_variable_analysis(): - """Function returns a page with gapminder data to do variable analysis.""" - df_gapminder = px.data.gapminder() - df_avg_gapminder = retrieve_avg_continent_data() - - page_variable = vm.Page( - title="Variable Analysis", - layout=vm.Layout( - grid=[ - # fmt: off - [0, 1, 1, 1], - [2, 3, 3, 3], - [4, 5, 5, 5], - [6, 7, 7, 7], - # fmt: on - ], - row_min_height="400px", - row_gap="25px", - ), - components=[ - vm.Card( - text=""" - ### Overview - The world map provides initial insights into the variations of metrics across countries and - continents. Click on Play to see the animation and explore the development over time. - - #### Observation - A global trend of increasing life expectancy emerges, with some exceptions in specific African - countries. Additionally, despite similar population growth rates across continents, the overall - global population continues to expand, with India and China leading the way. Meanwhile, GDP per - capita experiences growth in most regions. - - """ - ), - vm.Graph( - id="variable_map", - figure=px.choropleth( - df_gapminder, - locations="iso_alpha", - color="lifeExp", - hover_name="country", - animation_frame="year", - labels={ - "year": "year", - "lifeExp": "Life expectancy", - "pop": "Population", - "gdpPercap": "GDP per capita", - }, - title="Global development over time", - ), - ), - vm.Card( - text=""" - ### Distribution - The boxplot illustrates the distribution of each metric across continents, facilitating comparisons - of life expectancy, GDP per capita, and population statistics. - - Observations reveal that Europe and Oceania have the highest life expectancy and GDP per capita, - likely influenced by their smaller population growth. Additionally, Asia and America exhibit - notable GDP per capita outliers, indicating variations among countries within these continents or - large growth over the observed years. - """ - ), - vm.Graph( - id="variable_boxplot", - figure=px.box( - df_gapminder, - x="continent", - y="lifeExp", - color="continent", - labels={ - "year": "year", - "lifeExp": "Life expectancy", - "pop": "Population", - "gdpPercap": "GDP per capita", - "continent": "Continent", - }, - title="Distribution per continent", - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - ), - ), - vm.Card( - text=""" - ### Development - The line chart tracks the variable's progress from 1952 to 2007, facilitating a deeper comprehension - of each metric. - - #### Observation - Oceania and Europe are found to have the highest total GDP per capita and exhibit significant - growth. In contrast, Asia, Africa, and America demonstrate a more pronounced upward trend in - population increase compared to Europe and Oceania, suggesting that GDP per capita growth might be - influenced by relatively smaller population growth in the latter two continents. - - """ - ), - vm.Graph( - id="variable_line", - figure=px.line( - df_avg_gapminder, - y="lifeExp", - x="year", - color="continent", - title="Development between 1952 and 2007", - labels={ - "year": "Year", - "lifeExp": "Life expectancy", - "pop": "Population", - "gdpPercap": "GDP per capita", - "continent": "Continent", - }, - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - ), - ), - vm.Card( - text=""" - ### Recent status - Examining the data for 2007 provides insight into the current status of each continent and metrics. - - #### Observation - Asia held the largest population, followed by America, Europe, Africa, and Oceania. Life expectancy - surpassed 70 years for all continents, except Africa with 55 years. GDP per capita aligns with - earlier findings, with Oceania and Europe reporting the highest values and Africa recording the - lowest. - """ - ), - vm.Graph( - id="variable_bar", - figure=px.bar( - df_avg_gapminder.query("year == 2007"), - x="lifeExp", - y="continent", - orientation="h", - title="Comparison of average metric for 2007", - labels={ - "year": "year", - "continent": "Continent", - "lifeExp": "Life expectancy", - "pop": "Population", - "gdpPercap": "GDP per capita", - }, - color="continent", - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - ), - ), - ], - controls=[ - vm.Parameter( - targets=["variable_map.color", "variable_boxplot.y", "variable_line.y", "variable_bar.x"], - selector=vm.RadioItems(options=["lifeExp", "pop", "gdpPercap"], title="Select variable"), - ) - ], - ) - return page_variable - - -def create_relation_analysis(): - """Function returns a page to perform relation analysis.""" - df_gapminder = px.data.gapminder() - - page_relation_analysis = vm.Page( - title="Relationship Analysis", - layout=vm.Layout( - grid=[[0, 0, 0, 0, 1]] + [[2, 2, 3, 3, 3]] * 4 + [[4, 4, 4, 4, 4]] * 5, - row_min_height="100px", - row_gap="24px", - ), - components=[ - vm.Card( - text=""" - Population, GDP per capita, and life expectancy are interconnected metrics that provide insights - into the socio-economic well-being of a country. - Rapid population growth can strain resources and infrastructure, impacting GDP per capita. Higher - GDP per capita often enables better healthcare and improved life expectancy, but other factors such - as healthcare quality and social policies also play significant roles. - """ - ), - vm.Card( - text=""" - #### Last updated - July, 2023 - """ - ), - vm.Graph( - id="bar_relation_2007", - figure=px.box( - df_gapminder.query("year == 2007"), - x="continent", - y="lifeExp", - color="continent", - hover_name="continent", - title="Relationship in 2007", - labels={ - "gdpPercap": "GDP per capita", - "pop": "Population", - "lifeExp": "Life expectancy", - "continent": "Continent", - }, - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - custom_data=["continent"], - ), - actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))], - ), - vm.Graph( - id="scatter_relation_2007", - figure=px.scatter( - df_gapminder.query("year == 2007"), - x="gdpPercap", - y="lifeExp", - size="pop", - color="continent", - hover_name="country", - size_max=60, - labels={ - "gdpPercap": "GDP per capita", - "pop": "Population", - "lifeExp": "Life expectancy", - "continent": "Continent", - }, - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - ), - ), - vm.Graph( - id="scatter_relation", - figure=px.scatter( - df_gapminder, - x="gdpPercap", - y="lifeExp", - animation_frame="year", - animation_group="country", - size="pop", - color="continent", - hover_name="country", - facet_col="continent", - labels={ - "gdpPercap": "GDP per capita", - "pop": "Population", - "lifeExp": "Life expectancy", - "continent": "Continent", - }, - range_y=[25, 90], - color_discrete_map={ - "Africa": "#00b4ff", - "Americas": "#ff9222", - "Asia": "#3949ab", - "Europe": "#ff5267", - "Oceania": "#08bdba", - }, - ), - ), - ], - controls=[ - vm.Parameter( - targets=["scatter_relation_2007.x", "scatter_relation.x"], - selector=vm.Dropdown( - options=["lifeExp", "gdpPercap", "pop"], multi=False, value="gdpPercap", title="Choose x-axis" - ), - ), - vm.Parameter( - targets=["scatter_relation_2007.y", "scatter_relation.y", "bar_relation_2007.y"], - selector=vm.Dropdown( - options=["lifeExp", "gdpPercap", "pop"], multi=False, value="lifeExp", title="Choose y-axis" - ), - ), - vm.Parameter( - targets=["scatter_relation_2007.size", "scatter_relation.size"], - selector=vm.Dropdown( - options=["lifeExp", "gdpPercap", "pop"], multi=False, value="pop", title="Choose bubble size" - ), - ), - ], - ) - return page_relation_analysis - - -def create_continent_summary(): - """Function returns a page with markdown including images.""" - page_summary = vm.Page( - title="Continent Summary", - layout=vm.Layout(grid=[[i] for i in range(5)], row_min_height="190px", row_gap="25px"), - components=[ - vm.Card( - text=""" - ### Africa - ![](assets/images/continents/africa.svg#my-image) - - Africa, a diverse and expansive continent, faces both challenges and progress in its socio-economic - landscape. In 2007, Africa's GDP per capita was approximately $3,000, reflecting relatively slower - growth compared to other continents like Oceania and Europe. - - However, Africa has shown notable improvements in life expectancy over time, reaching 55 years in - 2007. Despite these economic disparities, Africa's population has been steadily increasing, - reflecting its significant potential for development. - """, - ), - vm.Card( - text=""" - ### Americas - ![](assets/images/continents/america.svg#my-image) - - Comprising North and South America, Americas represents a region of vast geographical and cultural - diversity. In 2007, the continent experienced substantial population growth, with a diverse mix of - countries contributing to this expansion. - - Although its GDP per capita of $11,000 in 2007 exhibited variations across countries, America - maintained similar levels to Asia, reflecting its economic significance. With North America - generally reporting higher life expectancy compared to South America, America remains a region of - opportunities and challenges. - """, - ), - vm.Card( - text=""" - ### Asia - ![](assets/images/continents/asia.svg#my-image) - - Asia holds a central role in the global economy. It's growth in GDP per capita to $12,000 in 2007 - and population has been significant, outpacing many other continents. In 2007, it boasted the - highest population among all continents, with countries like China and India leading the way. - - Despite facing various socio-economic challenges, Asia's increasing life expectancy from 46 years - to 70 over the years reflects advancements in healthcare and overall well-being, making it a vital - region driving global progress and development. - """, - ), - vm.Card( - text=""" - ### Europe - ![](assets/images/continents/europe.svg#my-image) - - Europe boasts a strong and thriving economy. In 2007, it exhibited the second-highest GDP per - capita of $25,000 among continents, indicating sustained economic growth and development. - - Europe's life expectancy surpassed 75 years, showcasing a high standard of living and - well-established healthcare systems. With its robust infrastructure, advanced industries, and - quality of life, Europe continues to be a leading force in the global economy. Between 1952 and - 2007, Europe's population experienced moderate growth, with a factor of approximately 1.5, - notably lower compared to other continents like Asia and America. - """, - ), - vm.Card( - text=""" - ### Oceania - ![](assets/images/continents/oceania.svg#my-image) - - Oceania, comprising countries like Australia and New Zealand, stands out with notable economic - prosperity and longer life expectancy. In 2007, it boasted the highest GDP per capita of $27,000 - among continents and exhibited one of the highest life expectancy levels, surpassing 80 years. - - Despite a relatively smaller population size, Oceania's strong economic growth has contributed - to improved living standards and overall well-being of its population. - """, - ), +from vizro.managers import data_manager +from vizro.models.types import capture + +def retrieve_table_data(): + """Return data for table for testing.""" + data = { + "State": [ + "California", + "Arizona", + "Nevada", + "New Mexico", + "Colorado", + "Texas", + "North Carolina", + "New York", ], - ) - return page_summary - + "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13], + "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53], + "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1], + "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84], + } -def create_country_analysis(): - """Function returns a page to perform analysis on country level.""" - df_gapminder = px.data.gapminder() + return pd.DataFrame(data) - df_gapminder_agg = px.data.gapminder() - df_gapminder_agg["lifeExp"] = df_gapminder_agg.groupby(by=["continent", "year"])["lifeExp"].transform("mean") - df_gapminder_agg["gdpPercap"] = df_gapminder_agg.groupby(by=["continent", "year"])["gdpPercap"].transform("mean") - df_gapminder_agg["pop"] = df_gapminder_agg.groupby(by=["continent", "year"])["pop"].transform("sum") - df_gapminder["data"] = "Country" - df_gapminder_agg["data"] = "Continent" - df_gapminder = pd.concat([df_gapminder_agg, df_gapminder], ignore_index=True) - - page_country = vm.Page( - title="Country Analysis", - layout=vm.Layout(grid=[[0, 0, 0, 1, 1, 1]] * 7 + [[2, 2, 2, 2, 2, 2]]), - components=[ - vm.Graph( - id="bar_country", - figure=px.bar( - df_gapminder, - x="year", - y="pop", - color="data", - barmode="group", - labels={"year": "Year", "data": "Data", "pop": "Population"}, - color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, - ), - ), - vm.Graph( - id="line_country", - figure=px.line( - df_gapminder, - x="year", - y="gdpPercap", - color="data", - labels={"year": "Year", "data": "Data", "gdpPercap": "GDP per capita"}, - color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, - markers=True, - ), - ), - vm.Button( - text="Export data", - actions=[ - vm.Action( - function=export_data( - targets=["bar_country"], - ) - ), - ], - ), - ], - controls=[ - vm.Filter(column="country", selector=vm.Dropdown(value="India", multi=False, title="Select country")), - vm.Filter(column="year", selector=vm.RangeSlider(title="Select timeframe")), - ], +# Option 1: Use graph objects table +@capture("graph") +def table_go(data_frame=None, template=None): + """Custom table.""" + return go.Figure( + data=[ + go.Table( + header={"values": data_frame.columns.to_list()}, + cells={"values": data_frame.values.transpose().tolist()}, + ) + ] ) - return page_country - - -def create_home_page(): - """Function returns the homepage.""" - page_home = vm.Page( - title="Homepage", - layout=vm.Layout(grid=[[0, 1], [2, 3]], row_gap="16px", col_gap="24px"), - components=[ - vm.Card( - text=""" - ![](assets/images/icons/content/hypotheses.svg#icon-top) - - ### Variable Analysis - - Analyzing population, GDP per capita and life expectancy on country and continent level. - """, - href="/variable-analysis", - ), - vm.Card( - text=""" - ![](assets/images/icons/content/hypotheses.svg#icon-top) - - ### Relationship Analysis - - Investigating the interconnection between population, GDP per capita and life expectancy. - """, - href="/relationship-analysis", - ), - vm.Card( - text=""" - ![](assets/images/icons/content/collections.svg#icon-top) - ### Continent Summary - Summarizing the main findings for each continent. - """, - href="/continent-summary", - ), - vm.Card( - text=""" - ![](assets/images/icons/content/features.svg#icon-top) - ### Country Analysis - - Discovering how the metrics differ for each country and export data for further investigation. - """, - href="/country-analysis", - ), - ], - ) - return page_home - - -dashboard = vm.Dashboard( - pages=[ - create_home_page(), - create_variable_analysis(), - create_relation_analysis(), - create_continent_summary(), - create_country_analysis(), +@capture("action") +def table_dash(data_frame=None, style_header=None): + """Custom table.""" + return dash_table.DataTable( + data=data_frame.to_dict("records"), + columns=[{"name": i, "id": i} for i in data_frame.columns], + style_header=style_header) + + +@capture("action") +def markdown(data_frame=None): + """Custom table.""" + return dcc.Markdown(f"Data columns: {data_frame.columns.to_list()}") + + +data_manager["table_data"] = retrieve_table_data +data = retrieve_table_data() + +page_0 = vm.Page( + title="Color manager", + path="color-manager", + components=[ + # Option 1 + # vm.Graph( + # id="go_table", + # figure=table_go(data_frame='table_data'), + # ), + # Option 2 + # vm.Table(data_frame="table_data", style_header={ 'border': '1px solid black' }), + # Option 3 with pd.DataFrame() + # vm.Table( + # id="table1", + # figure=table_dash( + # data_frame=pd.DataFrame({"A": 1.0, "B": pd.Series(1, index=list(range(4)), dtype="float32")}) + # ), + # ), + # Option 3 with str + vm.React(id="table2", figure=table_dash(data_frame="table_data")), + # Option 3 with different react model + # vm.React(id="table3", + # figure=markdown(data_frame='table_data') + # ) + ], + controls=[ + vm.Filter(column="State", selector=vm.Dropdown()), + # vm.Parameter(targets=["table2.figure.page_size"], selector=vm.RadioItems(options=[3,5])) ], - navigation=vm.Navigation( - pages={ - "Analysis": ["Homepage", "Variable Analysis", "Relationship Analysis", "Country Analysis"], - "Summary": ["Continent Summary"], - } - ), ) +dashboard = vm.Dashboard(pages=[page_0]) if __name__ == "__main__": Vizro._user_assets_folder = os.path.abspath("../assets") - Vizro().build(dashboard).run() + Vizro().build(dashboard).run() \ No newline at end of file diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index f1cf7e870..196f642fc 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -182,12 +182,16 @@ def _get_modified_page_charts( parameters=ctds_parameters, ) - outputs = { - target: model_manager[target]( # type: ignore[index, operator] - data_frame=filtered_data[target], - **parameterized_config[target], - ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") - for target in targets - } - - return outputs + outputs = {} + + for target in targets: + if model_manager[target].type == "graph": + outputs[target] = model_manager[target]( # type: ignore[index, operator] + data_frame=filtered_data[target], **parameterized_config[target] + ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") + elif model_manager[target].type == "react": + outputs[target] = model_manager[target]( # type: ignore[index, operator] + data_frame=filtered_data[target], **parameterized_config[target] + ) + + return outputs \ No newline at end of file diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 2477f5df0..37f284ba3 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -160,7 +160,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: return { target: Output( component_id=target, - component_property="figure", + component_property="children" if model_manager[target].type == "react" else "figure", allow_duplicate=True, ) for target in targets @@ -207,4 +207,4 @@ def _get_export_data_callback_components(action_id: ModelID) -> List[dcc.Downloa }, ) for target in targets - ] + ] \ No newline at end of file diff --git a/vizro-core/src/vizro/models/__init__.py b/vizro-core/src/vizro/models/__init__.py index 776a4bfab..d96faef49 100644 --- a/vizro-core/src/vizro/models/__init__.py +++ b/vizro-core/src/vizro/models/__init__.py @@ -1,7 +1,7 @@ # Keep this import at the top to avoid circular imports since it's used in every model. from ._base import VizroBaseModel # noqa: I001 from ._action import Action -from ._components import Card, Graph +from ._components import Card, Graph, Table, React from ._components.form import Button, Checklist, Dropdown, RadioItems, RangeSlider, Slider from ._controls import Filter, Parameter from ._navigation.navigation import Navigation @@ -9,7 +9,7 @@ from ._layout import Layout from ._page import Page -Page.update_forward_refs(Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter) +Page.update_forward_refs(Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter,Table=Table,React=React) Dashboard.update_forward_refs(Page=Page, Navigation=Navigation) # Please keep alphabetically ordered @@ -28,6 +28,8 @@ "Parameter", "RadioItems", "RangeSlider", + "React", "Slider", "VizroBaseModel", -] + "Table" +] \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/__init__.py b/vizro-core/src/vizro/models/_components/__init__.py index fb92f705d..4c3fe8080 100644 --- a/vizro-core/src/vizro/models/_components/__init__.py +++ b/vizro-core/src/vizro/models/_components/__init__.py @@ -2,5 +2,7 @@ from vizro.models._components.button import Button from vizro.models._components.card import Card from vizro.models._components.graph import Graph +from vizro.models._components.react import React +from vizro.models._components.table import Table -__all__ = ["Button", "Card", "Graph"] +__all__ = ["Button", "Card", "Graph", "React", "Table"] \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/react.py b/vizro-core/src/vizro/models/_components/react.py new file mode 100644 index 000000000..84dce8e84 --- /dev/null +++ b/vizro-core/src/vizro/models/_components/react.py @@ -0,0 +1,79 @@ +import logging +from typing import Callable, List, Literal + +from dash import html +from pydantic import Field, validator + +from vizro.managers import data_manager +from vizro.models import Action, VizroBaseModel +from vizro.models._action._actions_chain import _action_validator_factory +from vizro.models._models_utils import _log_call +from vizro.models.types import CapturedCallable + +logger = logging.getLogger(__name__) + + +class React(VizroBaseModel): + """Wrapper for react components to visualize in dashboard. + Args: + type (Literal["react"]): Defaults to `"react"`. + figure (CapturedCallable): React object to be displayed. + # actions (List[Action]): List of the Action objects, that allows to + # configure app interactions, triggered by affecting this component. + """ + + type: Literal["react"] = "react" + data: Callable = None + figure: CapturedCallable = Field(..., description="React component to be visualized on dashboard") + actions: List[Action] = [] + + # validator + set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] + + @validator("figure") + def process_component_data_frame(cls, figure, values): + data_frame = figure["data_frame"] + + # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. + # In these cases, data already exists in the data manager and just needs to be linked to the component. + if isinstance(data_frame, str): + data_manager._add_component(values["id"], data_frame) + return figure + + # Standard case for df: pd.DataFrame. + # Extract dataframe from the captured function and put it into the data manager. + dataset_name = str(id(data_frame)) + + logger.debug("Adding data to data manager for Graph with id %s", values["id"]) + # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need + # to duplicate it. Just log the exception for debugging purposes. + try: + data_manager[dataset_name] = data_frame + except ValueError as exc: + logger.debug(exc) + + data_manager._add_component(values["id"], dataset_name) + + # No need to keep the data in the captured function any more so remove it to save memory. + # del figure["data_frame"] + return figure + + # Convenience wrapper/syntactic sugar. + def __call__(self, **kwargs): + kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] + return self.figure(**kwargs) + + # Convenience wrapper/syntactic sugar. + def __getitem__(self, arg_name: str): + # pydantic discriminated union validation seems to try Graph["type"], which throws an error unless we + # explicitly redirect it to the correct attribute. + if arg_name == "type": + return self.type + return self.figure[arg_name] + + @_log_call + def build(self): + data = data_manager._get_component_data(self.id) # type: ignore + additional_args = self.figure._arguments.copy() + additional_args.pop("data_frame", None) + return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py new file mode 100644 index 000000000..2fd5d668c --- /dev/null +++ b/vizro-core/src/vizro/models/_components/table.py @@ -0,0 +1,52 @@ +import logging +from typing import Dict, Literal + +from dash import dash_table, html +from pydantic import Field + +from vizro.managers import data_manager +from vizro.models import VizroBaseModel +from vizro.models._models_utils import _log_call + +logger = logging.getLogger(__name__) + + +class Table(VizroBaseModel): + """Creates a table utilizing dash_table.DataTable. + Args: + type (Literal["table"]): Defaults to `"table"`. + data_frame (pd.DataFrame): Dataframe to be used for table. + style_header (Dict[str, str]): Custom styling for header + filter_action (str): 'native' to + """ + + type: Literal["table"] = "table" + data_frame: str = Field(..., description="Data frame to be visualized as table.") + style_header: Dict[str, str] + # filter_action: str = 'custom' + # Todo: + # Add parameters: style_table, style_cell, style_data, style_filter, style_header, style_cell_conditional, + # style_data_conditional, style_filter_conditional, style_header_conditional, cols_to_remove + + def __init__(self, **data): + super().__init__(**data) + if isinstance(self.data_frame, str): + data_manager._add_component(self.id, self.data_frame) + + @classmethod + def update_layout(self, template=None): + pass + + @_log_call + def build(self): + data = data_manager._get_component_data(self.id) # type: ignore + + table = dash_table.DataTable( + data=data.to_dict("records"), + columns=[{"name": i, "id": i} for i in data.columns], + style_header=self.style_header, + filter_action="custom", # link: https://dash.plotly.com/datatable/filtering + ) + table_container = "table_container" + + return html.Div(table, className=table_container) \ No newline at end of file diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 6ba038e05..80a0ecd5b 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -213,6 +213,11 @@ def wrapped(*args, **kwargs): return CapturedCallable(func, *args, **kwargs) return wrapped + elif self._mode == "react": + # React component + @functools.wraps(func) + def wrapped(*args, **kwargs): + return CapturedCallable(func, *args, **kwargs) raise ValueError("Valid modes of the capture decorator are @capture('graph') and @capture('action').") @@ -265,7 +270,7 @@ class OptionsDictType(TypedDict): [`Parameter`][vizro.models.Parameter].""" ComponentType = Annotated[ - Union["Button", "Card", "Graph"], + Union["Button", "Card", "Graph", "Table", "React"], Field( discriminator="type", description="Component that makes up part of the layout on the page.", @@ -281,4 +286,4 @@ class OptionsDictType(TypedDict): None, description="List of Page IDs or dict mapping of Page IDs and titles (for hierarchical sub-navigation)" ), ] -"""Permissible value types for page attribute. Values are displayed as default.""" +"""Permissible value types for page attribute. Values are displayed as default.""" \ No newline at end of file diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css new file mode 100644 index 000000000..052b06887 --- /dev/null +++ b/vizro-core/src/vizro/static/css/table.css @@ -0,0 +1,107 @@ +.dash-table-container { + width: 100%; +} + +.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner tr { + height: 0px !important; +} + +.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { + background-color: var(--main-container-bg-color) !important; + border: 1px solid var(--main-container-bg-color) !important; + border-bottom-color: rgb(255, 255, 255, 0.3) !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .dash-filter + input[type="button"], +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .dash-filter + input[type="text"]::placeholder { + color: var(--text-primary) !important; + border-color: var(--text-primary) !important; + margin-right: 3px !important; + opacity: 0.55; + transition: 0.2s; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .dash-filter + input[type="text"]:hover::placeholder { + opacity: 1 !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .dash-filter + input:focus::placeholder { + opacity: 0 !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .dash-filter + input { + color: var(--text-primary) !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-clear-zone + > .Select-clear { + color: revert !important; + margin-left: 3px; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-value-label { + margin-right: 15px; + margin-left: 10px; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-control:hover + .Select-arrow { + border-top-color: var(--fill-medium-emphasis) !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-arrow-zone:hover + > .Select-arrow { + border-top-color: #666 !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-menu-outer + .Select-option { + color: var(--text-secondary) !important; +} + +.dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .Select-menu-outer + .Select-option:hover { + background-color: var(--fill-contrast-hover-selected) !important; +} + +.dash-table-container .show-hide { + display: none; +} \ No newline at end of file From a300631fe2c5f14bf77a8cc355340d7cbc930090 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Tue, 10 Oct 2023 21:13:10 +0200 Subject: [PATCH 002/121] Add notes --- vizro-core/examples/default/app.py | 41 ++++---- vizro-core/pyproject.toml | 6 +- vizro-core/src/scratch.py | 95 +++++++++++++++++++ .../src/vizro/actions/_actions_utils.py | 2 +- .../_callback_mapping_utils.py | 2 +- vizro-core/src/vizro/models/__init__.py | 8 +- .../src/vizro/models/_components/__init__.py | 2 +- .../src/vizro/models/_components/react.py | 3 +- .../src/vizro/models/_components/table.py | 5 +- vizro-core/src/vizro/models/types.py | 2 +- vizro-core/src/vizro/static/css/table.css | 2 +- 11 files changed, 132 insertions(+), 36 deletions(-) create mode 100644 vizro-core/src/scratch.py diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index ebaf7b34c..acebe1d27 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,6 +1,7 @@ """Example to show dashboard configuration specified as pydantic models.""" import os +import d3_bar_chart import pandas as pd import plotly.graph_objects as go from dash import dash_table, dcc @@ -10,6 +11,7 @@ from vizro.managers import data_manager from vizro.models.types import capture + def retrieve_table_data(): """Return data for table for testing.""" data = { @@ -32,7 +34,6 @@ def retrieve_table_data(): return pd.DataFrame(data) - # Option 1: Use graph objects table @capture("graph") def table_go(data_frame=None, template=None): @@ -47,14 +48,24 @@ def table_go(data_frame=None, template=None): ) +@capture("graph") +def d3_bar(data_frame=None): + """Custom table.""" + return d3_bar_chart.D3BarChart( + id="input", + value="my-value", + label="my-label", + ) + @capture("action") def table_dash(data_frame=None, style_header=None): """Custom table.""" return dash_table.DataTable( - data=data_frame.to_dict("records"), - columns=[{"name": i, "id": i} for i in data_frame.columns], - style_header=style_header) + data=data_frame.to_dict("records"), + columns=[{"name": i, "id": i} for i in data_frame.columns], + style_header=style_header, + ) @capture("action") @@ -70,26 +81,8 @@ def markdown(data_frame=None): title="Color manager", path="color-manager", components=[ - # Option 1 - # vm.Graph( - # id="go_table", - # figure=table_go(data_frame='table_data'), - # ), - # Option 2 - # vm.Table(data_frame="table_data", style_header={ 'border': '1px solid black' }), - # Option 3 with pd.DataFrame() - # vm.Table( - # id="table1", - # figure=table_dash( - # data_frame=pd.DataFrame({"A": 1.0, "B": pd.Series(1, index=list(range(4)), dtype="float32")}) - # ), - # ), - # Option 3 with str vm.React(id="table2", figure=table_dash(data_frame="table_data")), - # Option 3 with different react model - # vm.React(id="table3", - # figure=markdown(data_frame='table_data') - # ) + vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), @@ -100,4 +93,4 @@ def markdown(data_frame=None): if __name__ == "__main__": Vizro._user_assets_folder = os.path.abspath("../assets") - Vizro().build(dashboard).run() \ No newline at end of file + Vizro().build(dashboard).run() diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index 8f32c3692..48d198172 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -27,7 +27,8 @@ dependencies = [ "numpy>=1.22.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-NUMPY-2321970 "tornado>=6.3.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-TORNADO-5537286 "setuptools>=65.5.1", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 - "MarkupSafe" # required to sanitise user input + "MarkupSafe", # required to sanitise user input + "d3_bar_chart @ file:///Users/huong_li_nguyen/Desktop/d3_bar_chart-0.0.1-py3-none-any.whl" ] description = "Vizro is a package to facilitate visual analytics." dynamic = ["version"] @@ -64,3 +65,6 @@ skip_covered = true branch = true parallel = true source_pkgs = ["vizro"] + +[tool.hatch.metadata] +allow-direct-references = true diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py new file mode 100644 index 000000000..8d15c23f8 --- /dev/null +++ b/vizro-core/src/scratch.py @@ -0,0 +1,95 @@ +# API for Table/React Charts +import d3_bar_chart +from dash import dash_table + +import vizro.models as vm +from vizro.models.types import capture + + +# Dash Table +@capture("graph") +def dash_table(data_frame=None, style_header=None): + """Custom table.""" + return dash_table.DataTable( + data=data_frame.to_dict("records"), + columns=[{"name": i, "id": i} for i in data_frame.columns], + style_header=style_header, + ) + + +# D3 Visualisation +@capture("graph") +def d3_bar_chart(data_frame=None): + """Custom table.""" + return d3_bar_chart.D3BarChart( + data_frame=data_frame, # Custom D3 charts should have data_frame or other data arg + id="input", + value="my-value", + label="my-label", + ) + + +# 1) Graph --------------------- +vm.Graph(figure=dash_table) +vm.Graph(figure=d3_bar_chart) + +""" +Pro: +- One wrapper for all charts + +Con: +- Returning different object based on figure -> dcc.Graph or html.Div + +To consider +- clickEvent property differs from the rest of px.charts --> needs to be refactored out of Graph +- post update calls differ (e.g. update_layout not available) --> needs to be refactored out of Graph +""" + + +# 2) Table & React -------------------- +vm.Table(data_frame, **kwargs) +vm.ReactFigure(figure=d3_bar_chart) + +""" +Pro: +- No need to create a custom chart, as datatable logic will live within the component (consistent with other components other than Graph) + +Con: +- Need to enable many of the args from the dash datatable or enable users to provide *kwargs which deviates from all other models +- Would need to enable additional transformer arg or create a custom chart from Table instance to enable more sophisticated tables +- Would need another wrapper for other react charts -> bad paradigm to create new model for each new react chart +""" + +# 3) Table & React -------------------- +vm.Table(figure=dash_table) +vm.ReactFigure(figure=d3_bar_chart) + +""" +Pro: +- Users can customize their table to their liking and we don't maintain these args + +Con: +- Users have to create a custom chart first and then provide it to the table +- Separate models for Table and other react components - should we give the table even that special treatment? + +To consider +- Does it make sense to have a figure argument if only one type of figure can be provided? +- Would we create our own custom react table at some point? +""" + + +# 4) ReactFigure -------------------- +vm.ReactFigure(figure=dash_table) +vm.ReactFigure(figure=d3_bar_chart) + +""" +Pro: +- Eventually gives us more freedom increating custom js components + +Con: +- Will have different clickEvent properties +- Graph is essentially already doing what React will do - should we even add this model? +""" + +# Preferences: +# 1, 3/4, 2 diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 196f642fc..c9d063271 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -194,4 +194,4 @@ def _get_modified_page_charts( data_frame=filtered_data[target], **parameterized_config[target] ) - return outputs \ No newline at end of file + return outputs diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 37f284ba3..31d8d91b5 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -207,4 +207,4 @@ def _get_export_data_callback_components(action_id: ModelID) -> List[dcc.Downloa }, ) for target in targets - ] \ No newline at end of file + ] diff --git a/vizro-core/src/vizro/models/__init__.py b/vizro-core/src/vizro/models/__init__.py index d96faef49..4efa1305a 100644 --- a/vizro-core/src/vizro/models/__init__.py +++ b/vizro-core/src/vizro/models/__init__.py @@ -9,7 +9,9 @@ from ._layout import Layout from ._page import Page -Page.update_forward_refs(Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter,Table=Table,React=React) +Page.update_forward_refs( + Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter, Table=Table, React=React +) Dashboard.update_forward_refs(Page=Page, Navigation=Navigation) # Please keep alphabetically ordered @@ -31,5 +33,5 @@ "React", "Slider", "VizroBaseModel", - "Table" -] \ No newline at end of file + "Table", +] diff --git a/vizro-core/src/vizro/models/_components/__init__.py b/vizro-core/src/vizro/models/_components/__init__.py index 4c3fe8080..4a4697c5a 100644 --- a/vizro-core/src/vizro/models/_components/__init__.py +++ b/vizro-core/src/vizro/models/_components/__init__.py @@ -5,4 +5,4 @@ from vizro.models._components.react import React from vizro.models._components.table import Table -__all__ = ["Button", "Card", "Graph", "React", "Table"] \ No newline at end of file +__all__ = ["Button", "Card", "Graph", "React", "Table"] diff --git a/vizro-core/src/vizro/models/_components/react.py b/vizro-core/src/vizro/models/_components/react.py index 84dce8e84..927c74827 100644 --- a/vizro-core/src/vizro/models/_components/react.py +++ b/vizro-core/src/vizro/models/_components/react.py @@ -15,6 +15,7 @@ class React(VizroBaseModel): """Wrapper for react components to visualize in dashboard. + Args: type (Literal["react"]): Defaults to `"react"`. figure (CapturedCallable): React object to be displayed. @@ -76,4 +77,4 @@ def build(self): data = data_manager._get_component_data(self.id) # type: ignore additional_args = self.figure._arguments.copy() additional_args.pop("data_frame", None) - return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) \ No newline at end of file + return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 2fd5d668c..4807d58c0 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -13,11 +13,12 @@ class Table(VizroBaseModel): """Creates a table utilizing dash_table.DataTable. + Args: type (Literal["table"]): Defaults to `"table"`. data_frame (pd.DataFrame): Dataframe to be used for table. style_header (Dict[str, str]): Custom styling for header - filter_action (str): 'native' to + filter_action (str): 'native' to. """ type: Literal["table"] = "table" @@ -49,4 +50,4 @@ def build(self): ) table_container = "table_container" - return html.Div(table, className=table_container) \ No newline at end of file + return html.Div(table, className=table_container) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 80a0ecd5b..e98fba379 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -286,4 +286,4 @@ class OptionsDictType(TypedDict): None, description="List of Page IDs or dict mapping of Page IDs and titles (for hierarchical sub-navigation)" ), ] -"""Permissible value types for page attribute. Values are displayed as default.""" \ No newline at end of file +"""Permissible value types for page attribute. Values are displayed as default.""" diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 052b06887..685aa7b1d 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -104,4 +104,4 @@ .dash-table-container .show-hide { display: none; -} \ No newline at end of file +} From 3c457876251d9d522476d2e7a6d628cb91b5a973 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Tue, 10 Oct 2023 21:20:54 +0200 Subject: [PATCH 003/121] Add comments which code sections are plotly specific --- vizro-core/src/scratch.py | 6 ++---- .../actions/_callback_mapping/_callback_mapping_utils.py | 6 ++++-- vizro-core/src/vizro/models/_components/graph.py | 6 ++++-- vizro-core/src/vizro/models/_page.py | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py index 8d15c23f8..cef1d20fb 100644 --- a/vizro-core/src/scratch.py +++ b/vizro-core/src/scratch.py @@ -8,12 +8,10 @@ # Dash Table @capture("graph") -def dash_table(data_frame=None, style_header=None): +def dash_table(data_frame=None, **kwargs): """Custom table.""" return dash_table.DataTable( - data=data_frame.to_dict("records"), - columns=[{"name": i, "id": i} for i in data_frame.columns], - style_header=style_header, + data=data_frame.to_dict("records"), columns=[{"name": i, "id": i} for i in data_frame.columns], **kwargs ) diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 31d8d91b5..78157fd99 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -107,7 +107,7 @@ def _get_inputs_of_chart_interactions( return [ State( component_id=_get_triggered_model(action_id=action.id).id, # type: ignore[arg-type] - component_property="clickData", + component_property="clickData", # LN: Needs to be refactored so plotly-independent or extendable ) for action in chart_interactions_on_page ] @@ -160,7 +160,9 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: return { target: Output( component_id=target, - component_property="children" if model_manager[target].type == "react" else "figure", + component_property="children" + if model_manager[target].type == "react" + else "figure", # LN: Needs to be refactored so plotly-independent or extendable allow_duplicate=True, ) for target in targets diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index fb112842f..a3eb9183b 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -37,7 +37,9 @@ class Graph(VizroBaseModel): """ type: Literal["graph"] = "graph" - figure: CapturedCallable = Field(..., import_path=px) + figure: CapturedCallable = Field( + ..., import_path=px + ) # LN: Needs to be refactored so plotly-independent or extendable actions: List[Action] = [] # Re-used validators @@ -78,7 +80,7 @@ def __call__(self, **kwargs): # Remove top margin if title is provided if fig.layout.title.text is None: - fig.update_layout(margin_t=24) + fig.update_layout(margin_t=24) # LN: Needs to be refactored so plotly-independent or extendable return fig # Convenience wrapper/syntactic sugar. diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 5906a26f9..eb49c521c 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -132,7 +132,7 @@ def build(self): ] return self._make_page_layout(controls_content, components_content) - def _update_graph_theme(self): + def _update_graph_theme(self): # LN: Needs to be refactored so plotly-independent or extendable outputs = [ Output(component.id, "figure", allow_duplicate=True) for component in self.components From 16516f7bec5461ae0aee6569d33d9183c39f1001 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Wed, 11 Oct 2023 09:53:42 +0200 Subject: [PATCH 004/121] Add more thoughts --- vizro-core/src/scratch.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py index cef1d20fb..474dd8ccb 100644 --- a/vizro-core/src/scratch.py +++ b/vizro-core/src/scratch.py @@ -37,8 +37,10 @@ def d3_bar_chart(data_frame=None): Con: - Returning different object based on figure -> dcc.Graph or html.Div +- Would contradict our current paradigm of naming models close to what is being used underneath To consider +- dash keeps Graph and Table separate as well -> Graph enables all plotly.js powered charts, Table has different figure json schema and is therefore separate - clickEvent property differs from the rest of px.charts --> needs to be refactored out of Graph - post update calls differ (e.g. update_layout not available) --> needs to be refactored out of Graph """ @@ -54,7 +56,7 @@ def d3_bar_chart(data_frame=None): Con: - Need to enable many of the args from the dash datatable or enable users to provide *kwargs which deviates from all other models -- Would need to enable additional transformer arg or create a custom chart from Table instance to enable more sophisticated tables +- Would need to create a custom chart from Table instance anyways to enable more sophisticated functionality required by verticals - Would need another wrapper for other react charts -> bad paradigm to create new model for each new react chart """ @@ -68,7 +70,8 @@ def d3_bar_chart(data_frame=None): Con: - Users have to create a custom chart first and then provide it to the table -- Separate models for Table and other react components - should we give the table even that special treatment? +- Separate models for Table and other react components +- Table would only support one type of figure - does it then even deserve its own model? To consider - Does it make sense to have a figure argument if only one type of figure can be provided? @@ -82,12 +85,16 @@ def d3_bar_chart(data_frame=None): """ Pro: -- Eventually gives us more freedom increating custom js components +- Eventually gives us more freedom in creating custom js components +- Is only a thin wrapper and consistently returns an html.Div (one possible return type per model) Con: -- Will have different clickEvent properties -- Graph is essentially already doing what React will do - should we even add this model? +- Will have different clickEvent properties (that could be configured via custom actions though) + +To consider: +- Should we actually extend the concept of this to vm.Html or vm.Container as essentially it just wraps the component inside an html.Div? + That model could then also be re-used for several other things? (Would mix lots of different concepts then though, so maybe bad idea) """ # Preferences: -# 1, 3/4, 2 +# 4, 1/3, 2 \ No newline at end of file From 6ad33ca88549239ec9c92ed7d27c6e708ae0f67b Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Wed, 11 Oct 2023 12:42:25 +0200 Subject: [PATCH 005/121] Update scratch.py --- vizro-core/src/scratch.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py index 474dd8ccb..5f676d149 100644 --- a/vizro-core/src/scratch.py +++ b/vizro-core/src/scratch.py @@ -60,7 +60,7 @@ def d3_bar_chart(data_frame=None): - Would need another wrapper for other react charts -> bad paradigm to create new model for each new react chart """ -# 3) Table & React -------------------- +# 3) Table & React (currently preferred) -------------------- vm.Table(figure=dash_table) vm.ReactFigure(figure=d3_bar_chart) @@ -94,7 +94,4 @@ def d3_bar_chart(data_frame=None): To consider: - Should we actually extend the concept of this to vm.Html or vm.Container as essentially it just wraps the component inside an html.Div? That model could then also be re-used for several other things? (Would mix lots of different concepts then though, so maybe bad idea) -""" - -# Preferences: -# 4, 1/3, 2 \ No newline at end of file +""" \ No newline at end of file From 3bd9e4848749c13637932314b31f3983a8161d96 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Wed, 11 Oct 2023 13:19:03 +0200 Subject: [PATCH 006/121] Clean up --- vizro-core/src/scratch.py | 12 +-- .../src/vizro/actions/_actions_utils.py | 2 +- .../_callback_mapping_utils.py | 2 +- .../src/vizro/models/_components/__init__.py | 3 +- .../src/vizro/models/_components/table.py | 93 ++++++++++++------- .../src/vizro/models/_components/table2.py | 54 +++++++++++ vizro-core/src/vizro/models/types.py | 2 +- vizro-core/src/vizro/static/css/table.css | 4 + 8 files changed, 129 insertions(+), 43 deletions(-) create mode 100644 vizro-core/src/vizro/models/_components/table2.py diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py index 5f676d149..06c3e8509 100644 --- a/vizro-core/src/scratch.py +++ b/vizro-core/src/scratch.py @@ -47,8 +47,8 @@ def d3_bar_chart(data_frame=None): # 2) Table & React -------------------- -vm.Table(data_frame, **kwargs) -vm.ReactFigure(figure=d3_bar_chart) +vm.Table2(data_frame, **kwargs) +vm.React(figure=d3_bar_chart) """ Pro: @@ -62,7 +62,7 @@ def d3_bar_chart(data_frame=None): # 3) Table & React (currently preferred) -------------------- vm.Table(figure=dash_table) -vm.ReactFigure(figure=d3_bar_chart) +vm.React(figure=d3_bar_chart) """ Pro: @@ -80,8 +80,8 @@ def d3_bar_chart(data_frame=None): # 4) ReactFigure -------------------- -vm.ReactFigure(figure=dash_table) -vm.ReactFigure(figure=d3_bar_chart) +vm.React(figure=dash_table) +vm.React(figure=d3_bar_chart) """ Pro: @@ -94,4 +94,4 @@ def d3_bar_chart(data_frame=None): To consider: - Should we actually extend the concept of this to vm.Html or vm.Container as essentially it just wraps the component inside an html.Div? That model could then also be re-used for several other things? (Would mix lots of different concepts then though, so maybe bad idea) -""" \ No newline at end of file +""" diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index c9d063271..5329d2c8b 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -189,7 +189,7 @@ def _get_modified_page_charts( outputs[target] = model_manager[target]( # type: ignore[index, operator] data_frame=filtered_data[target], **parameterized_config[target] ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") - elif model_manager[target].type == "react": + elif model_manager[target].type == "table" or model_manager[target].type == "react": outputs[target] = model_manager[target]( # type: ignore[index, operator] data_frame=filtered_data[target], **parameterized_config[target] ) diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 78157fd99..e4a44813a 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -161,7 +161,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: target: Output( component_id=target, component_property="children" - if model_manager[target].type == "react" + if model_manager[target].type == "table" or model_manager[target].type == "react" else "figure", # LN: Needs to be refactored so plotly-independent or extendable allow_duplicate=True, ) diff --git a/vizro-core/src/vizro/models/_components/__init__.py b/vizro-core/src/vizro/models/_components/__init__.py index 4a4697c5a..934195b9b 100644 --- a/vizro-core/src/vizro/models/_components/__init__.py +++ b/vizro-core/src/vizro/models/_components/__init__.py @@ -4,5 +4,6 @@ from vizro.models._components.graph import Graph from vizro.models._components.react import React from vizro.models._components.table import Table +from vizro.models._components.table2 import Table2 -__all__ = ["Button", "Card", "Graph", "React", "Table"] +__all__ = ["Button", "Card", "Graph", "Table", "Table2", "React"] diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 4807d58c0..12db124c2 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -1,53 +1,80 @@ import logging -from typing import Dict, Literal +from typing import Callable, List, Literal -from dash import dash_table, html -from pydantic import Field +from dash import html +from pydantic import Field, validator from vizro.managers import data_manager -from vizro.models import VizroBaseModel +from vizro.models import Action, VizroBaseModel +from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._models_utils import _log_call +from vizro.models.types import CapturedCallable logger = logging.getLogger(__name__) class Table(VizroBaseModel): - """Creates a table utilizing dash_table.DataTable. + """Wrapper for react components to visualize in dashboard. Args: type (Literal["table"]): Defaults to `"table"`. - data_frame (pd.DataFrame): Dataframe to be used for table. - style_header (Dict[str, str]): Custom styling for header - filter_action (str): 'native' to. + figure (CapturedCallable): React object to be displayed. + # actions (List[Action]): List of the Action objects, that allows to + # configure app interactions, triggered by affecting this component. """ type: Literal["table"] = "table" - data_frame: str = Field(..., description="Data frame to be visualized as table.") - style_header: Dict[str, str] - # filter_action: str = 'custom' - # Todo: - # Add parameters: style_table, style_cell, style_data, style_filter, style_header, style_cell_conditional, - # style_data_conditional, style_filter_conditional, style_header_conditional, cols_to_remove - - def __init__(self, **data): - super().__init__(**data) - if isinstance(self.data_frame, str): - data_manager._add_component(self.id, self.data_frame) - - @classmethod - def update_layout(self, template=None): - pass + data: Callable = None + figure: CapturedCallable = Field(..., description="Table to be visualized on dashboard") + actions: List[Action] = [] + + # validator + set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] + + @validator("figure") + def process_component_data_frame(cls, figure, values): + data_frame = figure["data_frame"] + + # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. + # In these cases, data already exists in the data manager and just needs to be linked to the component. + if isinstance(data_frame, str): + data_manager._add_component(values["id"], data_frame) + return figure + + # Standard case for df: pd.DataFrame. + # Extract dataframe from the captured function and put it into the data manager. + dataset_name = str(id(data_frame)) + + logger.debug("Adding data to data manager for Graph with id %s", values["id"]) + # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need + # to duplicate it. Just log the exception for debugging purposes. + try: + data_manager[dataset_name] = data_frame + except ValueError as exc: + logger.debug(exc) + + data_manager._add_component(values["id"], dataset_name) + + # No need to keep the data in the captured function any more so remove it to save memory. + # del figure["data_frame"] + return figure + + # Convenience wrapper/syntactic sugar. + def __call__(self, **kwargs): + kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] + return self.figure(**kwargs) + + # Convenience wrapper/syntactic sugar. + def __getitem__(self, arg_name: str): + # pydantic discriminated union validation seems to try Graph["type"], which throws an error unless we + # explicitly redirect it to the correct attribute. + if arg_name == "type": + return self.type + return self.figure[arg_name] @_log_call def build(self): data = data_manager._get_component_data(self.id) # type: ignore - - table = dash_table.DataTable( - data=data.to_dict("records"), - columns=[{"name": i, "id": i} for i in data.columns], - style_header=self.style_header, - filter_action="custom", # link: https://dash.plotly.com/datatable/filtering - ) - table_container = "table_container" - - return html.Div(table, className=table_container) + additional_args = self.figure._arguments.copy() + additional_args.pop("data_frame", None) + return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) diff --git a/vizro-core/src/vizro/models/_components/table2.py b/vizro-core/src/vizro/models/_components/table2.py new file mode 100644 index 000000000..f23570ab4 --- /dev/null +++ b/vizro-core/src/vizro/models/_components/table2.py @@ -0,0 +1,54 @@ +import logging +from typing import Any, Dict, Literal + +from dash import dash_table, html +from pydantic import Field + +from vizro.managers import data_manager +from vizro.models import VizroBaseModel +from vizro.models._models_utils import _log_call + +logger = logging.getLogger(__name__) + + +class Table2(VizroBaseModel): + """Creates a table utilizing dash_table.DataTable. + + Args: + type (Literal["table"]): Defaults to `"table"`. + data_frame (pd.DataFrame): Dataframe to be used for table. + style_header (Dict[str, str]): Custom styling for header + filter_action (str): 'native' to. + """ + + type: Literal["table2"] = "table2" + data_frame: str = Field(..., description="Data frame to be visualized as table.") + other_args: Dict[str, Any] = {} + # filter_action: str = 'custom' + # Todo: + # Add parameters: style_table, style_cell, style_data, style_filter, style_header, style_cell_conditional, + # style_data_conditional, style_filter_conditional, style_header_conditional, cols_to_remove + + def __init__(self, **data): + super().__init__(**data) + if isinstance(self.data_frame, str): + data_manager._add_component(self.id, self.data_frame) + + @classmethod + def update_layout(self, template=None): + pass + + @_log_call + def build(self): + data = data_manager._get_component_data(self.id) # type: ignore + + table = dash_table.DataTable( + data=data.to_dict("records"), + columns=[{"name": i, "id": i} for i in data.columns], + style_header=self.style_header, + filter_action="custom", # link: https://dash.plotly.com/datatable/filtering + **other_args, + ) + table_container = "table_container" + + return html.Div(table, className=table_container) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index e98fba379..01c94c863 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -213,7 +213,7 @@ def wrapped(*args, **kwargs): return CapturedCallable(func, *args, **kwargs) return wrapped - elif self._mode == "react": + elif self._mode == "table": # React component @functools.wraps(func) def wrapped(*args, **kwargs): diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 685aa7b1d..5d0f22f60 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -2,6 +2,10 @@ width: 100%; } +.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { + background-color: var(--main-container-bg-color) !important; +} + .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner tr { height: 0px !important; } From c494fcb519e12bab23f8a3d4758b76148db33e75 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Wed, 11 Oct 2023 13:20:08 +0200 Subject: [PATCH 007/121] Comment out d3 changes --- vizro-core/examples/default/app.py | 22 +++++++++++----------- vizro-core/pyproject.toml | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index acebe1d27..8d288022e 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,7 +1,7 @@ """Example to show dashboard configuration specified as pydantic models.""" import os -import d3_bar_chart +# import d3_bar_chart import pandas as pd import plotly.graph_objects as go from dash import dash_table, dcc @@ -48,14 +48,14 @@ def table_go(data_frame=None, template=None): ) -@capture("graph") -def d3_bar(data_frame=None): - """Custom table.""" - return d3_bar_chart.D3BarChart( - id="input", - value="my-value", - label="my-label", - ) +#@capture("graph") +#def d3_bar(data_frame=None): +# """Custom table.""" +# return d3_bar_chart.D3BarChart( +# id="input", +# value="my-value", +# label="my-label", +# ) @capture("action") @@ -82,7 +82,7 @@ def markdown(data_frame=None): path="color-manager", components=[ vm.React(id="table2", figure=table_dash(data_frame="table_data")), - vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), + # vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), @@ -93,4 +93,4 @@ def markdown(data_frame=None): if __name__ == "__main__": Vizro._user_assets_folder = os.path.abspath("../assets") - Vizro().build(dashboard).run() + Vizro().build(dashboard).run() \ No newline at end of file diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index 48d198172..41928473f 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -28,7 +28,7 @@ dependencies = [ "tornado>=6.3.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-TORNADO-5537286 "setuptools>=65.5.1", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 "MarkupSafe", # required to sanitise user input - "d3_bar_chart @ file:///Users/huong_li_nguyen/Desktop/d3_bar_chart-0.0.1-py3-none-any.whl" + # "d3_bar_chart @ file:///Users/huong_li_nguyen/Desktop/d3_bar_chart-0.0.1-py3-none-any.whl" ] description = "Vizro is a package to facilitate visual analytics." dynamic = ["version"] @@ -67,4 +67,4 @@ parallel = true source_pkgs = ["vizro"] [tool.hatch.metadata] -allow-direct-references = true +allow-direct-references = true \ No newline at end of file From 5aa22b0593a298a7415ec8c3873ab3a1b77d41e5 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 13 Oct 2023 13:08:25 +0200 Subject: [PATCH 008/121] Revert table CSS (for now) --- vizro-core/src/vizro/static/css/table.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 5d0f22f60..873bf0b70 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -1,4 +1,4 @@ -.dash-table-container { +/* .dash-table-container { width: 100%; } @@ -108,4 +108,4 @@ .dash-table-container .show-hide { display: none; -} +} */ From e3a08b695be522bffb6f8efd023ce1bd11964c6f Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 13 Oct 2023 13:08:58 +0200 Subject: [PATCH 009/121] Update refactoring places --- vizro-core/src/vizro/actions/_actions_utils.py | 3 +-- .../actions/_callback_mapping/_callback_mapping_utils.py | 4 ++-- vizro-core/src/vizro/models/_components/graph.py | 4 ++-- vizro-core/src/vizro/models/_page.py | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 1b6a3b33b..0d42e930d 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -193,12 +193,11 @@ def _get_modified_page_charts( ) outputs = {} - for target in targets: if model_manager[target].type == "graph": outputs[target] = model_manager[target]( # type: ignore[index, operator] data_frame=filtered_data[target], **parameterized_config[target] - ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") + ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") #MS: needs to be refactored so plotly-independent or extendable elif model_manager[target].type == "table" or model_manager[target].type == "react": outputs[target] = model_manager[target]( # type: ignore[index, operator] data_frame=filtered_data[target], **parameterized_config[target] diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index d1d98daf6..59976c417 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -107,7 +107,7 @@ def _get_inputs_of_chart_interactions( return [ State( component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, - component_property="clickData", # LN: Needs to be refactored so plotly-independent or extendable + component_property="clickData", # MS: needs to be refactored so plotly-independent or extendable ) for action in chart_interactions_on_page ] @@ -162,7 +162,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: component_id=target, component_property="children" if model_manager[target].type == "table" or model_manager[target].type == "react" - else "figure", # LN: Needs to be refactored so plotly-independent or extendable + else "figure", # MS: needs to be refactored so plotly-independent or extendable allow_duplicate=True, ) for target in targets diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 8adf0ea36..d67d243a7 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -39,7 +39,7 @@ class Graph(VizroBaseModel): type: Literal["graph"] = "graph" figure: CapturedCallable = Field( ..., import_path=px - ) # LN: Needs to be refactored so plotly-independent or extendable + ) # MS: needs to be refactored so plotly-independent or extendable actions: List[Action] = [] # Re-used validators @@ -80,7 +80,7 @@ def __call__(self, **kwargs): # Remove top margin if title is provided if fig.layout.title.text is None: - fig.update_layout(margin_t=24) # LN: Needs to be refactored so plotly-independent or extendable + fig.update_layout(margin_t=24) # MS: needs to be refactored so plotly-independent or extendable return fig # Convenience wrapper/syntactic sugar. diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 131736a16..020ae154a 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -132,7 +132,7 @@ def build(self): ] return self._make_page_layout(controls_content, components_content) - def _update_graph_theme(self): # LN: Needs to be refactored so plotly-independent or extendable + def _update_graph_theme(self): # MS: needs to be refactored so plotly-independent or extendable outputs = [ Output(component.id, "figure", allow_duplicate=True) for component in self.components From 53e3124f916ce994eb3e3b37164f76e84ed118e2 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 13 Oct 2023 13:09:10 +0200 Subject: [PATCH 010/121] UPdate example --- vizro-core/examples/default/app.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 8d288022e..eca4181c3 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -10,6 +10,7 @@ from vizro import Vizro from vizro.managers import data_manager from vizro.models.types import capture +import vizro.plotly.express as px def retrieve_table_data(): @@ -81,12 +82,13 @@ def markdown(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.React(id="table2", figure=table_dash(data_frame="table_data")), - # vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), + vm.Table(id="table2", figure=table_dash(data_frame="table_data",style_header={ 'border': '1px solid green' })), + vm.Graph(id="graph", figure=px.scatter(data_frame=px.data.iris(),x="sepal_width",y="sepal_length",color="species")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), - # vm.Parameter(targets=["table2.figure.page_size"], selector=vm.RadioItems(options=[3,5])) + vm.Parameter(targets=["table2.style_header.border"], selector=vm.RadioItems(options=["1px solid green","1px solid pink"])), + vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length","sepal_length"])) ], ) dashboard = vm.Dashboard(pages=[page_0]) From 447f9afd3bba3eb1a484857c565c7b56bdc7a27f Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 10:31:10 +0200 Subject: [PATCH 011/121] Abstracting several plotly dependent methods --- vizro-core/src/vizro/actions/_actions_utils.py | 9 ++------- .../_callback_mapping_utils.py | 6 +++--- .../src/vizro/models/_components/graph.py | 18 ++++++++++++++++-- .../src/vizro/models/_components/table.py | 10 ++++++++++ vizro-core/src/vizro/models/_page.py | 7 +++---- vizro-core/src/vizro/models/types.py | 2 +- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 0d42e930d..e153da21b 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -194,13 +194,8 @@ def _get_modified_page_charts( outputs = {} for target in targets: - if model_manager[target].type == "graph": - outputs[target] = model_manager[target]( # type: ignore[index, operator] + outputs[target] = model_manager[target]._update_theme_call(theme_bool = ctd_theme["value"], data_frame=filtered_data[target], **parameterized_config[target] - ).update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") #MS: needs to be refactored so plotly-independent or extendable - elif model_manager[target].type == "table" or model_manager[target].type == "react": - outputs[target] = model_manager[target]( # type: ignore[index, operator] - data_frame=filtered_data[target], **parameterized_config[target] - ) + ) #LN: needs to be refactored so plotly-independent or extendable - DONE return outputs diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 59976c417..328c17c76 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -89,7 +89,7 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li return [ State( component_id=control.selector.id, - component_property="value", + component_property="value", #LN: needs to be refactored so that it is independent of implementation details ) for control in page.controls if isinstance(control, control_type) @@ -107,7 +107,7 @@ def _get_inputs_of_chart_interactions( return [ State( component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, - component_property="clickData", # MS: needs to be refactored so plotly-independent or extendable + component_property="clickData", #LN: needs to be refactored so that it is independent of implementation details ) for action in chart_interactions_on_page ] @@ -162,7 +162,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: component_id=target, component_property="children" if model_manager[target].type == "table" or model_manager[target].type == "react" - else "figure", # MS: needs to be refactored so plotly-independent or extendable + else "figure", # LN: needs to be refactored so plotly-independent or extendable allow_duplicate=True, ) for target in targets diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index d67d243a7..be3c4187a 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -12,6 +12,8 @@ from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable +from dash import Input, Output, Patch, callback, dcc, html + logger = logging.getLogger(__name__) @@ -39,7 +41,7 @@ class Graph(VizroBaseModel): type: Literal["graph"] = "graph" figure: CapturedCallable = Field( ..., import_path=px - ) # MS: needs to be refactored so plotly-independent or extendable + ) # LN: needs to be refactored so plotly-independent or extendable - No, as this is within the boundaries of Graph model actions: List[Action] = [] # Re-used validators @@ -80,7 +82,7 @@ def __call__(self, **kwargs): # Remove top margin if title is provided if fig.layout.title.text is None: - fig.update_layout(margin_t=24) # MS: needs to be refactored so plotly-independent or extendable + fig.update_layout(margin_t=24) # LN: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model return fig # Convenience wrapper/syntactic sugar. @@ -111,3 +113,15 @@ def build(self): color="grey", parent_className="chart_container", ) + + def _update_theme_call(self,theme_bool,**kwargs): + """Define __call__ method that includes theme update if applicable""" + return self.__call__(**kwargs).update_layout(template="vizro_dark" if theme_bool else "vizro_light") + + def _get_update_graph_theme_output(self): + """Define output for theme selector callback""" + return Output(self.id, "figure", allow_duplicate=True) + + # def _get_click_trigger_property(self): + # """Define trigger property for click interaction""" + # return "clickData" \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 12db124c2..c92dabf1b 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -78,3 +78,13 @@ def build(self): additional_args = self.figure._arguments.copy() additional_args.pop("data_frame", None) return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) + + def _update_theme_call(self,theme_bool,**kwargs): + return self.__call__(**kwargs)#.update_layout(template="vizro_dark" if theme_bool else "vizro_light") + + def _get_update_graph_theme_output(self): + pass + + # def _get_click_trigger_property(self): + # """Define trigger property for click interaction""" + # return "active_cell" \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 020ae154a..1546e0c21 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -132,11 +132,10 @@ def build(self): ] return self._make_page_layout(controls_content, components_content) - def _update_graph_theme(self): # MS: needs to be refactored so plotly-independent or extendable + def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE outputs = [ - Output(component.id, "figure", allow_duplicate=True) - for component in self.components - if isinstance(component, Graph) + component._get_update_graph_theme_output() + for component in self.components if component._get_update_graph_theme_output() is not None ] if outputs: diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 91f98d932..d2973d279 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -214,7 +214,7 @@ def wrapped(*args, **kwargs): return wrapped elif self._mode == "table": - # React component + # The table component @functools.wraps(func) def wrapped(*args, **kwargs): return CapturedCallable(func, *args, **kwargs) From ad363b73e7bcc35fe6aa44f1d82adcf83a9dcede Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 10:43:33 +0200 Subject: [PATCH 012/121] Improvement to abstraction level --- vizro-core/src/vizro/models/_components/table.py | 2 -- vizro-core/src/vizro/models/_page.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index c92dabf1b..ca601496e 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -82,8 +82,6 @@ def build(self): def _update_theme_call(self,theme_bool,**kwargs): return self.__call__(**kwargs)#.update_layout(template="vizro_dark" if theme_bool else "vizro_light") - def _get_update_graph_theme_output(self): - pass # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 1546e0c21..b6ffa8754 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -135,7 +135,7 @@ def build(self): def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE outputs = [ component._get_update_graph_theme_output() - for component in self.components if component._get_update_graph_theme_output() is not None + for component in self.components if hasattr(component,"_get_update_graph_theme_output") ] if outputs: From bc16ba569db94944b11513e05c327bf8f10fba95 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 11:10:42 +0200 Subject: [PATCH 013/121] Further abstraction --- .../src/vizro/actions/_actions_utils.py | 7 ++--- .../_callback_mapping_utils.py | 15 ++++------- .../src/vizro/models/_components/graph.py | 27 ++++++++++++------- .../src/vizro/models/_components/table.py | 18 ++++++++----- vizro-core/src/vizro/models/_page.py | 5 ++-- 5 files changed, 41 insertions(+), 31 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index e153da21b..42387f1c9 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -194,8 +194,9 @@ def _get_modified_page_charts( outputs = {} for target in targets: - outputs[target] = model_manager[target]._update_theme_call(theme_bool = ctd_theme["value"], - data_frame=filtered_data[target], **parameterized_config[target] - ) #LN: needs to be refactored so plotly-independent or extendable - DONE + outputs[target] = model_manager[target]._update_theme_call( + theme_bool=ctd_theme["value"], data_frame=filtered_data[target], **parameterized_config[target] + ) # LN: needs to be refactored so plotly-independent or extendable - DONE + # MS: is the common theme to be targetable? return outputs diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 328c17c76..12bda0fc7 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -89,7 +89,7 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li return [ State( component_id=control.selector.id, - component_property="value", #LN: needs to be refactored so that it is independent of implementation details + component_property="value", # LN: needs to be refactored so that it is independent of implementation details ) for control in page.controls if isinstance(control, control_type) @@ -107,7 +107,7 @@ def _get_inputs_of_chart_interactions( return [ State( component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, - component_property="clickData", #LN: needs to be refactored so that it is independent of implementation details + component_property="clickData", # LN: needs to be refactored so that it is independent of implementation details ) for action in chart_interactions_on_page ] @@ -157,15 +157,10 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: if action_function == _on_page_load.__wrapped__: targets = _get_components_with_data(action_id=action_id) - return { - target: Output( - component_id=target, - component_property="children" - if model_manager[target].type == "table" or model_manager[target].type == "react" - else "figure", # LN: needs to be refactored so plotly-independent or extendable - allow_duplicate=True, - ) + return {# LN: needs to be refactored so plotly-independent or extendable - DONE + target: model_manager[target]._get_action_callback_output() for target in targets + if hasattr(model_manager[target], "_get_action_callback_output") } diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index be3c4187a..7bd6ea643 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -1,7 +1,7 @@ import logging from typing import List, Literal -from dash import dcc +from dash import Output, dcc from plotly import graph_objects as go from pydantic import Field, validator @@ -12,8 +12,6 @@ from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable -from dash import Input, Output, Patch, callback, dcc, html - logger = logging.getLogger(__name__) @@ -82,7 +80,9 @@ def __call__(self, **kwargs): # Remove top margin if title is provided if fig.layout.title.text is None: - fig.update_layout(margin_t=24) # LN: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model + fig.update_layout( + margin_t=24 + ) # LN: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model return fig # Convenience wrapper/syntactic sugar. @@ -114,14 +114,21 @@ def build(self): parent_className="chart_container", ) - def _update_theme_call(self,theme_bool,**kwargs): - """Define __call__ method that includes theme update if applicable""" + def _update_theme_call(self, theme_bool, **kwargs): + """Define __call__ method that includes theme update if applicable.""" return self.__call__(**kwargs).update_layout(template="vizro_dark" if theme_bool else "vizro_light") - + + def _get_action_callback_output(self): + return Output( + component_id=self.id, + component_property="figure", + allow_duplicate=True, + ) + def _get_update_graph_theme_output(self): - """Define output for theme selector callback""" + """Define output for theme selector callback.""" return Output(self.id, "figure", allow_duplicate=True) - + # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" - # return "clickData" \ No newline at end of file + # return "clickData" diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index ca601496e..81739c86d 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -1,7 +1,7 @@ import logging from typing import Callable, List, Literal -from dash import html +from dash import Output, html from pydantic import Field, validator from vizro.managers import data_manager @@ -79,10 +79,16 @@ def build(self): additional_args.pop("data_frame", None) return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) - def _update_theme_call(self,theme_bool,**kwargs): - return self.__call__(**kwargs)#.update_layout(template="vizro_dark" if theme_bool else "vizro_light") - - + def _get_action_callback_output(self): + return Output( + component_id=self.id, + component_property="children", + allow_duplicate=True, + ) + + def _update_theme_call(self, theme_bool, **kwargs): + return self.__call__(**kwargs) # .update_layout(template="vizro_dark" if theme_bool else "vizro_light") + # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" - # return "active_cell" \ No newline at end of file + # return "active_cell" diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index b6ffa8754..85281a584 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -4,7 +4,7 @@ import dash_bootstrap_components as dbc import dash_daq as daq -from dash import Input, Output, Patch, callback, dcc, html +from dash import Input, Patch, callback, dcc, html from pydantic import Field, root_validator, validator import vizro._themes as themes @@ -135,7 +135,8 @@ def build(self): def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE outputs = [ component._get_update_graph_theme_output() - for component in self.components if hasattr(component,"_get_update_graph_theme_output") + for component in self.components + if hasattr(component, "_get_update_graph_theme_output") ] if outputs: From e84fcb728eba0329c212f6c6ff99a240e07b28e3 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 11:23:28 +0200 Subject: [PATCH 014/121] implement hasattr logic more --- vizro-core/src/vizro/actions/_actions_utils.py | 10 +++++++--- .../_callback_mapping/_callback_mapping_utils.py | 2 +- vizro-core/src/vizro/models/_components/table.py | 3 --- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 42387f1c9..5932bb0a0 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -194,9 +194,13 @@ def _get_modified_page_charts( outputs = {} for target in targets: - outputs[target] = model_manager[target]._update_theme_call( - theme_bool=ctd_theme["value"], data_frame=filtered_data[target], **parameterized_config[target] - ) # LN: needs to be refactored so plotly-independent or extendable - DONE + if hasattr(model_manager[target], "_update_theme_call"): + outputs[target] = model_manager[target]._update_theme_call( + theme_bool=ctd_theme["value"], data_frame=filtered_data[target], **parameterized_config[target] + ) + else: + outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) + # LN: needs to be refactored so plotly-independent or extendable - DONE # MS: is the common theme to be targetable? return outputs diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 12bda0fc7..0f0630821 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -157,7 +157,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: if action_function == _on_page_load.__wrapped__: targets = _get_components_with_data(action_id=action_id) - return {# LN: needs to be refactored so plotly-independent or extendable - DONE + return { # LN: needs to be refactored so plotly-independent or extendable - DONE target: model_manager[target]._get_action_callback_output() for target in targets if hasattr(model_manager[target], "_get_action_callback_output") diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 81739c86d..47197be2c 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -86,9 +86,6 @@ def _get_action_callback_output(self): allow_duplicate=True, ) - def _update_theme_call(self, theme_bool, **kwargs): - return self.__call__(**kwargs) # .update_layout(template="vizro_dark" if theme_bool else "vizro_light") - # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" # return "active_cell" From f2376ed301298ffd0bcd13702a2ae5aac64bb049 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 13:30:35 +0200 Subject: [PATCH 015/121] Individually comment out CSS --- vizro-core/src/vizro/static/css/table.css | 58 +++++++++++------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 873bf0b70..517e47f54 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -1,22 +1,22 @@ /* .dash-table-container { width: 100%; -} +} */ -.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { - background-color: var(--main-container-bg-color) !important; -} +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { + background-color: var(--main-container-bg-color); +} */ -.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner tr { +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner tr { height: 0px !important; -} +} */ -.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { background-color: var(--main-container-bg-color) !important; border: 1px solid var(--main-container-bg-color) !important; border-bottom-color: rgb(255, 255, 255, 0.3) !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .dash-filter @@ -31,81 +31,81 @@ margin-right: 3px !important; opacity: 0.55; transition: 0.2s; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .dash-filter input[type="text"]:hover::placeholder { opacity: 1 !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .dash-filter input:focus::placeholder { opacity: 0 !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .dash-filter input { color: var(--text-primary) !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-clear-zone > .Select-clear { color: revert !important; margin-left: 3px; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-value-label { margin-right: 15px; margin-left: 10px; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-control:hover .Select-arrow { border-top-color: var(--fill-medium-emphasis) !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-arrow-zone:hover > .Select-arrow { border-top-color: #666 !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-menu-outer .Select-option { color: var(--text-secondary) !important; -} +} */ -.dash-table-container +/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner .Select-menu-outer .Select-option:hover { background-color: var(--fill-contrast-hover-selected) !important; -} +} */ -.dash-table-container .show-hide { +/* .dash-table-container .show-hide { display: none; } */ From 6fc5c78c9fe55040fac76bf0d5391d3b6ff7a358 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 14:08:35 +0200 Subject: [PATCH 016/121] further abstraction of update theme --- vizro-core/examples/default/app.py | 21 +++++++++++------- .../src/vizro/models/_components/graph.py | 19 +++++++++++----- vizro-core/src/vizro/models/_page.py | 22 +------------------ 3 files changed, 28 insertions(+), 34 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index eca4181c3..33702239b 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -7,10 +7,10 @@ from dash import dash_table, dcc import vizro.models as vm +import vizro.plotly.express as px from vizro import Vizro from vizro.managers import data_manager from vizro.models.types import capture -import vizro.plotly.express as px def retrieve_table_data(): @@ -49,8 +49,8 @@ def table_go(data_frame=None, template=None): ) -#@capture("graph") -#def d3_bar(data_frame=None): +# @capture("graph") +# def d3_bar(data_frame=None): # """Custom table.""" # return d3_bar_chart.D3BarChart( # id="input", @@ -82,17 +82,22 @@ def markdown(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.Table(id="table2", figure=table_dash(data_frame="table_data",style_header={ 'border': '1px solid green' })), - vm.Graph(id="graph", figure=px.scatter(data_frame=px.data.iris(),x="sepal_width",y="sepal_length",color="species")), + vm.Table(id="table2", figure=table_dash(data_frame="table_data", style_header={"border": "1px solid green"})), + vm.Graph( + id="graph", figure=px.scatter(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species") + ), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), - vm.Parameter(targets=["table2.style_header.border"], selector=vm.RadioItems(options=["1px solid green","1px solid pink"])), - vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length","sepal_length"])) + vm.Parameter( + targets=["table2.style_header.border"], + selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), + ), + vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), ], ) dashboard = vm.Dashboard(pages=[page_0]) if __name__ == "__main__": Vizro._user_assets_folder = os.path.abspath("../assets") - Vizro().build(dashboard).run() \ No newline at end of file + Vizro().build(dashboard).run() diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 7bd6ea643..c47220865 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -1,10 +1,11 @@ import logging from typing import List, Literal -from dash import Output, dcc +from dash import Input, Output, Patch, callback, dcc from plotly import graph_objects as go from pydantic import Field, validator +import vizro._themes as themes import vizro.plotly.express as px from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel @@ -95,6 +96,7 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): + self._update_graph_theme() return dcc.Loading( dcc.Graph( id=self.id, @@ -114,6 +116,17 @@ def build(self): parent_className="chart_container", ) + def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE + @callback( + Output(self.id, "figure", allow_duplicate=True), + Input("theme_selector", "on"), + prevent_initial_call="initial_duplicate", + ) + def update_graph_theme(theme_selector_on: bool): + patched_figure = Patch() + patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light + return patched_figure + def _update_theme_call(self, theme_bool, **kwargs): """Define __call__ method that includes theme update if applicable.""" return self.__call__(**kwargs).update_layout(template="vizro_dark" if theme_bool else "vizro_light") @@ -125,10 +138,6 @@ def _get_action_callback_output(self): allow_duplicate=True, ) - def _get_update_graph_theme_output(self): - """Define output for theme selector callback.""" - return Output(self.id, "figure", allow_duplicate=True) - # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" # return "clickData" diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 85281a584..b570e6e91 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -4,10 +4,9 @@ import dash_bootstrap_components as dbc import dash_daq as daq -from dash import Input, Patch, callback, dcc, html +from dash import dcc, html from pydantic import Field, root_validator, validator -import vizro._themes as themes from vizro._constants import ON_PAGE_LOAD_ACTION_PREFIX from vizro.actions import _on_page_load from vizro.managers import model_manager @@ -116,7 +115,6 @@ def pre_build(self): @_log_call def build(self): - self._update_graph_theme() controls_content = [control.build() for control in self.controls] components_content = [ html.Div( @@ -132,24 +130,6 @@ def build(self): ] return self._make_page_layout(controls_content, components_content) - def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE - outputs = [ - component._get_update_graph_theme_output() - for component in self.components - if hasattr(component, "_get_update_graph_theme_output") - ] - if outputs: - - @callback( - outputs, - Input("theme_selector", "on"), - prevent_initial_call="initial_duplicate", - ) - def update_graph_theme(theme_selector_on: bool): - patched_figure = Patch() - patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light - return [patched_figure] * len(outputs) - @staticmethod def _create_theme_switch(): _, dashboard = next(model_manager._items_with_type(Dashboard)) From b6c4709ad8b561deaed96755698344e231b4c037 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Mon, 16 Oct 2023 14:24:31 +0200 Subject: [PATCH 017/121] Very first version --- vizro-core/examples/default/app.py | 59 ++++++++++---- .../src/vizro/actions/_actions_utils.py | 49 ++++++++---- .../_callback_mapping_utils.py | 78 ++++++++++++++----- .../src/vizro/models/_components/table.py | 5 +- 4 files changed, 143 insertions(+), 48 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 8d288022e..4714fd572 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -10,12 +10,13 @@ from vizro import Vizro from vizro.managers import data_manager from vizro.models.types import capture +import vizro.plotly.express as px +from vizro.actions import filter_interaction, export_data def retrieve_table_data(): """Return data for table for testing.""" - data = { - "State": [ + states = [ "California", "Arizona", "Nevada", @@ -24,11 +25,14 @@ def retrieve_table_data(): "Texas", "North Carolina", "New York", - ], - "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13], - "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53], - "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1], - "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84], + ] + + data = { + "State": states + states[::-1], + "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13] * 2, + "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53] * 2, + "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1] * 2, + "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84] * 2, } return pd.DataFrame(data) @@ -48,8 +52,8 @@ def table_go(data_frame=None, template=None): ) -#@capture("graph") -#def d3_bar(data_frame=None): +# @capture("graph") +# def d3_bar(data_frame=None): # """Custom table.""" # return d3_bar_chart.D3BarChart( # id="input", @@ -58,13 +62,19 @@ def table_go(data_frame=None, template=None): # ) -@capture("action") -def table_dash(data_frame=None, style_header=None): +@capture("graph") +def table_dash(data_frame=None, style_header=None, **kwargs): """Custom table.""" return dash_table.DataTable( + + # PP: Don't know a better way how to insert the 'id' into datatable than manually. + id="datatable_id", + data=data_frame.to_dict("records"), columns=[{"name": i, "id": i} for i in data_frame.columns], style_header=style_header, + # page_size=6, + **kwargs ) @@ -81,16 +91,37 @@ def markdown(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.React(id="table2", figure=table_dash(data_frame="table_data")), + vm.Table( + id="datatable_id", + figure=table_dash( + data_frame="table_data" + ), + actions=[vm.Action(function=filter_interaction(targets=["scatter_chart"]))] + ), + vm.Graph( + id="scatter_chart", + figure=px.scatter( + data_frame="table_data", + x="State", + y="Number of Solar Plants", + color="Number of Solar Plants", + custom_data=["State"] + ), + actions=[vm.Action(function=filter_interaction(targets=["datatable_id"]))] + ), # vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), + vm.Button( + id='export_data_button', + actions=[vm.Action(function=export_data())] + ) ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), - # vm.Parameter(targets=["table2.figure.page_size"], selector=vm.RadioItems(options=[3,5])) + # vm.Parameter(targets=["datatable_id.page_size"], selector=vm.RadioItems(options=[3, 6])) ], ) dashboard = vm.Dashboard(pages=[page_0]) if __name__ == "__main__": Vizro._user_assets_folder = os.path.abspath("../assets") - Vizro().build(dashboard).run() \ No newline at end of file + Vizro().build(dashboard).run() diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 5329d2c8b..f6761b814 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -61,26 +61,47 @@ def _apply_filter_interaction( ctds_filter_interaction: List[CallbackTriggerDict], target: str, ) -> pd.DataFrame: - for ctd in ctds_filter_interaction: - if not ctd["value"]: - continue + for ctd_key, ctd_value in ctds_filter_interaction.items(): + if 'clickData' in ctd_value: + ctd_click_data = ctd_value["clickData"] + if not ctd_click_data["value"]: + continue + + source_chart_id = ctd_click_data["id"] + source_chart_actions = _get_component_actions(model_manager[source_chart_id]) - source_chart_id = ctd["id"] - source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + try: + custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] + except KeyError as exc: + raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc - try: - custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] - except KeyError as exc: - raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc + customdata = ctd_click_data["value"]["points"][0]["customdata"] # type: ignore[call-overload] + + for action in source_chart_actions: + if target not in action.function["targets"]: + continue - customdata = ctd["value"]["points"][0]["customdata"] # type: ignore[call-overload] + for custom_data_idx, column in enumerate(custom_data_columns): + data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] - for action in source_chart_actions: - if target not in action.function["targets"]: + if 'active_cell' in ctd_value and "derived_viewport_data" in ctd_value: + ctd_active_cell = ctd_value["active_cell"] + ctd_derived_viewport_data = ctd_value["derived_viewport_data"] + if not ctd_active_cell["value"] or not ctd_value["derived_viewport_data"]: continue - for custom_data_idx, column in enumerate(custom_data_columns): - data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] + source_chart_id = ctd_active_cell["id"] + source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + + for action in source_chart_actions: + if target not in action.function["targets"]: + continue + + column = ctd_active_cell["value"]["column_id"] + derived_viewport_data_row = ctd_active_cell["value"]["row"] + clicked_data = ctd_derived_viewport_data["value"][derived_viewport_data_row][column] + data_frame = data_frame[data_frame[column].isin([clicked_data])] + return data_frame diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index e4a44813a..93f728eb5 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -98,19 +98,50 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li def _get_inputs_of_chart_interactions( action_id: ModelID, action_function: Callable[[Any], Dict[str, Any]] -) -> List[State]: +) -> Dict[str, Dict[str, State]]: """Gets list of States for selected chart interaction `action_name` of triggered page.""" chart_interactions_on_page = _get_matching_actions_by_function( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) - return [ - State( - component_id=_get_triggered_model(action_id=action.id).id, # type: ignore[arg-type] - component_property="clickData", # LN: Needs to be refactored so plotly-independent or extendable - ) - for action in chart_interactions_on_page - ] + + states = {} + for action in chart_interactions_on_page: + triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) + if triggered_model.type == "table" or triggered_model.type == "react": + states.update({ + action.id: { + "active_cell": State( + component_id=triggered_model.id, + component_property="active_cell" + ), + "derived_viewport_data": State( + component_id=triggered_model.id, + component_property="derived_viewport_data" + ) + } + }) + + else: + states.update({ + action.id: { + "clickData": State( + component_id=triggered_model.id, + component_property="clickData" + ), + } + }) + + + # return [ + # State( + # component_id=_get_triggered_model(action_id=action.id).id, # type: ignore[arg-type] + # component_property="clickData", # LN: Needs to be refactored so plotly-independent or extendable + # ) + # for action in chart_interactions_on_page + # ] + + return states def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: @@ -134,7 +165,7 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: "filter_interaction": ( _get_inputs_of_chart_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) if "filter_interaction" in include_inputs - else [] + else {} ), "theme_selector": (State("theme_selector", "on") if "theme_selector" in include_inputs else []), } @@ -157,16 +188,25 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: if action_function == _on_page_load.__wrapped__: targets = _get_components_with_data(action_id=action_id) - return { - target: Output( - component_id=target, - component_property="children" - if model_manager[target].type == "table" or model_manager[target].type == "react" - else "figure", # LN: Needs to be refactored so plotly-independent or extendable - allow_duplicate=True, - ) - for target in targets - } + outputs = {} + for target in targets: + if model_manager[target].type == "table" or model_manager[target].type == "react": + outputs.update({ + target: Output( + component_id=f"{target}_outer", + component_property="children", + allow_duplicate=True, + ) + }) + else: + outputs.update({ + target: Output( + component_id=target, + component_property="figure", + allow_duplicate=True, + ) + }) + return outputs def _get_export_data_callback_outputs(action_id: ModelID) -> Dict[str, List[State]]: diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 12db124c2..9e36c7767 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -77,4 +77,7 @@ def build(self): data = data_manager._get_component_data(self.id) # type: ignore additional_args = self.figure._arguments.copy() additional_args.pop("data_frame", None) - return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) + + datatable = self.figure._function(data_frame=data, **additional_args) + + return html.Div(datatable, id=f"{self.id}_outer") From b83ec59b16a3133b3810190e85d44348521cfb6a Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 16 Oct 2023 19:51:39 +0200 Subject: [PATCH 018/121] Simplify update layout even further --- vizro-core/src/vizro/actions/_actions_utils.py | 9 +++------ vizro-core/src/vizro/models/_components/graph.py | 8 +++----- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 5932bb0a0..f399052cc 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -194,12 +194,9 @@ def _get_modified_page_charts( outputs = {} for target in targets: - if hasattr(model_manager[target], "_update_theme_call"): - outputs[target] = model_manager[target]._update_theme_call( - theme_bool=ctd_theme["value"], data_frame=filtered_data[target], **parameterized_config[target] - ) - else: - outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) + outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) + if hasattr(outputs[target], "update_layout"): + outputs[target].update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") # LN: needs to be refactored so plotly-independent or extendable - DONE # MS: is the common theme to be targetable? diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index c47220865..992690185 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -127,16 +127,14 @@ def update_graph_theme(theme_selector_on: bool): patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light return patched_figure - def _update_theme_call(self, theme_bool, **kwargs): - """Define __call__ method that includes theme update if applicable.""" - return self.__call__(**kwargs).update_layout(template="vizro_dark" if theme_bool else "vizro_light") - def _get_action_callback_output(self): - return Output( + return Output( # maybe just do the string? check with Petar, is that component_id=self.id, component_property="figure", allow_duplicate=True, ) + + # do private attribute with a value # def _get_click_trigger_property(self): # """Define trigger property for click interaction""" From b2b2b29cc5e85d644f6c5aa18a561179744529e8 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 11:45:52 +0200 Subject: [PATCH 019/121] Fix table CSS --- vizro-core/examples/default/app.py | 1 + vizro-core/src/vizro/static/css/dropdown.css | 4 ++++ vizro-core/src/vizro/static/css/table.css | 9 +++++++++ 3 files changed, 14 insertions(+) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 33702239b..87b562a1f 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -93,6 +93,7 @@ def markdown(data_frame=None): targets=["table2.style_header.border"], selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), ), + vm.Filter(column="species", selector=vm.Dropdown()), vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), ], ) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index 4db0b0883..c62479986 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -17,6 +17,10 @@ div.page_container .Select-menu-outer { line-height: var(--text-size-05); } +div.page_container .Select.is-focused > .Select-control { + background-color: var(--field-enabled); +} + /* Dropdown menu options */ div.page_container .VirtualizedSelectOption { color: var(--text-primary); diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 517e47f54..23c731031 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -1,3 +1,12 @@ +div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { + background-color: var(--main-container-bg-color); +} + +div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { + background-color: var(--main-container-bg-color); +} + + /* .dash-table-container { width: 100%; } */ From b38b8b4374b2d15831dd347499a1e9fe32d37d13 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 12:55:56 +0200 Subject: [PATCH 020/121] Avoid jumping --- vizro-core/src/vizro/static/css/dropdown.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index c62479986..e023feb2b 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -17,8 +17,11 @@ div.page_container .Select-menu-outer { line-height: var(--text-size-05); } +/* Dropdown background color when focused */ div.page_container .Select.is-focused > .Select-control { background-color: var(--field-enabled); + height: 100%; + padding: 0 !important; } /* Dropdown menu options */ @@ -135,11 +138,12 @@ div.nav_panel a { /** spacing for tag elements only when elements are present inside wrapper **/ +/* Padding allows elements not to jump but may be too large */ .Select--multi.has-value .Select-multi-value-wrapper { display: flex; flex-wrap: wrap; gap: 4px; - padding: 4px 8px; + padding: 13px 8px; } .Select-input > input { From fc87121d4b385280c40158687b1b4c8eaee05481 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 13:32:41 +0200 Subject: [PATCH 021/121] interaction example --- vizro-core/examples/default/app.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 87b562a1f..0698d8eb8 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -11,6 +11,7 @@ from vizro import Vizro from vizro.managers import data_manager from vizro.models.types import capture +from vizro.actions import filter_interaction def retrieve_table_data(): @@ -84,7 +85,10 @@ def markdown(data_frame=None): components=[ vm.Table(id="table2", figure=table_dash(data_frame="table_data", style_header={"border": "1px solid green"})), vm.Graph( - id="graph", figure=px.scatter(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species") + id="graph", figure=px.scatter(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species",custom_data=["species"]),actions=[vm.Action(function=filter_interaction(targets=["hist"]))] + ), + vm.Graph( + id="hist", figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species") ), ], controls=[ From 6ad35de3e0e3177e9132545ce4c8c0de03e8d341 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 13:48:48 +0200 Subject: [PATCH 022/121] Private attributes for input properties --- vizro-core/examples/default/app.py | 9 +++++-- .../src/vizro/actions/_actions_utils.py | 2 +- .../_callback_mapping_utils.py | 24 ++++++++++++------- .../models/_components/form/checklist.py | 4 ++++ .../vizro/models/_components/form/dropdown.py | 4 ++++ .../models/_components/form/radio_items.py | 4 ++++ .../models/_components/form/range_slider.py | 4 ++++ .../vizro/models/_components/form/slider.py | 4 ++++ .../src/vizro/models/_components/graph.py | 12 ++++------ .../src/vizro/models/_components/table.py | 16 ++++--------- 10 files changed, 53 insertions(+), 30 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 0698d8eb8..e60159050 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -85,10 +85,15 @@ def markdown(data_frame=None): components=[ vm.Table(id="table2", figure=table_dash(data_frame="table_data", style_header={"border": "1px solid green"})), vm.Graph( - id="graph", figure=px.scatter(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species",custom_data=["species"]),actions=[vm.Action(function=filter_interaction(targets=["hist"]))] + id="graph", + figure=px.scatter( + data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] + ), + actions=[vm.Action(function=filter_interaction(targets=["hist"]))], ), vm.Graph( - id="hist", figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species") + id="hist", + figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), ), ], controls=[ diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index f399052cc..97b4b6174 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -21,7 +21,7 @@ class CallbackTriggerDict(TypedDict): # shortened as 'ctd' id: ModelID # the component ID. If it`s a pattern matching ID, it will be a dict. - property: Literal["clickData", "value", "n_clicks"] # the component property used in the callback. + property: Literal["clickData", "value", "n_clicks", "active_cell"] # the component property used in the callback. value: Optional[Any] # the value of the component property at the time the callback was fired. str_id: str # for pattern matching IDs, it`s the stringified dict ID with no white spaces. triggered: bool # a boolean indicating whether this input triggered the callback. diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 0f0630821..c99f96f38 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -89,7 +89,7 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li return [ State( component_id=control.selector.id, - component_property="value", # LN: needs to be refactored so that it is independent of implementation details + component_property=control.selector._input_property, # LN: needs to be refactored so that it is independent of implementation details - DONE ) for control in page.controls if isinstance(control, control_type) @@ -104,13 +104,16 @@ def _get_inputs_of_chart_interactions( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) - return [ - State( - component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, - component_property="clickData", # LN: needs to be refactored so that it is independent of implementation details + inputs = [] + for action in chart_interactions_on_page: + triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) + inputs.append( + State( + component_id=triggered_model.id, + component_property=triggered_model._input_property, # LN: needs to be refactored so that it is independent of implementation details - DONE + ) ) - for action in chart_interactions_on_page - ] + return inputs def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: @@ -158,9 +161,12 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: targets = _get_components_with_data(action_id=action_id) return { # LN: needs to be refactored so plotly-independent or extendable - DONE - target: model_manager[target]._get_action_callback_output() + target: Output( + component_id=target, + component_property=model_manager[target]._output_property, + allow_duplicate=True, + ) for target in targets - if hasattr(model_manager[target], "_get_action_callback_output") } diff --git a/vizro-core/src/vizro/models/_components/form/checklist.py b/vizro-core/src/vizro/models/_components/form/checklist.py index 3bb4aacff..6406e65f3 100644 --- a/vizro-core/src/vizro/models/_components/form/checklist.py +++ b/vizro-core/src/vizro/models/_components/form/checklist.py @@ -8,6 +8,7 @@ from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import MultiValueType, OptionsType +from pydantic import PrivateAttr class Checklist(VizroBaseModel): @@ -27,6 +28,9 @@ class Checklist(VizroBaseModel): title: Optional[str] = Field(None, description="Title to be displayed") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("value") + # Re-used validators _set_actions = _action_validator_factory("value") _validate_options = root_validator(allow_reuse=True, pre=True)(validate_options_dict) diff --git a/vizro-core/src/vizro/models/_components/form/dropdown.py b/vizro-core/src/vizro/models/_components/form/dropdown.py index 4b8e8014a..f5ca2839d 100755 --- a/vizro-core/src/vizro/models/_components/form/dropdown.py +++ b/vizro-core/src/vizro/models/_components/form/dropdown.py @@ -8,6 +8,7 @@ from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import MultiValueType, OptionsType, SingleValueType +from pydantic import PrivateAttr class Dropdown(VizroBaseModel): @@ -31,6 +32,9 @@ class Dropdown(VizroBaseModel): title: Optional[str] = Field(None, description="Title to be displayed") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("value") + # Re-used validators _set_actions = _action_validator_factory("value") _validate_options = root_validator(allow_reuse=True, pre=True)(validate_options_dict) diff --git a/vizro-core/src/vizro/models/_components/form/radio_items.py b/vizro-core/src/vizro/models/_components/form/radio_items.py index cfccf333e..5518df30d 100644 --- a/vizro-core/src/vizro/models/_components/form/radio_items.py +++ b/vizro-core/src/vizro/models/_components/form/radio_items.py @@ -8,6 +8,7 @@ from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import OptionsType, SingleValueType +from pydantic import PrivateAttr class RadioItems(VizroBaseModel): @@ -28,6 +29,9 @@ class RadioItems(VizroBaseModel): title: Optional[str] = Field(None, description="Title to be displayed") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("value") + # Re-used validators _set_actions = _action_validator_factory("value") _validate_options = root_validator(allow_reuse=True, pre=True)(validate_options_dict) diff --git a/vizro-core/src/vizro/models/_components/form/range_slider.py b/vizro-core/src/vizro/models/_components/form/range_slider.py index 425b183f6..3356c5979 100644 --- a/vizro-core/src/vizro/models/_components/form/range_slider.py +++ b/vizro-core/src/vizro/models/_components/form/range_slider.py @@ -12,6 +12,7 @@ validate_step, ) from vizro.models._models_utils import _log_call +from pydantic import PrivateAttr class RangeSlider(VizroBaseModel): @@ -43,6 +44,9 @@ class RangeSlider(VizroBaseModel): title: Optional[str] = Field(None, description="Title to be displayed.") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("value") + # Re-used validators _validate_max = validator("max", allow_reuse=True)(validate_max) _validate_value = validator("value", allow_reuse=True)(validate_slider_value) diff --git a/vizro-core/src/vizro/models/_components/form/slider.py b/vizro-core/src/vizro/models/_components/form/slider.py index b0349f671..82f15eb56 100644 --- a/vizro-core/src/vizro/models/_components/form/slider.py +++ b/vizro-core/src/vizro/models/_components/form/slider.py @@ -12,6 +12,7 @@ validate_step, ) from vizro.models._models_utils import _log_call +from pydantic import PrivateAttr class Slider(VizroBaseModel): @@ -41,6 +42,9 @@ class Slider(VizroBaseModel): title: Optional[str] = Field(None, description="Title to be displayed.") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("value") + # Re-used validators _validate_max = validator("max", allow_reuse=True)(validate_max) _validate_value = validator("value", allow_reuse=True)(validate_slider_value) diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 992690185..f64c3700b 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -12,6 +12,7 @@ from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable +from pydantic import PrivateAttr logger = logging.getLogger(__name__) @@ -43,6 +44,10 @@ class Graph(VizroBaseModel): ) # LN: needs to be refactored so plotly-independent or extendable - No, as this is within the boundaries of Graph model actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("clickData") + _output_property: str = PrivateAttr("figure") + # Re-used validators _set_actions = _action_validator_factory("clickData") @@ -127,13 +132,6 @@ def update_graph_theme(theme_selector_on: bool): patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light return patched_figure - def _get_action_callback_output(self): - return Output( # maybe just do the string? check with Petar, is that - component_id=self.id, - component_property="figure", - allow_duplicate=True, - ) - # do private attribute with a value # def _get_click_trigger_property(self): diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 47197be2c..4dbae19a2 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -9,6 +9,7 @@ from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable +from pydantic import PrivateAttr logger = logging.getLogger(__name__) @@ -28,6 +29,10 @@ class Table(VizroBaseModel): figure: CapturedCallable = Field(..., description="Table to be visualized on dashboard") actions: List[Action] = [] + # Component properties for actions and interactions + _input_property: str = PrivateAttr("active_cell") + _output_property: str = PrivateAttr("children") + # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] @@ -78,14 +83,3 @@ def build(self): additional_args = self.figure._arguments.copy() additional_args.pop("data_frame", None) return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) - - def _get_action_callback_output(self): - return Output( - component_id=self.id, - component_property="children", - allow_duplicate=True, - ) - - # def _get_click_trigger_property(self): - # """Define trigger property for click interaction""" - # return "active_cell" From 8ff80c7eeef687a175dafc5a7e8450a69a30727d Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 13:59:43 +0200 Subject: [PATCH 023/121] Take out hover behaviour on dark --- vizro-core/src/vizro/static/css/table.css | 115 +--------------------- 1 file changed, 3 insertions(+), 112 deletions(-) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 23c731031..ac068bcb4 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -6,115 +6,6 @@ div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadshe background-color: var(--main-container-bg-color); } - -/* .dash-table-container { - width: 100%; -} */ - -/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { - background-color: var(--main-container-bg-color); -} */ - -/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner tr { - height: 0px !important; -} */ - -/* .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { - background-color: var(--main-container-bg-color) !important; - border: 1px solid var(--main-container-bg-color) !important; - border-bottom-color: rgb(255, 255, 255, 0.3) !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .dash-filter - input[type="button"], -.dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .dash-filter - input[type="text"]::placeholder { - color: var(--text-primary) !important; - border-color: var(--text-primary) !important; - margin-right: 3px !important; - opacity: 0.55; - transition: 0.2s; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .dash-filter - input[type="text"]:hover::placeholder { - opacity: 1 !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .dash-filter - input:focus::placeholder { - opacity: 0 !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .dash-filter - input { - color: var(--text-primary) !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-clear-zone - > .Select-clear { - color: revert !important; - margin-left: 3px; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-value-label { - margin-right: 15px; - margin-left: 10px; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-control:hover - .Select-arrow { - border-top-color: var(--fill-medium-emphasis) !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-arrow-zone:hover - > .Select-arrow { - border-top-color: #666 !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-menu-outer - .Select-option { - color: var(--text-secondary) !important; -} */ - -/* .dash-table-container - .dash-spreadsheet-container - .dash-spreadsheet-inner - .Select-menu-outer - .Select-option:hover { - background-color: var(--fill-contrast-hover-selected) !important; -} */ - -/* .dash-table-container .show-hide { - display: none; -} */ +div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner table { + --hover: var(--main-container-bg-color); +} From 5a7ffe98f39a521bd28122419a004d89c68562ee Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 14:03:28 +0200 Subject: [PATCH 024/121] Table CSS --- vizro-core/src/vizro/static/css/table.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index ac068bcb4..eeab078cf 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -9,3 +9,7 @@ div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadshe div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner table { --hover: var(--main-container-bg-color); } + +div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td, .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { + padding: 0px 4px; +} From 51bcd913d5792a6092e5b047a2c2d9a9319c97aa Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 14:05:01 +0200 Subject: [PATCH 025/121] reminder --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1c266ab55..ab1bf786a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,7 +41,7 @@ repos: args: [--autofix] - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.261 + rev: v0.0.261 #TODO: upgrade to latest version hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] From 5d080c3c75cab3015ba1f108672cd9c1fb869121 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 15:01:29 +0200 Subject: [PATCH 026/121] Try out AGGrid --- vizro-core/examples/default/app.py | 36 +++++-------------- vizro-core/pyproject.toml | 1 + .../src/vizro/models/_components/table.py | 1 - 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index e60159050..d7dd698d0 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -12,6 +12,7 @@ from vizro.managers import data_manager from vizro.models.types import capture from vizro.actions import filter_interaction +import dash_ag_grid as dag def retrieve_table_data(): @@ -36,30 +37,6 @@ def retrieve_table_data(): return pd.DataFrame(data) -# Option 1: Use graph objects table -@capture("graph") -def table_go(data_frame=None, template=None): - """Custom table.""" - return go.Figure( - data=[ - go.Table( - header={"values": data_frame.columns.to_list()}, - cells={"values": data_frame.values.transpose().tolist()}, - ) - ] - ) - - -# @capture("graph") -# def d3_bar(data_frame=None): -# """Custom table.""" -# return d3_bar_chart.D3BarChart( -# id="input", -# value="my-value", -# label="my-label", -# ) - - @capture("action") def table_dash(data_frame=None, style_header=None): """Custom table.""" @@ -71,9 +48,13 @@ def table_dash(data_frame=None, style_header=None): @capture("action") -def markdown(data_frame=None): - """Custom table.""" - return dcc.Markdown(f"Data columns: {data_frame.columns.to_list()}") +def AgGrid(data_frame=None): + """Custom AgGrid.""" + return dag.AgGrid( + id="get-started-example-basic", + rowData=data_frame.to_dict("records"), + columnDefs=[{"field": col} for col in data_frame.columns], + ) data_manager["table_data"] = retrieve_table_data @@ -95,6 +76,7 @@ def markdown(data_frame=None): id="hist", figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), ), + vm.Table(id="grid", figure=AgGrid(data_frame="table_data")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index 9335442c9..9e6eb4633 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -23,6 +23,7 @@ dependencies = [ "pandas", "pydantic>=1.10.13, <2", # must be synced with pre-commit mypy hook "dash_daq", + "dash_ag_grid", "ipython>=8.10.0", # not directly required, pinned by Snyk to avoid a vulnerability: https://app.snyk.io/vuln/SNYK-PYTHON-IPYTHON-3318382 "numpy>=1.22.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-NUMPY-2321970 "tornado>=6.3.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-TORNADO-5537286 diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 4dbae19a2..e4ff5c453 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -25,7 +25,6 @@ class Table(VizroBaseModel): """ type: Literal["table"] = "table" - data: Callable = None figure: CapturedCallable = Field(..., description="Table to be visualized on dashboard") actions: List[Action] = [] From ac58e283820e33f7a0685eaffaeaafb35681f2c0 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 15:03:05 +0200 Subject: [PATCH 027/121] Delete unnecessary files --- .../src/vizro/models/_components/react.py | 80 ------------------- .../src/vizro/models/_components/table2.py | 54 ------------- 2 files changed, 134 deletions(-) delete mode 100644 vizro-core/src/vizro/models/_components/react.py delete mode 100644 vizro-core/src/vizro/models/_components/table2.py diff --git a/vizro-core/src/vizro/models/_components/react.py b/vizro-core/src/vizro/models/_components/react.py deleted file mode 100644 index 927c74827..000000000 --- a/vizro-core/src/vizro/models/_components/react.py +++ /dev/null @@ -1,80 +0,0 @@ -import logging -from typing import Callable, List, Literal - -from dash import html -from pydantic import Field, validator - -from vizro.managers import data_manager -from vizro.models import Action, VizroBaseModel -from vizro.models._action._actions_chain import _action_validator_factory -from vizro.models._models_utils import _log_call -from vizro.models.types import CapturedCallable - -logger = logging.getLogger(__name__) - - -class React(VizroBaseModel): - """Wrapper for react components to visualize in dashboard. - - Args: - type (Literal["react"]): Defaults to `"react"`. - figure (CapturedCallable): React object to be displayed. - # actions (List[Action]): List of the Action objects, that allows to - # configure app interactions, triggered by affecting this component. - """ - - type: Literal["react"] = "react" - data: Callable = None - figure: CapturedCallable = Field(..., description="React component to be visualized on dashboard") - actions: List[Action] = [] - - # validator - set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] - - @validator("figure") - def process_component_data_frame(cls, figure, values): - data_frame = figure["data_frame"] - - # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. - # In these cases, data already exists in the data manager and just needs to be linked to the component. - if isinstance(data_frame, str): - data_manager._add_component(values["id"], data_frame) - return figure - - # Standard case for df: pd.DataFrame. - # Extract dataframe from the captured function and put it into the data manager. - dataset_name = str(id(data_frame)) - - logger.debug("Adding data to data manager for Graph with id %s", values["id"]) - # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need - # to duplicate it. Just log the exception for debugging purposes. - try: - data_manager[dataset_name] = data_frame - except ValueError as exc: - logger.debug(exc) - - data_manager._add_component(values["id"], dataset_name) - - # No need to keep the data in the captured function any more so remove it to save memory. - # del figure["data_frame"] - return figure - - # Convenience wrapper/syntactic sugar. - def __call__(self, **kwargs): - kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] - return self.figure(**kwargs) - - # Convenience wrapper/syntactic sugar. - def __getitem__(self, arg_name: str): - # pydantic discriminated union validation seems to try Graph["type"], which throws an error unless we - # explicitly redirect it to the correct attribute. - if arg_name == "type": - return self.type - return self.figure[arg_name] - - @_log_call - def build(self): - data = data_manager._get_component_data(self.id) # type: ignore - additional_args = self.figure._arguments.copy() - additional_args.pop("data_frame", None) - return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) diff --git a/vizro-core/src/vizro/models/_components/table2.py b/vizro-core/src/vizro/models/_components/table2.py deleted file mode 100644 index f23570ab4..000000000 --- a/vizro-core/src/vizro/models/_components/table2.py +++ /dev/null @@ -1,54 +0,0 @@ -import logging -from typing import Any, Dict, Literal - -from dash import dash_table, html -from pydantic import Field - -from vizro.managers import data_manager -from vizro.models import VizroBaseModel -from vizro.models._models_utils import _log_call - -logger = logging.getLogger(__name__) - - -class Table2(VizroBaseModel): - """Creates a table utilizing dash_table.DataTable. - - Args: - type (Literal["table"]): Defaults to `"table"`. - data_frame (pd.DataFrame): Dataframe to be used for table. - style_header (Dict[str, str]): Custom styling for header - filter_action (str): 'native' to. - """ - - type: Literal["table2"] = "table2" - data_frame: str = Field(..., description="Data frame to be visualized as table.") - other_args: Dict[str, Any] = {} - # filter_action: str = 'custom' - # Todo: - # Add parameters: style_table, style_cell, style_data, style_filter, style_header, style_cell_conditional, - # style_data_conditional, style_filter_conditional, style_header_conditional, cols_to_remove - - def __init__(self, **data): - super().__init__(**data) - if isinstance(self.data_frame, str): - data_manager._add_component(self.id, self.data_frame) - - @classmethod - def update_layout(self, template=None): - pass - - @_log_call - def build(self): - data = data_manager._get_component_data(self.id) # type: ignore - - table = dash_table.DataTable( - data=data.to_dict("records"), - columns=[{"name": i, "id": i} for i in data.columns], - style_header=self.style_header, - filter_action="custom", # link: https://dash.plotly.com/datatable/filtering - **other_args, - ) - table_container = "table_container" - - return html.Div(table, className=table_container) From 381514ba6cbd203aa1cc13e9818151a6a95c76cc Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 17:52:02 +0200 Subject: [PATCH 028/121] Enable proper capture decorator --- vizro-core/examples/default/app.py | 9 ++++--- .../src/vizro/actions/_actions_utils.py | 10 +++++-- vizro-core/src/vizro/models/__init__.py | 7 ++--- .../src/vizro/models/_components/__init__.py | 4 +-- .../src/vizro/models/_components/table.py | 26 +++++++++---------- vizro-core/src/vizro/models/types.py | 18 ++++++++++--- 6 files changed, 44 insertions(+), 30 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index d7dd698d0..dad521f02 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -37,7 +37,7 @@ def retrieve_table_data(): return pd.DataFrame(data) -@capture("action") +@capture("table") def table_dash(data_frame=None, style_header=None): """Custom table.""" return dash_table.DataTable( @@ -47,13 +47,14 @@ def table_dash(data_frame=None, style_header=None): ) -@capture("action") +@capture("table") def AgGrid(data_frame=None): """Custom AgGrid.""" return dag.AgGrid( id="get-started-example-basic", rowData=data_frame.to_dict("records"), columnDefs=[{"field": col} for col in data_frame.columns], + # className="ag-theme-alpine-dark", ) @@ -64,7 +65,7 @@ def AgGrid(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.Table(id="table2", figure=table_dash(data_frame="table_data", style_header={"border": "1px solid green"})), + vm.Table(id="table2", table=table_dash(data_frame=data, style_header={"border": "1px solid green"})), vm.Graph( id="graph", figure=px.scatter( @@ -76,7 +77,7 @@ def AgGrid(data_frame=None): id="hist", figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), ), - vm.Table(id="grid", figure=AgGrid(data_frame="table_data")), + vm.Table(id="grid", table=AgGrid(data_frame="table_data")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 97b4b6174..0268bdbb0 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -118,12 +118,18 @@ def _get_parametrized_config(targets: List[str], parameters: List[CallbackTrigge for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. - graph_config = deepcopy(model_manager[target].figure._arguments) # type: ignore[index, attr-defined] + graph_config = ( + deepcopy(model_manager[target].figure._arguments) # type: ignore[index, attr-defined] + if hasattr(model_manager[target], "figure") + else deepcopy(model_manager[target].table._arguments) + ) if "data_frame" in graph_config: graph_config.pop("data_frame") for ctd in parameters: - selector_value = ctd["value"] + selector_value = ctd[ + "value" + ] # LN: needs to be refactored so that it is independent of implementation details if hasattr(selector_value, "__iter__") and ALL_OPTION in selector_value: # type: ignore[operator] selector: SelectorType = model_manager[ctd["id"]] selector_value = selector.options diff --git a/vizro-core/src/vizro/models/__init__.py b/vizro-core/src/vizro/models/__init__.py index 4efa1305a..8021bdfe5 100644 --- a/vizro-core/src/vizro/models/__init__.py +++ b/vizro-core/src/vizro/models/__init__.py @@ -1,7 +1,7 @@ # Keep this import at the top to avoid circular imports since it's used in every model. from ._base import VizroBaseModel # noqa: I001 from ._action import Action -from ._components import Card, Graph, Table, React +from ._components import Card, Graph, Table from ._components.form import Button, Checklist, Dropdown, RadioItems, RangeSlider, Slider from ._controls import Filter, Parameter from ._navigation.navigation import Navigation @@ -9,9 +9,7 @@ from ._layout import Layout from ._page import Page -Page.update_forward_refs( - Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter, Table=Table, React=React -) +Page.update_forward_refs(Button=Button, Card=Card, Filter=Filter, Graph=Graph, Parameter=Parameter, Table=Table) Dashboard.update_forward_refs(Page=Page, Navigation=Navigation) # Please keep alphabetically ordered @@ -30,7 +28,6 @@ "Parameter", "RadioItems", "RangeSlider", - "React", "Slider", "VizroBaseModel", "Table", diff --git a/vizro-core/src/vizro/models/_components/__init__.py b/vizro-core/src/vizro/models/_components/__init__.py index 934195b9b..aaa15d36f 100644 --- a/vizro-core/src/vizro/models/_components/__init__.py +++ b/vizro-core/src/vizro/models/_components/__init__.py @@ -2,8 +2,6 @@ from vizro.models._components.button import Button from vizro.models._components.card import Card from vizro.models._components.graph import Graph -from vizro.models._components.react import React from vizro.models._components.table import Table -from vizro.models._components.table2 import Table2 -__all__ = ["Button", "Card", "Graph", "Table", "Table2", "React"] +__all__ = ["Button", "Card", "Graph", "Table"] diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index e4ff5c453..19882126c 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -15,17 +15,17 @@ class Table(VizroBaseModel): - """Wrapper for react components to visualize in dashboard. + """Wrapper for table components to visualize in dashboard. Args: type (Literal["table"]): Defaults to `"table"`. - figure (CapturedCallable): React object to be displayed. + table (CapturedCallable): React object to be displayed. # actions (List[Action]): List of the Action objects, that allows to # configure app interactions, triggered by affecting this component. """ type: Literal["table"] = "table" - figure: CapturedCallable = Field(..., description="Table to be visualized on dashboard") + table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") actions: List[Action] = [] # Component properties for actions and interactions @@ -35,15 +35,15 @@ class Table(VizroBaseModel): # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] - @validator("figure") - def process_component_data_frame(cls, figure, values): - data_frame = figure["data_frame"] + @validator("table") + def process_component_data_frame(cls, table, values): + data_frame = table["data_frame"] # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. # In these cases, data already exists in the data manager and just needs to be linked to the component. if isinstance(data_frame, str): data_manager._add_component(values["id"], data_frame) - return figure + return table # Standard case for df: pd.DataFrame. # Extract dataframe from the captured function and put it into the data manager. @@ -60,13 +60,13 @@ def process_component_data_frame(cls, figure, values): data_manager._add_component(values["id"], dataset_name) # No need to keep the data in the captured function any more so remove it to save memory. - # del figure["data_frame"] - return figure + # del table["data_frame"] + return table # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] - return self.figure(**kwargs) + return self.table(**kwargs) # Convenience wrapper/syntactic sugar. def __getitem__(self, arg_name: str): @@ -74,11 +74,11 @@ def __getitem__(self, arg_name: str): # explicitly redirect it to the correct attribute. if arg_name == "type": return self.type - return self.figure[arg_name] + return self.table[arg_name] @_log_call def build(self): data = data_manager._get_component_data(self.id) # type: ignore - additional_args = self.figure._arguments.copy() + additional_args = self.table._arguments.copy() additional_args.pop("data_frame", None) - return html.Div(self.figure._function(data_frame=data, **additional_args), id=self.id) + return html.Div(self.table._function(data_frame=data, **additional_args), id=self.id) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index d2973d279..10c3c8f94 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -217,9 +217,21 @@ def wrapped(*args, **kwargs): # The table component @functools.wraps(func) def wrapped(*args, **kwargs): - return CapturedCallable(func, *args, **kwargs) + if "data_frame" not in inspect.signature(func).parameters: + raise ValueError(f"{func.__name__} must have data_frame argument to use capture('table').") + + captured_callable: CapturedCallable = CapturedCallable(func, *args, **kwargs) + + try: + captured_callable["data_frame"] + except KeyError as exc: + raise ValueError(f"{func.__name__} must supply a value to data_frame argument.") from exc + return captured_callable - raise ValueError("Valid modes of the capture decorator are @capture('graph') and @capture('action').") + return wrapped + raise ValueError( + "Valid modes of the capture decorator are @capture('graph'), @capture('action') or @capture('table')." + ) # Types used for selector values and options. Note the docstrings here are rendered on the API reference. @@ -270,7 +282,7 @@ class OptionsDictType(TypedDict): [`Parameter`][vizro.models.Parameter].""" ComponentType = Annotated[ - Union["Button", "Card", "Graph", "Table", "React"], + Union["Button", "Card", "Graph", "Table"], Field( discriminator="type", description="Component that makes up part of the layout on the page.", From 05f19c6c58304e39d2a70e66c2281faec1327325 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 18:22:51 +0200 Subject: [PATCH 029/121] remove scratch --- vizro-core/src/scratch.py | 97 --------------------------------------- 1 file changed, 97 deletions(-) delete mode 100644 vizro-core/src/scratch.py diff --git a/vizro-core/src/scratch.py b/vizro-core/src/scratch.py deleted file mode 100644 index 06c3e8509..000000000 --- a/vizro-core/src/scratch.py +++ /dev/null @@ -1,97 +0,0 @@ -# API for Table/React Charts -import d3_bar_chart -from dash import dash_table - -import vizro.models as vm -from vizro.models.types import capture - - -# Dash Table -@capture("graph") -def dash_table(data_frame=None, **kwargs): - """Custom table.""" - return dash_table.DataTable( - data=data_frame.to_dict("records"), columns=[{"name": i, "id": i} for i in data_frame.columns], **kwargs - ) - - -# D3 Visualisation -@capture("graph") -def d3_bar_chart(data_frame=None): - """Custom table.""" - return d3_bar_chart.D3BarChart( - data_frame=data_frame, # Custom D3 charts should have data_frame or other data arg - id="input", - value="my-value", - label="my-label", - ) - - -# 1) Graph --------------------- -vm.Graph(figure=dash_table) -vm.Graph(figure=d3_bar_chart) - -""" -Pro: -- One wrapper for all charts - -Con: -- Returning different object based on figure -> dcc.Graph or html.Div -- Would contradict our current paradigm of naming models close to what is being used underneath - -To consider -- dash keeps Graph and Table separate as well -> Graph enables all plotly.js powered charts, Table has different figure json schema and is therefore separate -- clickEvent property differs from the rest of px.charts --> needs to be refactored out of Graph -- post update calls differ (e.g. update_layout not available) --> needs to be refactored out of Graph -""" - - -# 2) Table & React -------------------- -vm.Table2(data_frame, **kwargs) -vm.React(figure=d3_bar_chart) - -""" -Pro: -- No need to create a custom chart, as datatable logic will live within the component (consistent with other components other than Graph) - -Con: -- Need to enable many of the args from the dash datatable or enable users to provide *kwargs which deviates from all other models -- Would need to create a custom chart from Table instance anyways to enable more sophisticated functionality required by verticals -- Would need another wrapper for other react charts -> bad paradigm to create new model for each new react chart -""" - -# 3) Table & React (currently preferred) -------------------- -vm.Table(figure=dash_table) -vm.React(figure=d3_bar_chart) - -""" -Pro: -- Users can customize their table to their liking and we don't maintain these args - -Con: -- Users have to create a custom chart first and then provide it to the table -- Separate models for Table and other react components -- Table would only support one type of figure - does it then even deserve its own model? - -To consider -- Does it make sense to have a figure argument if only one type of figure can be provided? -- Would we create our own custom react table at some point? -""" - - -# 4) ReactFigure -------------------- -vm.React(figure=dash_table) -vm.React(figure=d3_bar_chart) - -""" -Pro: -- Eventually gives us more freedom in creating custom js components -- Is only a thin wrapper and consistently returns an html.Div (one possible return type per model) - -Con: -- Will have different clickEvent properties (that could be configured via custom actions though) - -To consider: -- Should we actually extend the concept of this to vm.Html or vm.Container as essentially it just wraps the component inside an html.Div? - That model could then also be re-used for several other things? (Would mix lots of different concepts then though, so maybe bad idea) -""" From 5168a6f16e65f9fcded23566c59c93615b5c407f Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Tue, 17 Oct 2023 18:26:01 +0200 Subject: [PATCH 030/121] Clean up comments --- vizro-core/src/vizro/actions/_actions_utils.py | 4 +--- .../_callback_mapping/_callback_mapping_utils.py | 6 +++--- vizro-core/src/vizro/models/_components/graph.py | 14 ++++---------- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 0268bdbb0..037fdaa67 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -129,7 +129,7 @@ def _get_parametrized_config(targets: List[str], parameters: List[CallbackTrigge for ctd in parameters: selector_value = ctd[ "value" - ] # LN: needs to be refactored so that it is independent of implementation details + ] # TODO: needs to be refactored so that it is independent of implementation details if hasattr(selector_value, "__iter__") and ALL_OPTION in selector_value: # type: ignore[operator] selector: SelectorType = model_manager[ctd["id"]] selector_value = selector.options @@ -203,7 +203,5 @@ def _get_modified_page_charts( outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) if hasattr(outputs[target], "update_layout"): outputs[target].update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") - # LN: needs to be refactored so plotly-independent or extendable - DONE - # MS: is the common theme to be targetable? return outputs diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index c99f96f38..b25cb364d 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -89,7 +89,7 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li return [ State( component_id=control.selector.id, - component_property=control.selector._input_property, # LN: needs to be refactored so that it is independent of implementation details - DONE + component_property=control.selector._input_property, ) for control in page.controls if isinstance(control, control_type) @@ -110,7 +110,7 @@ def _get_inputs_of_chart_interactions( inputs.append( State( component_id=triggered_model.id, - component_property=triggered_model._input_property, # LN: needs to be refactored so that it is independent of implementation details - DONE + component_property=triggered_model._input_property, ) ) return inputs @@ -160,7 +160,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: if action_function == _on_page_load.__wrapped__: targets = _get_components_with_data(action_id=action_id) - return { # LN: needs to be refactored so plotly-independent or extendable - DONE + return { target: Output( component_id=target, component_property=model_manager[target]._output_property, diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index f64c3700b..94cc3956d 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -41,7 +41,7 @@ class Graph(VizroBaseModel): type: Literal["graph"] = "graph" figure: CapturedCallable = Field( ..., import_path=px - ) # LN: needs to be refactored so plotly-independent or extendable - No, as this is within the boundaries of Graph model + ) # TODO: needs to be refactored so plotly-independent or extendable - No, as this is within the boundaries of Graph model actions: List[Action] = [] # Component properties for actions and interactions @@ -88,7 +88,7 @@ def __call__(self, **kwargs): if fig.layout.title.text is None: fig.update_layout( margin_t=24 - ) # LN: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model + ) # TODO: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model return fig # Convenience wrapper/syntactic sugar. @@ -121,7 +121,7 @@ def build(self): parent_className="chart_container", ) - def _update_graph_theme(self): # LN: needs to be refactored so plotly-independent or extendable - DONE + def _update_graph_theme(self): @callback( Output(self.id, "figure", allow_duplicate=True), Input("theme_selector", "on"), @@ -130,10 +130,4 @@ def _update_graph_theme(self): # LN: needs to be refactored so plotly-independe def update_graph_theme(theme_selector_on: bool): patched_figure = Patch() patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light - return patched_figure - - # do private attribute with a value - - # def _get_click_trigger_property(self): - # """Define trigger property for click interaction""" - # return "clickData" + return patched_figure \ No newline at end of file From edd03869ee98d380b7191e2d324f7d14b8272366 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 10:37:07 +0200 Subject: [PATCH 031/121] Mypy lint including ModelID --- .../src/vizro/actions/_actions_utils.py | 18 +++++++------ .../_callback_mapping_utils.py | 5 ++-- .../src/vizro/actions/_filter_action.py | 5 ++-- .../src/vizro/actions/_on_page_load_action.py | 2 +- .../src/vizro/actions/_parameter_action.py | 8 +++--- .../src/vizro/actions/export_data_action.py | 7 +++--- .../actions/filter_interaction_action.py | 5 ++-- .../src/vizro/managers/_model_manager.py | 6 ++--- .../models/_components/form/checklist.py | 3 +-- .../vizro/models/_components/form/dropdown.py | 3 +-- .../models/_components/form/radio_items.py | 3 +-- .../models/_components/form/range_slider.py | 3 +-- .../vizro/models/_components/form/slider.py | 3 +-- .../src/vizro/models/_components/graph.py | 9 +++---- .../src/vizro/models/_components/table.py | 7 +++--- .../src/vizro/models/_controls/filter.py | 6 +++-- vizro-core/src/vizro/models/types.py | 4 ++- vizro-core/src/vizro/static/css/table.css | 25 ++++++++++++++++--- 18 files changed, 72 insertions(+), 50 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 037fdaa67..4a867dc12 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -113,15 +113,17 @@ def _update_nested_graph_properties(graph_config: Dict[str, Any], dot_separated_ return graph_config -def _get_parametrized_config(targets: List[str], parameters: List[CallbackTriggerDict]) -> Dict[str, Dict[str, Any]]: +def _get_parametrized_config( + targets: List[ModelID], parameters: List[CallbackTriggerDict] +) -> Dict[ModelID, Dict[str, Any]]: parameterized_config = {} for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. graph_config = ( - deepcopy(model_manager[target].figure._arguments) # type: ignore[index, attr-defined] + deepcopy(model_manager[target].figure._arguments) # type: ignore[attr-defined] if hasattr(model_manager[target], "figure") - else deepcopy(model_manager[target].table._arguments) + else deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] ) if "data_frame" in graph_config: graph_config.pop("data_frame") @@ -154,10 +156,10 @@ def _get_parametrized_config(targets: List[str], parameters: List[CallbackTrigge # Helper functions used in pre-defined actions ---- def _get_filtered_data( - targets: List[str], + targets: List[ModelID], ctds_filters: List[CallbackTriggerDict], ctds_filter_interaction: List[CallbackTriggerDict], -) -> Dict[str, pd.DataFrame]: +) -> Dict[ModelID, pd.DataFrame]: filtered_data = {} for target in targets: data_frame = data_manager._get_component_data(target) @@ -183,8 +185,8 @@ def _get_modified_page_charts( ctds_filter_interaction: List[CallbackTriggerDict], ctds_parameters: List[CallbackTriggerDict], ctd_theme: CallbackTriggerDict, - targets: Optional[List[str]] = None, -) -> Dict[str, Any]: + targets: Optional[List[ModelID]] = None, +) -> Dict[ModelID, Any]: if not targets: targets = [] filtered_data = _get_filtered_data( @@ -200,7 +202,7 @@ def _get_modified_page_charts( outputs = {} for target in targets: - outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) + outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) # type: ignore[operator] if hasattr(outputs[target], "update_layout"): outputs[target].update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index b25cb364d..f9f30feef 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -110,7 +110,7 @@ def _get_inputs_of_chart_interactions( inputs.append( State( component_id=triggered_model.id, - component_property=triggered_model._input_property, + component_property=triggered_model._input_property, # type: ignore[attr-defined] ) ) return inputs @@ -148,6 +148,7 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: """Creates mapping of target names and their Output.""" action_function = model_manager[action_id].function._function # type: ignore[attr-defined] + # TODO: here and above, could we fix mypy (and ideally have better code), by defining these attributes in the base? try: targets = model_manager[action_id].function["targets"] # type: ignore[attr-defined] @@ -163,7 +164,7 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: return { target: Output( component_id=target, - component_property=model_manager[target]._output_property, + component_property=model_manager[target]._output_property, # type: ignore[attr-defined] allow_duplicate=True, ) for target in targets diff --git a/vizro-core/src/vizro/actions/_filter_action.py b/vizro-core/src/vizro/actions/_filter_action.py index c07aa05b8..a3d7b5fde 100644 --- a/vizro-core/src/vizro/actions/_filter_action.py +++ b/vizro-core/src/vizro/actions/_filter_action.py @@ -9,15 +9,16 @@ _get_modified_page_charts, ) from vizro.models.types import capture +from vizro.managers._model_manager import ModelID @capture("action") def _filter( filter_column: str, - targets: List[str], + targets: List[ModelID], filter_function: Callable[[pd.Series, Any], pd.Series], **inputs: Dict[str, Any], -) -> Dict[str, Any]: +) -> Dict[ModelID, Any]: """Filters targeted charts/components on page by interaction with `Filter` control. Args: diff --git a/vizro-core/src/vizro/actions/_on_page_load_action.py b/vizro-core/src/vizro/actions/_on_page_load_action.py index 06bff8e0e..bac97bf5e 100644 --- a/vizro-core/src/vizro/actions/_on_page_load_action.py +++ b/vizro-core/src/vizro/actions/_on_page_load_action.py @@ -13,7 +13,7 @@ @capture("action") -def _on_page_load(page_id: ModelID, **inputs: Dict[str, Any]) -> Dict[str, Any]: +def _on_page_load(page_id: ModelID, **inputs: Dict[str, Any]) -> Dict[ModelID, Any]: """Applies controls to charts on page once the page is opened (or refreshed). Args: diff --git a/vizro-core/src/vizro/actions/_parameter_action.py b/vizro-core/src/vizro/actions/_parameter_action.py index 97f66d681..bc01922bb 100644 --- a/vizro-core/src/vizro/actions/_parameter_action.py +++ b/vizro-core/src/vizro/actions/_parameter_action.py @@ -8,11 +8,13 @@ _get_modified_page_charts, ) from vizro.models.types import capture +from vizro.managers._model_manager import ModelID + # TODO - consider using dash.Patch() for parameter action @capture("action") -def _parameter(targets: List[str], **inputs: Dict[str, Any]) -> Dict[str, Any]: +def _parameter(targets: List[str], **inputs: Dict[str, Any]) -> Dict[ModelID, Any]: """Modifies parameters of targeted charts/components on page. Args: @@ -23,10 +25,10 @@ def _parameter(targets: List[str], **inputs: Dict[str, Any]) -> Dict[str, Any]: Returns: Dict mapping target component ids to modified charts/components e.g. {'my_scatter': Figure({})} """ - targets = [target.split(".")[0] for target in targets] + target_ids: List[ModelID] = [target.split(".")[0] for target in targets] # type: ignore[misc] return _get_modified_page_charts( - targets=targets, + targets=target_ids, ctds_filter=ctx.args_grouping["filters"], ctds_filter_interaction=ctx.args_grouping["filter_interaction"], ctds_parameters=ctx.args_grouping["parameters"], diff --git a/vizro-core/src/vizro/actions/export_data_action.py b/vizro-core/src/vizro/actions/export_data_action.py index 09b73423e..87fb6717f 100644 --- a/vizro-core/src/vizro/actions/export_data_action.py +++ b/vizro-core/src/vizro/actions/export_data_action.py @@ -10,11 +10,12 @@ ) from vizro.managers import model_manager from vizro.models.types import capture +from vizro.managers._model_manager import ModelID @capture("action") def export_data( - targets: Optional[List[str]] = None, + targets: Optional[List[ModelID]] = None, file_format: Literal["csv", "xlsx"] = "csv", **inputs: Dict[str, Any], ) -> Dict[str, Any]: @@ -40,7 +41,7 @@ def export_data( if isinstance(output["id"], dict) and output["id"]["type"] == "download-dataframe" ] for target in targets: - if target not in model_manager: # type: ignore[operator] + if target not in model_manager: raise ValueError(f"Component '{target}' does not exist.") data_frames = _get_filtered_data( @@ -50,7 +51,7 @@ def export_data( ) callback_outputs = {} - for _, target_id in enumerate(targets): + for target_id in targets: if file_format == "csv": writer = data_frames[target_id].to_csv elif file_format == "xlsx": diff --git a/vizro-core/src/vizro/actions/filter_interaction_action.py b/vizro-core/src/vizro/actions/filter_interaction_action.py index ceb1c96b6..2ea6eaf4e 100644 --- a/vizro-core/src/vizro/actions/filter_interaction_action.py +++ b/vizro-core/src/vizro/actions/filter_interaction_action.py @@ -8,13 +8,14 @@ _get_modified_page_charts, ) from vizro.models.types import capture +from vizro.managers._model_manager import ModelID @capture("action") def filter_interaction( - targets: Optional[List[str]] = None, + targets: Optional[List[ModelID]] = None, **inputs: Dict[str, Any], -) -> Dict[str, Any]: +) -> Dict[ModelID, Any]: """Filters targeted charts/components on page by clicking on data points of the source chart. To set up filtering on specific columns of the target chart(s), include these columns in the 'custom_data' diff --git a/vizro-core/src/vizro/managers/_model_manager.py b/vizro-core/src/vizro/managers/_model_manager.py index 08c12ec9a..795b7dc6c 100644 --- a/vizro-core/src/vizro/managers/_model_manager.py +++ b/vizro-core/src/vizro/managers/_model_manager.py @@ -3,7 +3,7 @@ import random import uuid -from typing import TYPE_CHECKING, Dict, Generator, NewType, Tuple, Type, TypeVar, cast +from typing import TYPE_CHECKING, Dict, Generator, Tuple, Type, TypeVar, cast, NewType from vizro.managers._managers_utils import _state_modifier @@ -12,15 +12,15 @@ rd = random.Random(0) +# Type used for model_manager IDs ModelID = NewType("ModelID", str) + Model = TypeVar("Model", bound="VizroBaseModel") class DuplicateIDError(ValueError): """Useful for providing a more explicit error message when a model has id set automatically, e.g. Page.""" - pass - class ModelManager: def __init__(self): diff --git a/vizro-core/src/vizro/models/_components/form/checklist.py b/vizro-core/src/vizro/models/_components/form/checklist.py index 6406e65f3..8fec2870e 100644 --- a/vizro-core/src/vizro/models/_components/form/checklist.py +++ b/vizro-core/src/vizro/models/_components/form/checklist.py @@ -1,14 +1,13 @@ from typing import List, Literal, Optional from dash import dcc, html -from pydantic import Field, root_validator, validator +from pydantic import Field, PrivateAttr, root_validator, validator from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import MultiValueType, OptionsType -from pydantic import PrivateAttr class Checklist(VizroBaseModel): diff --git a/vizro-core/src/vizro/models/_components/form/dropdown.py b/vizro-core/src/vizro/models/_components/form/dropdown.py index f5ca2839d..5db1a375d 100755 --- a/vizro-core/src/vizro/models/_components/form/dropdown.py +++ b/vizro-core/src/vizro/models/_components/form/dropdown.py @@ -1,14 +1,13 @@ from typing import List, Literal, Optional, Union from dash import dcc, html -from pydantic import Field, root_validator, validator +from pydantic import Field, PrivateAttr, root_validator, validator from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import MultiValueType, OptionsType, SingleValueType -from pydantic import PrivateAttr class Dropdown(VizroBaseModel): diff --git a/vizro-core/src/vizro/models/_components/form/radio_items.py b/vizro-core/src/vizro/models/_components/form/radio_items.py index 5518df30d..57e460206 100644 --- a/vizro-core/src/vizro/models/_components/form/radio_items.py +++ b/vizro-core/src/vizro/models/_components/form/radio_items.py @@ -1,14 +1,13 @@ from typing import List, Literal, Optional from dash import dcc, html -from pydantic import Field, root_validator, validator +from pydantic import Field, PrivateAttr, root_validator, validator from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._components.form._form_utils import get_options_and_default, validate_options_dict, validate_value from vizro.models._models_utils import _log_call from vizro.models.types import OptionsType, SingleValueType -from pydantic import PrivateAttr class RadioItems(VizroBaseModel): diff --git a/vizro-core/src/vizro/models/_components/form/range_slider.py b/vizro-core/src/vizro/models/_components/form/range_slider.py index 3356c5979..61eb5998f 100644 --- a/vizro-core/src/vizro/models/_components/form/range_slider.py +++ b/vizro-core/src/vizro/models/_components/form/range_slider.py @@ -1,7 +1,7 @@ from typing import Dict, List, Literal, Optional from dash import ClientsideFunction, Input, Output, State, clientside_callback, dcc, html -from pydantic import Field, validator +from pydantic import Field, PrivateAttr, validator from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory @@ -12,7 +12,6 @@ validate_step, ) from vizro.models._models_utils import _log_call -from pydantic import PrivateAttr class RangeSlider(VizroBaseModel): diff --git a/vizro-core/src/vizro/models/_components/form/slider.py b/vizro-core/src/vizro/models/_components/form/slider.py index 82f15eb56..3db776098 100644 --- a/vizro-core/src/vizro/models/_components/form/slider.py +++ b/vizro-core/src/vizro/models/_components/form/slider.py @@ -1,7 +1,7 @@ from typing import Dict, List, Literal, Optional from dash import ClientsideFunction, Input, Output, State, clientside_callback, dcc, html -from pydantic import Field, validator +from pydantic import Field, PrivateAttr, validator from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory @@ -12,7 +12,6 @@ validate_step, ) from vizro.models._models_utils import _log_call -from pydantic import PrivateAttr class Slider(VizroBaseModel): diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 94cc3956d..637f53b04 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -3,7 +3,7 @@ from dash import Input, Output, Patch, callback, dcc from plotly import graph_objects as go -from pydantic import Field, validator +from pydantic import Field, PrivateAttr, validator import vizro._themes as themes import vizro.plotly.express as px @@ -12,7 +12,6 @@ from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable -from pydantic import PrivateAttr logger = logging.getLogger(__name__) @@ -41,7 +40,7 @@ class Graph(VizroBaseModel): type: Literal["graph"] = "graph" figure: CapturedCallable = Field( ..., import_path=px - ) # TODO: needs to be refactored so plotly-independent or extendable - No, as this is within the boundaries of Graph model + ) # TODO: needs to be refactored so plotly-independent or extendable - No, as within the boundaries of Graph model actions: List[Action] = [] # Component properties for actions and interactions @@ -88,7 +87,7 @@ def __call__(self, **kwargs): if fig.layout.title.text is None: fig.update_layout( margin_t=24 - ) # TODO: needs to be refactored so plotly-independent or extendable: No, as this is within the boundaries of Graph model + ) # TODO: needs to be refactored so plotly-independent or extendable: No, as boundaries of Graph model return fig # Convenience wrapper/syntactic sugar. @@ -130,4 +129,4 @@ def _update_graph_theme(self): def update_graph_theme(theme_selector_on: bool): patched_figure = Patch() patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light - return patched_figure \ No newline at end of file + return patched_figure diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 19882126c..5cc580b21 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -1,15 +1,14 @@ import logging -from typing import Callable, List, Literal +from typing import List, Literal -from dash import Output, html -from pydantic import Field, validator +from dash import html +from pydantic import Field, PrivateAttr, validator from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable -from pydantic import PrivateAttr logger = logging.getLogger(__name__) diff --git a/vizro-core/src/vizro/models/_controls/filter.py b/vizro-core/src/vizro/models/_controls/filter.py index 751d0089d..73373f950 100644 --- a/vizro-core/src/vizro/models/_controls/filter.py +++ b/vizro-core/src/vizro/models/_controls/filter.py @@ -22,6 +22,8 @@ if TYPE_CHECKING: from vizro.models import Page + +from vizro.managers._model_manager import ModelID # TODO: Add temporal when relevant component is available @@ -57,14 +59,14 @@ class Filter(VizroBaseModel): Args: type (Literal["filter"]): Defaults to `"filter"`. column (str): Column of `DataFrame` to filter. - targets (List[str]): Target component to be affected by filter. If none are given then target all components on + targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components on the page that use `column`. selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`. """ type: Literal["filter"] = "filter" column: str = Field(..., description="Column of DataFrame to filter.") - targets: List[str] = Field( + targets: List[ModelID] = Field( [], description="Target component to be affected by filter. " "If none are given then target all components on the page that use `column`.", diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 10c3c8f94..f23f5eda9 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -5,7 +5,7 @@ import functools import inspect from copy import deepcopy -from typing import Any, Dict, List, Literal, Protocol, Union, runtime_checkable +from typing import Any, Dict, List, Literal, NewType, Protocol, Union, runtime_checkable from pydantic import Field, StrictBool from pydantic.fields import ModelField @@ -299,3 +299,5 @@ class OptionsDictType(TypedDict): ), ] """Permissible value types for page attribute. Values are displayed as default.""" + + diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index eeab078cf..a6fd902ee 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -1,15 +1,32 @@ -div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { +div.right_side + .dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + th { background-color: var(--main-container-bg-color); } -div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td { +div.right_side + .dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + td { background-color: var(--main-container-bg-color); } -div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner table { +div.right_side + .dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + table { --hover: var(--main-container-bg-color); } -div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner td, .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { +div.right_side + .dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + td, +.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { padding: 0px 4px; } From 77719b76ccd12c37c4905996a4e8a21226a419b4 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 10:39:27 +0200 Subject: [PATCH 032/121] General lint --- vizro-core/examples/default/app.py | 8 ++++---- vizro-core/pyproject.toml | 6 ++---- vizro-core/src/vizro/actions/_actions_utils.py | 4 +++- vizro-core/src/vizro/actions/_filter_action.py | 2 +- vizro-core/src/vizro/actions/_parameter_action.py | 3 +-- vizro-core/src/vizro/actions/export_data_action.py | 2 +- vizro-core/src/vizro/actions/filter_interaction_action.py | 2 +- vizro-core/src/vizro/managers/_model_manager.py | 2 +- vizro-core/src/vizro/models/_controls/filter.py | 7 +++---- vizro-core/src/vizro/models/types.py | 4 +--- 10 files changed, 18 insertions(+), 22 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index dad521f02..cc705503d 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,18 +1,18 @@ """Example to show dashboard configuration specified as pydantic models.""" import os +import dash_ag_grid as dag + # import d3_bar_chart import pandas as pd -import plotly.graph_objects as go -from dash import dash_table, dcc +from dash import dash_table import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro +from vizro.actions import filter_interaction from vizro.managers import data_manager from vizro.models.types import capture -from vizro.actions import filter_interaction -import dash_ag_grid as dag def retrieve_table_data(): diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index 9e6eb4633..709ab8547 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -27,9 +27,7 @@ dependencies = [ "ipython>=8.10.0", # not directly required, pinned by Snyk to avoid a vulnerability: https://app.snyk.io/vuln/SNYK-PYTHON-IPYTHON-3318382 "numpy>=1.22.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-NUMPY-2321970 "tornado>=6.3.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-TORNADO-5537286 - "setuptools>=65.5.1", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 - "MarkupSafe", # required to sanitise user input - # "d3_bar_chart @ file:///Users/huong_li_nguyen/Desktop/d3_bar_chart-0.0.1-py3-none-any.whl" + "setuptools>=65.5.1" # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-SETUPTOOLS-3180412 ] description = "Vizro is a package to facilitate visual analytics." dynamic = ["version"] @@ -68,4 +66,4 @@ parallel = true source_pkgs = ["vizro"] [tool.hatch.metadata] -allow-direct-references = true \ No newline at end of file +allow-direct-references = true diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 4a867dc12..bee9c34fc 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -202,7 +202,9 @@ def _get_modified_page_charts( outputs = {} for target in targets: - outputs[target] = model_manager[target](data_frame=filtered_data[target], **parameterized_config[target]) # type: ignore[operator] + outputs[target] = model_manager[target]( # type: ignore[operator] + data_frame=filtered_data[target], **parameterized_config[target] + ) if hasattr(outputs[target], "update_layout"): outputs[target].update_layout(template="vizro_dark" if ctd_theme["value"] else "vizro_light") diff --git a/vizro-core/src/vizro/actions/_filter_action.py b/vizro-core/src/vizro/actions/_filter_action.py index a3d7b5fde..5515a8bcc 100644 --- a/vizro-core/src/vizro/actions/_filter_action.py +++ b/vizro-core/src/vizro/actions/_filter_action.py @@ -8,8 +8,8 @@ from vizro.actions._actions_utils import ( _get_modified_page_charts, ) -from vizro.models.types import capture from vizro.managers._model_manager import ModelID +from vizro.models.types import capture @capture("action") diff --git a/vizro-core/src/vizro/actions/_parameter_action.py b/vizro-core/src/vizro/actions/_parameter_action.py index bc01922bb..68e0a1218 100644 --- a/vizro-core/src/vizro/actions/_parameter_action.py +++ b/vizro-core/src/vizro/actions/_parameter_action.py @@ -7,9 +7,8 @@ from vizro.actions._actions_utils import ( _get_modified_page_charts, ) -from vizro.models.types import capture from vizro.managers._model_manager import ModelID - +from vizro.models.types import capture # TODO - consider using dash.Patch() for parameter action diff --git a/vizro-core/src/vizro/actions/export_data_action.py b/vizro-core/src/vizro/actions/export_data_action.py index 87fb6717f..dacde569d 100644 --- a/vizro-core/src/vizro/actions/export_data_action.py +++ b/vizro-core/src/vizro/actions/export_data_action.py @@ -9,8 +9,8 @@ _get_filtered_data, ) from vizro.managers import model_manager -from vizro.models.types import capture from vizro.managers._model_manager import ModelID +from vizro.models.types import capture @capture("action") diff --git a/vizro-core/src/vizro/actions/filter_interaction_action.py b/vizro-core/src/vizro/actions/filter_interaction_action.py index 2ea6eaf4e..2bd1eb6c6 100644 --- a/vizro-core/src/vizro/actions/filter_interaction_action.py +++ b/vizro-core/src/vizro/actions/filter_interaction_action.py @@ -7,8 +7,8 @@ from vizro.actions._actions_utils import ( _get_modified_page_charts, ) -from vizro.models.types import capture from vizro.managers._model_manager import ModelID +from vizro.models.types import capture @capture("action") diff --git a/vizro-core/src/vizro/managers/_model_manager.py b/vizro-core/src/vizro/managers/_model_manager.py index 795b7dc6c..4ef7eaa5e 100644 --- a/vizro-core/src/vizro/managers/_model_manager.py +++ b/vizro-core/src/vizro/managers/_model_manager.py @@ -3,7 +3,7 @@ import random import uuid -from typing import TYPE_CHECKING, Dict, Generator, Tuple, Type, TypeVar, cast, NewType +from typing import TYPE_CHECKING, Dict, Generator, NewType, Tuple, Type, TypeVar, cast from vizro.managers._managers_utils import _state_modifier diff --git a/vizro-core/src/vizro/models/_controls/filter.py b/vizro-core/src/vizro/models/_controls/filter.py index 73373f950..565a575d1 100644 --- a/vizro-core/src/vizro/models/_controls/filter.py +++ b/vizro-core/src/vizro/models/_controls/filter.py @@ -22,9 +22,8 @@ if TYPE_CHECKING: from vizro.models import Page - -from vizro.managers._model_manager import ModelID +from vizro.managers._model_manager import ModelID # TODO: Add temporal when relevant component is available SELECTOR_DEFAULTS = {"numerical": RangeSlider, "categorical": Dropdown} @@ -59,8 +58,8 @@ class Filter(VizroBaseModel): Args: type (Literal["filter"]): Defaults to `"filter"`. column (str): Column of `DataFrame` to filter. - targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components on - the page that use `column`. + targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components + on the page that use `column`. selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`. """ diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index f23f5eda9..10c3c8f94 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -5,7 +5,7 @@ import functools import inspect from copy import deepcopy -from typing import Any, Dict, List, Literal, NewType, Protocol, Union, runtime_checkable +from typing import Any, Dict, List, Literal, Protocol, Union, runtime_checkable from pydantic import Field, StrictBool from pydantic.fields import ModelField @@ -299,5 +299,3 @@ class OptionsDictType(TypedDict): ), ] """Permissible value types for page attribute. Values are displayed as default.""" - - From 652ab1771d1c5d0e8b5e52aef429395cb968ed20 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 10:54:46 +0200 Subject: [PATCH 033/121] Clean up table --- vizro-core/src/vizro/models/_components/table.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 5cc580b21..4e69139c0 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -18,9 +18,8 @@ class Table(VizroBaseModel): Args: type (Literal["table"]): Defaults to `"table"`. - table (CapturedCallable): React object to be displayed. - # actions (List[Action]): List of the Action objects, that allows to - # configure app interactions, triggered by affecting this component. + table (CapturedCallable): Table like object to be displayed. Current choices include: [`dash_table.DataTable`]. + actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`. """ type: Literal["table"] = "table" @@ -48,7 +47,7 @@ def process_component_data_frame(cls, table, values): # Extract dataframe from the captured function and put it into the data manager. dataset_name = str(id(data_frame)) - logger.debug("Adding data to data manager for Graph with id %s", values["id"]) + logger.debug("Adding data to data manager for Table with id %s", values["id"]) # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need # to duplicate it. Just log the exception for debugging purposes. try: @@ -59,7 +58,7 @@ def process_component_data_frame(cls, table, values): data_manager._add_component(values["id"], dataset_name) # No need to keep the data in the captured function any more so remove it to save memory. - # del table["data_frame"] + del table["data_frame"] return table # Convenience wrapper/syntactic sugar. @@ -69,7 +68,7 @@ def __call__(self, **kwargs): # Convenience wrapper/syntactic sugar. def __getitem__(self, arg_name: str): - # pydantic discriminated union validation seems to try Graph["type"], which throws an error unless we + # pydantic discriminated union validation seems to try Table["type"], which throws an error unless we # explicitly redirect it to the correct attribute. if arg_name == "type": return self.type From 322202b5ab1f11262774ce0db2a54c3abb0a35b2 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 10:57:47 +0200 Subject: [PATCH 034/121] Docstring --- vizro-core/src/vizro/models/_components/table.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 4e69139c0..55ca26564 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -18,7 +18,8 @@ class Table(VizroBaseModel): Args: type (Literal["table"]): Defaults to `"table"`. - table (CapturedCallable): Table like object to be displayed. Current choices include: [`dash_table.DataTable`]. + table (CapturedCallable): Table like object to be displayed. Current choices include: + [`dash_table.DataTable`](https://dash.plotly.com/datatable). actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`. """ From 2db779d1f952cdd4c60a96160d79bc233560dbb0 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 13:47:23 +0200 Subject: [PATCH 035/121] Enable datatable properly --- vizro-core/examples/default/app.py | 6 +++++- vizro-core/src/vizro/charts/tables/__init__.py | 4 ++++ vizro-core/src/vizro/charts/tables/dash_table.py | 14 ++++++++++++++ vizro-core/src/vizro/models/_components/table.py | 6 +++--- vizro-core/src/vizro/models/types.py | 5 +++++ 5 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 vizro-core/src/vizro/charts/tables/__init__.py create mode 100644 vizro-core/src/vizro/charts/tables/dash_table.py diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index cc705503d..a07b570f1 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -11,6 +11,7 @@ import vizro.plotly.express as px from vizro import Vizro from vizro.actions import filter_interaction +from vizro.charts.tables import dash_data_table from vizro.managers import data_manager from vizro.models.types import capture @@ -65,7 +66,7 @@ def AgGrid(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.Table(id="table2", table=table_dash(data_frame=data, style_header={"border": "1px solid green"})), + vm.Table(id="table2", table=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), vm.Graph( id="graph", figure=px.scatter( @@ -92,5 +93,8 @@ def AgGrid(data_frame=None): dashboard = vm.Dashboard(pages=[page_0]) if __name__ == "__main__": + # data_manager["table_data"] = retrieve_table_data + # data = retrieve_table_data() + # print(vm.Table(id="table2", table=dash_data_table(data, style_header={"border": "1px solid green"}))()) Vizro._user_assets_folder = os.path.abspath("../assets") Vizro().build(dashboard).run() diff --git a/vizro-core/src/vizro/charts/tables/__init__.py b/vizro-core/src/vizro/charts/tables/__init__.py new file mode 100644 index 000000000..0b529456d --- /dev/null +++ b/vizro-core/src/vizro/charts/tables/__init__.py @@ -0,0 +1,4 @@ +from vizro.charts.tables.dash_table import dash_data_table + +# Please keep alphabetically ordered +__all__ = ["dash_data_table"] \ No newline at end of file diff --git a/vizro-core/src/vizro/charts/tables/dash_table.py b/vizro-core/src/vizro/charts/tables/dash_table.py new file mode 100644 index 000000000..11e791659 --- /dev/null +++ b/vizro-core/src/vizro/charts/tables/dash_table.py @@ -0,0 +1,14 @@ +import pandas as pd +from dash import dash_table + + +from vizro.models.types import capture + +@capture("table") +def dash_data_table(data_frame: pd.DataFrame, **kwargs): + """Standard `dash_table.DataTable`.""" + kwargs.setdefault("columns",[{"name": i, "id": i} for i in data_frame.columns]) + return dash_table.DataTable( + data=data_frame.to_dict("records"), + **kwargs + ) \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 55ca26564..3d987399c 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -78,6 +78,6 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): data = data_manager._get_component_data(self.id) # type: ignore - additional_args = self.table._arguments.copy() - additional_args.pop("data_frame", None) - return html.Div(self.table._function(data_frame=data, **additional_args), id=self.id) + kwargs = self.table._arguments.copy() + kwargs.pop("data_frame", None) + return html.Div(self.table._function(data_frame=data, **kwargs), id=self.id) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 10c3c8f94..ca0a5a01b 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -43,6 +43,11 @@ def __init__(self, function, /, *args, **kwargs): """ self.__function = function self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) + # Below is required as otherwise kwargs provided to captured functions will sit under the key "kwargs" + kwargs_to_unfold = self.__bound_arguments.arguments.get("kwargs") + if kwargs_to_unfold: + self.__bound_arguments.arguments.update(kwargs_to_unfold) + del self.__bound_arguments.arguments["kwargs"] def __call__(self, **kwargs): """Run the `function` with the initial arguments overridden by **kwargs. From 6cc33bea685f128ccd6901817418c16bea6740d7 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 18 Oct 2023 13:49:45 +0200 Subject: [PATCH 036/121] Schema --- vizro-core/schemas/0.1.5.dev0.json | 1801 +++++++++++++++------------- 1 file changed, 938 insertions(+), 863 deletions(-) diff --git a/vizro-core/schemas/0.1.5.dev0.json b/vizro-core/schemas/0.1.5.dev0.json index 911a1f839..f14467474 100644 --- a/vizro-core/schemas/0.1.5.dev0.json +++ b/vizro-core/schemas/0.1.5.dev0.json @@ -1,894 +1,969 @@ { - "title": "Dashboard", - "description": "Vizro Dashboard to be used within [`Vizro`][vizro._vizro.Vizro.build].\n\nArgs:\n pages (List[Page]): See [`Page`][vizro.models.Page].\n theme (Literal[\"vizro_dark\", \"vizro_light\"]): Layout theme to be applied across dashboard.\n Defaults to `vizro_dark`.\n navigation (Optional[Navigation]): See [`Navigation`][vizro.models.Navigation]. Defaults to `None`.\n title (Optional[str]): Dashboard title to appear on every page on top left-side. Defaults to `None`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "pages": { - "title": "Pages", - "type": "array", - "items": { - "$ref": "#/definitions/Page" - } - }, - "theme": { - "title": "Theme", - "description": "Layout theme to be applied across dashboard. Defaults to `vizro_dark`", - "default": "vizro_dark", - "enum": ["vizro_dark", "vizro_light"], - "type": "string" - }, - "navigation": { - "$ref": "#/definitions/Navigation" - }, - "title": { - "title": "Title", - "description": "Dashboard title to appear on every page on top left-side.", - "type": "string" - } - }, - "required": ["pages"], - "additionalProperties": false, - "definitions": { - "Action": { - "title": "Action", - "description": "Action to be inserted into `actions` of relevant component.\n\nArgs:\n function (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n inputs (List[str]): Inputs in the form `.` passed to the action function.\n Defaults to `[]`.\n outputs (List[str]): Outputs in the form `.` changed by the action function.\n Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "inputs": { - "title": "Inputs", - "description": "Inputs in the form `.` passed to the action function.", - "default": [], - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", - "type": "array", - "items": { - "type": "string", - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" - } - }, - "outputs": { - "title": "Outputs", - "description": "Outputs in the form `.` changed by the action function.", - "default": [], - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", - "type": "array", - "items": { - "type": "string", - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" - } - } - }, - "additionalProperties": false - }, - "Button": { - "title": "Button", - "description": "Component provided to `Page` to trigger any defined `action` in `Page`.\n\nArgs:\n type (Literal[\"button\"]): Defaults to `\"button\"`.\n text (str): Text to be displayed on button. Defaults to `\"Click me!\"`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "button", - "enum": ["button"], - "type": "string" - }, - "text": { - "title": "Text", - "description": "Text to be displayed on button.", - "default": "Click me!", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "Card": { - "title": "Card", - "description": "Creates a card utilizing `dcc.Markdown` as title and text component.\n\nArgs:\n type (Literal[\"card\"]): Defaults to `\"card\"`.\n text (str): Markdown string to create card title/text that should adhere to the CommonMark Spec.\n href (Optional[str]): URL (relative or absolute) to navigate to. If not provided the Card serves as a text card\n only. Defaults to None.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "card", - "enum": ["card"], - "type": "string" - }, - "text": { - "title": "Text", - "description": "Markdown string to create card title/text that should adhere to the CommonMark Spec.", - "type": "string" - }, - "href": { - "title": "Href", - "description": "URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", - "type": "string" - } - }, - "required": ["text"], - "additionalProperties": false - }, - "Graph": { - "title": "Graph", - "description": "Wrapper for `dcc.Graph` to visualize charts in dashboard.\n\nArgs:\n type (Literal[\"graph\"]): Defaults to `\"graph\"`.\n figure (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "graph", - "enum": ["graph"], - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "Layout": { - "title": "Layout", - "description": "Grid specification to place chart/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", - "type": "object", - "properties": { + "title": "Dashboard", + "description": "Vizro Dashboard to be used within [`Vizro`][vizro._vizro.Vizro.build].\n\nArgs:\n pages (List[Page]): See [`Page`][vizro.models.Page].\n theme (Literal[\"vizro_dark\", \"vizro_light\"]): Layout theme to be applied across dashboard.\n Defaults to `vizro_dark`.\n navigation (Optional[Navigation]): See [`Navigation`][vizro.models.Navigation]. Defaults to `None`.\n title (Optional[str]): Dashboard title to appear on every page on top left-side. Defaults to `None`.", + "type": "object", + "properties": { "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" }, - "grid": { - "title": "Grid", - "description": "Grid specification to arrange components on screen.", - "type": "array", - "items": { + "pages": { + "title": "Pages", "type": "array", "items": { - "type": "integer" + "$ref": "#/definitions/Page" } - } - }, - "row_gap": { - "title": "Row Gap", - "description": "Gap between rows in px. Defaults to 12px.", - "default": "12px", - "pattern": "[0-9]+px", - "type": "string" - }, - "col_gap": { - "title": "Col Gap", - "description": "Gap between columns in px. Defaults to 12px.", - "default": "12px", - "pattern": "[0-9]+px", - "type": "string" - }, - "row_min_height": { - "title": "Row Min Height", - "description": "Minimum row height in px. Defaults to 0px.", - "default": "0px", - "pattern": "[0-9]+px", - "type": "string" - }, - "col_min_width": { - "title": "Col Min Width", - "description": "Minimum column width in px. Defaults to 0px.", - "default": "0px", - "pattern": "[0-9]+px", - "type": "string" - } - }, - "required": ["grid"], - "additionalProperties": false - }, - "OptionsDictType": { - "title": "OptionsDictType", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - } - }, - "required": ["label", "value"], - "additionalProperties": false - }, - "Checklist": { - "title": "Checklist", - "description": "Categorical multi-selector `Checklist` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"checklist\"]): Defaults to `\"checklist\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[MultiValueType]): See [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" }, - "type": { - "title": "Type", - "default": "checklist", - "enum": ["checklist"], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "Dropdown": { - "title": "Dropdown", - "description": "Categorical multi-selector `Dropdown` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"dropdown\"]): Defaults to `\"dropdown\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[Union[SingleValueType, MultiValueType]]): See\n [`SingleValueType`][vizro.models.types.SingleValueType] and\n [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n multi (bool): Whether to allow selection of multiple values. Defaults to `True`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "dropdown", - "enum": ["dropdown"], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] + "theme": { + "title": "Theme", + "description": "Layout theme to be applied across dashboard. Defaults to `vizro_dark`", + "default": "vizro_dark", + "enum": [ + "vizro_dark", + "vizro_light" + ], + "type": "string" }, - "multi": { - "title": "Multi", - "description": "Whether to allow selection of multiple values", - "default": true, - "type": "boolean" + "navigation": { + "$ref": "#/definitions/Navigation" }, "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } + "title": "Title", + "description": "Dashboard title to appear on every page on top left-side.", + "type": "string" } - }, - "additionalProperties": false }, - "RadioItems": { - "title": "RadioItems", - "description": "Categorical single-selector `RadioItems` to be provided to `Filter`.\n\nArgs:\n type (Literal[\"radio_items\"]): Defaults to `\"radio_items\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[SingleValueType]): See [`SingleValueType`][vizro.models.types.SingleValueType].\n Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "radio_items", - "enum": ["radio_items"], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } + "required": [ + "pages" + ], + "additionalProperties": false, + "definitions": { + "Action": { + "title": "Action", + "description": "Action to be inserted into `actions` of relevant component.\n\nArgs:\n function (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n inputs (List[str]): Inputs in the form `.` passed to the action function.\n Defaults to `[]`.\n outputs (List[str]): Outputs in the form `.` changed by the action function.\n Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "inputs": { + "title": "Inputs", + "description": "Inputs in the form `.` passed to the action function.", + "default": [], + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" + } + }, + "outputs": { + "title": "Outputs", + "description": "Outputs in the form `.` changed by the action function.", + "default": [], + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" + } + } }, - { - "type": "array", - "items": { - "type": "string" - } + "additionalProperties": false + }, + "Button": { + "title": "Button", + "description": "Component provided to `Page` to trigger any defined `action` in `Page`.\n\nArgs:\n type (Literal[\"button\"]): Defaults to `\"button\"`.\n text (str): Text to be displayed on button. Defaults to `\"Click me!\"`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "button", + "enum": [ + "button" + ], + "type": "string" + }, + "text": { + "title": "Text", + "description": "Text to be displayed on button.", + "default": "Click me!", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" + "additionalProperties": false + }, + "Card": { + "title": "Card", + "description": "Creates a card utilizing `dcc.Markdown` as title and text component.\n\nArgs:\n type (Literal[\"card\"]): Defaults to `\"card\"`.\n text (str): Markdown string to create card title/text that should adhere to the CommonMark Spec.\n href (Optional[str]): URL (relative or absolute) to navigate to. If not provided the Card serves as a text card\n only. Defaults to None.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "card", + "enum": [ + "card" + ], + "type": "string" + }, + "text": { + "title": "Text", + "description": "Markdown string to create card title/text that should adhere to the CommonMark Spec.", + "type": "string" + }, + "href": { + "title": "Href", + "description": "URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", + "type": "string" + } }, - { - "type": "number" + "required": [ + "text" + ], + "additionalProperties": false + }, + "Graph": { + "title": "Graph", + "description": "Wrapper for `dcc.Graph` to visualize charts in dashboard.\n\nArgs:\n type (Literal[\"graph\"]): Defaults to `\"graph\"`.\n figure (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "graph", + "enum": [ + "graph" + ], + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "type": "string" - } - ] - }, - "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "RangeSlider": { - "title": "RangeSlider", - "description": "Numeric multi-selector `RangeSlider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.RangeSlider`](https://dash.plotly.com/dash-core-components/rangeslider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[List[float]]): Default start and end value for slider. Must be 2 items. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "range_slider", - "enum": ["range_slider"], - "type": "string" - }, - "min": { - "title": "Min", - "description": "Start value for slider.", - "type": "number" - }, - "max": { - "title": "Max", - "description": "End value for slider.", - "type": "number" - }, - "step": { - "title": "Step", - "description": "Step-size for marks on slider.", - "type": "number" - }, - "marks": { - "title": "Marks", - "description": "Marks to be displayed on slider.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "value": { - "title": "Value", - "description": "Default start and end value for slider", - "minItems": 2, - "maxItems": 2, - "type": "array", - "items": { - "type": "number" - } - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "Slider": { - "title": "Slider", - "description": "Numeric single-selector `Slider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.Slider`](https://dash.plotly.com/dash-core-components/slider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[float]): Default value for slider. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "slider", - "enum": ["slider"], - "type": "string" - }, - "min": { - "title": "Min", - "description": "Start value for slider.", - "type": "number" - }, - "max": { - "title": "Max", - "description": "End value for slider.", - "type": "number" - }, - "step": { - "title": "Step", - "description": "Step-size for marks on slider.", - "type": "number" - }, - "marks": { - "title": "Marks", - "description": "Marks to be displayed on slider.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "value": { - "title": "Value", - "description": "Default value for slider.", - "type": "number" - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "additionalProperties": false - }, - "Filter": { - "title": "Filter", - "description": "Filter the data supplied to `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Filter(column=\"species\")))\n\nArgs:\n type (Literal[\"filter\"]): Defaults to `\"filter\"`.\n column (str): Column of `DataFrame` to filter.\n targets (List[str]): Target component to be affected by filter. If none are given then target all components on\n the page that use `column`.\n selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "filter", - "enum": ["filter"], - "type": "string" - }, - "column": { - "title": "Column", - "description": "Column of DataFrame to filter.", - "type": "string" - }, - "targets": { - "title": "Targets", - "description": "Target component to be affected by filter. If none are given then target all components on the page that use `column`.", - "default": [], - "type": "array", - "items": { - "type": "string" - } - }, - "selector": { - "title": "Selector", - "anyOf": [ - { - "$ref": "#/definitions/Checklist" + "additionalProperties": false + }, + "Table": { + "title": "Table", + "description": "Wrapper for table components to visualize in dashboard.\n\nArgs:\n type (Literal[\"table\"]): Defaults to `\"table\"`.\n table (CapturedCallable): Table like object to be displayed. Current choices include:\n [`dash_table.DataTable`](https://dash.plotly.com/datatable).\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "table", + "enum": [ + "table" + ], + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/Dropdown" + "additionalProperties": false + }, + "Layout": { + "title": "Layout", + "description": "Grid specification to place chart/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "grid": { + "title": "Grid", + "description": "Grid specification to arrange components on screen.", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "integer" + } + } + }, + "row_gap": { + "title": "Row Gap", + "description": "Gap between rows in px. Defaults to 12px.", + "default": "12px", + "pattern": "[0-9]+px", + "type": "string" + }, + "col_gap": { + "title": "Col Gap", + "description": "Gap between columns in px. Defaults to 12px.", + "default": "12px", + "pattern": "[0-9]+px", + "type": "string" + }, + "row_min_height": { + "title": "Row Min Height", + "description": "Minimum row height in px. Defaults to 0px.", + "default": "0px", + "pattern": "[0-9]+px", + "type": "string" + }, + "col_min_width": { + "title": "Col Min Width", + "description": "Minimum column width in px. Defaults to 0px.", + "default": "0px", + "pattern": "[0-9]+px", + "type": "string" + } }, - { - "$ref": "#/definitions/RadioItems" + "required": [ + "grid" + ], + "additionalProperties": false + }, + "OptionsDictType": { + "title": "OptionsDictType", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } }, - { - "$ref": "#/definitions/RangeSlider" + "required": [ + "label", + "value" + ], + "additionalProperties": false + }, + "Checklist": { + "title": "Checklist", + "description": "Categorical multi-selector `Checklist` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"checklist\"]): Defaults to `\"checklist\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[MultiValueType]): See [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "checklist", + "enum": [ + "checklist" + ], + "type": "string" + }, + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "title": { + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/Slider" - } - ] - } - }, - "required": ["column"], - "additionalProperties": false - }, - "Parameter": { - "title": "Parameter", - "description": "Alter the arguments supplied to any `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Parameter(\n >>> targets=[\"scatter.x\"], selector=Slider(min=0, max=1, default=0.8, title=\"Bubble opacity\"))))\n\nArgs:\n type (Literal[\"parameter\"]): Defaults to `\"parameter\"`.\n targets (List[str]): Targets in the form of `.`.\n selector (SelectorType): See [SelectorType][vizro.models.types.SelectorType]. Converts selector value\n `\"NONE\"` into `None` to allow optional parameters.\n\nRaises:\n ValueError: If targets are invalid and not of the form `.`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "parameter", - "enum": ["parameter"], - "type": "string" - }, - "targets": { - "title": "Targets", - "description": "Targets in the form of `.`.", - "type": "array", - "items": { - "type": "string" - } - }, - "selector": { - "title": "Selector", - "description": "Selectors to be used inside a control.", - "discriminator": { - "propertyName": "type", - "mapping": { - "checklist": "#/definitions/Checklist", - "dropdown": "#/definitions/Dropdown", - "radio_items": "#/definitions/RadioItems", - "range_slider": "#/definitions/RangeSlider", - "slider": "#/definitions/Slider" - } - }, - "oneOf": [ - { - "$ref": "#/definitions/Checklist" + "additionalProperties": false + }, + "Dropdown": { + "title": "Dropdown", + "description": "Categorical multi-selector `Dropdown` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"dropdown\"]): Defaults to `\"dropdown\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[Union[SingleValueType, MultiValueType]]): See\n [`SingleValueType`][vizro.models.types.SingleValueType] and\n [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n multi (bool): Whether to allow selection of multiple values. Defaults to `True`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "dropdown", + "enum": [ + "dropdown" + ], + "type": "string" + }, + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "multi": { + "title": "Multi", + "description": "Whether to allow selection of multiple values", + "default": true, + "type": "boolean" + }, + "title": { + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/Dropdown" + "additionalProperties": false + }, + "RadioItems": { + "title": "RadioItems", + "description": "Categorical single-selector `RadioItems` to be provided to `Filter`.\n\nArgs:\n type (Literal[\"radio_items\"]): Defaults to `\"radio_items\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[SingleValueType]): See [`SingleValueType`][vizro.models.types.SingleValueType].\n Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "radio_items", + "enum": [ + "radio_items" + ], + "type": "string" + }, + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "title": { + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/RadioItems" + "additionalProperties": false + }, + "RangeSlider": { + "title": "RangeSlider", + "description": "Numeric multi-selector `RangeSlider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.RangeSlider`](https://dash.plotly.com/dash-core-components/rangeslider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[List[float]]): Default start and end value for slider. Must be 2 items. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "range_slider", + "enum": [ + "range_slider" + ], + "type": "string" + }, + "min": { + "title": "Min", + "description": "Start value for slider.", + "type": "number" + }, + "max": { + "title": "Max", + "description": "End value for slider.", + "type": "number" + }, + "step": { + "title": "Step", + "description": "Step-size for marks on slider.", + "type": "number" + }, + "marks": { + "title": "Marks", + "description": "Marks to be displayed on slider.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "title": "Value", + "description": "Default start and end value for slider", + "minItems": 2, + "maxItems": 2, + "type": "array", + "items": { + "type": "number" + } + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/RangeSlider" + "additionalProperties": false + }, + "Slider": { + "title": "Slider", + "description": "Numeric single-selector `Slider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.Slider`](https://dash.plotly.com/dash-core-components/slider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[float]): Default value for slider. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "slider", + "enum": [ + "slider" + ], + "type": "string" + }, + "min": { + "title": "Min", + "description": "Start value for slider.", + "type": "number" + }, + "max": { + "title": "Max", + "description": "End value for slider.", + "type": "number" + }, + "step": { + "title": "Step", + "description": "Step-size for marks on slider.", + "type": "number" + }, + "marks": { + "title": "Marks", + "description": "Marks to be displayed on slider.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "title": "Value", + "description": "Default value for slider.", + "type": "number" + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - { - "$ref": "#/definitions/Slider" - } - ] - } - }, - "required": ["targets", "selector"], - "additionalProperties": false - }, - "ActionsChain": { - "title": "ActionsChain", - "description": "All models that are registered to the model manager should inherit from this class.\n\nArgs:\n id (Optional[str]): ID to identify model. Must be unique throughout the whole dashboard. Defaults to `None`.\n When no ID is chosen, ID will be automatically generated.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "trigger": { - "title": "Trigger", - "type": "array", - "items": [ - { - "title": "Component Id", - "type": "string" + "additionalProperties": false + }, + "Filter": { + "title": "Filter", + "description": "Filter the data supplied to `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Filter(column=\"species\")))\n\nArgs:\n type (Literal[\"filter\"]): Defaults to `\"filter\"`.\n column (str): Column of `DataFrame` to filter.\n targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components\n on the page that use `column`.\n selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "filter", + "enum": [ + "filter" + ], + "type": "string" + }, + "column": { + "title": "Column", + "description": "Column of DataFrame to filter.", + "type": "string" + }, + "targets": { + "title": "Targets", + "description": "Target component to be affected by filter. If none are given then target all components on the page that use `column`.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "selector": { + "title": "Selector", + "anyOf": [ + { + "$ref": "#/definitions/Checklist" + }, + { + "$ref": "#/definitions/Dropdown" + }, + { + "$ref": "#/definitions/RadioItems" + }, + { + "$ref": "#/definitions/RangeSlider" + }, + { + "$ref": "#/definitions/Slider" + } + ] + } }, - { - "title": "Component Property", - "type": "string" - } - ], - "minItems": 2, - "maxItems": 2 - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } - }, - "required": ["trigger"], - "additionalProperties": false - }, - "Page": { - "title": "Page", - "description": "A page in [`Dashboard`][vizro.models.Dashboard] with its own URL path and place in the `Navigation`.\n\nArgs:\n components (List[ComponentType]): See [ComponentType][vizro.models.types.ComponentType]. At least one component\n has to be provided.\n title (str): Title to be displayed.\n layout (Optional[Layout]): Layout to place components in. Defaults to `None`.\n controls (List[ControlType]): See [ControlType][vizro.models.types.ControlType]. Defaults to `[]`.\n path (Optional[str]): Path to navigate to page. Defaults to `None`.\n\nRaises:\n ValueError: If number of page and grid components is not the same", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "components": { - "title": "Components", - "type": "array", - "items": { - "discriminator": { - "propertyName": "type", - "mapping": { - "button": "#/definitions/Button", - "card": "#/definitions/Card", - "graph": "#/definitions/Graph" - } + "required": [ + "column" + ], + "additionalProperties": false + }, + "Parameter": { + "title": "Parameter", + "description": "Alter the arguments supplied to any `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Parameter(\n >>> targets=[\"scatter.x\"], selector=Slider(min=0, max=1, default=0.8, title=\"Bubble opacity\"))))\n\nArgs:\n type (Literal[\"parameter\"]): Defaults to `\"parameter\"`.\n targets (List[str]): Targets in the form of `.`.\n selector (SelectorType): See [SelectorType][vizro.models.types.SelectorType]. Converts selector value\n `\"NONE\"` into `None` to allow optional parameters.\n\nRaises:\n ValueError: If targets are invalid and not of the form `.`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "parameter", + "enum": [ + "parameter" + ], + "type": "string" + }, + "targets": { + "title": "Targets", + "description": "Targets in the form of `.`.", + "type": "array", + "items": { + "type": "string" + } + }, + "selector": { + "title": "Selector", + "description": "Selectors to be used inside a control.", + "discriminator": { + "propertyName": "type", + "mapping": { + "checklist": "#/definitions/Checklist", + "dropdown": "#/definitions/Dropdown", + "radio_items": "#/definitions/RadioItems", + "range_slider": "#/definitions/RangeSlider", + "slider": "#/definitions/Slider" + } + }, + "oneOf": [ + { + "$ref": "#/definitions/Checklist" + }, + { + "$ref": "#/definitions/Dropdown" + }, + { + "$ref": "#/definitions/RadioItems" + }, + { + "$ref": "#/definitions/RangeSlider" + }, + { + "$ref": "#/definitions/Slider" + } + ] + } }, - "oneOf": [ - { - "$ref": "#/definitions/Button" - }, - { - "$ref": "#/definitions/Card" - }, - { - "$ref": "#/definitions/Graph" - } - ] - } - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "layout": { - "$ref": "#/definitions/Layout" - }, - "controls": { - "title": "Controls", - "default": [], - "type": "array", - "items": { - "discriminator": { - "propertyName": "type", - "mapping": { - "filter": "#/definitions/Filter", - "parameter": "#/definitions/Parameter" - } + "required": [ + "targets", + "selector" + ], + "additionalProperties": false + }, + "ActionsChain": { + "title": "ActionsChain", + "description": "All models that are registered to the model manager should inherit from this class.\n\nArgs:\n id (Optional[str]): ID to identify model. Must be unique throughout the whole dashboard. Defaults to `None`.\n When no ID is chosen, ID will be automatically generated.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "trigger": { + "title": "Trigger", + "type": "array", + "items": [ + { + "title": "Component Id", + "type": "string" + }, + { + "title": "Component Property", + "type": "string" + } + ], + "minItems": 2, + "maxItems": 2 + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } }, - "oneOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "$ref": "#/definitions/Parameter" - } - ] - } - }, - "path": { - "title": "Path", - "description": "Path to navigate to page.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/ActionsChain" - } - } - }, - "required": ["components", "title"], - "additionalProperties": false - }, - "Navigation": { - "title": "Navigation", - "description": "Navigation in [`Dashboard`][vizro.models.Dashboard] to structure [`Pages`][vizro.models.Page].\n\nArgs:\n pages (Optional[NavigationPagesType]): See [NavigationPagesType][vizro.models.types.NavigationPagesType].\n Defaults to `None`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "pages": { - "title": "Pages", - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } + "required": [ + "trigger" + ], + "additionalProperties": false + }, + "Page": { + "title": "Page", + "description": "A page in [`Dashboard`][vizro.models.Dashboard] with its own URL path and place in the `Navigation`.\n\nArgs:\n components (List[ComponentType]): See [ComponentType][vizro.models.types.ComponentType]. At least one component\n has to be provided.\n title (str): Title to be displayed.\n layout (Optional[Layout]): Layout to place components in. Defaults to `None`.\n controls (List[ControlType]): See [ControlType][vizro.models.types.ControlType]. Defaults to `[]`.\n path (Optional[str]): Path to navigate to page. Defaults to `None`.\n\nRaises:\n ValueError: If number of page and grid components is not the same", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "components": { + "title": "Components", + "type": "array", + "items": { + "discriminator": { + "propertyName": "type", + "mapping": { + "button": "#/definitions/Button", + "card": "#/definitions/Card", + "graph": "#/definitions/Graph", + "table": "#/definitions/Table" + } + }, + "oneOf": [ + { + "$ref": "#/definitions/Button" + }, + { + "$ref": "#/definitions/Card" + }, + { + "$ref": "#/definitions/Graph" + }, + { + "$ref": "#/definitions/Table" + } + ] + } + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "layout": { + "$ref": "#/definitions/Layout" + }, + "controls": { + "title": "Controls", + "default": [], + "type": "array", + "items": { + "discriminator": { + "propertyName": "type", + "mapping": { + "filter": "#/definitions/Filter", + "parameter": "#/definitions/Parameter" + } + }, + "oneOf": [ + { + "$ref": "#/definitions/Filter" + }, + { + "$ref": "#/definitions/Parameter" + } + ] + } + }, + "path": { + "title": "Path", + "description": "Path to navigate to page.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/ActionsChain" + } + } }, - { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" + "required": [ + "components", + "title" + ], + "additionalProperties": false + }, + "Navigation": { + "title": "Navigation", + "description": "Navigation in [`Dashboard`][vizro.models.Dashboard] to structure [`Pages`][vizro.models.Page].\n\nArgs:\n pages (Optional[NavigationPagesType]): See [NavigationPagesType][vizro.models.types.NavigationPagesType].\n Defaults to `None`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "pages": { + "title": "Pages", + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] } - } - } - ] + }, + "additionalProperties": false } - }, - "additionalProperties": false } - } -} +} \ No newline at end of file From e5c6f0360ae3b7f7fa1f11fadef128688ae8ca41 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 18 Oct 2023 14:58:39 +0200 Subject: [PATCH 037/121] Filter interaction for tables PoC --- vizro-core/examples/default/app.py | 52 ++++---- .../_build_action_loop_callbacks.py | 13 +- .../src/vizro/actions/_actions_utils.py | 117 +++++++++++------- .../_callback_mapping_utils.py | 75 ++++------- .../src/vizro/models/_components/table.py | 27 +++- 5 files changed, 153 insertions(+), 131 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 9627146b1..a9c2d21f3 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -9,24 +9,23 @@ import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro +from vizro.actions import export_data, filter_interaction from vizro.managers import data_manager from vizro.models.types import capture -import vizro.plotly.express as px -from vizro.actions import filter_interaction, export_data def retrieve_table_data(): """Return data for table for testing.""" states = [ - "California", - "Arizona", - "Nevada", - "New Mexico", - "Colorado", - "Texas", - "North Carolina", - "New York", - ] + "California", + "Arizona", + "Nevada", + "New Mexico", + "Colorado", + "Texas", + "North Carolina", + "New York", + ] data = { "State": states + states[::-1], @@ -64,18 +63,14 @@ def table_go(data_frame=None, template=None): @capture("graph") -def table_dash(data_frame=None, style_header=None, **kwargs): +def table_dash(data_frame=None, style_header=None): """Custom table.""" return dash_table.DataTable( - - # PP: Don't know a better way how to insert the 'id' into datatable than manually. - id="datatable_id", - + id="dash_datatable_id", data=data_frame.to_dict("records"), columns=[{"name": i, "id": i} for i in data_frame.columns], style_header=style_header, - # page_size=6, - **kwargs + page_size=6, ) @@ -93,11 +88,12 @@ def markdown(data_frame=None): path="color-manager", components=[ vm.Table( - id="datatable_id", + id="table_id", figure=table_dash( - data_frame="table_data" + data_frame="table_data", + style_header={"border": "1px solid green"}, ), - actions=[vm.Action(function=filter_interaction(targets=["scatter_chart"]))] + actions=[vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart"]))], ), vm.Graph( id="scatter_chart", @@ -106,19 +102,19 @@ def markdown(data_frame=None): x="State", y="Number of Solar Plants", color="Number of Solar Plants", - custom_data=["State"] + custom_data=["State"], ), - actions=[vm.Action(function=filter_interaction(targets=["datatable_id"]))] + actions=[vm.Action(function=filter_interaction(targets=["table_id"]))], ), # vm.React(id="d3_bar", figure=d3_bar(data_frame="table_data")), - vm.Button( - id='export_data_button', - actions=[vm.Action(function=export_data())] - ) + vm.Button(id="export_data_button", actions=[vm.Action(function=export_data())]), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), - vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), + vm.Parameter( + targets=["table_id.style_header.border"], + selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), + ), ], ) dashboard = vm.Dashboard(pages=[page_0]) diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index df8cebf32..e85abe9d1 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -8,6 +8,7 @@ _get_actions_chains_on_registered_pages, _get_actions_on_registered_pages, ) +from vizro.managers import model_manager logger = logging.getLogger(__name__) @@ -22,12 +23,22 @@ def _build_action_loop_callbacks() -> None: gateway_inputs: List[Input] = [] for actions_chain in actions_chains: + actions_chain_trigger_component_id = actions_chain.trigger.component_id + try: + actions_chain_trigger_component = model_manager[actions_chain_trigger_component_id] + # Use underlying 'Datatable' object as a trigger component. + if actions_chain_trigger_component.type in ["table", "react"]: + actions_chain_trigger_component_id = actions_chain_trigger_component._datatable_id + # Not all action_chain_trigger_components are included in model_manager. eg on_page_load_action_trigger + except KeyError: + pass + # Callback that enables gateway callback to work in the multiple page app clientside_callback( ClientsideFunction(namespace="clientside", function_name="trigger_to_global_store"), Output({"type": "gateway_input", "trigger_id": actions_chain.id}, "data"), Input( - component_id=actions_chain.trigger.component_id, + component_id=actions_chain_trigger_component_id, component_property=actions_chain.trigger.component_property, ), State({"type": "gateway_input", "trigger_id": actions_chain.id}, "data"), diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index ebd5bdc34..6ea639960 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -36,14 +36,6 @@ def _get_component_actions(component) -> List[Action]: ) -def _validate_selector_value_NONE(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: - if value == NONE_OPTION: - return None - elif isinstance(value, list): - return [i for i in value if i != NONE_OPTION] or [None] # type: ignore[list-item, return-value] - return value - - def _apply_filters( data_frame: pd.DataFrame, ctds_filters: List[CallbackTriggerDict], @@ -66,55 +58,92 @@ def _apply_filters( return data_frame -def _apply_filter_interaction( - data_frame: pd.DataFrame, - ctds_filter_interaction: List[CallbackTriggerDict], - target: str, -) -> pd.DataFrame: - for ctd_key, ctd_value in ctds_filter_interaction.items(): - if 'clickData' in ctd_value: - ctd_click_data = ctd_value["clickData"] - if not ctd_click_data["value"]: - continue +def _apply_chart_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): + ctd_click_data = ctd_value["clickData"] + if not ctd_click_data["value"]: + return data_frame - source_chart_id = ctd_click_data["id"] - source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + source_chart_id = ctd_click_data["id"] + source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + try: + custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] + except KeyError as exc: + raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc - try: - custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] - except KeyError as exc: - raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc + customdata = ctd_click_data["value"]["points"][0]["customdata"] # type: ignore[call-overload] - customdata = ctd_click_data["value"]["points"][0]["customdata"] # type: ignore[call-overload] + for action in source_chart_actions: + if target not in action.function["targets"]: + continue + for custom_data_idx, column in enumerate(custom_data_columns): + data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] - for action in source_chart_actions: - if target not in action.function["targets"]: - continue + return data_frame - for custom_data_idx, column in enumerate(custom_data_columns): - data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] - if 'active_cell' in ctd_value and "derived_viewport_data" in ctd_value: - ctd_active_cell = ctd_value["active_cell"] - ctd_derived_viewport_data = ctd_value["derived_viewport_data"] - if not ctd_active_cell["value"] or not ctd_value["derived_viewport_data"]: - continue +def _get_parent_vizro_table(dash_datatable_id: str): + from vizro.models import Table - source_chart_id = ctd_active_cell["id"] - source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + for _, table in model_manager._items_with_type(Table): + if table._datatable_id == dash_datatable_id: + return table - for action in source_chart_actions: - if target not in action.function["targets"]: - continue - column = ctd_active_cell["value"]["column_id"] - derived_viewport_data_row = ctd_active_cell["value"]["row"] - clicked_data = ctd_derived_viewport_data["value"][derived_viewport_data_row][column] - data_frame = data_frame[data_frame[column].isin([clicked_data])] +def _apply_table_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): + ctd_active_cell = ctd_value["active_cell"] + ctd_derived_viewport_data = ctd_value["derived_viewport_data"] + if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: + return data_frame + + source_table_id = ctd_active_cell["id"] + try: + source_table_actions = _get_component_actions(model_manager[source_table_id]) + except KeyError: + # source_table_id is dash.Datatable id and we need to fetch actions from parent Vizro.Table component + source_table_actions = _get_component_actions(_get_parent_vizro_table(source_table_id)) + + for action in source_table_actions: + if target not in action.function["targets"]: + continue + column = ctd_active_cell["value"]["column_id"] + derived_viewport_data_row = ctd_active_cell["value"]["row"] + clicked_data = ctd_derived_viewport_data["value"][derived_viewport_data_row][column] + data_frame = data_frame[data_frame[column].isin([clicked_data])] return data_frame +def _apply_filter_interaction( + data_frame: pd.DataFrame, + ctds_filter_interaction: List[CallbackTriggerDict], + target: str, +) -> pd.DataFrame: + for ctd_key, ctd_value in ctds_filter_interaction.items(): + if "clickData" in ctd_value: + data_frame = _apply_chart_filter_interaction( + data_frame=data_frame, + target=target, + ctd_value=ctd_value, + ) + + if "active_cell" in ctd_value and "derived_viewport_data" in ctd_value: + data_frame = _apply_table_filter_interaction( + data_frame=data_frame, + target=target, + ctd_value=ctd_value, + ) + + return data_frame + + +def _validate_selector_value_NONE(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: + if value == NONE_OPTION: + return None + elif isinstance(value, list): + return [i for i in value if i != NONE_OPTION] or [None] # type: ignore[list-item, return-value] + return value + + def _create_target_arg_mapping(dot_separated_strings: List[str]) -> Dict[str, List[str]]: results = defaultdict(list) for string in dot_separated_strings: diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 74e01989f..c6b97860d 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -109,37 +109,26 @@ def _get_inputs_of_chart_interactions( for action in chart_interactions_on_page: triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) if triggered_model.type == "table" or triggered_model.type == "react": - states.update({ - action.id: { - "active_cell": State( - component_id=triggered_model.id, - component_property="active_cell" - ), - "derived_viewport_data": State( - component_id=triggered_model.id, - component_property="derived_viewport_data" - ) + states.update( + { + action.id: { + "active_cell": State( + component_id=triggered_model._datatable_id, component_property="active_cell" + ), + "derived_viewport_data": State( + component_id=triggered_model._datatable_id, component_property="derived_viewport_data" + ), + } } - }) - + ) else: - states.update({ - action.id: { - "clickData": State( - component_id=triggered_model.id, - component_property="clickData" - ), + states.update( + { + action.id: { + "clickData": State(component_id=triggered_model.id, component_property="clickData"), + } } - }) - - - # return [ - # State( - # component_id=_get_triggered_model(action_id=action.id).id, # type: ignore[arg-type] - # component_property="clickData", # LN: Needs to be refactored so plotly-independent or extendable - # ) - # for action in chart_interactions_on_page - # ] + ) return states @@ -188,31 +177,11 @@ def _get_action_callback_outputs(action_id: ModelID) -> Dict[str, Output]: if action_function == _on_page_load.__wrapped__: targets = _get_components_with_data(action_id=action_id) - outputs = {} - for target in targets: - if model_manager[target].type == "table" or model_manager[target].type == "react": - outputs.update({ - target: Output( - component_id=f"{target}_outer", - component_property="children", - allow_duplicate=True, - ) - }) - else: - outputs.update({ - target: Output( - component_id=target, - component_property="figure", - allow_duplicate=True, - ) - }) - return outputs - - # return { # LN: needs to be refactored so plotly-independent or extendable - DONE - # target: model_manager[target]._get_action_callback_output() - # for target in targets - # if hasattr(model_manager[target], "_get_action_callback_output") - # } + return { # LN: needs to be refactored so plotly-independent or extendable - DONE + target: model_manager[target]._get_action_callback_output() + for target in targets + if hasattr(model_manager[target], "_get_action_callback_output") + } def _get_export_data_callback_outputs(action_id: ModelID) -> Dict[str, List[State]]: diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index f042e9e69..fd2fb7e47 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -2,7 +2,7 @@ from typing import Callable, List, Literal from dash import Output, html -from pydantic import Field, validator +from pydantic import Field, PrivateAttr, validator from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel @@ -28,6 +28,8 @@ class Table(VizroBaseModel): figure: CapturedCallable = Field(..., description="Table to be visualized on dashboard") actions: List[Action] = [] + _datatable_id: str = PrivateAttr() + # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] @@ -72,15 +74,30 @@ def __getitem__(self, arg_name: str): return self.type return self.figure[arg_name] - @_log_call - def build(self): + def _build_datatable_object(self): data = data_manager._get_component_data(self.id) # type: ignore additional_args = self.figure._arguments.copy() additional_args.pop("data_frame", None) + return self.figure._function(data_frame=data, **additional_args) + + @_log_call + def pre_build(self): + if self.actions: + # The Datatable object is pre-built, so we can fetch its ID. + datatable_object = self._build_datatable_object() + + # Datatable object has to have "id" defined if it triggers actions chain. + if not hasattr(datatable_object, "id"): + raise ValueError( + "'DataTable' object has no attribute 'id'. To perform specified actions, a valid 'id' to the" + " 'Datatable' object has to be provided." + ) - datatable = self.figure._function(data_frame=data, **additional_args) + self._datatable_id = datatable_object.id - return html.Div(datatable, id=f"{self.id}_outer") + @_log_call + def build(self): + return html.Div(self._build_datatable_object(), id=self.id) def _get_action_callback_output(self): return Output( From 178559eec1260e2161b66714ae047425f710635c Mon Sep 17 00:00:00 2001 From: Antony Milne Date: Thu, 19 Oct 2023 09:21:40 +0100 Subject: [PATCH 038/121] Demo callable Card.text --- vizro-core/examples/default/app.py | 45 ++++++++++-------- .../src/vizro/actions/_actions_utils.py | 3 +- .../src/vizro/models/_components/card.py | 46 +++++++++++++++++-- 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index a07b570f1..3cb0df70a 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -62,32 +62,41 @@ def AgGrid(data_frame=None): data_manager["table_data"] = retrieve_table_data data = retrieve_table_data() +# ignore the fact the captured decorator has argument "table" +@capture("table") +def text(data_frame): + number_of_solar_plants = data_frame["Number of Solar Plants"] + return f"Total number of Solar Plants is {number_of_solar_plants.sum()}" + + + page_0 = vm.Page( title="Color manager", path="color-manager", components=[ vm.Table(id="table2", table=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), - vm.Graph( - id="graph", - figure=px.scatter( - data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] - ), - actions=[vm.Action(function=filter_interaction(targets=["hist"]))], - ), - vm.Graph( - id="hist", - figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), - ), + vm.Card(id="card", text=text(data_frame=data)), + # vm.Graph( + # id="graph", + # figure=px.scatter( + # data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] + # ), + # actions=[vm.Action(function=filter_interaction(targets=["hist"]))], + # ), + # vm.Graph( + # id="hist", + # figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), + # ), vm.Table(id="grid", table=AgGrid(data_frame="table_data")), ], controls=[ - vm.Filter(column="State", selector=vm.Dropdown()), - vm.Parameter( - targets=["table2.style_header.border"], - selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), - ), - vm.Filter(column="species", selector=vm.Dropdown()), - vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), + vm.Filter(column="State", selector=vm.Dropdown(), targets=["card", "table2", "grid"]), + # vm.Parameter( + # targets=["table2.style_header.border"], + # selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), + # ), + # vm.Filter(column="species", selector=vm.Dropdown()), + # vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), ], ) dashboard = vm.Dashboard(pages=[page_0]) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index bee9c34fc..cf3370af4 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -123,7 +123,8 @@ def _get_parametrized_config( graph_config = ( deepcopy(model_manager[target].figure._arguments) # type: ignore[attr-defined] if hasattr(model_manager[target], "figure") - else deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] + else (deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] + if hasattr(model_manager[target], "table") else deepcopy(model_manager[target].text._arguments)) ) if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/card.py b/vizro-core/src/vizro/models/_components/card.py index 3933406b6..b41f6a2ee 100644 --- a/vizro-core/src/vizro/models/_components/card.py +++ b/vizro-core/src/vizro/models/_components/card.py @@ -1,11 +1,16 @@ +import logging from typing import Literal, Optional import dash_bootstrap_components as dbc from dash import dcc, get_relative_path, html -from pydantic import Field +from pydantic import Field, PrivateAttr, validator +from vizro.managers import data_manager from vizro.models import VizroBaseModel from vizro.models._models_utils import _log_call +from vizro.models.types import CapturedCallable + +logger = logging.getLogger(__name__) class Card(VizroBaseModel): @@ -19,7 +24,7 @@ class Card(VizroBaseModel): """ type: Literal["card"] = "card" - text: str = Field( + text: CapturedCallable = Field( ..., description="Markdown string to create card title/text that should adhere to the CommonMark Spec." ) href: Optional[str] = Field( @@ -27,9 +32,44 @@ class Card(VizroBaseModel): description="URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", ) + _output_property = PrivateAttr("children") + + def __call__(self, **kwargs): + kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] + return self.text(**kwargs) + + @validator("text") + def process_component_data_frame(cls, text, values): + data_frame = text["data_frame"] + + # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. + # In these cases, data already exists in the data manager and just needs to be linked to the component. + if isinstance(data_frame, str): + data_manager._add_component(values["id"], data_frame) + return text + + # Standard case for df: pd.DataFrame. + # Extract dataframe from the captured function and put it into the data manager. + dataset_name = str(id(data_frame)) + + logger.debug("Adding data to data manager for text with id %s", values["id"]) + # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need + # to duplicate it. Just log the exception for debugging purposes. + try: + data_manager[dataset_name] = data_frame + except ValueError as exc: + logger.debug(exc) + + data_manager._add_component(values["id"], dataset_name) + + # No need to keep the data in the captured function any more so remove it to save memory. + del text["data_frame"] + return text + @_log_call def build(self): - text = dcc.Markdown(self.text, className="card_text", dangerously_allow_html=False, id=self.id) + text = dcc.Markdown(self(), className="card_text", + dangerously_allow_html=False, id=self.id) button = ( html.Div( dbc.Button( From 81879ebd5493d20f14fdb3350df0208fc5411b82 Mon Sep 17 00:00:00 2001 From: Antony Milne Date: Thu, 19 Oct 2023 09:22:01 +0100 Subject: [PATCH 039/121] Revert "Demo callable Card.text" This reverts commit 178559eec1260e2161b66714ae047425f710635c. --- vizro-core/examples/default/app.py | 45 ++++++++---------- .../src/vizro/actions/_actions_utils.py | 3 +- .../src/vizro/models/_components/card.py | 46 ++----------------- 3 files changed, 22 insertions(+), 72 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 3cb0df70a..a07b570f1 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -62,41 +62,32 @@ def AgGrid(data_frame=None): data_manager["table_data"] = retrieve_table_data data = retrieve_table_data() -# ignore the fact the captured decorator has argument "table" -@capture("table") -def text(data_frame): - number_of_solar_plants = data_frame["Number of Solar Plants"] - return f"Total number of Solar Plants is {number_of_solar_plants.sum()}" - - - page_0 = vm.Page( title="Color manager", path="color-manager", components=[ vm.Table(id="table2", table=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), - vm.Card(id="card", text=text(data_frame=data)), - # vm.Graph( - # id="graph", - # figure=px.scatter( - # data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] - # ), - # actions=[vm.Action(function=filter_interaction(targets=["hist"]))], - # ), - # vm.Graph( - # id="hist", - # figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), - # ), + vm.Graph( + id="graph", + figure=px.scatter( + data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] + ), + actions=[vm.Action(function=filter_interaction(targets=["hist"]))], + ), + vm.Graph( + id="hist", + figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), + ), vm.Table(id="grid", table=AgGrid(data_frame="table_data")), ], controls=[ - vm.Filter(column="State", selector=vm.Dropdown(), targets=["card", "table2", "grid"]), - # vm.Parameter( - # targets=["table2.style_header.border"], - # selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), - # ), - # vm.Filter(column="species", selector=vm.Dropdown()), - # vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), + vm.Filter(column="State", selector=vm.Dropdown()), + vm.Parameter( + targets=["table2.style_header.border"], + selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), + ), + vm.Filter(column="species", selector=vm.Dropdown()), + vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), ], ) dashboard = vm.Dashboard(pages=[page_0]) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index cf3370af4..bee9c34fc 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -123,8 +123,7 @@ def _get_parametrized_config( graph_config = ( deepcopy(model_manager[target].figure._arguments) # type: ignore[attr-defined] if hasattr(model_manager[target], "figure") - else (deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] - if hasattr(model_manager[target], "table") else deepcopy(model_manager[target].text._arguments)) + else deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] ) if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/card.py b/vizro-core/src/vizro/models/_components/card.py index b41f6a2ee..3933406b6 100644 --- a/vizro-core/src/vizro/models/_components/card.py +++ b/vizro-core/src/vizro/models/_components/card.py @@ -1,16 +1,11 @@ -import logging from typing import Literal, Optional import dash_bootstrap_components as dbc from dash import dcc, get_relative_path, html -from pydantic import Field, PrivateAttr, validator +from pydantic import Field -from vizro.managers import data_manager from vizro.models import VizroBaseModel from vizro.models._models_utils import _log_call -from vizro.models.types import CapturedCallable - -logger = logging.getLogger(__name__) class Card(VizroBaseModel): @@ -24,7 +19,7 @@ class Card(VizroBaseModel): """ type: Literal["card"] = "card" - text: CapturedCallable = Field( + text: str = Field( ..., description="Markdown string to create card title/text that should adhere to the CommonMark Spec." ) href: Optional[str] = Field( @@ -32,44 +27,9 @@ class Card(VizroBaseModel): description="URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", ) - _output_property = PrivateAttr("children") - - def __call__(self, **kwargs): - kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] - return self.text(**kwargs) - - @validator("text") - def process_component_data_frame(cls, text, values): - data_frame = text["data_frame"] - - # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. - # In these cases, data already exists in the data manager and just needs to be linked to the component. - if isinstance(data_frame, str): - data_manager._add_component(values["id"], data_frame) - return text - - # Standard case for df: pd.DataFrame. - # Extract dataframe from the captured function and put it into the data manager. - dataset_name = str(id(data_frame)) - - logger.debug("Adding data to data manager for text with id %s", values["id"]) - # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need - # to duplicate it. Just log the exception for debugging purposes. - try: - data_manager[dataset_name] = data_frame - except ValueError as exc: - logger.debug(exc) - - data_manager._add_component(values["id"], dataset_name) - - # No need to keep the data in the captured function any more so remove it to save memory. - del text["data_frame"] - return text - @_log_call def build(self): - text = dcc.Markdown(self(), className="card_text", - dangerously_allow_html=False, id=self.id) + text = dcc.Markdown(self.text, className="card_text", dangerously_allow_html=False, id=self.id) button = ( html.Div( dbc.Button( From 0f931fb5a88194184bfc822a88d34b07f3138624 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 14:13:46 +0200 Subject: [PATCH 040/121] Improve table build --- .pre-commit-config.yaml | 2 +- vizro-core/src/vizro/models/_components/table.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ab1bf786a..1c266ab55 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -41,7 +41,7 @@ repos: args: [--autofix] - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: v0.0.261 #TODO: upgrade to latest version + rev: v0.0.261 hooks: - id: ruff args: [--fix, --exit-non-zero-on-fix] diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 3d987399c..da39da778 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -2,6 +2,8 @@ from typing import List, Literal from dash import html +from dash import Dash, dash_table +import pandas as pd from pydantic import Field, PrivateAttr, validator from vizro.managers import data_manager @@ -24,7 +26,7 @@ class Table(VizroBaseModel): """ type: Literal["table"] = "table" - table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") + table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") #ADD import path actions: List[Action] = [] # Component properties for actions and interactions @@ -77,7 +79,4 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - data = data_manager._get_component_data(self.id) # type: ignore - kwargs = self.table._arguments.copy() - kwargs.pop("data_frame", None) - return html.Div(self.table._function(data_frame=data, **kwargs), id=self.id) + return html.Div(dash_table.DataTable(pd.DataFrame().to_dict('records'), []), id=self.id) From 96741c1822f3c1e9a9c3c1ca51c3665fd6f87f1a Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 14:48:50 +0200 Subject: [PATCH 041/121] Showcase bound_arguments interference with kwargs --- vizro-core/src/vizro/models/types.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index ca0a5a01b..44c569173 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -42,12 +42,12 @@ def __init__(self, function, /, *args, **kwargs): Partially binds *args and **kwargs to the function call. """ self.__function = function - self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) + self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) # this adds # Below is required as otherwise kwargs provided to captured functions will sit under the key "kwargs" kwargs_to_unfold = self.__bound_arguments.arguments.get("kwargs") - if kwargs_to_unfold: - self.__bound_arguments.arguments.update(kwargs_to_unfold) - del self.__bound_arguments.arguments["kwargs"] + # if kwargs_to_unfold: + # self.__bound_arguments.arguments.update(kwargs_to_unfold) + # del self.__bound_arguments.arguments["kwargs"] def __call__(self, **kwargs): """Run the `function` with the initial arguments overridden by **kwargs. @@ -304,3 +304,19 @@ class OptionsDictType(TypedDict): ), ] """Permissible value types for page attribute. Values are displayed as default.""" + +if __name__ == "__main__": + from vizro.charts.tables import dash_data_table + from vizro.managers import data_manager + from vizro.models.types import capture + import vizro.plotly.express as px + import vizro.models as vm + print("hello") + # bar = dash_data_table(data_frame=px.data.iris(), style_header={"border": "1px solid green"}) + # foo = vm.Table(id="table2", table=dash_data_table(data_frame=px.data.iris(), style_header={"border": "1px solid green"})) + @capture("table") + def test(data_frame, a,**kwargs): + pass + + foo = test(data_frame=px.data.iris(),a=1,b=3) + print(foo._arguments) \ No newline at end of file From b4b4e6b92fdc156aee52ec67596b32c26ab660b3 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 14:49:04 +0200 Subject: [PATCH 042/121] Warning to table fix --- vizro-core/src/vizro/models/_components/table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index da39da778..ec9d40dda 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -79,4 +79,4 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - return html.Div(dash_table.DataTable(pd.DataFrame().to_dict('records'), []), id=self.id) + return html.Div(dash_table.DataTable(pd.DataFrame().to_dict('records'), []), id=self.id) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS From 2a5db2b3d9d320f14f8fdb3df726650a0d04b163 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 14:58:32 +0200 Subject: [PATCH 043/121] Explanation for kwargs behaviour --- vizro-core/src/vizro/models/types.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 44c569173..a07b5ce36 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -306,17 +306,24 @@ class OptionsDictType(TypedDict): """Permissible value types for page attribute. Values are displayed as default.""" if __name__ == "__main__": - from vizro.charts.tables import dash_data_table - from vizro.managers import data_manager from vizro.models.types import capture import vizro.plotly.express as px - import vizro.models as vm - print("hello") - # bar = dash_data_table(data_frame=px.data.iris(), style_header={"border": "1px solid green"}) - # foo = vm.Table(id="table2", table=dash_data_table(data_frame=px.data.iris(), style_header={"border": "1px solid green"})) + + # Define test function and capture via decorator, important, allow **kwargs @capture("table") def test(data_frame, a,**kwargs): - pass - + print("Kwargs are: ",kwargs) + return kwargs + foo = test(data_frame=px.data.iris(),a=1,b=3) - print(foo._arguments) \ No newline at end of file + foo() + + # Obtain signature + sig = inspect.signature(test) + print(sig) + + # Create variable mapping (simulating what happens via *args,**kwargs inside the capture decorator) + ba = sig.bind_partial(data_frame=px.data.iris(),a=1,b=3) + + # Note that b=3 gets added under .arguments as kwargs + print(ba.arguments) \ No newline at end of file From 997bed4baca533562d7b242da371a18e72da830e Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 14:59:02 +0200 Subject: [PATCH 044/121] Fixing decorator again --- vizro-core/src/vizro/models/types.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index a07b5ce36..909b041de 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -45,9 +45,9 @@ def __init__(self, function, /, *args, **kwargs): self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) # this adds # Below is required as otherwise kwargs provided to captured functions will sit under the key "kwargs" kwargs_to_unfold = self.__bound_arguments.arguments.get("kwargs") - # if kwargs_to_unfold: - # self.__bound_arguments.arguments.update(kwargs_to_unfold) - # del self.__bound_arguments.arguments["kwargs"] + if kwargs_to_unfold: + self.__bound_arguments.arguments.update(kwargs_to_unfold) + del self.__bound_arguments.arguments["kwargs"] def __call__(self, **kwargs): """Run the `function` with the initial arguments overridden by **kwargs. From 7b6dadcc9f1f7862e6618060440bad6fed05c62a Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 15:02:26 +0200 Subject: [PATCH 045/121] Delete metadata --- vizro-core/pyproject.toml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index 709ab8547..e462c0437 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -63,7 +63,4 @@ skip_covered = true [tool.coverage.run] branch = true parallel = true -source_pkgs = ["vizro"] - -[tool.hatch.metadata] -allow-direct-references = true +source_pkgs = ["vizro"] \ No newline at end of file From 4ca792ae708eb2bc3cd0ad68efde92b5f26d7f2a Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Thu, 19 Oct 2023 22:29:08 +0200 Subject: [PATCH 046/121] add unit test for erronous binding behaviour --- vizro-core/tests/unit/vizro/models/test_types.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vizro-core/tests/unit/vizro/models/test_types.py b/vizro-core/tests/unit/vizro/models/test_types.py index 455c0e9ed..d599c699c 100644 --- a/vizro-core/tests/unit/vizro/models/test_types.py +++ b/vizro-core/tests/unit/vizro/models/test_types.py @@ -64,6 +64,17 @@ def test_varkwargs(varkwargs_function): varkwargs_function(c=3, d=4) == 1 + 2 + 3 +@pytest.fixture +def varkwargs_function2(): + def function(a, b=2, **kwargs): + return a + b + kwargs["c"] + + return CapturedCallable(function, 1, c=3) # Note c=3 is given here unlike in varkwargs_function + +def test_varkwargs2(varkwargs_function2): + varkwargs_function2(d=4) == 1 + 2 + 3 + + @pytest.fixture def simple_function(): def function(a, b, c, d=4): From 809a8835bf197f7242adb218cf836ae2c5d358bf Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 10:28:07 +0200 Subject: [PATCH 047/121] Add callable component private attribute --- vizro-core/src/vizro/actions/_actions_utils.py | 4 +--- vizro-core/src/vizro/models/_components/graph.py | 5 +++++ vizro-core/src/vizro/models/_components/table.py | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index bee9c34fc..49b64666d 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -121,9 +121,7 @@ def _get_parametrized_config( # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. graph_config = ( - deepcopy(model_manager[target].figure._arguments) # type: ignore[attr-defined] - if hasattr(model_manager[target], "figure") - else deepcopy(model_manager[target].table._arguments) # type: ignore[attr-defined] + deepcopy(model_manager[target]._callable_component._arguments) # type: ignore[attr-defined] ) if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 637f53b04..6c7fac80b 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -46,6 +46,7 @@ class Graph(VizroBaseModel): # Component properties for actions and interactions _input_property: str = PrivateAttr("clickData") _output_property: str = PrivateAttr("figure") + _callable_component: CapturedCallable = PrivateAttr() # Re-used validators _set_actions = _action_validator_factory("clickData") @@ -101,6 +102,7 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): self._update_graph_theme() + self._set_callable_component() return dcc.Loading( dcc.Graph( id=self.id, @@ -130,3 +132,6 @@ def update_graph_theme(theme_selector_on: bool): patched_figure = Patch() patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light return patched_figure + + def _set_callable_component(self): + self._callable_component = self.figure \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index ec9d40dda..e36bad93a 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -32,6 +32,7 @@ class Table(VizroBaseModel): # Component properties for actions and interactions _input_property: str = PrivateAttr("active_cell") _output_property: str = PrivateAttr("children") + _callable_component: CapturedCallable = PrivateAttr() # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] @@ -79,4 +80,8 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): + self._set_callable_component() return html.Div(dash_table.DataTable(pd.DataFrame().to_dict('records'), []), id=self.id) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS + + def _set_callable_component(self): + self._callable_component = self.table \ No newline at end of file From 95e4d16181d27130a1cf2274befb21adc3163617 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 11:28:00 +0200 Subject: [PATCH 048/121] Add reusable validator --- vizro-core/pyproject.toml | 2 +- .../src/vizro/actions/_actions_utils.py | 4 +- .../src/vizro/charts/tables/__init__.py | 2 +- .../src/vizro/charts/tables/dash_table.py | 9 ++-- .../models/_components/_components_utils.py | 33 +++++++++++++++ .../src/vizro/models/_components/graph.py | 32 ++------------- .../src/vizro/models/_components/table.py | 41 ++++--------------- vizro-core/src/vizro/models/types.py | 20 ++++----- 8 files changed, 60 insertions(+), 83 deletions(-) create mode 100644 vizro-core/src/vizro/models/_components/_components_utils.py diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index e462c0437..3964a7f21 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -63,4 +63,4 @@ skip_covered = true [tool.coverage.run] branch = true parallel = true -source_pkgs = ["vizro"] \ No newline at end of file +source_pkgs = ["vizro"] diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 49b64666d..c80784bc6 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -120,9 +120,7 @@ def _get_parametrized_config( for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. - graph_config = ( - deepcopy(model_manager[target]._callable_component._arguments) # type: ignore[attr-defined] - ) + graph_config = deepcopy(model_manager[target]._callable_component._arguments) # type: ignore[attr-defined] if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/charts/tables/__init__.py b/vizro-core/src/vizro/charts/tables/__init__.py index 0b529456d..bd9b32de2 100644 --- a/vizro-core/src/vizro/charts/tables/__init__.py +++ b/vizro-core/src/vizro/charts/tables/__init__.py @@ -1,4 +1,4 @@ from vizro.charts.tables.dash_table import dash_data_table # Please keep alphabetically ordered -__all__ = ["dash_data_table"] \ No newline at end of file +__all__ = ["dash_data_table"] diff --git a/vizro-core/src/vizro/charts/tables/dash_table.py b/vizro-core/src/vizro/charts/tables/dash_table.py index 11e791659..197e19559 100644 --- a/vizro-core/src/vizro/charts/tables/dash_table.py +++ b/vizro-core/src/vizro/charts/tables/dash_table.py @@ -1,14 +1,11 @@ import pandas as pd from dash import dash_table - from vizro.models.types import capture + @capture("table") def dash_data_table(data_frame: pd.DataFrame, **kwargs): """Standard `dash_table.DataTable`.""" - kwargs.setdefault("columns",[{"name": i, "id": i} for i in data_frame.columns]) - return dash_table.DataTable( - data=data_frame.to_dict("records"), - **kwargs - ) \ No newline at end of file + kwargs.setdefault("columns", [{"name": i, "id": i} for i in data_frame.columns]) + return dash_table.DataTable(data=data_frame.to_dict("records"), **kwargs) diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py new file mode 100644 index 000000000..0200c214f --- /dev/null +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -0,0 +1,33 @@ +import logging + +from vizro.managers import data_manager + +logger = logging.getLogger(__name__) + +# Validator for re-use in other models to validate pages +def _process_callable_data_frame(captured_callable, values): + data_frame = captured_callable["data_frame"] + + # Enable running px.scatter("iris") from the Python API and specification of "data_frame": "iris" through JSON. + # In these cases, data already exists in the data manager and just needs to be linked to the component. + if isinstance(data_frame, str): + data_manager._add_component(values["id"], data_frame) + return captured_callable + + # Standard case for px.scatter(df: pd.DataFrame). + # Extract dataframe from the captured function and put it into the data manager. + dataset_name = str(id(data_frame)) + + logger.debug("Adding data to data manager for Graph with id %s", values["id"]) + # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need + # to duplicate it. Just log the exception for debugging purposes. + try: + data_manager[dataset_name] = data_frame + except ValueError as exc: + logger.debug(exc) + + data_manager._add_component(values["id"], dataset_name) + + # No need to keep the data in the captured function any more so remove it to save memory. + del captured_callable["data_frame"] + return captured_callable \ No newline at end of file diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 6c7fac80b..56a0beaf7 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -10,6 +10,7 @@ from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory +from vizro.models._components._components_utils import _process_callable_data_frame from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable @@ -50,34 +51,7 @@ class Graph(VizroBaseModel): # Re-used validators _set_actions = _action_validator_factory("clickData") - - @validator("figure") - def process_figure_data_frame(cls, figure, values): - data_frame = figure["data_frame"] - - # Enable running px.scatter("iris") from the Python API and specification of "data_frame": "iris" through JSON. - # In these cases, data already exists in the data manager and just needs to be linked to the component. - if isinstance(data_frame, str): - data_manager._add_component(values["id"], data_frame) - return figure - - # Standard case for px.scatter(df: pd.DataFrame). - # Extract dataframe from the captured function and put it into the data manager. - dataset_name = str(id(data_frame)) - - logger.debug("Adding data to data manager for Graph with id %s", values["id"]) - # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need - # to duplicate it. Just log the exception for debugging purposes. - try: - data_manager[dataset_name] = data_frame - except ValueError as exc: - logger.debug(exc) - - data_manager._add_component(values["id"], dataset_name) - - # No need to keep the data in the captured function any more so remove it to save memory. - del figure["data_frame"] - return figure + _validate_callable = validator("figure", allow_reuse=True, always=True)(_process_callable_data_frame) # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): @@ -134,4 +108,4 @@ def update_graph_theme(theme_selector_on: bool): return patched_figure def _set_callable_component(self): - self._callable_component = self.figure \ No newline at end of file + self._callable_component = self.figure diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index e36bad93a..a79b26bb9 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -1,14 +1,14 @@ import logging from typing import List, Literal -from dash import html -from dash import Dash, dash_table import pandas as pd +from dash import dash_table, html from pydantic import Field, PrivateAttr, validator from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory +from vizro.models._components._components_utils import _process_callable_data_frame from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable @@ -26,7 +26,7 @@ class Table(VizroBaseModel): """ type: Literal["table"] = "table" - table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") #ADD import path + table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") # ADD import path actions: List[Action] = [] # Component properties for actions and interactions @@ -36,34 +36,7 @@ class Table(VizroBaseModel): # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] - - @validator("table") - def process_component_data_frame(cls, table, values): - data_frame = table["data_frame"] - - # Enable running "iris" from the Python API and specification of "data_frame": "iris" through JSON. - # In these cases, data already exists in the data manager and just needs to be linked to the component. - if isinstance(data_frame, str): - data_manager._add_component(values["id"], data_frame) - return table - - # Standard case for df: pd.DataFrame. - # Extract dataframe from the captured function and put it into the data manager. - dataset_name = str(id(data_frame)) - - logger.debug("Adding data to data manager for Table with id %s", values["id"]) - # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need - # to duplicate it. Just log the exception for debugging purposes. - try: - data_manager[dataset_name] = data_frame - except ValueError as exc: - logger.debug(exc) - - data_manager._add_component(values["id"], dataset_name) - - # No need to keep the data in the captured function any more so remove it to save memory. - del table["data_frame"] - return table + _validate_callable = validator("table", allow_reuse=True, always=True)(_process_callable_data_frame) # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): @@ -81,7 +54,9 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): self._set_callable_component() - return html.Div(dash_table.DataTable(pd.DataFrame().to_dict('records'), []), id=self.id) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS + return html.Div( + dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id + ) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS def _set_callable_component(self): - self._callable_component = self.table \ No newline at end of file + self._callable_component = self.table diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 909b041de..bd84b2cac 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -42,7 +42,7 @@ def __init__(self, function, /, *args, **kwargs): Partially binds *args and **kwargs to the function call. """ self.__function = function - self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) # this adds + self.__bound_arguments = inspect.signature(function).bind_partial(*args, **kwargs) # Below is required as otherwise kwargs provided to captured functions will sit under the key "kwargs" kwargs_to_unfold = self.__bound_arguments.arguments.get("kwargs") if kwargs_to_unfold: @@ -306,24 +306,24 @@ class OptionsDictType(TypedDict): """Permissible value types for page attribute. Values are displayed as default.""" if __name__ == "__main__": - from vizro.models.types import capture import vizro.plotly.express as px - + from vizro.models.types import capture + # Define test function and capture via decorator, important, allow **kwargs @capture("table") - def test(data_frame, a,**kwargs): - print("Kwargs are: ",kwargs) + def test(data_frame, a, **kwargs): + print("Kwargs are: ", kwargs) return kwargs - foo = test(data_frame=px.data.iris(),a=1,b=3) + foo = test(data_frame=px.data.iris(), a=1, b=3) foo() # Obtain signature sig = inspect.signature(test) print(sig) - + # Create variable mapping (simulating what happens via *args,**kwargs inside the capture decorator) - ba = sig.bind_partial(data_frame=px.data.iris(),a=1,b=3) - + ba = sig.bind_partial(data_frame=px.data.iris(), a=1, b=3) + # Note that b=3 gets added under .arguments as kwargs - print(ba.arguments) \ No newline at end of file + print(ba.arguments) From 846b346896d7af85cb4f02cbd196fbe2b41412dd Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 11:33:52 +0200 Subject: [PATCH 049/121] Add unit test to check on arguments --- .../src/vizro/models/_components/_components_utils.py | 2 +- vizro-core/tests/unit/vizro/models/test_types.py | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 0200c214f..65c7cd20d 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -30,4 +30,4 @@ def _process_callable_data_frame(captured_callable, values): # No need to keep the data in the captured function any more so remove it to save memory. del captured_callable["data_frame"] - return captured_callable \ No newline at end of file + return captured_callable diff --git a/vizro-core/tests/unit/vizro/models/test_types.py b/vizro-core/tests/unit/vizro/models/test_types.py index d599c699c..2e5cfce1c 100644 --- a/vizro-core/tests/unit/vizro/models/test_types.py +++ b/vizro-core/tests/unit/vizro/models/test_types.py @@ -69,12 +69,17 @@ def varkwargs_function2(): def function(a, b=2, **kwargs): return a + b + kwargs["c"] - return CapturedCallable(function, 1, c=3) # Note c=3 is given here unlike in varkwargs_function + return CapturedCallable(function, 1, c=3) # Note c=3 is given here unlike in varkwargs_function + def test_varkwargs2(varkwargs_function2): varkwargs_function2(d=4) == 1 + 2 + 3 +def test_varkwargs_argument_attribute(varkwargs_function2): + assert varkwargs_function2._arguments == {"a": 1, "c": 3} + + @pytest.fixture def simple_function(): def function(a, b, c, d=4): From f2d4db4022cf23b6b5543bd954eba7f63e759245 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 12:55:07 +0200 Subject: [PATCH 050/121] Move theme switch back to page --- .../models/_components/_components_utils.py | 1 + .../src/vizro/models/_components/graph.py | 15 +------------ vizro-core/src/vizro/models/_page.py | 22 ++++++++++++++++++- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 65c7cd20d..644d163b7 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -4,6 +4,7 @@ logger = logging.getLogger(__name__) + # Validator for re-use in other models to validate pages def _process_callable_data_frame(captured_callable, values): data_frame = captured_callable["data_frame"] diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 56a0beaf7..7167047df 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -1,11 +1,10 @@ import logging from typing import List, Literal -from dash import Input, Output, Patch, callback, dcc +from dash import dcc from plotly import graph_objects as go from pydantic import Field, PrivateAttr, validator -import vizro._themes as themes import vizro.plotly.express as px from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel @@ -75,7 +74,6 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - self._update_graph_theme() self._set_callable_component() return dcc.Loading( dcc.Graph( @@ -96,16 +94,5 @@ def build(self): parent_className="chart_container", ) - def _update_graph_theme(self): - @callback( - Output(self.id, "figure", allow_duplicate=True), - Input("theme_selector", "on"), - prevent_initial_call="initial_duplicate", - ) - def update_graph_theme(theme_selector_on: bool): - patched_figure = Patch() - patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light - return patched_figure - def _set_callable_component(self): self._callable_component = self.figure diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index b570e6e91..93e8a08fc 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -4,9 +4,10 @@ import dash_bootstrap_components as dbc import dash_daq as daq -from dash import dcc, html +from dash import Input, Output, Patch, callback, dcc, html from pydantic import Field, root_validator, validator +import vizro._themes as themes from vizro._constants import ON_PAGE_LOAD_ACTION_PREFIX from vizro.actions import _on_page_load from vizro.managers import model_manager @@ -115,6 +116,7 @@ def pre_build(self): @_log_call def build(self): + self._update_graph_theme() controls_content = [control.build() for control in self.controls] components_content = [ html.Div( @@ -130,6 +132,24 @@ def build(self): ] return self._make_page_layout(controls_content, components_content) + def _update_graph_theme(self): + outputs = [ + Output(component.id, "figure", allow_duplicate=True) + for component in self.components + if isinstance(component, Graph) + ] + if outputs: + + @callback( + outputs, + Input("theme_selector", "on"), + prevent_initial_call="initial_duplicate", + ) + def update_graph_theme(theme_selector_on: bool): + patched_figure = Patch() + patched_figure["layout"]["template"] = themes.dark if theme_selector_on else themes.light + return [patched_figure] * len(outputs) + @staticmethod def _create_theme_switch(): _, dashboard = next(model_manager._items_with_type(Dashboard)) From 459f037db1eafa464e285e7b73f9470439aef194 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 12:55:52 +0200 Subject: [PATCH 051/121] lint --- vizro-core/schemas/0.1.5.dev0.json | 1832 ++++++++++++++-------------- 1 file changed, 894 insertions(+), 938 deletions(-) diff --git a/vizro-core/schemas/0.1.5.dev0.json b/vizro-core/schemas/0.1.5.dev0.json index f14467474..db3cb86c9 100644 --- a/vizro-core/schemas/0.1.5.dev0.json +++ b/vizro-core/schemas/0.1.5.dev0.json @@ -1,969 +1,925 @@ { - "title": "Dashboard", - "description": "Vizro Dashboard to be used within [`Vizro`][vizro._vizro.Vizro.build].\n\nArgs:\n pages (List[Page]): See [`Page`][vizro.models.Page].\n theme (Literal[\"vizro_dark\", \"vizro_light\"]): Layout theme to be applied across dashboard.\n Defaults to `vizro_dark`.\n navigation (Optional[Navigation]): See [`Navigation`][vizro.models.Navigation]. Defaults to `None`.\n title (Optional[str]): Dashboard title to appear on every page on top left-side. Defaults to `None`.", - "type": "object", - "properties": { + "title": "Dashboard", + "description": "Vizro Dashboard to be used within [`Vizro`][vizro._vizro.Vizro.build].\n\nArgs:\n pages (List[Page]): See [`Page`][vizro.models.Page].\n theme (Literal[\"vizro_dark\", \"vizro_light\"]): Layout theme to be applied across dashboard.\n Defaults to `vizro_dark`.\n navigation (Optional[Navigation]): See [`Navigation`][vizro.models.Navigation]. Defaults to `None`.\n title (Optional[str]): Dashboard title to appear on every page on top left-side. Defaults to `None`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "pages": { + "title": "Pages", + "type": "array", + "items": { + "$ref": "#/definitions/Page" + } + }, + "theme": { + "title": "Theme", + "description": "Layout theme to be applied across dashboard. Defaults to `vizro_dark`", + "default": "vizro_dark", + "enum": ["vizro_dark", "vizro_light"], + "type": "string" + }, + "navigation": { + "$ref": "#/definitions/Navigation" + }, + "title": { + "title": "Title", + "description": "Dashboard title to appear on every page on top left-side.", + "type": "string" + } + }, + "required": ["pages"], + "additionalProperties": false, + "definitions": { + "Action": { + "title": "Action", + "description": "Action to be inserted into `actions` of relevant component.\n\nArgs:\n function (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n inputs (List[str]): Inputs in the form `.` passed to the action function.\n Defaults to `[]`.\n outputs (List[str]): Outputs in the form `.` changed by the action function.\n Defaults to `[]`.", + "type": "object", + "properties": { "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" }, - "pages": { - "title": "Pages", + "inputs": { + "title": "Inputs", + "description": "Inputs in the form `.` passed to the action function.", + "default": [], + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" + } + }, + "outputs": { + "title": "Outputs", + "description": "Outputs in the form `.` changed by the action function.", + "default": [], + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", + "type": "array", + "items": { + "type": "string", + "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" + } + } + }, + "additionalProperties": false + }, + "Button": { + "title": "Button", + "description": "Component provided to `Page` to trigger any defined `action` in `Page`.\n\nArgs:\n type (Literal[\"button\"]): Defaults to `\"button\"`.\n text (str): Text to be displayed on button. Defaults to `\"Click me!\"`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "button", + "enum": ["button"], + "type": "string" + }, + "text": { + "title": "Text", + "description": "Text to be displayed on button.", + "default": "Click me!", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "Card": { + "title": "Card", + "description": "Creates a card utilizing `dcc.Markdown` as title and text component.\n\nArgs:\n type (Literal[\"card\"]): Defaults to `\"card\"`.\n text (str): Markdown string to create card title/text that should adhere to the CommonMark Spec.\n href (Optional[str]): URL (relative or absolute) to navigate to. If not provided the Card serves as a text card\n only. Defaults to None.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "card", + "enum": ["card"], + "type": "string" + }, + "text": { + "title": "Text", + "description": "Markdown string to create card title/text that should adhere to the CommonMark Spec.", + "type": "string" + }, + "href": { + "title": "Href", + "description": "URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", + "type": "string" + } + }, + "required": ["text"], + "additionalProperties": false + }, + "Graph": { + "title": "Graph", + "description": "Wrapper for `dcc.Graph` to visualize charts in dashboard.\n\nArgs:\n type (Literal[\"graph\"]): Defaults to `\"graph\"`.\n figure (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "graph", + "enum": ["graph"], + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "Table": { + "title": "Table", + "description": "Wrapper for table components to visualize in dashboard.\n\nArgs:\n type (Literal[\"table\"]): Defaults to `\"table\"`.\n table (CapturedCallable): Table like object to be displayed. Current choices include:\n [`dash_table.DataTable`](https://dash.plotly.com/datatable).\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "table", + "enum": ["table"], + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "Layout": { + "title": "Layout", + "description": "Grid specification to place chart/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "grid": { + "title": "Grid", + "description": "Grid specification to arrange components on screen.", + "type": "array", + "items": { "type": "array", "items": { - "$ref": "#/definitions/Page" + "type": "integer" } + } }, - "theme": { - "title": "Theme", - "description": "Layout theme to be applied across dashboard. Defaults to `vizro_dark`", - "default": "vizro_dark", - "enum": [ - "vizro_dark", - "vizro_light" - ], - "type": "string" + "row_gap": { + "title": "Row Gap", + "description": "Gap between rows in px. Defaults to 12px.", + "default": "12px", + "pattern": "[0-9]+px", + "type": "string" + }, + "col_gap": { + "title": "Col Gap", + "description": "Gap between columns in px. Defaults to 12px.", + "default": "12px", + "pattern": "[0-9]+px", + "type": "string" + }, + "row_min_height": { + "title": "Row Min Height", + "description": "Minimum row height in px. Defaults to 0px.", + "default": "0px", + "pattern": "[0-9]+px", + "type": "string" + }, + "col_min_width": { + "title": "Col Min Width", + "description": "Minimum column width in px. Defaults to 0px.", + "default": "0px", + "pattern": "[0-9]+px", + "type": "string" + } + }, + "required": ["grid"], + "additionalProperties": false + }, + "OptionsDictType": { + "title": "OptionsDictType", + "type": "object", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + } + }, + "required": ["label", "value"], + "additionalProperties": false + }, + "Checklist": { + "title": "Checklist", + "description": "Categorical multi-selector `Checklist` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"checklist\"]): Defaults to `\"checklist\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[MultiValueType]): See [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "checklist", + "enum": ["checklist"], + "type": "string" }, - "navigation": { - "$ref": "#/definitions/Navigation" + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } + }, + { + "type": "array", + "items": { + "type": "number" + } + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ] }, "title": { - "title": "Title", - "description": "Dashboard title to appear on every page on top left-side.", - "type": "string" + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } } + }, + "additionalProperties": false }, - "required": [ - "pages" - ], - "additionalProperties": false, - "definitions": { - "Action": { - "title": "Action", - "description": "Action to be inserted into `actions` of relevant component.\n\nArgs:\n function (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n inputs (List[str]): Inputs in the form `.` passed to the action function.\n Defaults to `[]`.\n outputs (List[str]): Outputs in the form `.` changed by the action function.\n Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "inputs": { - "title": "Inputs", - "description": "Inputs in the form `.` passed to the action function.", - "default": [], - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", - "type": "array", - "items": { - "type": "string", - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" - } - }, - "outputs": { - "title": "Outputs", - "description": "Outputs in the form `.` changed by the action function.", - "default": [], - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$", - "type": "array", - "items": { - "type": "string", - "pattern": "^[a-zA-Z0-9_]+[.][a-zA-Z_]+$" - } - } + "Dropdown": { + "title": "Dropdown", + "description": "Categorical multi-selector `Dropdown` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"dropdown\"]): Defaults to `\"dropdown\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[Union[SingleValueType, MultiValueType]]): See\n [`SingleValueType`][vizro.models.types.SingleValueType] and\n [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n multi (bool): Whether to allow selection of multiple values. Defaults to `True`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "dropdown", + "enum": ["dropdown"], + "type": "string" + }, + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } }, - "additionalProperties": false - }, - "Button": { - "title": "Button", - "description": "Component provided to `Page` to trigger any defined `action` in `Page`.\n\nArgs:\n type (Literal[\"button\"]): Defaults to `\"button\"`.\n text (str): Text to be displayed on button. Defaults to `\"Click me!\"`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "button", - "enum": [ - "button" - ], - "type": "string" - }, - "text": { - "title": "Text", - "description": "Text to be displayed on button.", - "default": "Click me!", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "type": "number" + } }, - "additionalProperties": false - }, - "Card": { - "title": "Card", - "description": "Creates a card utilizing `dcc.Markdown` as title and text component.\n\nArgs:\n type (Literal[\"card\"]): Defaults to `\"card\"`.\n text (str): Markdown string to create card title/text that should adhere to the CommonMark Spec.\n href (Optional[str]): URL (relative or absolute) to navigate to. If not provided the Card serves as a text card\n only. Defaults to None.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "card", - "enum": [ - "card" - ], - "type": "string" - }, - "text": { - "title": "Text", - "description": "Markdown string to create card title/text that should adhere to the CommonMark Spec.", - "type": "string" - }, - "href": { - "title": "Href", - "description": "URL (relative or absolute) to navigate to. If not provided the Card serves as a text card only.", - "type": "string" - } + { + "type": "array", + "items": { + "type": "string" + } }, - "required": [ - "text" - ], - "additionalProperties": false - }, - "Graph": { - "title": "Graph", - "description": "Wrapper for `dcc.Graph` to visualize charts in dashboard.\n\nArgs:\n type (Literal[\"graph\"]): Defaults to `\"graph\"`.\n figure (CapturedCallable): See [`CapturedCallable`][vizro.models.types.CapturedCallable].\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "graph", - "enum": [ - "graph" - ], - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" }, - "additionalProperties": false - }, - "Table": { - "title": "Table", - "description": "Wrapper for table components to visualize in dashboard.\n\nArgs:\n type (Literal[\"table\"]): Defaults to `\"table\"`.\n table (CapturedCallable): Table like object to be displayed. Current choices include:\n [`dash_table.DataTable`](https://dash.plotly.com/datatable).\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "table", - "enum": [ - "table" - ], - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "number" }, - "additionalProperties": false - }, - "Layout": { - "title": "Layout", - "description": "Grid specification to place chart/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "grid": { - "title": "Grid", - "description": "Grid specification to arrange components on screen.", - "type": "array", - "items": { - "type": "array", - "items": { - "type": "integer" - } - } - }, - "row_gap": { - "title": "Row Gap", - "description": "Gap between rows in px. Defaults to 12px.", - "default": "12px", - "pattern": "[0-9]+px", - "type": "string" - }, - "col_gap": { - "title": "Col Gap", - "description": "Gap between columns in px. Defaults to 12px.", - "default": "12px", - "pattern": "[0-9]+px", - "type": "string" - }, - "row_min_height": { - "title": "Row Min Height", - "description": "Minimum row height in px. Defaults to 0px.", - "default": "0px", - "pattern": "[0-9]+px", - "type": "string" - }, - "col_min_width": { - "title": "Col Min Width", - "description": "Minimum column width in px. Defaults to 0px.", - "default": "0px", - "pattern": "[0-9]+px", - "type": "string" - } + { + "type": "string" }, - "required": [ - "grid" - ], - "additionalProperties": false - }, - "OptionsDictType": { - "title": "OptionsDictType", - "type": "object", - "properties": { - "label": { - "title": "Label", - "type": "string" - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - } + { + "type": "array", + "items": { + "type": "boolean" + } }, - "required": [ - "label", - "value" - ], - "additionalProperties": false - }, - "Checklist": { - "title": "Checklist", - "description": "Categorical multi-selector `Checklist` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"checklist\"]): Defaults to `\"checklist\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[MultiValueType]): See [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "checklist", - "enum": [ - "checklist" - ], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "type": "number" + } }, - "additionalProperties": false - }, - "Dropdown": { - "title": "Dropdown", - "description": "Categorical multi-selector `Dropdown` to be provided to [`Filter`][vizro.models.Filter].\n\nArgs:\n type (Literal[\"dropdown\"]): Defaults to `\"dropdown\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[Union[SingleValueType, MultiValueType]]): See\n [`SingleValueType`][vizro.models.types.SingleValueType] and\n [`MultiValueType`][vizro.models.types.MultiValueType]. Defaults to `None`.\n multi (bool): Whether to allow selection of multiple values. Defaults to `True`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "dropdown", - "enum": [ - "dropdown" - ], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "multi": { - "title": "Multi", - "description": "Whether to allow selection of multiple values", - "default": true, - "type": "boolean" - }, - "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "type": "string" + } + } + ] + }, + "multi": { + "title": "Multi", + "description": "Whether to allow selection of multiple values", + "default": true, + "type": "boolean" + }, + "title": { + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "RadioItems": { + "title": "RadioItems", + "description": "Categorical single-selector `RadioItems` to be provided to `Filter`.\n\nArgs:\n type (Literal[\"radio_items\"]): Defaults to `\"radio_items\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[SingleValueType]): See [`SingleValueType`][vizro.models.types.SingleValueType].\n Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "radio_items", + "enum": ["radio_items"], + "type": "string" + }, + "options": { + "title": "Options", + "default": [], + "anyOf": [ + { + "type": "array", + "items": { + "type": "boolean" + } }, - "additionalProperties": false - }, - "RadioItems": { - "title": "RadioItems", - "description": "Categorical single-selector `RadioItems` to be provided to `Filter`.\n\nArgs:\n type (Literal[\"radio_items\"]): Defaults to `\"radio_items\"`.\n options (OptionsType): See [`OptionsType`][vizro.models.types.OptionsType]. Defaults to `[]`.\n value (Optional[SingleValueType]): See [`SingleValueType`][vizro.models.types.SingleValueType].\n Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "radio_items", - "enum": [ - "radio_items" - ], - "type": "string" - }, - "options": { - "title": "Options", - "default": [], - "anyOf": [ - { - "type": "array", - "items": { - "type": "boolean" - } - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "array", - "items": { - "$ref": "#/definitions/OptionsDictType" - } - } - ] - }, - "value": { - "title": "Value", - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "number" - }, - { - "type": "string" - } - ] - }, - "title": { - "title": "Title", - "description": "Title to be displayed", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "type": "number" + } }, - "additionalProperties": false - }, - "RangeSlider": { - "title": "RangeSlider", - "description": "Numeric multi-selector `RangeSlider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.RangeSlider`](https://dash.plotly.com/dash-core-components/rangeslider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[List[float]]): Default start and end value for slider. Must be 2 items. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "range_slider", - "enum": [ - "range_slider" - ], - "type": "string" - }, - "min": { - "title": "Min", - "description": "Start value for slider.", - "type": "number" - }, - "max": { - "title": "Max", - "description": "End value for slider.", - "type": "number" - }, - "step": { - "title": "Step", - "description": "Step-size for marks on slider.", - "type": "number" - }, - "marks": { - "title": "Marks", - "description": "Marks to be displayed on slider.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "value": { - "title": "Value", - "description": "Default start and end value for slider", - "minItems": 2, - "maxItems": 2, - "type": "array", - "items": { - "type": "number" - } - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "type": "string" + } }, - "additionalProperties": false - }, - "Slider": { - "title": "Slider", - "description": "Numeric single-selector `Slider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.Slider`](https://dash.plotly.com/dash-core-components/slider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[float]): Default value for slider. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "slider", - "enum": [ - "slider" - ], - "type": "string" - }, - "min": { - "title": "Min", - "description": "Start value for slider.", - "type": "number" - }, - "max": { - "title": "Max", - "description": "End value for slider.", - "type": "number" - }, - "step": { - "title": "Step", - "description": "Step-size for marks on slider.", - "type": "number" - }, - "marks": { - "title": "Marks", - "description": "Marks to be displayed on slider.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "value": { - "title": "Value", - "description": "Default value for slider.", - "type": "number" - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "type": "array", + "items": { + "$ref": "#/definitions/OptionsDictType" + } + } + ] + }, + "value": { + "title": "Value", + "anyOf": [ + { + "type": "boolean" }, - "additionalProperties": false - }, - "Filter": { - "title": "Filter", - "description": "Filter the data supplied to `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Filter(column=\"species\")))\n\nArgs:\n type (Literal[\"filter\"]): Defaults to `\"filter\"`.\n column (str): Column of `DataFrame` to filter.\n targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components\n on the page that use `column`.\n selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "filter", - "enum": [ - "filter" - ], - "type": "string" - }, - "column": { - "title": "Column", - "description": "Column of DataFrame to filter.", - "type": "string" - }, - "targets": { - "title": "Targets", - "description": "Target component to be affected by filter. If none are given then target all components on the page that use `column`.", - "default": [], - "type": "array", - "items": { - "type": "string" - } - }, - "selector": { - "title": "Selector", - "anyOf": [ - { - "$ref": "#/definitions/Checklist" - }, - { - "$ref": "#/definitions/Dropdown" - }, - { - "$ref": "#/definitions/RadioItems" - }, - { - "$ref": "#/definitions/RangeSlider" - }, - { - "$ref": "#/definitions/Slider" - } - ] - } + { + "type": "number" }, - "required": [ - "column" - ], - "additionalProperties": false - }, - "Parameter": { - "title": "Parameter", - "description": "Alter the arguments supplied to any `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Parameter(\n >>> targets=[\"scatter.x\"], selector=Slider(min=0, max=1, default=0.8, title=\"Bubble opacity\"))))\n\nArgs:\n type (Literal[\"parameter\"]): Defaults to `\"parameter\"`.\n targets (List[str]): Targets in the form of `.`.\n selector (SelectorType): See [SelectorType][vizro.models.types.SelectorType]. Converts selector value\n `\"NONE\"` into `None` to allow optional parameters.\n\nRaises:\n ValueError: If targets are invalid and not of the form `.`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "type": { - "title": "Type", - "default": "parameter", - "enum": [ - "parameter" - ], - "type": "string" - }, - "targets": { - "title": "Targets", - "description": "Targets in the form of `.`.", - "type": "array", - "items": { - "type": "string" - } - }, - "selector": { - "title": "Selector", - "description": "Selectors to be used inside a control.", - "discriminator": { - "propertyName": "type", - "mapping": { - "checklist": "#/definitions/Checklist", - "dropdown": "#/definitions/Dropdown", - "radio_items": "#/definitions/RadioItems", - "range_slider": "#/definitions/RangeSlider", - "slider": "#/definitions/Slider" - } - }, - "oneOf": [ - { - "$ref": "#/definitions/Checklist" - }, - { - "$ref": "#/definitions/Dropdown" - }, - { - "$ref": "#/definitions/RadioItems" - }, - { - "$ref": "#/definitions/RangeSlider" - }, - { - "$ref": "#/definitions/Slider" - } - ] - } + { + "type": "string" + } + ] + }, + "title": { + "title": "Title", + "description": "Title to be displayed", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "RangeSlider": { + "title": "RangeSlider", + "description": "Numeric multi-selector `RangeSlider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.RangeSlider`](https://dash.plotly.com/dash-core-components/rangeslider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[List[float]]): Default start and end value for slider. Must be 2 items. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "range_slider", + "enum": ["range_slider"], + "type": "string" + }, + "min": { + "title": "Min", + "description": "Start value for slider.", + "type": "number" + }, + "max": { + "title": "Max", + "description": "End value for slider.", + "type": "number" + }, + "step": { + "title": "Step", + "description": "Step-size for marks on slider.", + "type": "number" + }, + "marks": { + "title": "Marks", + "description": "Marks to be displayed on slider.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "title": "Value", + "description": "Default start and end value for slider", + "minItems": 2, + "maxItems": 2, + "type": "array", + "items": { + "type": "number" + } + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "Slider": { + "title": "Slider", + "description": "Numeric single-selector `Slider`.\n\nCan be provided to [`Filter`][vizro.models.Filter] or\n[`Parameter`][vizro.models.Parameter]. Based on the underlying\n[`dcc.Slider`](https://dash.plotly.com/dash-core-components/slider).\n\nArgs:\n type (Literal[\"range_slider\"]): Defaults to `\"range_slider\"`.\n min (Optional[float]): Start value for slider. Defaults to `None`.\n max (Optional[float]): End value for slider. Defaults to `None`.\n step (Optional[float]): Step-size for marks on slider. Defaults to `None`.\n marks (Optional[Dict[float, str]]): Marks to be displayed on slider. Defaults to `None`.\n value (Optional[float]): Default value for slider. Defaults to `None`.\n title (Optional[str]): Title to be displayed. Defaults to `None`.\n actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "slider", + "enum": ["slider"], + "type": "string" + }, + "min": { + "title": "Min", + "description": "Start value for slider.", + "type": "number" + }, + "max": { + "title": "Max", + "description": "End value for slider.", + "type": "number" + }, + "step": { + "title": "Step", + "description": "Step-size for marks on slider.", + "type": "number" + }, + "marks": { + "title": "Marks", + "description": "Marks to be displayed on slider.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "value": { + "title": "Value", + "description": "Default value for slider.", + "type": "number" + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "additionalProperties": false + }, + "Filter": { + "title": "Filter", + "description": "Filter the data supplied to `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Filter(column=\"species\")))\n\nArgs:\n type (Literal[\"filter\"]): Defaults to `\"filter\"`.\n column (str): Column of `DataFrame` to filter.\n targets (List[ModelID]): Target component to be affected by filter. If none are given then target all components\n on the page that use `column`.\n selector (Optional[SelectorType]): See [SelectorType][vizro.models.types.SelectorType]. Defaults to `None`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "filter", + "enum": ["filter"], + "type": "string" + }, + "column": { + "title": "Column", + "description": "Column of DataFrame to filter.", + "type": "string" + }, + "targets": { + "title": "Targets", + "description": "Target component to be affected by filter. If none are given then target all components on the page that use `column`.", + "default": [], + "type": "array", + "items": { + "type": "string" + } + }, + "selector": { + "title": "Selector", + "anyOf": [ + { + "$ref": "#/definitions/Checklist" }, - "required": [ - "targets", - "selector" - ], - "additionalProperties": false - }, - "ActionsChain": { - "title": "ActionsChain", - "description": "All models that are registered to the model manager should inherit from this class.\n\nArgs:\n id (Optional[str]): ID to identify model. Must be unique throughout the whole dashboard. Defaults to `None`.\n When no ID is chosen, ID will be automatically generated.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "trigger": { - "title": "Trigger", - "type": "array", - "items": [ - { - "title": "Component Id", - "type": "string" - }, - { - "title": "Component Property", - "type": "string" - } - ], - "minItems": 2, - "maxItems": 2 - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/Action" - } - } + { + "$ref": "#/definitions/Dropdown" }, - "required": [ - "trigger" - ], - "additionalProperties": false - }, - "Page": { - "title": "Page", - "description": "A page in [`Dashboard`][vizro.models.Dashboard] with its own URL path and place in the `Navigation`.\n\nArgs:\n components (List[ComponentType]): See [ComponentType][vizro.models.types.ComponentType]. At least one component\n has to be provided.\n title (str): Title to be displayed.\n layout (Optional[Layout]): Layout to place components in. Defaults to `None`.\n controls (List[ControlType]): See [ControlType][vizro.models.types.ControlType]. Defaults to `[]`.\n path (Optional[str]): Path to navigate to page. Defaults to `None`.\n\nRaises:\n ValueError: If number of page and grid components is not the same", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "components": { - "title": "Components", - "type": "array", - "items": { - "discriminator": { - "propertyName": "type", - "mapping": { - "button": "#/definitions/Button", - "card": "#/definitions/Card", - "graph": "#/definitions/Graph", - "table": "#/definitions/Table" - } - }, - "oneOf": [ - { - "$ref": "#/definitions/Button" - }, - { - "$ref": "#/definitions/Card" - }, - { - "$ref": "#/definitions/Graph" - }, - { - "$ref": "#/definitions/Table" - } - ] - } - }, - "title": { - "title": "Title", - "description": "Title to be displayed.", - "type": "string" - }, - "layout": { - "$ref": "#/definitions/Layout" - }, - "controls": { - "title": "Controls", - "default": [], - "type": "array", - "items": { - "discriminator": { - "propertyName": "type", - "mapping": { - "filter": "#/definitions/Filter", - "parameter": "#/definitions/Parameter" - } - }, - "oneOf": [ - { - "$ref": "#/definitions/Filter" - }, - { - "$ref": "#/definitions/Parameter" - } - ] - } - }, - "path": { - "title": "Path", - "description": "Path to navigate to page.", - "type": "string" - }, - "actions": { - "title": "Actions", - "default": [], - "type": "array", - "items": { - "$ref": "#/definitions/ActionsChain" - } - } + { + "$ref": "#/definitions/RadioItems" }, - "required": [ - "components", - "title" - ], - "additionalProperties": false - }, - "Navigation": { - "title": "Navigation", - "description": "Navigation in [`Dashboard`][vizro.models.Dashboard] to structure [`Pages`][vizro.models.Page].\n\nArgs:\n pages (Optional[NavigationPagesType]): See [NavigationPagesType][vizro.models.types.NavigationPagesType].\n Defaults to `None`.", - "type": "object", - "properties": { - "id": { - "title": "Id", - "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", - "type": "string" - }, - "pages": { - "title": "Pages", - "anyOf": [ - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - } - ] - } + { + "$ref": "#/definitions/RangeSlider" + }, + { + "$ref": "#/definitions/Slider" + } + ] + } + }, + "required": ["column"], + "additionalProperties": false + }, + "Parameter": { + "title": "Parameter", + "description": "Alter the arguments supplied to any `targets` on the [`Page`][vizro.models.Page].\n\nExamples:\n >>> print(repr(Parameter(\n >>> targets=[\"scatter.x\"], selector=Slider(min=0, max=1, default=0.8, title=\"Bubble opacity\"))))\n\nArgs:\n type (Literal[\"parameter\"]): Defaults to `\"parameter\"`.\n targets (List[str]): Targets in the form of `.`.\n selector (SelectorType): See [SelectorType][vizro.models.types.SelectorType]. Converts selector value\n `\"NONE\"` into `None` to allow optional parameters.\n\nRaises:\n ValueError: If targets are invalid and not of the form `.`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "type": { + "title": "Type", + "default": "parameter", + "enum": ["parameter"], + "type": "string" + }, + "targets": { + "title": "Targets", + "description": "Targets in the form of `.`.", + "type": "array", + "items": { + "type": "string" + } + }, + "selector": { + "title": "Selector", + "description": "Selectors to be used inside a control.", + "discriminator": { + "propertyName": "type", + "mapping": { + "checklist": "#/definitions/Checklist", + "dropdown": "#/definitions/Dropdown", + "radio_items": "#/definitions/RadioItems", + "range_slider": "#/definitions/RangeSlider", + "slider": "#/definitions/Slider" + } + }, + "oneOf": [ + { + "$ref": "#/definitions/Checklist" + }, + { + "$ref": "#/definitions/Dropdown" + }, + { + "$ref": "#/definitions/RadioItems" + }, + { + "$ref": "#/definitions/RangeSlider" + }, + { + "$ref": "#/definitions/Slider" + } + ] + } + }, + "required": ["targets", "selector"], + "additionalProperties": false + }, + "ActionsChain": { + "title": "ActionsChain", + "description": "All models that are registered to the model manager should inherit from this class.\n\nArgs:\n id (Optional[str]): ID to identify model. Must be unique throughout the whole dashboard. Defaults to `None`.\n When no ID is chosen, ID will be automatically generated.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "trigger": { + "title": "Trigger", + "type": "array", + "items": [ + { + "title": "Component Id", + "type": "string" + }, + { + "title": "Component Property", + "type": "string" + } + ], + "minItems": 2, + "maxItems": 2 + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/Action" + } + } + }, + "required": ["trigger"], + "additionalProperties": false + }, + "Page": { + "title": "Page", + "description": "A page in [`Dashboard`][vizro.models.Dashboard] with its own URL path and place in the `Navigation`.\n\nArgs:\n components (List[ComponentType]): See [ComponentType][vizro.models.types.ComponentType]. At least one component\n has to be provided.\n title (str): Title to be displayed.\n layout (Optional[Layout]): Layout to place components in. Defaults to `None`.\n controls (List[ControlType]): See [ControlType][vizro.models.types.ControlType]. Defaults to `[]`.\n path (Optional[str]): Path to navigate to page. Defaults to `None`.\n\nRaises:\n ValueError: If number of page and grid components is not the same", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "components": { + "title": "Components", + "type": "array", + "items": { + "discriminator": { + "propertyName": "type", + "mapping": { + "button": "#/definitions/Button", + "card": "#/definitions/Card", + "graph": "#/definitions/Graph", + "table": "#/definitions/Table" + } + }, + "oneOf": [ + { + "$ref": "#/definitions/Button" + }, + { + "$ref": "#/definitions/Card" + }, + { + "$ref": "#/definitions/Graph" + }, + { + "$ref": "#/definitions/Table" + } + ] + } + }, + "title": { + "title": "Title", + "description": "Title to be displayed.", + "type": "string" + }, + "layout": { + "$ref": "#/definitions/Layout" + }, + "controls": { + "title": "Controls", + "default": [], + "type": "array", + "items": { + "discriminator": { + "propertyName": "type", + "mapping": { + "filter": "#/definitions/Filter", + "parameter": "#/definitions/Parameter" + } }, - "additionalProperties": false + "oneOf": [ + { + "$ref": "#/definitions/Filter" + }, + { + "$ref": "#/definitions/Parameter" + } + ] + } + }, + "path": { + "title": "Path", + "description": "Path to navigate to page.", + "type": "string" + }, + "actions": { + "title": "Actions", + "default": [], + "type": "array", + "items": { + "$ref": "#/definitions/ActionsChain" + } + } + }, + "required": ["components", "title"], + "additionalProperties": false + }, + "Navigation": { + "title": "Navigation", + "description": "Navigation in [`Dashboard`][vizro.models.Dashboard] to structure [`Pages`][vizro.models.Page].\n\nArgs:\n pages (Optional[NavigationPagesType]): See [NavigationPagesType][vizro.models.types.NavigationPagesType].\n Defaults to `None`.", + "type": "object", + "properties": { + "id": { + "title": "Id", + "description": "ID to identify model. Must be unique throughout the whole dashboard.When no ID is chosen, ID will be automatically generated.", + "type": "string" + }, + "pages": { + "title": "Pages", + "anyOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + ] } + }, + "additionalProperties": false } -} \ No newline at end of file + } +} From 8d89d30ed265f90580af54a8cf34fbd5847c729a Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 13:08:17 +0200 Subject: [PATCH 052/121] remove input property from graph --- .../vizro/actions/_callback_mapping/_callback_mapping_utils.py | 2 +- vizro-core/src/vizro/models/_components/graph.py | 2 +- vizro-core/src/vizro/models/_components/table.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index f9f30feef..4dbcf845c 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -110,7 +110,7 @@ def _get_inputs_of_chart_interactions( inputs.append( State( component_id=triggered_model.id, - component_property=triggered_model._input_property, # type: ignore[attr-defined] + component_property="clickData", # type: ignore[attr-defined] #TODO: needs to be refactored ) ) return inputs diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 7167047df..bb0112965 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -44,7 +44,7 @@ class Graph(VizroBaseModel): actions: List[Action] = [] # Component properties for actions and interactions - _input_property: str = PrivateAttr("clickData") + # _input_property: str = PrivateAttr("clickData") _output_property: str = PrivateAttr("figure") _callable_component: CapturedCallable = PrivateAttr() diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index a79b26bb9..76981ead6 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -30,7 +30,7 @@ class Table(VizroBaseModel): actions: List[Action] = [] # Component properties for actions and interactions - _input_property: str = PrivateAttr("active_cell") + # _input_property: str = PrivateAttr("active_cell") _output_property: str = PrivateAttr("children") _callable_component: CapturedCallable = PrivateAttr() From 1da2585692998567a5396e7ea10658ea7b91e9ce Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 13:18:08 +0200 Subject: [PATCH 053/121] Change _callable_component to string + add to page --- vizro-core/src/vizro/actions/_actions_utils.py | 2 +- vizro-core/src/vizro/models/_components/graph.py | 6 +----- vizro-core/src/vizro/models/_components/table.py | 6 +----- vizro-core/src/vizro/models/_page.py | 2 +- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index c80784bc6..215112ba9 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -120,7 +120,7 @@ def _get_parametrized_config( for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. - graph_config = deepcopy(model_manager[target]._callable_component._arguments) # type: ignore[attr-defined] + graph_config = deepcopy(getattr(model_manager[target], model_manager[target]._callable_component)._arguments) # type: ignore[attr-defined] if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index bb0112965..553dc6521 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -46,7 +46,7 @@ class Graph(VizroBaseModel): # Component properties for actions and interactions # _input_property: str = PrivateAttr("clickData") _output_property: str = PrivateAttr("figure") - _callable_component: CapturedCallable = PrivateAttr() + _callable_component: str = PrivateAttr("figure") # Re-used validators _set_actions = _action_validator_factory("clickData") @@ -74,7 +74,6 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - self._set_callable_component() return dcc.Loading( dcc.Graph( id=self.id, @@ -93,6 +92,3 @@ def build(self): color="grey", parent_className="chart_container", ) - - def _set_callable_component(self): - self._callable_component = self.figure diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 76981ead6..07ca112b4 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -32,7 +32,7 @@ class Table(VizroBaseModel): # Component properties for actions and interactions # _input_property: str = PrivateAttr("active_cell") _output_property: str = PrivateAttr("children") - _callable_component: CapturedCallable = PrivateAttr() + _callable_component: str = PrivateAttr("table") # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] @@ -53,10 +53,6 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - self._set_callable_component() return html.Div( dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id ) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS - - def _set_callable_component(self): - self._callable_component = self.table diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 93e8a08fc..1811d4fb7 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -98,7 +98,7 @@ def __init__(self, **data): @_log_call def pre_build(self): # TODO: Remove default on page load action if possible - if any(isinstance(component, Graph) for component in self.components): + if any(hasattr(component, "_callable_component") for component in self.components): self.actions = [ ActionsChain( id=f"{ON_PAGE_LOAD_ACTION_PREFIX}_{self.id}", From 3aefc06c0e6cf6d954e206aef7a1bd9852b848b9 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Fri, 20 Oct 2023 13:31:36 +0200 Subject: [PATCH 054/121] Lint --- .../src/vizro/actions/_actions_utils.py | 4 ++- .../_callback_mapping_utils.py | 2 +- .../src/vizro/charts/tables/dash_table.py | 1 + vizro-core/src/vizro/models/types.py | 25 +------------------ 4 files changed, 6 insertions(+), 26 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 215112ba9..8ca3c1647 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -120,7 +120,9 @@ def _get_parametrized_config( for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. - graph_config = deepcopy(getattr(model_manager[target], model_manager[target]._callable_component)._arguments) # type: ignore[attr-defined] + graph_config = deepcopy( + getattr(model_manager[target], model_manager[target]._callable_component)._arguments # type: ignore[attr-defined] + ) if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 4dbcf845c..2067ff6cc 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -110,7 +110,7 @@ def _get_inputs_of_chart_interactions( inputs.append( State( component_id=triggered_model.id, - component_property="clickData", # type: ignore[attr-defined] #TODO: needs to be refactored + component_property="clickData", # TODO: needs to be refactored to abstract implementation detail ) ) return inputs diff --git a/vizro-core/src/vizro/charts/tables/dash_table.py b/vizro-core/src/vizro/charts/tables/dash_table.py index 197e19559..fc2fca23d 100644 --- a/vizro-core/src/vizro/charts/tables/dash_table.py +++ b/vizro-core/src/vizro/charts/tables/dash_table.py @@ -1,3 +1,4 @@ +"""Module containing the standard implementation of `dash_table.DataTable`.""" import pandas as pd from dash import dash_table diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index bd84b2cac..7db9f08c0 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -166,7 +166,7 @@ class capture: [custom charts](../user_guides/custom_charts.md). """ - def __init__(self, mode: Literal["graph", "action"]): + def __init__(self, mode: Literal["graph", "action", "table"]): """Instantiates the decorator to capture a function call. Valid modes are "graph" and "action".""" self._mode = mode @@ -304,26 +304,3 @@ class OptionsDictType(TypedDict): ), ] """Permissible value types for page attribute. Values are displayed as default.""" - -if __name__ == "__main__": - import vizro.plotly.express as px - from vizro.models.types import capture - - # Define test function and capture via decorator, important, allow **kwargs - @capture("table") - def test(data_frame, a, **kwargs): - print("Kwargs are: ", kwargs) - return kwargs - - foo = test(data_frame=px.data.iris(), a=1, b=3) - foo() - - # Obtain signature - sig = inspect.signature(test) - print(sig) - - # Create variable mapping (simulating what happens via *args,**kwargs inside the capture decorator) - ba = sig.bind_partial(data_frame=px.data.iris(), a=1, b=3) - - # Note that b=3 gets added under .arguments as kwargs - print(ba.arguments) From fda85b03395283749fad0afb544cbbe35c7455ad Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 11:55:52 +0200 Subject: [PATCH 055/121] Cleanup --- vizro-core/src/vizro/models/_components/graph.py | 1 - vizro-core/src/vizro/models/_components/table.py | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 553dc6521..c22bc3661 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -44,7 +44,6 @@ class Graph(VizroBaseModel): actions: List[Action] = [] # Component properties for actions and interactions - # _input_property: str = PrivateAttr("clickData") _output_property: str = PrivateAttr("figure") _callable_component: str = PrivateAttr("figure") diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 07ca112b4..409fd5b76 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -30,7 +30,6 @@ class Table(VizroBaseModel): actions: List[Action] = [] # Component properties for actions and interactions - # _input_property: str = PrivateAttr("active_cell") _output_property: str = PrivateAttr("children") _callable_component: str = PrivateAttr("table") @@ -55,4 +54,4 @@ def __getitem__(self, arg_name: str): def build(self): return html.Div( dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id - ) # DOES NOT WORK IF NO CONTROL, CHECK WHY GRAPH WORKS + ) From 95448f7ef5328a77ea8137b8e9ce5e9ec379de04 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 12:36:14 +0200 Subject: [PATCH 056/121] Move table to correct import path --- vizro-core/examples/default/app.py | 2 +- vizro-core/src/vizro/{charts => }/tables/__init__.py | 2 +- vizro-core/src/vizro/{charts => }/tables/dash_table.py | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename vizro-core/src/vizro/{charts => }/tables/__init__.py (53%) rename vizro-core/src/vizro/{charts => }/tables/dash_table.py (100%) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index a07b570f1..30d534ba1 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -11,7 +11,7 @@ import vizro.plotly.express as px from vizro import Vizro from vizro.actions import filter_interaction -from vizro.charts.tables import dash_data_table +from vizro.tables import dash_data_table from vizro.managers import data_manager from vizro.models.types import capture diff --git a/vizro-core/src/vizro/charts/tables/__init__.py b/vizro-core/src/vizro/tables/__init__.py similarity index 53% rename from vizro-core/src/vizro/charts/tables/__init__.py rename to vizro-core/src/vizro/tables/__init__.py index bd9b32de2..5a813ad8c 100644 --- a/vizro-core/src/vizro/charts/tables/__init__.py +++ b/vizro-core/src/vizro/tables/__init__.py @@ -1,4 +1,4 @@ -from vizro.charts.tables.dash_table import dash_data_table +from vizro.tables.dash_table import dash_data_table # Please keep alphabetically ordered __all__ = ["dash_data_table"] diff --git a/vizro-core/src/vizro/charts/tables/dash_table.py b/vizro-core/src/vizro/tables/dash_table.py similarity index 100% rename from vizro-core/src/vizro/charts/tables/dash_table.py rename to vizro-core/src/vizro/tables/dash_table.py From 4bf294ee8070c6cdb2bc64fe23f18fd90773d278 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 13:05:02 +0200 Subject: [PATCH 057/121] Fix docs --- vizro-core/docs/pages/user_guides/components.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/components.md b/vizro-core/docs/pages/user_guides/components.md index 1ca750935..b73faa94d 100755 --- a/vizro-core/docs/pages/user_guides/components.md +++ b/vizro-core/docs/pages/user_guides/components.md @@ -59,9 +59,9 @@ currently available charts of the open source library [`plotly.express`](https:/ id: my_chart type: graph controls: - - column: continent + - column: species type: filter - - selector: + selector: title: Species type: dropdown title: My first page From 60f3963401b40d0f6543e5f082914ea5498a1a64 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 13:24:37 +0200 Subject: [PATCH 058/121] Add import path --- vizro-core/src/vizro/models/_components/table.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 409fd5b76..b29d74be9 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -11,6 +11,7 @@ from vizro.models._components._components_utils import _process_callable_data_frame from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable +import vizro.tables as vt logger = logging.getLogger(__name__) @@ -26,7 +27,7 @@ class Table(VizroBaseModel): """ type: Literal["table"] = "table" - table: CapturedCallable = Field(..., description="Table to be visualized on dashboard") # ADD import path + table: CapturedCallable = Field(..., import_path = vt, description="Table to be visualized on dashboard") actions: List[Action] = [] # Component properties for actions and interactions From fa055a5db28dd73bc725e4c908b9b1fc633e15b9 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 14:04:26 +0200 Subject: [PATCH 059/121] Remove callable_component and add figure to table --- vizro-core/examples/default/app.py | 4 ++-- vizro-core/src/vizro/actions/_actions_utils.py | 2 +- vizro-core/src/vizro/models/_components/graph.py | 1 - vizro-core/src/vizro/models/_components/table.py | 7 +++---- vizro-core/src/vizro/models/_page.py | 2 +- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 30d534ba1..0b78d330d 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -66,7 +66,7 @@ def AgGrid(data_frame=None): title="Color manager", path="color-manager", components=[ - vm.Table(id="table2", table=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), + vm.Table(id="table2", figure=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), vm.Graph( id="graph", figure=px.scatter( @@ -78,7 +78,7 @@ def AgGrid(data_frame=None): id="hist", figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), ), - vm.Table(id="grid", table=AgGrid(data_frame="table_data")), + vm.Table(id="grid", figure=AgGrid(data_frame="table_data")), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 8ca3c1647..abf541d5a 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -121,7 +121,7 @@ def _get_parametrized_config( # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. graph_config = deepcopy( - getattr(model_manager[target], model_manager[target]._callable_component)._arguments # type: ignore[attr-defined] + model_manager[target].figure._arguments # type: ignore[attr-defined] ) if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index c22bc3661..88cd2fecb 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -45,7 +45,6 @@ class Graph(VizroBaseModel): # Component properties for actions and interactions _output_property: str = PrivateAttr("figure") - _callable_component: str = PrivateAttr("figure") # Re-used validators _set_actions = _action_validator_factory("clickData") diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index b29d74be9..1128c6bd6 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -21,22 +21,21 @@ class Table(VizroBaseModel): Args: type (Literal["table"]): Defaults to `"table"`. - table (CapturedCallable): Table like object to be displayed. Current choices include: + figure (CapturedCallable): Table like object to be displayed. Current choices include: [`dash_table.DataTable`](https://dash.plotly.com/datatable). actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`. """ type: Literal["table"] = "table" - table: CapturedCallable = Field(..., import_path = vt, description="Table to be visualized on dashboard") + figure: CapturedCallable = Field(..., import_path = vt, description="Table to be visualized on dashboard") actions: List[Action] = [] # Component properties for actions and interactions _output_property: str = PrivateAttr("children") - _callable_component: str = PrivateAttr("table") # validator set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] - _validate_callable = validator("table", allow_reuse=True, always=True)(_process_callable_data_frame) + _validate_callable = validator("figure", allow_reuse=True, always=True)(_process_callable_data_frame) # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): diff --git a/vizro-core/src/vizro/models/_page.py b/vizro-core/src/vizro/models/_page.py index 1811d4fb7..0ec95c7b7 100644 --- a/vizro-core/src/vizro/models/_page.py +++ b/vizro-core/src/vizro/models/_page.py @@ -98,7 +98,7 @@ def __init__(self, **data): @_log_call def pre_build(self): # TODO: Remove default on page load action if possible - if any(hasattr(component, "_callable_component") for component in self.components): + if any(hasattr(component, "figure") for component in self.components): self.actions = [ ActionsChain( id=f"{ON_PAGE_LOAD_ACTION_PREFIX}_{self.id}", From 5548fa2697af82d8298c1d322fc02ec727ca1207 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 19:39:23 +0200 Subject: [PATCH 060/121] Add unit tests --- vizro-core/examples/default/app.py | 2 +- .../src/vizro/actions/_actions_utils.py | 4 +- .../src/vizro/models/_components/table.py | 10 +- vizro-core/tests/unit/vizro/conftest.py | 6 + .../vizro/models/_components/test_graph.py | 5 - .../vizro/models/_components/test_table.py | 131 ++++++++++++++++++ 6 files changed, 143 insertions(+), 15 deletions(-) create mode 100644 vizro-core/tests/unit/vizro/models/_components/test_table.py diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 0b78d330d..41e2f8bb3 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -11,9 +11,9 @@ import vizro.plotly.express as px from vizro import Vizro from vizro.actions import filter_interaction -from vizro.tables import dash_data_table from vizro.managers import data_manager from vizro.models.types import capture +from vizro.tables import dash_data_table def retrieve_table_data(): diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index abf541d5a..f1b45b284 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -120,9 +120,7 @@ def _get_parametrized_config( for target in targets: # TODO - avoid calling _captured_callable. Once we have done this we can remove _arguments from # CapturedCallable entirely. - graph_config = deepcopy( - model_manager[target].figure._arguments # type: ignore[attr-defined] - ) + graph_config = deepcopy(model_manager[target].figure._arguments) # type: ignore[attr-defined] if "data_frame" in graph_config: graph_config.pop("data_frame") diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 1128c6bd6..ef5f85ecb 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -5,13 +5,13 @@ from dash import dash_table, html from pydantic import Field, PrivateAttr, validator +import vizro.tables as vt from vizro.managers import data_manager from vizro.models import Action, VizroBaseModel from vizro.models._action._actions_chain import _action_validator_factory from vizro.models._components._components_utils import _process_callable_data_frame from vizro.models._models_utils import _log_call from vizro.models.types import CapturedCallable -import vizro.tables as vt logger = logging.getLogger(__name__) @@ -27,7 +27,7 @@ class Table(VizroBaseModel): """ type: Literal["table"] = "table" - figure: CapturedCallable = Field(..., import_path = vt, description="Table to be visualized on dashboard") + figure: CapturedCallable = Field(..., import_path=vt, description="Table to be visualized on dashboard") actions: List[Action] = [] # Component properties for actions and interactions @@ -48,10 +48,8 @@ def __getitem__(self, arg_name: str): # explicitly redirect it to the correct attribute. if arg_name == "type": return self.type - return self.table[arg_name] + return self.figure[arg_name] @_log_call def build(self): - return html.Div( - dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id - ) + return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id) diff --git a/vizro-core/tests/unit/vizro/conftest.py b/vizro-core/tests/unit/vizro/conftest.py index c9cacf32e..f2ef2443a 100644 --- a/vizro-core/tests/unit/vizro/conftest.py +++ b/vizro-core/tests/unit/vizro/conftest.py @@ -1,6 +1,7 @@ """Fixtures to be shared across several tests.""" import dash +import plotly.graph_objects as go import pytest import vizro.models as vm @@ -25,6 +26,11 @@ def standard_px_chart(gapminder): ) +@pytest.fixture +def standard_go_chart(gapminder): + return go.Figure(data=go.Scatter(x=gapminder["gdpPercap"], y=gapminder["lifeExp"], mode="markers")) + + @pytest.fixture() def page1(): return vm.Page(title="Page 1", components=[vm.Button(), vm.Button()]) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_graph.py b/vizro-core/tests/unit/vizro/models/_components/test_graph.py index 616d6d4e9..794837a97 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_graph.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_graph.py @@ -14,11 +14,6 @@ from vizro.models._components.graph import create_empty_fig -@pytest.fixture -def standard_go_chart(gapminder): - return go.Figure(data=go.Scatter(x=gapminder["gdpPercap"], y=gapminder["lifeExp"], mode="markers")) - - @pytest.fixture def standard_px_chart_with_str_dataframe(): return px.scatter( diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py new file mode 100644 index 000000000..1987630cc --- /dev/null +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -0,0 +1,131 @@ +"""Unit tests for vizro.models.Table.""" +import json + +import pytest +from dash import dcc +from pydantic import ValidationError + +import vizro.models as vm +import vizro.plotly.express as px +from vizro.managers import data_manager +from vizro.models._action._action import Action +from vizro.tables import dash_data_table +import plotly +from dash import dash_table, html + +import pandas as pd + + +@pytest.fixture +def standard_dash_table(): + return dash_data_table(data_frame=px.data.gapminder()) + +@pytest.fixture +def dash_table_with_arguments(): + return dash_data_table(data_frame=px.data.gapminder(), style_header={"border": "1px solid green"}) + +@pytest.fixture +def dash_table_with_str_dataframe(): + return dash_data_table(data_frame="gapminder") + +@pytest.fixture +def expected_table(): + return html.Div( + dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id="text_table" + ) + +class TestDunderMethodsTable: + def test_create_graph_mandatory_only(self, standard_dash_table): + table = vm.Table(figure=standard_dash_table) + + assert hasattr(table, "id") + assert table.type == "table" + assert table.figure == standard_dash_table + assert table.actions == [] + + @pytest.mark.parametrize("id", ["id_1", "id_2"]) + def test_create_table_mandatory_and_optional(self, standard_dash_table, id): + table = vm.Table( + figure=standard_dash_table, + id=id, + actions=[], + ) + + assert table.id == id + assert table.type == "table" + assert table.figure == standard_dash_table + + def test_mandatory_figure_missing(self): + with pytest.raises(ValidationError, match="field required"): + vm.Table() + + def test_failed_graph_with_no_captured_callable(self, standard_go_chart): + with pytest.raises(ValidationError, match="must provide a valid CapturedCallable object"): + vm.Table( + figure=standard_go_chart, + ) + + @pytest.mark.xfail(reason="This test is failing as we are not yet detecting different types of captured callables") + def test_failed_graph_with_no_captured_callable(self, standard_px_chart): + with pytest.raises(ValidationError, match="must provide a valid table function vm.Table"): + vm.Table( + figure=standard_px_chart, + ) + + def test_getitem_known_args(self, dash_table_with_arguments): + table = vm.Table(figure=dash_table_with_arguments) + assert table["style_header"] == {"border": "1px solid green"} + assert table["type"] == "table" + + def test_getitem_unknown_args(self, standard_dash_table): + table = vm.Table(figure=standard_dash_table) + with pytest.raises(KeyError): + table["unknown_args"] + + # @pytest.mark.parametrize("title, expected", [(None, 24), ("Test", None)]) + # def test_title_margin_adjustment(self, gapminder, title, expected): + # figure = vm.Graph(figure=px.bar(data_frame=gapminder, x="year", y="pop", title=title)).__call__() + + # assert figure.layout.margin.t == expected + # assert figure.layout.template.layout.margin.t == 64 + # assert figure.layout.template.layout.margin.l == 80 + # assert figure.layout.template.layout.margin.b == 64 + # assert figure.layout.template.layout.margin.r == 12 + + def test_set_action_via_validator(self, standard_dash_table, test_action_function): + table = vm.Table(figure=standard_dash_table, actions=[Action(function=test_action_function)]) + actions_chain = table.actions[0] + assert actions_chain.trigger.component_property == "active_cell" + + +class TestProcessTableDataFrame: + def test_process_figure_data_frame_str_df(self, dash_table_with_str_dataframe, gapminder): + data_manager["gapminder"] = gapminder + table_with_str_df = vm.Table( + id="table", + figure=dash_table_with_str_dataframe, + ) + assert data_manager._get_component_data("table").equals(gapminder) + assert table_with_str_df["data_frame"] == "gapminder" + + def test_process_figure_data_frame_df(self, standard_dash_table, gapminder): + table_with_str_df = vm.Table( + id="table", + figure=standard_dash_table, + ) + assert data_manager._get_component_data("table").equals(gapminder) + with pytest.raises(KeyError, match="'data_frame'"): + table_with_str_df.figure["data_frame"] + + + +class TestBuildTable: + def test_graph_build(self, standard_dash_table, expected_table): + table = vm.Table( + id="text_table", + figure=standard_dash_table, + ) + + result = json.loads(json.dumps(table.build(), cls=plotly.utils.PlotlyJSONEncoder)) + expected = json.loads(json.dumps(expected_table, cls=plotly.utils.PlotlyJSONEncoder)) + assert result == expected From 3329484391529c4e66acec7b0a787d807d6e2021 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 19:43:37 +0200 Subject: [PATCH 061/121] Lint --- .../src/vizro/models/_components/table.py | 2 +- .../vizro/models/_components/test_table.py | 21 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index ef5f85ecb..fdaa06aab 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -40,7 +40,7 @@ class Table(VizroBaseModel): # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): kwargs.setdefault("data_frame", data_manager._get_component_data(self.id)) # type: ignore[arg-type] - return self.table(**kwargs) + return self.figure(**kwargs) # Convenience wrapper/syntactic sugar. def __getitem__(self, arg_name: str): diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index 1987630cc..a072fdb56 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -1,8 +1,10 @@ """Unit tests for vizro.models.Table.""" import json +import pandas as pd +import plotly import pytest -from dash import dcc +from dash import dash_table, html from pydantic import ValidationError import vizro.models as vm @@ -10,29 +12,27 @@ from vizro.managers import data_manager from vizro.models._action._action import Action from vizro.tables import dash_data_table -import plotly -from dash import dash_table, html - -import pandas as pd @pytest.fixture def standard_dash_table(): return dash_data_table(data_frame=px.data.gapminder()) + @pytest.fixture def dash_table_with_arguments(): return dash_data_table(data_frame=px.data.gapminder(), style_header={"border": "1px solid green"}) + @pytest.fixture def dash_table_with_str_dataframe(): return dash_data_table(data_frame="gapminder") + @pytest.fixture def expected_table(): - return html.Div( - dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id="text_table" - ) + return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id="text_table") + class TestDunderMethodsTable: def test_create_graph_mandatory_only(self, standard_dash_table): @@ -59,14 +59,14 @@ def test_mandatory_figure_missing(self): with pytest.raises(ValidationError, match="field required"): vm.Table() - def test_failed_graph_with_no_captured_callable(self, standard_go_chart): + def test_failed_table_with_no_captured_callable(self, standard_go_chart): with pytest.raises(ValidationError, match="must provide a valid CapturedCallable object"): vm.Table( figure=standard_go_chart, ) @pytest.mark.xfail(reason="This test is failing as we are not yet detecting different types of captured callables") - def test_failed_graph_with_no_captured_callable(self, standard_px_chart): + def test_failed_table_with_wrong_captured_callable(self, standard_px_chart): with pytest.raises(ValidationError, match="must provide a valid table function vm.Table"): vm.Table( figure=standard_px_chart, @@ -118,7 +118,6 @@ def test_process_figure_data_frame_df(self, standard_dash_table, gapminder): table_with_str_df.figure["data_frame"] - class TestBuildTable: def test_graph_build(self, standard_dash_table, expected_table): table = vm.Table( From ebc1d182092209d37e3eaf395043b3f4c4b01d48 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 19:51:42 +0200 Subject: [PATCH 062/121] Fix tests --- vizro-core/tests/unit/vizro/conftest.py | 1 - vizro-core/tests/unit/vizro/models/test_page.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/vizro-core/tests/unit/vizro/conftest.py b/vizro-core/tests/unit/vizro/conftest.py index 2acbf4f4d..be2c41e6f 100644 --- a/vizro-core/tests/unit/vizro/conftest.py +++ b/vizro-core/tests/unit/vizro/conftest.py @@ -1,6 +1,5 @@ """Fixtures to be shared across several tests.""" -import dash import plotly.graph_objects as go import pytest diff --git a/vizro-core/tests/unit/vizro/models/test_page.py b/vizro-core/tests/unit/vizro/models/test_page.py index 78ef54520..416ba458c 100644 --- a/vizro-core/tests/unit/vizro/models/test_page.py +++ b/vizro-core/tests/unit/vizro/models/test_page.py @@ -101,7 +101,7 @@ def test_valid_component_types(self, standard_px_chart): [vm.Checklist(), vm.Dropdown(), vm.RadioItems(), vm.RangeSlider(), vm.Slider()], ) def test_invalid_component_types(self, test_component): - with pytest.raises(ValidationError, match=re.escape("(allowed values: 'button', 'card', 'graph')")): + with pytest.raises(ValidationError, match=re.escape("allowed values: ")): vm.Page(title="Page Title", components=[test_component]) def test_valid_control_types(self, standard_px_chart): From 60c456de4d034f2641f55c5c66fc018d36b950ea Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 21:04:37 +0200 Subject: [PATCH 063/121] Add documentation --- .../docs/assets/user_guides/table/table.png | Bin 0 -> 171789 bytes .../docs/pages/user_guides/components.md | 86 +---------------- vizro-core/docs/pages/user_guides/graph.md | 89 ++++++++++++++++++ vizro-core/docs/pages/user_guides/table.md | 72 ++++++++++++++ vizro-core/mkdocs.yml | 5 +- .../models/_components/_components_utils.py | 2 +- 6 files changed, 169 insertions(+), 85 deletions(-) create mode 100644 vizro-core/docs/assets/user_guides/table/table.png create mode 100755 vizro-core/docs/pages/user_guides/graph.md create mode 100755 vizro-core/docs/pages/user_guides/table.md diff --git a/vizro-core/docs/assets/user_guides/table/table.png b/vizro-core/docs/assets/user_guides/table/table.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8689aa2ff8cda2e32f300fec048d722731cd66 GIT binary patch literal 171789 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� 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

u@NU3FH0WTqG=rJ$-`9 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 literal 0 HcmV?d00001 diff --git a/vizro-core/docs/assets/user_guides/table/table.png b/vizro-core/docs/assets/user_guides/table/table.png index 8a8689aa2ff8cda2e32f300fec048d722731cd66..d9f960dd10bd221d9077f990724cf3507cb4f01d 100644 GIT binary patch literal 495221 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%0Aplb$Iz$mSA`7c3T}H3| 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

    sOWJq>u?_z#e)}Z*eGMlaCWW(EnMG1I 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�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

    !jg^cpxFH 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� z!?kqV$#!#$K_rMu#p?w&bk~+AdtoXtAmBEkwh9j(@VbC>AJ9&&glPO;p_M!VLCD!z zM={vK6V;OryMb15ZS6#{j77?ri%I^G?Opm^mtKuK{ae9AdVBli?E&T`w!&b6bf%4a zk*aE_6+LvEuqsQK$P8zQZg6jb;ql{7(O_PJE-D*Fl@1jU7jF^JiN*90MAS?c&xUaK zZ~7pUPg5WtztDu+(vpByK{7l;WIo8HE6W%ilI$I;CIC#)Yzp51nH9Pur|xnAtYZYI zrDhkZKOFaOLB4}%QZQ&lzrSe7-o1ZEff0*e-m(zn-P&Hf^Y^#zBZta_6icl)D8EkL zNSNqnIVfF!4rDjZiNg7W%gd@H#!<~HdnZw3{sY^lbKh#MbJc6ZEP&J!5{fasdMdHe z({cY&c)NKk^OU+C30)ii*A;mMISM+h1KUo^NQ;$R=J-krzV45y>)gR0CHFw6%+%3= zsbdlx;z`I7QO?xIB3|IgrT}T)Fc;?^^Hn5+Q1(D#m|4FKR6^5*8w*0cbPHHf@U1l5 zL7=KXkXLz-W7~L5ZDu;MF&-1MPU?;vS%`0Ughu4G0{5%OZTAK+_7?7ow8dUH4Jlg! zBCZhk7q@(m0yyXCQn4Qn!E?w^`H(FH+#OqJIYO zJSroE~R z!nYe02Jyv_l05Ig-s6g;%>cG37&MSr;#2-BFwR{yY^5*iD4RMX9lBX3zAsF>-12(D4TR4`d9fR+ zO-2lG#!CG50yoKedQA0N=X@AveMT%9_fthPZUU^RJcs>~=zDp+?As-4?_bqT@_3=3 zD~bL{^OTj5=qhf6MtUU)po^meVBedS@Lcu%Gz6_K`m14}(K{)`VgG=xySwMPuIsO- z2o!`zi6nazIWubexAF}Q2>|Z=ruBGq-^fCq%hS1eCB`~vdgTo5W7^KEIeFsrzQmU z_4s2_9StoXLjsT18*aWf81R)Pnqh|5a+e3M`c|g#8s4&y0>RYGn|G+jjp*F!>JkLY z49Slcccs3EY63zxeEWcP2)i!>qB|kXu;i&%`9?)r+AP|B65%rdgPO1wyQwGd-@o7K z8(iNR9NVRM_Dsxr_BEvDOa6qTq+DgA^|OY!1g>a(&9SV>8UZvd!x|{Pd_c0z*52a^ zyTP`sl}c53f51B7tINpbl0)(SnU#)CvV)cq@xvFTjLUfRrz)jp6E8dEAbZ6d1d=}= zCoi_Ph+iSkuO>1P4RudyH7-gk$Ku-~18#j!kD}b&eN&1e1ISAlyz>Lc*!bN7^^zCD zL4*LI|ABt2Y%{pg<-9lRl_MfCd0c1`G;1?Mny#0ig~z5F#!?1%7`?bCY9U%;*~=D z&Z2{|ZD|G7Ydpf-jjQJr&->%jYiqf2@P`Hz`SY|cQrb9zU!oMd5g%6af4)@wfpnh(<5&7xUEt|Y?1*HwVR*?C%#$hT9%ohyw zH%ZG+G7q;|Wo!NXPVk5ip{5yh+AFe}kLbgCn{3xlS8Mj6`eWHUpA0sMZSp4Nz@;cv ztE5nZa(E&E%()$MYY-nx5gH-+<>Q`4K^FQhl#QI3I$zi+EhpE~-I-Q&0N!?D zuautUsy&AXZt5w|&n>h%lAJ;zT+{>)E3IMRBCW4L+4IQ4*MtdeRN48$cyY;KOUgvn zT^}8Gc|P5oQBUku;yFF2kvlULMGWa5YA+AywiM*8UTv%FEtm)8Ou;KaA2NbY=ec%9 zw1jPhZ*47ramC#HV%uoRR9olAx)1&%oLyQ#rm8S#)#y#P3BN(yKb6{-ay9St2Te~z zD+2p~5V-npE#&p9*X8N1E!|GXICio}=v#00rp^VhPiyB!IjDiSO%zEEBr5@Dh;HeWowBYLL34&D{Q2(O`FrstRF+pcf=%U|8f2ea^K$S`gJX z{W689R?8Oji=Du)chV~$5fM+*AFAfu;BdSb&A98PIvC+HUzJjf)`r0z7+}!l`H6L5O*5WRxA%0_f8NF@ow1VtC z2kr_g*%6!1X}Q26S_JT3C3Y@~1{V=&Ep1@iab4$(DSSE?adgnjCC*TqbuIjH694T- z(gT47ZWcR@z^48!qx3y&r?Bt)p9P)_&9iMFa8nTC1fbDye7rRSl z8afE}0dL|YX89;j9t@5or;QRP`;+N~$#bvp9WNG!#re<`MlZzPmO~ed9_&C9atkB? zOUHK;l1F*)xV~bMSJL)|Rp%D&3rjRf z6MX|rs!#=az5N(--LZoNnhse|o<&;^*<)g1MS5ZpiZ^EU?evI9%+-Gph%jps|9Qu+ z#MCFcU)4Qi5uo6?s6O4#T3nUf2Kq45AD%Jr=9Wwp^0NRV_Fx1V(B{}WIzT3YTVVlW z4mutVR2QCoyWU!jVgSNzt#v-3WTy}WG8Gu95=Vlor{YEQATB>JYkAezyBV1ZfZoP} z4vCG8EgEECKy_HeGRr+VIXJ&_{dUOh1wt}9hyV*Mhq;D^ii)m=K6u~630&${l{Vp( z@jT?9sOv4%D>qyUNhY*U&1}_HBLiev;)HW=X2mHiA0IJ!6${OW0}ig6kg&OZ*J=>U zA}%T+c!SY@9ce=L_{hMZMbpOg?4WL8$d6G$6lEocSDV*uoXIAXSs@_Fdds3fO)1?b zhk1X$Al&kI{2)GAH<*-+toRk2%haBnd-)AtjRnVn>9r*}XG&FCW4oqi?;ai9>k zbRsGcy05W*wb67_g0o zA?_K>&+J~I$#?3bgR0OIw?VlOM0c;(Jnim}rlSxb3dQLjDmgwbEtLJpd{A1@SsEz* z+g81_>yovO$yuiprRxTUIfTL|tUDEZA31x7!KR92Y>(XE4@{OPx9|qrAJ9`$R#0KL zeFonaA2M+^vi)+e%={lHZUv1%Y|wkQp^T{iOhyZdEcSO}?1xBMy%6Qxr7jgGR^MA?uoUdh=s0+1 zXRf_zu2jwZDcjf1aG4!2`7A{(?D`nCIp8ri+Z2|IxhF7YHlfq*kqUO{sm+?wEft>~ zH^y>YfI_!X83#;~5(6_k?gt{BB&o$$t&+u7tPX#PH1_ZLJIF`ZZ zd7{Lip^BX!IdM2J=C$9(CV4{em4oqNvSjsqKz=(6)YU-o zSnljuK#Q7Bzn>3vZF1fVAuVUvRt9)?O|p^5+dMybWwrFYwc|_F84q>sgAuR5|Z%Y;d`oOE@3QM zU=ssSQ>cN;kan#Q;Y7JChJYIZj7H2oeI{xQ3SbtBjLhR6a4Dr-Z=u$u)q*g}gr_JG zelEqjRm9igl&oM2ac#I|jb_=sjZ!}a^IY$L9a-xP zQ*8?m384pj_keJ&7dz^e*G=(McKlz-QO8r60!j|ueMRlD@LE84|0PFd9hKQ&Y+*AO z{A{@>W%rfbQUbrZ{8Ev@#Usv(jSF=tFE5*ne#F2HhxQ0SfnBEF1|^dIL~$?ZCVY}f zY=6%D(b@60Hani&0$B{m-gxF}eq{BjQ(r?8KQeGrB~D%sFPQFVX?eDr5&+$$YW)6P z9!Y)kg8zyIo_lVtRkD`}0|~N{Uc}9xk`#A_!1T4zB-IP;2taT@cf;bNpO853`GBosqO=0Z@O2`F;|wQ^>(_BdG`UOXoUN^m zi-N;L)ydq6r7Hm^o2oV&#I?<`3EyYb#Apro+6r_DTz3BSUWk%dAj0|gJ;U^*x9;{U zUK?-{sKhO#T$+4)j8-g1ZZ2`R0L=eW0ZuFaQfexaywsU87uMqbtTPqo{H`-e|J0eP zx5jB5cJu7!mp-GcassI|@f>4`_&qROhvqE^^(zRfyiM!*P?wNE=?ewwr=EMe{|(F= zTlf>@IeSN=pI;TXj3AaHbj)0ZOGoM_f%SR{kTp6akTmXYc*>x55dF<|{b9|lqiAu= z#_PWknv(VPImmG-Kt5dnech3@&W z!Ml8Xe5kUsxde+%^m^&k4?mksR5rw=z?KXrm@Z?o>@UDZ^gukl-=#V?KMa%c!>}7f zjJ)T}XJki5i(23M+9Y&1?ZS0z8meIXFYuqBjtC~6Ut3BdZ1N{aS~v*^sjqibl<{o9 zAtcORSX!ev{yYGrQFDtQN;1=9<~3sSGN~;RR+=GLJZ7vs^Yi~gI8sSGwG#vt1qCIg z1ehfv?qS^_2FHHO578%VkJzBLr`0((jb)ip)Frg{SIqm>(`(Y4t&0g;kC4P9eU#R4PKm;0tPV%0qN}JWv9_dyX z^98G+gd^l7tEPhm_2F{E9Kq6SQIT{FX`eD>tx@xD9>Y{*B6hk#<<`_WfrE#aynwZl zMQwLo@5on)Du5VQ0{T!yxKw_qo2|8S|NguRfAVP}V&NW>0T*>_naLeUva-ogC)IkZ zl2){7PHRJajbncaOeC89ob^aqY5-??lL2^VS;ziNM%T`u5h|Q?@vW*-U^RM(&|W1aNQ4Tb-4LeohhjpuW1BWQ`4v(sIxshE2mMhdSj#r~=H!nYAXa zE-oynN@V}7uH@slYD6f%`c2j7aG_$8K3I|^wdkhO{L6+QH9AF@ON}}j_Wkv(vqG>X8_2;- zLkX1*9W7a>RX&?HhfbYZY$ou#AmueMSSOmWTBx7D-1U%Me5(9SffVdfkoRW5F-pE_hSl# ztn_`Rx#v}+P*njeURy1R^Q3?_Al~fdW&vPsjqGM#|}W&GdT@%Q|X`vIYh{ZUW+@sW|%Pq)-) z7uw~Tzm)`DO-<=MJlOhBoALhPzl&T#Z{6cEDW=iwixII~#R2^X_;L27>j%ya2dc2W z!RYVZ&zPe0;g?`a6eC`@-8!^j4isd1>Uy|`pNoa=efR6Prn%~_(1t#o=0)m+pz9RU zpwRREZ%*;QwJ+~~#CB!(*PLP^FIdX0yWlS()tTUO;0pNJeFM}&9%xu|V1Rd523zJx zcR6F{tP*QrG*A${=T49(bYAK1?GK5$)g|1;#TApc%sw^VZ~`kc@|mq5m3Cpq1ps?+ z^=evqxr)3@T)5rES*@IXqqj0wMZsR4WTQztdJ)sH7$3sQqo>!+yt>n%9bZtg|H5`LerD32>pkTGqWTsjjP{z zqDeHMVFBBO;n7kGB^aD0iI@FiaM?&{ch@5^p2m=cCb(*zANTLtq}zj7^k1|m!Sr$G zsE98OeGQfB17C-GQY7aKq!$;b%CqNyWdrHa?e2)WJCDZc0ig%%%6rN2hEeK8$&IK- z=ck!~kv-C(r(TwC*;K9u{+WwxT>Kkx1jmJk=Rjop;GndMhz8X2EU0MMgru%VyVh3m zj^&P-Xyix()ZY0jm0hjFj*l`3IM8c`u$qc7gSypbab(c zb7#q}FP>P2B=$(w6heuEsGc_oba%FRTpgvPvs<-@%oJd?xTfTgG%&5tnrA`*3zNrenAQVb zOLaYT+-8yejq&TcXJRFGg8aacMEkpsN>FLK_MmZW;a(*&9N4IyMO3&tub{>@)$nUP zTJqFsQ_c-FuRHmYYDk3p1bdQ4$@2#BV?+~b_52dZ<*bz>(wIf7_$Z)eJ*OxyrFXdP zD!4!_mXX6Y<6p<8n2sG36$h9JfJQc~5dDwSROI>+vE!>o|KQWzqn)<=8ZgT%8TI_ zR-~tWU7U5pjrLLp2=%CT1C!DMVe44P&!!aLWC(A9j)@lDzJSg_cHj;yOFVwiD&*+~hgiDs$?VJAR2^ zKd%JVXZ2;wd%X9{Uc*$X{Dwuy9Q=G>Yo`+4uP%)8SgL^$S(>t&`EfJzl@fnsotANg zZAwS?-TF+Njou)luK)UVYU93+4yPYCT%o`J)+JKD()50Xn3P)Lx&J?!rgopRY?cr+ zLf9B&O4o-eRaHk2_E4%R$d}ZSy3It;p>)u$8qWvBmNj$ZW;EcQ{gCo7Bq3n{yG84a z+@fC|@HmeO46ZKzQm9C9#udT(2uWh_J4mambQ$_DIHqWkKXTdvufgaCzrl~sT|)pd z7rM&M&CP8TA7)I+z@ued;2uacs$~2e2cYD3uPw!2o9M^5f(Wii?W2_9T5qDAeacZS zy2WCmo4W4_g}?5up|tJ>fyD$Kb7L!n5J-$M4%@xg$7J-~Kugs2paLeV(`@W)=*5laUIwd*FqDah-EQ1H>PWQD+C6GB`P4kSe=%N zW4F}J_hYrM`5T)t9`&ESQ(qC@soM)w46U2I< z<6`=)WwImI>iX2hbRB*_&C=VO{5s&B`V8qz*4Q_uK@?IGQ8smCm)4|F`h$s}z%$;F zci&r743e~f^nciU>#!=<^<7jDrIb_@B&C#8x^W1A)aGz9w#pR*K+bf= zr5#7$;KMB5#Yb&kcbG2|8UBf4dg(93sewTE-F_So*p42w{zz+6ZH;0zZd(rkJjhq| zDgy`iYgMr;H@$oCl0_>=3-$a;LzHij)1(^^y-J-i0OGR9QYk{h#blS6GRwYEtBb8P zUS39xd6r|2Pz)g!kbO#B-dU&58yFwsQ3^-pr}H7L5le7f9TSn191!M~=%~vR_Vh?} zo;}}U-|@;WKqhve+WSST1(<}5*LlF>3Zv!+iJ~s$Iv*L}C733?JZQVot#@d+uj4cC zM*^j*V4#3d6Ed>OF1Drj8FLi8@nKq~mmvnopsq{DJ#@uze%RW5elZghlT0>iQjK#G zGO!W4XSfxY?g@M23=j~ma)?6}vu%e8MG@lRh0rm2l5RPVl94JMo8-=sPf$&{)#dl@ za5I@SU{NQtydHBcHK6CfET`@?J=xOBz&6}&ob6LXO%9$r*v&b^B^Xzk`He-ADdFUlvDUB_e8VsJ z#j^%W;=wW`20h=>vMF|gF+@6)D0PQ1n*b9`nd0Mv>mdtwm3n(w^ESh0^%lClk~1t? z{)DjVrAqJ3f6mAogUrFuxFiyjQl9^gahmA}b;*YT#`_Pl6jNt5w?JPnYr7^tU+fx% z2|A#Hvy8=Y1shE;ow?Q;mc|0g(T}a1DwH{Vb?o2`lrR*jn-{U}u4c_zeDtv}Qnlrz zmgnP3Y^iWsBPmwwcZ|0nc6s#ikm8{AK@Z+%h{=1=t9J?;jx4ULnmSxr);)B~SjKqh z;&rHWp`9lh-utRz?hV9oRB-8AJwtmD+|`l^^AWG`Y2Sqo=B3O47||JUNPc?Ed!8Z; zwk8}U^z>SqIjn2=W%2Msr7oKOq)UxJbgBKSqj=S`62%%9pDVS!usp5Qbj6+rx;Hc* zW=FG#{NhTLHR|>-Prj=UegEDhIlEQ(QJV_Q#HZI}ex$)-3I7ex61s{}4cegV0UYk* z9lgT4S5BKW&x%xLI$>MSOjnlat!ohZD}pwUElM}mb2Wrz1{@z>37QdQ52x{J9uqPVIMs>fY@7dE9dO3sM6B>hfg6;`pfT> zsT|y>8; z%1-xu9B&!t?}RC9=B*e_m27q(Qa>sP5hzgDrJ;ASSEgWjNVg zfi)?TF+unC{?hdKRZAlGuugM70!HaeHuCZxvQ8LlWCVwIckCl|_~AKUH(^oA88QjM zs=6+Hd^>b;5g>CSlNUKcM>+y;t z13Or-w?1GUpkB4-vK)p}*10Vc#~UrRtm6abF?z)d6K%m5(=1fg&v3o2C**}>W~!Lw zPpPmxw{Hm(0|AH=4TxD)ok$3%CB@NjVROEVWL5&=<{a{Yv^R z35HzvO9c4XAC7-xNEr+SPkN31y9n^xCKb9hsS%OEd$b>{Ts#vT(w-=KCse&6Q09cD zAEIn+nK`=GlJTv66zDz7IroW40J{O?BXYsr=#Y~H<% z>>w(nDmRjSGH_{zuYi?|^-@-P{buS6ogyhWEVq>nW`^<;wz6`n+#lkuwp{&X6~EVX z!M<^F1ohYI?R@|CAO8^YM+YXu`u)T}jPys-{hz<8sD@5H9o@aZ&lUUyc=f*r8y$Ah z4zGXskq{Y~9wH;}8m|9$&3tqMHZ^2YqZcG6Ya9i|Nq2yZb``l}x%}bKMPBa$1?#l9)xXa&F!*_kQet z>U_AY*fl2I1Thyay`J}2LJ&-2TbttP=~7HcH0+a+7i{-kXpA+HzTLz-TBETaDTl)3 z`I@SgW((w|q=QnnKuFWIR~XV_pzi+$<@D!`A& zxStFO@kCYibP1B%nSQjc+P%C8{7|wF7{m0N@TdUV1vzk%9`{jhjcAi$_z98VRG2MX=v&^;GS&?#HZGR(1v$J-!ai4m1l+zEc0^mZ zhS_dS-~(H#GD|^8%>mEG@?hDhU1*&Nr?8pW$dR74ww1^Rv1sB|3uWO13_z%)ezvcA zmIS*xrxG0jJuH04`%;LwmiDvSQ(5uHd{z-a-}G3cJV4?4#}7abg@tc?_}RfzI+Ba*opqPJc@w*)ef0^#iRJxL)yiGP>ku;6ChtN#>hQ7p;xX9wahyi zIOKC$D9pNmWk#e%G4>Z)5M3@UAi^(s3$^+xsl#2rj%1pRjEwME(76mRGq~Y%Tc09^ zAI9v#=C!EfHDrMHmXYdxs?baYI=pYItA=#GfAF3jz#-m~%i`bjo(7cYBM@D>8)T5! z-r-DnmIAP_DuEskFPBJ@T~2cmVeymvG=chq{N#W*dorsnZ1&}S$`6tWbjWEX3z?X_ z*;&5DOqe0lwlrYqaxgOL@J#-LFH=N_s$}%`CF%w~4%5-b^I@POs6KG%YfrxJo|;{* z%W)tHYiqSGL}QsODs=rUp?GNS+y%`HKv9wHlYf$DwPC(uPUlJHzOld6zEbyQ?Sa#u zgeL-&+myH4GS6DtEep3DVO+I>xpe`pGxR;g&jF;=!W-dMXWp!h+=roAjK zlKh1m%tJY?hCe|gFdOOZ6`YAJUA_qo^HZY!GarvL-jbS9a&v#4NlHwVJKA5h+_QfE z2}*XnfBvxpNz8j0jei`{UTw6{z-=@Scd&E#)Tv!1Jph7`_-ES+2Gv}UWZ~Ob#gzrJ zDN8HfY~W*%ihP7LkQq$bPh3xpoib=SoC*`7;x@HvApjL2#?w70&nMp^YYwNYr6s(u z(5P1nQG#Yo0l?RFixFx;H1b3g4Uv+2ScHU8*ZJ%XBX#xj*XiqV;wxK7Trgzr%z4QuoHNk&(AMR;C5*eP+zJ1gctN>?p*U(c|Ron;2MFWu0fH zi|AT$Zo!uUkwIn`rkFht!lqzfg69B~ajHbAHi*IXV2U~%0QJyrTRG0WtbD;fRUEH z)h*;N%dhM|IiS>kgkyO+Mj*4oFsCC4>qeX8!S61HQr@T z+?;8r!=R0zV-`}<#aP$Siv?1v4J}@Z695xw_1sx)Fc`dw@-Z>Y==8+`gYan=s7*xl zkdSWR+Su9QyI~m{8^%o5MOb(oPhi`wZsaJfzX*v(|07orwlF_Eorp0-9f6AiL>?BF zq9A>tzo;INm87vWvPfU23G0J6VukDV;!>C7qhHVR&?Wll>6ERo`mT_*L`$?x734;d)zx|>By#mLxjq~8)0!0T~Z?R*R9+k6QG zJp`lnnh`A09qdXxzGJ7076#b=?U5pJ^=)7l)!2dOC<;rToNUNk;+Qm zLAX8f{SI;jm!N<<6m0f)EBZ@SGhKnQ^cPuxDZ#e;e13>tQd{l};7IhtJ@X&60y6w6 zpw~zb?A(jEXSCyBB;UnrhMv~tEJ+Mf1L5^Q5uLZBTPL7K&*qiSi$8rD0-B#U@n?=h zYy9bNwDsZdP37$yXb^oeyK5vY2NKY_W!dkoUq?=cSc?mSMtQ<|IUfE&TfcpygU0K~ zL8Q*9kDT}Z{hmk4;XZF7@}%IeF$E*?G#%f!>i%~X9LGt8`i|`3z44varOLRw$rKkg?^lE<6mYu_O#+u6EXrwiT` zfbkm`8pqgGtD6+IyMB``67Gt&fa6)w+0pmD+kW1(guF|ATe14%{7rOoMyt=hi@;#XV%yu|LFKw z(teC1yZo!Edd<X&f5~FClhW>-m6HLjc_d`Nxz=806TPj<9HfHbVMR zerHK7+1fDhm9jrm8u?&X{_6E>$XY$Sb>g9VZL)zu?u!@5ioV2zBN7wBQ+JjJt;6)u zeYal12DTBMfc0rHS=8~a8XqwG#j9)wRKKKV^R0|ji9LnehxvZD4z>1BV@6scUIp-# zA}r)C=;GawfCs{<@nfJ9|G9GFMW$wq+-*f3z<|3R9Mcy_D%ifQd^W&Y)S*1P{!!Rx z7LehY62kVu8F(9+IcHlVp-CF-t~U}-m%LQ46%VUG^ELyx`dwk42KT-Et_51$_N+I= zDcp_Q0FmkjvSo4m;JiAHAg-uIMNY*lSzR;RBF^XxFcROv{ATb?~^ z@N7sl5Uv8tX`Rv;2{4hcVmP_DgjZ&j&d7J&B1*Rk zaj;Ivw&FQlE6m({>$!~yG~qF*8pd5l%FVeo>n}0TB}HsbBR@UC_2QvERB?ME&#e-U^VU;NeCsdol1|9iG%f1x6*7cXFn>f|K%dF|9v2#iZNeWqF)m*5FkSB|2clbTFx5(-jcP} z)!;vnj%GtQfE`+_TB3TfT&4Lp5|G^Yh={}FPDWR3cz8~25Tl@FdDJqb&FLA^HMffk z(5n4rr(S+4R<*1SI?4RI-Ar(Qshb`#PR`D)Q@U=73W~DB3~wm&87&g7@%JZT_a*nO8PiAO7TDE7lDseRA9)9pQEaf z+x0hZ-r;~eZ*j@4pzZlCO+pMzzuY!u#&;zAtssQR-u=`+N1_u3uIIKFn4wq@f!J>| zy@}D$n+EoU;!6VFhVWX|iEQ;>T>)xnrRLSBVq8$MFTQmoI0-hLfg_{uxKNf}duI6f@SUwNj8s|IRU--xcaz(% z;dvd=fv9KleW^IA4ki6NBz)t`D&eLRbkc4J`n2(1HK*Vbq(9p_LkxI4wz68gr1_I( z^uuDwz&i-@vcW|ZGxg~uJz>yVU36Z5d8XlV4EV62V#;Y7K@U_%b1w{rf10KDW~4+~ zSbwp*On50VLQn-O5CFaTx7Ze*c$ctJW%;nXuSMz(XN=>{`~p# z4dug}Ku+i0xVgfFyd#NxGVYV7MfDtjPvnOj!(kbG5p@sZ6R7}xYpPlehm{tB6rqZJ z%R&_S;8~wh3p0DP5F>%VFlhK*qA19uw)W1_&sMDuwKQ&)t5yz4)|6##U7!M0)CXJ{?*mA0 zLSHbI5zTVZ;7^v;lTQK$3AZ7uN5C8zOqROo=x4vwFTb;~2oG@rgz}<|1`!20IdWBP z_Q#@`qKd$uXG&)7H!mi9PSB+jvK7`H9J80LL0(Lmqz4%tFhmX{7}*YZR-T=u87*-! zTxZ^{;R|DtL5uCO05}D_qH%{krh^#N;SaIM1n7$6W93;<^FF3PsfokH7{7`N*w_P+ zT1P`Pq?UN){px*87m46{7<1iG9UV63bSr&7#{;wYZcE_dw(5K#XB_?9GU(FY%7p6I zgYqd@igRL#B7b+bOm~fk4;G;b=?g~fBXtK33NTIp@F=}Qlle}0q^;$%2dKC21N12b z@?RP-q1Tm(m!dCDXb=mC!k7lx!XxEpLQxJ!K=@XqWTLL}rO}>)^6l^~j#0=$C{~#q zA`>loFL!Wn0@7D6aQ;~YZ7_rj9VXP(m=z%aqsReR+O`KRy6lkzameFBjH0yN5RY1f zHN+`;l_iS94{wTcS@{=M(c-pQ^A5-jkOa;@JY5w8Mg%;(WW)H;PVLuGSuc+a ztZ9uFjQFQiA^F;&P|Ue}jgF+Yqp3*@YC=13qnY7Dp0(UG05e#|SU5Z(b=kq~8xvDq zAmxuB*L6K~D8*nqiB2+N+Pr#;v*);6<0;j{L@P|Kl~R!jl_YzBE<+-??A}G!*YDDP zN#Hs#rnhbZPh5rVS5r^vss+@`l26PgDW~y}YhYiZT$xn(O*w(@MT8F)3019tf4gn5 zQ4%n$+y5bdGmQQve*;$NI^_%B4bzd;IO7jYdKApzV5J!~3Gd?LZ5mB+YF`Lu*=TiV zG3!TDuXc(8z#2At-G&u=`9@C)dXZ5Fr_oeImgZA^ePFd{2C*ChaKMfQ_wApY@k|jf z&dHNVHWkjCh(kVy&ui_3ff7=Y0m<_h`Wos-FdWa;uoR!2)JAibWFH1wSjvJ4o-5K* zAaHl%`Bfs0dkvF|6vSgW-Xsz0mt86cwnMKH^3}UyyFOgkb&&!MZ~+R_-e|H8g}fR{ ztdP(dwyI?<-784sHvcaoH}5AuL~bg>WVld2HMlA$=~_T)`~7MP^&@}VQoRNOkk;4f zAtgnt_>O9zuMGGj4&F92NR@m;6i{gyGiaEu^npeWQ(DPdx7^#x3?T#35_IY;4vkq7 zJ#)$-H$P$ zq55<82n*&o-un5Ksw0i3*@>C2LbFU(96Z2j2#ZwpB zwhB$_kSJb{EH+BW1ZaF>+;GBM+Gwp<0>2m!U;?k}KWl0BW8TE@^$bNfFpR_J2X;w` zKIsD#6ckw}*(~e3Zz%dsHxft1^x07tX;@{QqEMd4h|GFcPMzTsNE{BzPGcw*&)37<_3?O67{a^`6BPGpWXLMukhQw~~YDqI0_!5cy*uh$8J8DS} z1Zq^kJxRTtM~b?r{wE}%c0Of_PP}IfUn|tF$PZ2Yf0eprIwN7T=Z@)v9t0AjwSW92 zM(f>{6>J~aeyQ;(slkVen_5{W_Hk%Q$(8L;phPPgwK5E5M*^Dyu-5Q!IuJN)!|(eH zWG+(i4_^qUs(n@?HCps(fa!GgeuV={>tx+Br&apCwdqYT{23#AAt4RosqT+{fgY5N<=-*QvmhW)G7#>VU@#@l2l27;kv(il$ zDBb4VRXL*v1%FB1bZBo}U#2&~l?|NAk5N>VeSbOhUmzsbJOyB+0jmxMRWsiBo zok6pF?cRJQDNJMk3MjIm1Q8^n{)>T++)FT$ABKd5F#uzLwoq2GP~ZV5-==4@HWfRr z1-Zb5#(cs68x@M%R;n-q(fj~w9m zVI!>85!SWGIvvN$^pwdy@7)f;`+~-$>51{g*e`_iS81Jo>Qz_0>&QA}4C3M{o%>hA z6$f6%)>W4dPo@-r6u+6)j*iU>_g-f|%`~`cx_Q!eO9#}0c+6biL#3-oam*>A*yUZu z>GOEUi}e)Fj*Bid`ywKr)3?g)<=t8Jsuv`lAnr*DE<6Rh(=T`B5=m_%bJrbhLKucE` zG;Q9mI0KNAK#q=rSqwzIn+ ztZonDA%O&ioYt>i-?D!4kc?I{dfPLy9*K%JSA2lX$g_3!Bqz0*7J(UgjZ&l!qu>h8 z#6@-Ni~NSYD8;f5pN60~ps@jA-Gy^u9W8prrPn)i=n0|s#K8&&r{bp9`1p#S@7hj9 zOzpei``bEsD`G(M-(K74Lc= za{B~BBl6b@?12Rl z9~(&tfyE8-NX^6LdwLv@>kuxN<63n?^+M8$8W>f)T2Y9#DU}>8<<&J_Q9y6>0tO)D zdN^2BT+WQ?dX+L5CzKpblLeo38uwjFe$V}a-cKoXC+BTSh9=iR8}Vd#n(R&Rh)!QY zYSO>JL+Q}_8%XsxiZvXYC~#gfrOf@H{royKf3c1J-28&eT?H_gR#k24Ka-Ryq`(Iz zQr_+lQQ_bHcHngbsr$5b6@cdFSMU2bUun@y6I|=98aDjJQF;!Z9E)R^cCN({OF9!) z+x@?{UM~!*f4`~77_N&gIUCV_&Sm0Kt~c{2iPdnz1Ax3F-Z{!uLB;d@Vf_{WxgyRf zN~JXQ`@(rWA@`7XMLoBxCta@@qz0qgtg#ni$9@~s1QaC=OFcA`9Ji-4H~#7Jacsx| zbae6Ni@(3hUvF0qAdXp-%Dy}Kd(stz@X(Vn=V?j7mM$A7!9zh1HD0Jx>HQCd;=e}17*kx8*Wq5pZE zg_-pr?rZkTaz@+8JG-rM%mNklx4!safUKscH#aKq+O?TBUwrhf&XC!V$OPS4cMDKx zjwtWBjb1w+k`E3ZySvA82c9K$eh22`M8>vzxrBHl1%ZugyyTLRHM-vsZ-ANHAl?GO zq=->RwL0X})Mb4lt)L*o%}@^t?rd~RU2sG#V_IRM5FpaetU8{m0oh?IWaahanyPI~rvs zI@B%fp|mZpHorIa^=V^~ao;8+oKG{4?A)4JC(E%FR6f(H2{EYYvW&2b=_NgN1_w%J{^@?A}OuYmMU+HDfgA4Io?G zG#%~NL-KxfH7ttNDr}B1T3l-!efu5*1KXqcBgFcT*C6wjSEXZT1XA`#Z>!kgp!Wqi}&sT>S1FpLJe7(pt^2OwT+ICbGYJJwV+~=LhCz*DA|7 zjV`wa2&Ld`>~DuQ-Qc^em?3q|nwi-&pGS->^)+ez)y2M4hM$jG_rfKsI!o^g&SwR| z4c!zkQ-L%;-fitVpgOT1^Vv*kEsk?b@jSm0(%6_vlqO6CI2^Z-5H{JGodQ;I?U*tmsDOP_?qyCc zUnG1V6?J#wQcL0kP%7W(Y&!h0Z_7B?eYh;hwF|sGV_IU&eNyPEYI8T zh+fQ6@)x2~bJHA92;~acD`=_heEa5L5+KtF3q_-E7ra_^8jqOW? zYm@Amk$pj@cutW!o%CoF98g;=Ews{?3Q0#lz%izm`-6f71f&fS^SaGc$`2ZW3({4^ z>6xr+>iESvr^l;CQT*ExbeJQ+N<>t}{|*Q;E;pCIgjRiITp}qcmV`FI1%*1R+RJb8?D+Bu{kpdn5jwv2sVov+KF89DDElOav zm0oPDz;_q1o2(ii%3L=}b$05SGU5RN6tI4@P0Nu_Z0UoG%$lcNEFR1`Z7&5lt>d1B zmROEyj4NgHBxshc1<4BdewYuwe*RVhhQMqn`|`~22QKHi#n<`VnV5kO@vU$Cwn|DY zL$PPB9W$DEs=>{yex&1%6`JY&rZ2qlC8|jDL9JOponAw7`^$uhDt+^?%fX;`Ttg{h z(h9N$K2p8@?7&6p6mcAlDlSOIuVOf7KW^gCxy*gWVRZs;tpFtr$sE&SthNu>eWzZ7 z-E^)Y=5u|tR_7Q1@ME&}ZYN67E9_I;v;!x};3Fa@h@t@;Y@H9CZIA5DqOOqex__$1 zzMAFAWvm^wyOcaMa5DLN4{@}&YMCB3O9M@5Ghx#fT&1REK-$u?Pzh2k15#EUkG><9Gp!ibE6hb$r8aM_R~X(@V>>Hg&lP; zmX{*mUmlEU)g2-oa1hf+GZ|9110UTVM`+?8iWOWh+Vo@fT5%UO{qjTqfb9S?bVPH* zw&9l!&gKqI9b<2gfs4)gItbI!2E&1c3y%O+WjY*sr9cpw!FYwd8CtfbAq=ITOCFpLLUCxZs&+7=9Eynv&59U|m}a2k z$%t;sOiWDdJ$XmU4npG03}NiueHjY3k#S8*kQtRkf^>EY-xr)DaL%+xv4P~lAVI!L zA=usm4IrmQEQ#JUDRH_+jC2EYfm_tUx@k)iz@q3|Te+t_1p;**`@_QNxFCq{bi8tV zHuO6`asJs@;fN z2Ho|KD>si!6<|ysG+MZP!NJ;xGMI}19#lHe!KWyW&(9`tdOWdzJs|0pi&W(iT}wwB zD?c&aBXZCr6O{^mVGbA6wHP;`^I-S3lG^HN9blR79AU9}B1q?XYxfKXLpK41g_ZgJ zUG3KS7F}hPMQQiH}0|t&CzfAp4~p-%HHL8{M@p`H61prNq~~e1kt~$_E;Bh^oT({(8fl-k;Kc_ zvI6uOiZXsXOBD2~dGc4I0#xsq!HMMCdTehC^jKh+jHN%k#{X7jDazi(3D}vXSnkS& z*O?l3wH{ps?)aEw_Z7JqVYA%Fr@7FH-HB)NE%()L&sY5}^3em?t(I#&!WHT1=_4K% z+&y~pEE1&C(G>ADHSOtPp&9Mwa&ke8W-Tu4XF>TWJdPYGQe42{Gw~Gt%DWY2Sq7)! z_V3y}j-Xk2Uv4bH|7L4{yI4$ILW1sa@-esJS!egu^)iuy`FY60sw@t8SeZCM9#(s+ zyiYK=w%+0zV({pF;@TE?K2^)|^_=gG57}244(7(JL~ZO^-u5(A897vUMB<2)-LVb**@`u{4c>70@Pxd-4};Pl2bwG$B%BYLQZI^ zf(f?Tfg$F4l-1N>V^e0?G2rUnC9s`(EhlF1wJbmVhvU5%pNF_^uoke&q-+ZK;#(Ju zU7=eC(wwbtp60!{i-gwCiNvqEUt$_cRpg=Ta5`z}ZD2W+AGf1CU+Qj==5n@7EwPJI zJDa{tJ*$*m4PS5=*=l&ctV`=+-#_*szCfyZWkz%Ux8u zc%Q$w33c7W;;sCtKw@E`Tz=&dCtgF2TJln}aXseAs?+}Am>wyti@kifLRRe&zv4T=?B#{Dq~RQtJ(&?xN#H6r?OP}r`8oQ$wF6opNq$EScE$@E5~O@yu5E09;{3DpNy9SVI%5draL4-=}Wh!=GdcEY;0Y-2-{sVEnC#_ z0ZGct!bvXNK!EZa7)M`O9w*=s(o!lwCb4hhvASD6^YL&$OpDj&bu`xqH+PZ6p&&Ia z?U0UwHX)zesDUy!pBx`>McWrRkb@42=tH*f=4LcP&gZGVF;NZ=BC4yjdIy3!q0>s! zeV77{T10vo)|!fLl<=yN3SEKn+2UnFXfX0*y)^#fA#A(jn-mDog-Z0DpqLo#hWDlT zmVJ@;S&UBlN5x~6fYwPkE6CuiNa9Bo&bC2rs72gr@t1rr>QMrXPFT zplH!ffBi~P%cvP`ezYa#U{59|prgFb-Idd;r|E{@?N8BZWH9XWpn$;xzG+~#MA*_! z7sZlQ#D#=pDe}WSJ;Q@WdP;C!sVoLP2W-hI77M%OcK6xUI}^I>-+NEiSE^ED-@>(t z@;sLdR;|?iCKp^%5!xrnwdi5=-+ie~fPzz)@41$j;$!Jh0t~OF?_hmJBky*)L<|hC z%zX}CHGaVqZow@K^2|@{y~;zcNj!n7L=broh3JKl^3dn9Es{W9Jxzy$>|3fTW&Ko$ z>~Ax3b1ffr=Qi>g+&-Nb8#K0OqPJ83*~pw+ZXcqFA&iB7qxk-8ZT}4%%RrMuTDc~Q z_s{NBOFG~bhM!$&M*2szX!;sJi{d^#zWtAIjnD)p1n4s5A6o=n1jl>gCi={r(U55p zryHSS#((9WsXchoevqZooX#Iey2t*5tU(m#IdE#i4u>qScu!a|y>_>^`3c>SIi z!JU%SB_|GK5mKlB##Vm8uID+dHU_S@%+xi!L83G+?AG-cci2w>r3SWi5@Cp_3 zB9B*E+*T#_Xco*sf^Yle?7^Xv!@HT88J_m$1$j!tZ?8Utfbe>clRinT?;n0h#=N}m zbjzJ#DIksGoRurk{A^pnoFW|qYlDEb)~O69%I1rs zX~lep$4&h&6C!iQBmL3HpICYc?aDcQv?jxOW*2&J@CdMq!#nl#Y?m21CGuehw{9JW zmSR3$1I6}T{retD!>!buRPoRdujvz4M5~44&fL>{dg8PPT;O(O$TNi#+oPQUDsvrz z*G#8sYp&ev2FBKinY_9hMGDGOcX!+UYTh)rsxqUP4Aj84^yIkR3nyd8t*%#_FpK=t*s+E7X* zdZ<*|PZf}YFfS@7{>IgM5!7y*L*%Q7b#lO>J@a^V?N|Nuf>Cs*xNt6#k}^G`{q|Y5 zbgm#DwJ@?gL#rZ4AB-8V-}p)1!+tZGrE>w)V86g{DRMb_6%?ib~$Zn=7uFCLpor?IBK#f_fuU}1m=CeRa$0UtNl7C63bb(C3R!Km;SSEnPFVr|*M~(jQwmgc~-FtknOeuN) zcraf}{R@uO^(B{(Qv%>vAX6@h-gm!oE%G{9zLMhY>&@Y+0TJT(1uV~Yr#^}l@X_kJ zmx`Yv4n^_P#rkjZo4qoYEv;oCT6?NA%^2R%XNUCWS!&{dR;(a zxPt=#YOR8FVTJN9>0kSROFIa^OM%)u7t^&0w{$`R?XJKY^Dcpw_V$owV8_*|T`U#b z;Nz}xmHK&ZctRKAzThnO}ckP!W9@eNsp8$Qmopq{yYM?rL>b2y4ab zE-R(V`4V{^tjF?n7$>w={1uREO|zVTgh=a|jthR%`;FpPEP9)!U)qLu2}I`RVzTpe z^JY`;P-1sQ5^_$Fb51$MMct6wKh>-`>hps=)=GJa3-b8DJe!bEz;`;_FqagbztKa9 z=6agIylkk`at-?IPb=ipYen(~yt;rKj*jAE&-M{`e_rQUZq1Kij8;aYz2N0d^~8L* zS_1ez)usTyr}2uO-tml?Gxy`YRjP;nuaaC^>Ne+|y7b%-IL#y!&q)Ikzw*2jr@Sk~ zICp_1OmLt|{)eU*0n4|GdB-Q1ek=TMGo<4fQu5zK+*PD$$yPQ`gY!9MAHLqtseJwY z8w4lSa+r>#>n#oy6j+?P#~_@}$JEGk=K+i&!CyxO0L6|(Iq1v^W5osOV`@*W{q0zv zeRDEhT{ot4>5Avgm^(2u@@^&Kvtu!eG%fN-c?eZ3u*JYYQ zyL}yBB0jnNs^{4#C?&y+n$L&n)g9!I_ZXutQ{3fN2d9$-vzx{!VIO5V*ozpZi+vE2 zqt81*e6I1W8YMLcRbg!Ciz^MK*p<-EBx?Q*00NVS>o4~1e+CO>_)joMO)ZlPSI)Im{;^ZYt2g-FobG`7SKZg%Zq$^ zrv3LTkocJyhb+MW5B-XTD#d+fb}};~qYhE@>_S!~G_^<5i9`|3+t_0U@1xgYClw#& z=A~e85PN3^_Dk{~u7(O&JPre~cYfTC&m*ycV2^ZiB$p~qDj(;;exdaQJRH3MAYhGg z&P%5?0NqjZSF$9SAP>C+&Wy~f;9kvz!`c4W*xf*X1yb+wl+6wJ?YFJTYP;N(WCKG8 zPMPZt-nk+=%8R~E-C7;nk$CjTdi!*2odeWWhx$5|{0OgXxAr?QO0anoMMT2-L>G)7n5PqCCb~;X`>vQU_ADJG_6oTPlS&B`B9<{=0e?f7`h5S zh9omsN^z#RQc*`J;Y3b;;X%GC4JFq-Uo{5nnZPT)M0dV^)izv<9VyyqF`l(=H4WC` zH<-<42fMcK*WbqHi}u@=#J-Vbi$U&Zw?F)>$zJ%Fe|x!m88YcF8xU4LO^@TJU*tm z^|?I4ZzE%Exf!v1hB_}_ys(g$oODEEV+`(!LzF6HN})`GwfjpPCqSy1!IovZXXgXt z?LuQ0`Vv#KQJsMZDO;MyFMq^6+w8AVr%K$TLbJleZ|mBc|` z4ACbIWO%%D7@McFI+dAfoCO4%TMQtKZu#!rjP`zU#O(LWtZbWo{yfzmllv#EaZF7^TZ**Uh7Vxwc3rEJ)_r@ z0*LtrI`^gGosZCa zu$#BGFr;MBb*Ccm9B=CYR|+B-y}Rgu(R1yNhnrmAGKLR&5$O1ql%_8#XW7qNmbZSd zb9ubCHbGlkTZ@-3x+kva&&z3bGCIR(wsE0SM0!8SmQGnmdj}Rb7x|KMS_;X7oke9m zeqy#qY_9DWR^osW@+tYDqE}8}+S%0pN{=+@pJ0jEM3dWJs2CRadK zv_rlYZA{%19ql*#8Q$IO`C~V;ulhx9O-!bJ>7{V@HOp`LQyZ^G%Hez<5we8amYw~h9h_q3b9Rj}CKv{Pe`%Mzgyf$EFMU?+wN*FH$b4Kw&spB>$6QCV zyno2WYZB2?C*)e->j7*74W%=VcM45H92cxxgFRE0FN$rV10oJ^YWorw5Yfv|Lh_k{ z7>OQ}iiTP>2J!tFZMJ_(hG?cmmiUqK=a!C+(3fd*v-vAG0b2xq~qO_)Wh+ zL#WF98UUcLK#c|l1QrkR{`!r-{6Fy5B_B^sxyS3@j)Jd4N_jLkCWx@c!?=;otiQDL zUp>9)(cTdX4q%Lw%=a|Ze!+n5RVW3&aFi@h^gJqVDaq4{?~|h#|H+ePJY*)E=@UmJ zC@L-)*;P>Ohqmt3g){w6`@g&Z<_|@l;9f_fg>-hfp{Y0(SN<;r>HmKeq!o2msv=!7 z-w8*d2qu?0fORBrhybHHX5bGSl8``4D?`;R2(S*oF#3Oib*MmblSZ8t;;{WSrl!Dz zpwHIKdG=(2g1S+h^Urs+do*f?E5soVK(7-DMCrkKvqDCp8gPq|1bIvnh{}nFJpj5& z0!&LPu~@la{g0!#^m1orXWPimc0wAQEPi|x5-Bj)`s-dQUEpjy%M1IJ5l)mRRKCFk zWF8j*2S|C*rmLDa)ur5~rL!d%kcA}2JTIWHkBSiR9f8hc$y|A@4X|1Y%Y+hPcdDn$ zvENiw0!P+lvkM{gaSfkl1~sk1w01W*0Yq+oBWN5@TEmf#U|&0VjeN@^BYo%R=XFg_ zpqTC%aaGVzP+x35JXCSBlsCN%?#r_cEPIpgTFkS|yqJC{YLaxBdwLVVq8R*mbV2iEoB9|{iT0lL+UmFT(>&i1^1ck2Y&N*n z9ovo>-}IzmY|XN^_xDwmhysN`UoD92m~%NEcG#xr5qa?HQE}~b4{Dm-{5@sdaoOi< zVCsSvb`xfVh)EvSL~T~X$MhQ%bahPB~C1MJY=A2{P|fJ>L*;G>8(pdM^g_# z`sNv6IQ~&YcOOo}%`>u-Vq;p5y6S=ehLFu78xOMJI-+G~-!Bn9$vGL|rJ_w>yIyZO zT9S@jA@P9YHo&zk$DTI_Q~IoeBs(_orIR7)2O1?NdaIv;K_i^0^2B-tNxk@aT&(KV zkHpFs<_+eX19=_W-g@MPfT$;Zn@tU_z3t$b|ohW>{;JS*lpdJ z53bXBf?R64gj{vnrhv~atg_6xW5_o4D6!-};gQH4v>RYA74qIm0or}A6c?>zbwxi* z*;yJ;jON(o2yb+Gy5IH|TQ%A=D8Jga1fc^5VIxJLTc2qw;Ap86oHE%PqSObJgol6_ zT$ll5H-c^Byg!kVoah%1Wb>xe6$TE+iyVAhx5VG^2Z9OL(;Nl7iXTJnyK3pT$p3k; zn29H9S6%QWC7?DnW;J8u)E#_{xdn3Tm%O=J;wj@qfwz0d)rBq~>TFO4+-`4L8<04D zsI$93Uo&po=P*a1lnX=q0uiP(r)&0A-?vU>OJs>5A3piqYUU!R9DaEW5MLaSlPD)Df`S63|>IiLAl)4c{8nw9lv-KYv06{2PTz9`{=<2;41#Qx3PIH?7hrPE9i?UtAMqva&5h(#h1eB6i zQhHDU0qGcNR6=QKh8Pe95orNwknZkOM7kM58tLw#XWyf*u6M<|-nEZoe}BGX|3itH z=bq=e@9R3RGl)jT6(MS~d6up@+aQ@b_pkop zb7G8W)JT~XGl}Vaf-$*Me*wx7zuJvW=@dYCD^{z4@0Nzq=7o8lxiQ;4MGqJh`s@B_ ziqTKjBH|H`gKMNWi!(xv`pJ8^janHrOH6arBJe~>2i^I~taWs%U3Za#Ohl#6A06&4 zvw`~ExQmhv9P;(E7(;-Hmzb9PXZzn@P!FKy6!|QTR6v#sWuc6X-j0k6al0-(s$HH{ z;Wfqxd~|6acAU{rQnK!OUT_A0W^&Lj|5TqZwr0}+8R?_Pwp;J<7xc*4y&aRZqdw3_tqzq04aQ&EsCd;$%E`dq7MuW7j>bb#iig zfU=zGmDyFgNI<~nv$ee|@H1#Fh7mKTWsvzzeMvuqE&8heeO6uw&?oe%9HIOW;xdS3I;yf=}r+oILwi+ zEc})ZLH66*oC%ryGxAG3y&xPQqFsM8K3u-XQ{==0||G} z1wH)I*`dulf)2;!AWTqlH|kl|9G_f?#WXPA`LVw&Rd}2V=SCPHlk#_ZKRVm;v`VWy zk->ejXpv3d-Ho$zs~wn|Fo9mYIVjzelxAFgt}~K@Al_9&AuWbt5qVD|SBoCd1@#ga z78gy}UJXMOzA#52vFr(T-8VG|*;TrZg?8ZT&X)lKxAV^olwbf~Vm8eG25-p7$b@8j zyNN~G$o|GRj*nfp2Y}9wg8dBrQ5y#D2FRxYQ6C$IXo5149jg!btp`@L&xj#`B6jh| zQ!Ti?#Tkx~TR6ppK~Kn4kZ1C_g*Sjkgeu0v@=@wMo(X`Y&CV^zCIfWCUX+$I2Y3vX z8hz`}>d1_9>@R&^%a#8coPEe&Y!W7T^EQT`2nwaJSFaerK66PFy^aAlNd5!3vA4%P z;`eqJnV&8-z_`8(e_J^*AZmXkxx?2WuzaiLLSO(lVIdjm|9fmBf7WO9BchedPtQ#c z*jLX2zBtnSt%@kzO1YsjHAXfJMp?tDU1}K$g8VWL+>hSYp~o_DcWyt&5Jpz}+SE=l zh}mrD42XN=rSn`JacpU3^9E<3_+y%&*;(=raiq1i935}4Q>4#6gEpq#1RTUO*e5j! zE*Ci6k90vW#WTV^I?#ReQ+g7qrS!&@jj;xz*RBs&ImTmbJDmnOGs_-(gVeT?7UP4X zmxm#aTb^JG+s|@_yP#G$1I4)YOD#uO5#H#{om*M0&U=`0b){enU_;BST_et4o4fqu=Q^ycDkBj{bJ zgyh-6P6f|OPmY>}tKTB@-E`Ng9CIrR2!n6!CPl2QP-|AMc%8o|6)_%R5314H`lt_z zNaF4TZqps>BkE_Bum(jCl2Ii$QRI%z0!HFGg-{8J7Cx`&kvy-j!|;2$HXm02*`Jf- zjsJ-Zzr~@(M<1eKa8AfKDCka=7%tizZMIEN4hiJH^k~E#a4VJg{P`tPr|uKC+Y*Cn z6xj3*nnH~BLTdI7wYMgZU1Zlh8}7QPua|yPy|OrK8FtGv`l293$i^fpHKQa`tf>k?_yhGQ~*VPb;Ab-X=s# z#5Wu3c0~9+fAVGMFe;g&L1r(72SE%!whmJ!47H=^P01y*Kd2pAvayB$t`P$ne0p*d z{ol6Iec&s^L*o|^VW>9io>Gfh{e!ieTp&0mn=8TP1io0&rqZRRdASqK>OAxY95L2* z9h2!nuHtt>u2W-_S`E;6VT2y*Rpj?4T`zRccWzf6u?ucB64+f>q61|4cH*{xy#fD( z-CZkVjqs$Kq{Q6=5B*h6MS2(GW#nMMVfi8|=NEfJ1|)%Q&+}YMO%$+RQ*UXI!qH(e zXtWK+j9At`{likRk~}?o3pW1%btv~xHg}}`g&n9lc|2|BI|qjg1i|>ZUlCh+@WL)n z*$gl&U?qDXr>Qp9<~YBOl)w0@KLZ>+_N`r? zek1F@N~wPXD&~P`XhlR$<+mC3Kg!a7`D#h6p5tb+ zOrif7ulc8|rN%H`u)Gcaaw&d&184z2&-MS)Kz^;qKds`QZ;Eudyq5h{ z|5dWYO7eq($Y&T-A=TX077F5u+FaK2(rsvg8p&fB7qo8SS94=oMO}7-Qpd+bT)8Fr z-FHh?zSWeqwiiF|(^{)`OD#4V)QBqQ3ob6YvehFU-wbHV8WpraI)b^*XU`y%w*KZR zg?(p+WaB9?(EvY}fg0a#=@L5)P25K|S2=XdL$O5zqF^&7#gKE~n|#yKs(>BKeQxef zIp7B}+cF_OXHAQdYBrDo$yXyV4hlIqI^wH_sDQY8VuZN3v+E~%Zu{2zn|oU!bD2{x z^|lTHg^1fvbBR$*^6h*tbFl{e?*sT>Pra&u5P*qLgSFTqBjAD<0`{77zAe3pKj|De zXG)GQo<`HQiU=$;Vv#r4P1)=Fjus2dh6ML{hX!bu1#P zJM}tOMUvp>C@)>Qd`Z`nnu3D$@Y5ao*Szg$=J%~|$eFV{JcDaZ>bPss2)B_-P}ro{ z9kiutapzFh)kL5_g*?@^MeBos9#)74y_UR+ZxI{W!GwaaYYxF9FzCz1QT z_dY3OyDG=rm#Pne3}#%XcXN&U1$Pu0UTNlq;Hz<2?>8$S7UeBPt)i^6~cT0%8#RS;})-JkYFb!By8j(o0sAj<_8a~nL!X8 zx2Tr|;I0EQL+p{8$iDvqP;z6alyc5BJ zPK)8N=hD-~1cd>LN3zAp!1RAYGC1d`hWP|-)|8)3uj(kO{9Z~O&IH>2rGZBIn&?)t zx}zKsbei~w>r_XmWo;upQY7&U(050C^12}}0>*3H=8xVxZxjK_N7zvzSQAh;&~8X& z+3Iy2lmSxK02eVMcr1M|nw`P&UJcZ~n|;snRy^0Ke&h}uwZhWK${;3I@ROImhEXIX z!Dr@M7W*=cxL>U7pW7DWP2R%fg@ucC5fBip9__A8=)FNteoQ@BXVki8XlFYYdqsp5suSElb8g z41f{FTaKL;Om&qo9PnCnN@4Z=X1Nq&O6H)aF@od5N{9eF1maSG<}($(KL@*`Br7Y! zXleaGTF`F)!Ryu8Gyg0=I_RjDt|x_*dUs^0DSlfOmSug>X>)X*1_}WEY@asjfRbX^<&t8w zkfxL_35ROx!w~hXfp1q~!mVCuQBsf5i4CSRIZg*lSs`aXNSKbVHMt*o?5Gl!UmL3$ z;rWCak64pnhCMhG%D>7T&%>KRAKtTDacLUQVGZ09UIOT+Qe>W%kiPILm5)F$8FN6y zz^Qv`A!?<<)>N$C_@hq<%})}Eb|ekz;#9DJ4KJQu2 z$M^8s7J?fXm+zKVqd(PA-3tcWX*fxD64v5)z-&ZJj1Jk%tma9QzGzhUI*rQ%5m6B% z`F6OVA0zivt`Rett zs@HPN$a|UsqXT|_;+1$V1WwjQv(uo&K+ zLMghFMPn>0-tM*-Hpn0>JYrt^FT$hVqe2XefTG)9G*!nfY-VmYlIG$7Ct-y&mgl!i z3w>2-qt+*OEH~MM&q~j8Sv#b(@oMg>ktlfcyfm#dG^OV= zFV@L=S#+EEJRwAbv>Wy1|6^fM*S+@t49yT=Y6p!5?n7BEEqEkekx3uVL*Nws?BM+5 zn>XXeBV`j7r6BLY1CgV{aYh~2nvxGe3Z5q3huC9B`l!oWD)+i;_K*Aa?k@Q#VKV+A z^j)P+OZRnsg-NU?Ff%+}G0$7b=tTuS*pmYItrK7m%L(+rhum523GAz#5(o!iQJsXE;S;TwwC~>_}@XB^gn|(9;FuM5__

    u@NU3FH0WTqG=rJ$-`9 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

    ;9oh(uxlr_!)2c zrKLUcL+?NRE-$bMuU>hC?30AUy%!;FTV!PILehcMFmmQ69mTb<@!c^R!H-*Zl{pAn z)yLmPMpOZs!WzMu5_Ph?J`sL2-`hI5{GGnfT~OVQOV4)+;9Bkv#;&^&W>r_WftAjRPemrXtDO@A$UKV5Ux(R0wC#sDGA6rN6K;N zu{LFP9Nl?N$RFw#WSp9vk@38-HQP&jcj@p_8`p>1MmFwT&`NuTb70%;u7Ww*Qn9Ja zeOup~!F!SP@vL8-<7r8E`3w5R-VCqjeCR;|N-ag_Jp!I&3#ama)f~9J-ywPY*9ToR zW3$aYPq$j$A_sPXO_q_?a_!a<#Edbc2cVzb^{1HdFP{5%pBq`jP(yggq0i^enapJ6 zZL#S+^0r#c^fnkObt~I-dWb0tX30VMr6*DPo1L7gIl1bH=CnsfAouraAIjJnIIgYC zr`V?LVeq0fQiT!rDY8IukOKa`l_A82TcX9xzp4fqRYj~p%LRhk-cUf5^Fm1e5= z%-SYClXyCi8@idfTw$W-hd=hQ3yJL5Ih!zolO;ulgYbKKI}pl2-uyt3l9o>|KQAv3 zXCD~~7$t>M1S4T`rYt0B{?L+hPUZ9B1NOHO6$F&@TwIDGBBKN*6d$gN+*E-q4+`X5 z4GrPE^yo7KI63nLEbDd_$5ibG=LprgV8RY71!pyPHSO0%KgEn5e7WztFgODLn32Jf zDrvc_!9hTn^+Z=fzMrT$?*jQ%N-M(CrPc5p z_@{bxN`5G`Mh=f~Kfv5E3rG$ac;z1%hJn)RXPKoW50N}m4Pbubn7U0<^Q5)0s&5yt z9G8alv`WlbniON+(_W;>O%1`M(xu<@%!2jJ?h2e5It;3a-ank}3!R<9TMw;3=Ui6V zx#NObo1$Lpm&OFi_u{v#G_i_6aaV~!v6JnZD8Ng;falle>G z&Lf>;q={eaXejvlj}>L)LKVdh9tKMvo6RHo}dkT~(eG zklXnkoh4j~KJINza9N7X)S4($|4y(h8zH28MR>w99zaN&px|U1e=qvGj8kVysB*t} z{`~t3$XK(lCGj*{I+gFuTPI<8aUF&4s02UH00^*|RxjElb!==)``m(0RoU)3GgpTT za;_9}mwm@ySQbaYa~B41!tJ)yUdD*n%W9RGrf7-dWNfx&Q47G1m`^xDSX>8{gOfmtomJZQEGB z!_mu;(%ry2G@sKDg3V0wsDfMS$&&#YKzaTFx6+Jjr9O zJW-KcIH|a}t#OO}3P^+H2_;0KjM7+)tVnLc6NEVnm5I?v((K5(ALMXJRk6u;?8@7YXY6FI6JR?~&#rYj}M zF9-Jzw&y!gSfV(uW?ekoOBh7mP7dwc*z@r3_(NwrPPq?!r6nCbb6rX`_s5?Iy6jai zyzPV^Pn^LcinLwqtq47+&0-T;L|dpWkAs|Wt@SXg(SFCCCu@EkuMS^G=yFx2Sb|SP z9@PnQa}9}wiXtw_~y}X z4sWIsov^TUXS^bB&VgRk(M#(6sh}v!Cp5jr#zrj|CEWA5nw^ge16TwTN6-Ko;p?T9 zF3ahr_Y~uJl|d=-dh;Z6Lv%(7|Go5N)%p`g8-rI1W;)^vtspu>;;J~Gh6y-_0F&M9 z>spMsRlukkQI2s}tQF1MRgDqCg$dYP=Hv^VQL)YK?T9_oc7qeTgDeC>HSR_M2k1T` z>%Ry3M{vdprRT;vwwl~Flb4&|&ur{ZBBN13k%$8XG!w+;rdD>EKNh2(-fI*dzM`Uo zW13qp&H9FSu}4~sa80Xm#O3s3P4&}04(LB|$W5_({a%_Uv&w@o1q~uIG%Dvc(|(d4SZ5R2ndv8WXFiCKQ@1J} z@Wr8p8vy!tC%=A)FFuPiA+IgrQ<-KHcV7;f`yIRcVvmj!Sq}WK3dnDiO+L>)H1}Vc zM#=-Wbz)`HvIT{1?N-w9Ziiz|{8ijR6A%;)mUcJhmaAE)kMrD?@cnesA9~^$~f}{KcTRq*$stW*MGCW%D|reIwPN#NeI!LWWFn~b|NX4J&W$s9}ijV5&_G6 z-E>STG>=UIWMU|`w6>P!rg?pODix^qX)10y7v6lZkrZfT-#$P6eU)*n$}u=S@j%ov zC5xikPwWxv^GrFDSXs7)fLNFNWzc~!Xdu;#wBfnzrCibS=VYg~RD|FZgi4;rfG9Iu zE|PBxG014bJIL@bQn+?JT;9yEIe&pWJRAvTnOAV^%9Q1!c{NI+xFWThCEK#A-f--v zlrC%)wr>wBQ!oxlB*1a(vh+nQO>Asr3n1l{l~K8~c7EO;WyGyzW#q}nlAtoa%XJLb z!mm$`LiW~3>;^X_JUwm1ZfAVK>vI*mgE~@NH1qaYJA2ra1+&nYDRlIoXpOXuop?*J ztWgHV91RDpcY`-LJhD~>|CB}+#+INxvw&B;r{e5Yx3?!J z25utn`ap5L5^dr!|JWL}-g)mDi)KKPi()ibr;&hN5KQxqq61!^-wBdaQ-(Q`Ys^O1 z&ay-6TX0*q%9hnWFRFB@1d^Dug&Cn4bCS@tG@Q2-%5t6tVT{$^!|L5>J!Z#vM(F>s z@Bh_TY8hDAldQ9I27e2_KxYB?k}IOU_xIMl|A+plhn)3;rf7Be{fpihIM4v6u!tv1 z{YhIY9}@0*5s)qZ;u=7ca^VWa>V?MQ@SYB#MjXt~L37BgOU1QH)(EFxkyt~qb)8>z zUBq*JdXp5QPFKIHkK0TQj%xDB?N2fjci#HfbKqOYPCzKKZYX&|bX>^awB!=s^zo>r zh~?* zctlvr`4`OaAAabM-xh{gI&8K41B|p*!6tHabapf#^99)G~W?aR6^{UmT9RRR_x%7n8a~EhXu{5kxvkD3h&N_0{={;2l#Ip8xW)md& zwVZVN2_R|rg`+J@B7uE3e^2&$INQ>cMNdCdb=X6=>q{rN(+A1ZQ*24tW6&N@Kbrin z;MrIR9`1kukt>&;EN8Jo@9WRouPL~}U|50W7Qi{)QNQr%&j_6$iK&Z6M0Vc83tzkD z5~x|Gr#r!I(I5*7y%LBjll=Q|j)sSf{)XgVEXGA1F}A<}H-A_l zvHAX$Q1Hc8GLU@95R{Cy&!@H=!^VT&y)!H2rzi5%x}LxWt36#30h;>sY7~mGWI9Gr z2FElD3O)i6LHiJ1%S(p%qhqETfGrX$Z*jsgTm9>v@q|F+qxo;!UadPWbKPDYfXJCE zD#UJmC{IUZ4VvE~dTE{~$q7EqkI;Vt(pWx5ANC%$w%MjQc3C={sXzP_ei7%I_=~&a zn){ygaa2YCL^)6TtT(y96j&((`y0dgfOW&>AWx(5?Wcia?78+jZPj9Iprt^b-&yEE z;vf_mW5NX{+`FhnKrUOV_;#|$$qWPX?IICBft`z5at6*G0D};_rj?o|GjFCy`FK@; zxe2{~2E`W!oES~$#Qf6vi;O9S*-x#G3eB~ZmxtKS9Do&e#~up}zj*rf>srJ>=8IQ( zfsO}`OHda&tQDx$S;^m871p~@@dYFc3roSnsu5bm1C6F^J|cvj92T$%z7tr_h=ikx zknxmDb0FOomYb>{dYD-Sb78qto}u|ZB*fH;da20y0G2~RUhtn z^(x>M3g8EZ7%}?OOnV#-kG6+RZ}HV4p><+4?FC||hGDxOgf6=twriey-lHQTDhkvv zO_lB31yg=pjH03qRL95z(DU+QPu8E^IcxZ08hL6lf0)frThA?$|+ z8ObJwj}(nRHxNDWxwtBcvPty%ax_iUx)lg}Q|nWEviFJm$^JEC-4jRaPgmiA<&2kI&(|R)$mrCUetOm-Lig^cAls?@fR?Mfi)8n4{v0s_IFEgBgUzn zpRW;cuYD?*BgoC6N2F^JYMGvnXej_X$(`K#gD(sR4kH0~iAr`pxbL1hmLCkTod8HmR#!$#A*Ig}8eA2y}|lrH@(amNg$qGCbZS4?9-v!o};CanELok*zi z#(h+7tl=-9E~3WeX-6^5RhL0Wmzg)MeT${1ZVv;g#>eAq7B-aa#{f_Vpye^O((dK= z8fW!sX(RXAGCtN7F=rk*>3V|z_bbFbgDd*$UI3+3XZ{I5=2X&atOf(Hu4J4V=yZQB zZMq$H+vQq|&)RZdOUzOoY$nEQlHIBtww9I&9(K&ha^c_sz?7BJ>BWF8>E+7?m1gn) zi7au*r!9Uydb2LeX>3gWYso{tz4&OmrEUeGVl#R)T7SG$*w`Q}{t_NQiA_nIHcop| zr-wjoe1)J`YaILHTj(&(5^`6W!!?gm`{48I;{t^CE8b9g=|FOA%a(5J9A$dx^dl^y z&=QL#OXQQSYNOkr;S7VW>y61f!!pB*CstdCrllkaDfF#qLnkmG-ADN6ZjKrB;oRNj ziVpY3-iw=)Zu`Cl~NVCZ;(jp)-_hR#8Vk=lZ^5!q*GFcTv=S4PWsBewYwXPRR;&Eb8UXt zf|j|py3w7mD`?c{!TkceGdWe&RoeE>sG%>?GydrHF8(rlGSIWsdbmT!(-f^_WUAP; zYfn?>;%}L}@gO5uxGiOG*7T8ujcvrxxjf={0rjnfUG;H4vLv9qqEZGxYAKH!5}t6p z^;?T~#-Ua=uo`t=#E9L5`L#}H@LB_|xnxUd=#F>BZu>~wiT`ku=hOH* zDfjBV>mMUIwo7BH81MS~i?W-hAH;`*GsU}ZMFJD%yX?9jrFT~84-q~6$uji8y16!AZGOs{H;vB+jOB$I7>`f3Dj5Ob z?PnJN>Q2xJ(neORb6 zn)GnbB;S~OVv<=^zP+`@s-ek1Pp`Ukc$hhGpYvmrC_SikR!Q+yIX+OO*9X@g#=GoM z4um>7+6wd`oGjv8PvWgC+;bnnF!yfeLplyVbqJtxPqkH!_NI)tW-@T(!grBK zq&nf19w>MJP#SL8L6?B`Z0=N9*1($sjw?A=Z+UuVc-Z`?QgQH9p-E8EN=&6JEdu9cKNlg>yUSYdr$sS$k_ zV>oX*T9r-g1ox36iKDDPpP@|URW{6-T2|lieJymj$lZd*hFpZ~+Ls;-xW!jB$%jDK zJZ*P?uZYW?-#`hBO)L(4!a;DbR^L$C#+o&p3SJsm|W0R%dGg(A>3#s!98`99EB-JKLI(f=?^$uZm8s zu5!?ry7soWXWu<&r<-Jl1fMx%#=DHRSs@k%J=Av z2HF=35on_6sYRAp;ZgzY*pBG3551zNLr$0>#}bW0nkz+7X_Q?16fjYoKfe%OYoXTW zEzK;FTxoau>D~NDrTvGc>D<@O8&}J?##bsA_|WSd=-|%SZ*4<8sPw@Ao7pDX6fpXp z!yc$Bb3L;4Yj6Nhr6B~~zHzWU*DQ}bnOUjGw0}<}_2g6hIJ*M{7jU$+<1sVSEC_4C zoHM{>N8tX>GMhz1gVEQ#_+TDZd?X06*hU>E8O2B0T&n4`m&_xe3{82FL>DP+627AP zH0tmWE{9sveMoG2v=^(c;ePQIKtL99yM#-v%yM6Y)M43Yeg@A$HN0gx6N!~87JfQr zHIeK8@IM1!s?=jH;THiftu)AorW#giF~JCM;INz}^+1%c0gmF~K{;c(iYp9g5*pDFKQK!P7zfm%_0CE?Y^ zv4%0%;1y(16^nmv3mTYcs}a54s>-d53w^q!yQI`t9yP&vF%VjTv*Tp!7vahfD01v! zxBRVTMb2>yzNzxI`lQokAiP>K?*I^mj1~(6XA@tbqAVA7ya#Rb+P-oLw1wx@-9DNE z0B^qtwprWJKjU5%xS~_jk{wTxNT}wD{JLQ?Wo>NUo}d0k`wgm33pbzq zh@js+RaNP0FL`PPS#;=b%B;+jiLh=N>ks2|o}L0{~J41IF{z%l9s-u?L_QKrJzBN85R_Rf?f;KK*ZJ^s9sofdg1SKK57#BS6w)^r3j^=D3L6 z$S}Lu<=hDw{C-}~kTqY9`AnBDEF8mCVy%Vfkbxf5st;P&+wr-PfgpIX4O`r$<59xl zi@)l}zoH@mfUy9BDGVG*JpV@#{}*3*#&bZi_D%W#qmvkAwCf|E%ul@bW*bzXfAaE_~!F%AwN1T2QK&FvM_(yI2 zoQ#3*w$^|B2Vx`)n)9ET+)OQbXF0&a^y7t0V?ByadNS>;h?(DcoH@VHO7H4$XY%U3 zVB&NLb}pI~I!BCuCj%>GlyHS2sRX%_S(HbZEq7dFO&q%>rKQUoGSgw38Lp3b` zwA#&;yH|}+jxKVe0k6R(RSn6_&E-Cw!b^GDRB8k4Z^3YF`U$ft0IVX9qUZf)wYe`| z6JkO?It>0*r+`6x1;V_zc)eSpT11rb_To$P(Zw?blM+`wdDVglQ3zey8c(bzqragzaNeDhHM zhd41>3Gz;Ckvsc1K*)G&erlc8VB6JlW-Q2%9G^96r^Yj0Uo>NRS=Wwa8-O$Zzu>Qa zM-SSLlK+Rjw~UK&-NS_iK|mw~fdwcfh>{A@3?WK)Hz+0D-3EwAcXvy74v0ugH^U&( zLr6EAd#ttg-fN$|&pE&IzF*EaVMb=2=egs5U;itn0Qp4v4?)>*7VSt{qH9%AG#I#{ z4+d_}12UT3+`I$`Uk)cWtB>oGi8v~5pe7|9v#=DUK&^Zv1gD4o4gBR(bmMG(SYoh7 zA(Yz2xj=(@DBh8?a<4ja=O+^CtI675VM=IFveoSk*y&cx5&ng&<<8g0X?QQ)B(E-( zKG6qGIe-RWrNfsnYdzg`xy)h0PU#P>y{x^cm?cRNu(5W<2XG9mUO=^+*O0z4vFoUp z$vYBBOgd(TFPoxkH(E1_iKQx{Wy`usYY#(5%sFG5LmFQiYS-VvKHoJiZG*<|M`B&N zFdvG3*4+W>snzSt0~rNa=gE@X%+^h3$@d4Zytbb!KD2tU zpmuRrtvEZu5oAHLfLbvNM7?fDnF&h+ax}WbCTHCX5s5q|#Q0Pb)0FBk?|zpM=%+;L z2_0l+y@ZyQo@7<#Gp!($${BbGF0ou}V!Hp{7xHyd1FlZ4Mn*;+mUqw1&Cyhg;c)6j zsuk-VlpnPEfhXsP8pA@@ZBih}I^1huWmUBL=`4Qu;GkS9wE5WAcp~5{eIX(zH zPSKv00_lDRm{-kG^Nj)~`hs=b-$$`AFU$jBE`#1bgJaux>TP1VKneQQ=Fj~vimG4U z({=cs*)mleXi+yjJU}Nsm{s4&s(SBVuT*(H0u$dnwhEcohU$*?s)Ll-d<7wA`00Ap zt=AN0D-X_AF%A=oDA$QBPl{m112AVi64*2Koa@do767d-eEV|SI2qKk^5tj(%8h6@ zuI*2EO+a>M8;$qm)QXy-des5jm_Y*xkJVZKgvate9gg06NSmo&<>;1kmGc&8$vf)8 zv46s2$=)IQIvr@JvNYcTGOm3Jg}wNNlSW&+-DND5>*;Z)b1U~o*ZK@hgKtHO_=n^p zSVq>o7vHU9m%Y}_sbE|FawGf9E`ND*GhkIfH-?&vOYX|!U5=Bn6VUPl9fS88^)qPR z1siWv+-U*9;IDpb3{RTbg7p%~GMmPgO>!>FMd4vBx;*!;YPEuTmh$ z`oRHNN;Ap`tl+7?$Y|2|TzlI@Ba>f5>gi-;Wgjs6w+EBbSvTzS4dG;--xTNe6jdE3 zgrIAe5iJ5>%}J7Za=rYKKTBl>IrWu zhuJ(P#}%9N@!2V-HC5(2eSDv>6bV2rfn-M;uSc1=MEu~gDdVX%%?RAlJ1`!|Qo3o~QAh04yP&cy4Sj3Wgba}ox9bvQ9t`cqLs<)?OurvA@GKudos+-Q)g zChsP{!}w(HRE3_jiouK5lDiP+?)<*(_QMLb&-H#{aih>Fr;Y5rVhHW_bsHPsce@T- z3I@bS$H(G6dXRuO%gp3WxfVb1YJz}r0>n2Ma|cQ50Qw3!1K+z7FM>nCiM z(#)-SG1|nH#O_3f0{N6{wXXiq$jB&x3GX1B@=Uir+K3^fu5R=?ml~HTEI;d^#UIM= zpV$tZv4{BFzPc7P#p>yH5b547S^)nlG*N00!qJi6JymOup|rLW5I`_cT)lTgQAtTU zQ2XqJvS9xy;|L(G8It}WuI)V=eIL<*a(z%SsIgGV)TqW|;VqMHL(gvWP?b#0LpA2e z)(?+*tIoYp7NdTg6R{#aNaPj7o(leDUNfZDdooV$O?@~ZNr?8WBhL>H_p-@sXX~;) z>mG;FX_Q_=5hHd%zz$@#9LDTed)!q0p5TO8S8tR|EFivy2+#mNJVCkB%hRQVLSw$O zX6MCsrfg0<;uB5wF-Oui^E+7C9A7VDa&YdK zrNU_@r+$$ZwTF1BYo4Ga} z$9tq;TJVXaY8ciJZ~cyF7y(H|(KVI*-&#!NQXzf)%biLF7%OCL(UE|fgUT%+pc~DU zP<-1D{?zOg!2;jq1e`k?3KW=`n)8%;3F@1TD_%p3#YWP*Fg6<@5Lg2o-w4enD@wKd z8m$1)kZ4x`_a-+JY?%9b9p6!FzB?}fmWHi-ZSmf5Tw+vf8@9syOo4(yBrYWrb;*%6 zmC<_zdJ#R`;0`Aeif<$8+W}a`+k_#&^di{<$|Var%IbhDX6?s2 z`1OK<+odB>HRf}YbeotItL87dS#cOSmv#J}gEdcd=4Ozi6by)=6E+f)njk^xD1Qcd1bmMm&WcLz@OU`L&T$FrJJT^1!5l z9VIU$+SAMjs5%YL8+h!L(2J3Twoj~$HV-CFdsF@nR%@o2jYO?O>;$h*#hX7J+h`=1 ze1v1r{~c2c$g<1$_mG+>PEdNp29Xp-n23m02Pp3ur>Zu?K^@kmx|iR6lEio7dSoT{ z-c$l!DfK_0lx;52Up_wInA*OKJe@xW>LDWLuJd1~dS5eq_3Eb?HSRSDtRanVPF!^T zl?NB4yD6)}@?Op=WA=8^O;SlIW+Y;`@9uNNjlI{?W4oqZMKQz3~ z!{oW+_Uc}B6UB^P#YZ>XV`uMUcDcM+t2dfl!}BJ9^GLAQ$OBqJb;-C_LP#Nl)AaQP z(an@zyQS}gkF-4+8l{b}bdEH097a5M(($4t<5veYat6Cf43;Pcm_r@8`ZGkQO{;j^ zHyY5mET1)6bH$y0Us8mc>9{iuyi%?Zm9RVg(APO3VYaejZ7g%Ei3(A_Yk@_tAmviv z0a^J{aj=9@h}{J!+tR!5C|gyvrm6s+mCC!l>$$uruu21Y{nSJ`>9V6soilsIT33$p zqrFL3^KAzt#kDW!W=k-A$*A-<+0&VFJ}rr8M5<%>b`b&NUP7qb9xcauPN_Jv*f8XL znZ?+#`%`)zpp5OEQAri)%COeu_VbUqQsWxm)J~1d$4_&w7=Q<^)BQl&Oo^8f0~xI+5`zR@1vkP!sL$iVL!i>iC*&Zj6mV$FZd_5 z0rgnwJ%HI%f5B`we#2}t;4&!RMeW-3Y~X4ji#f^W8I#9Byb`ike94$nFDqBQfF4IW zI#=z7Q(#2B5|SajyOKO^R|Hu6T6fl)CjSv|tA@QSM>0|F<_LMg1s0~U68;%N&81>mp-rnUpUxAuRHirct<;W z@F;8&mP!7&nZ~;AvxA_jT8r;W(@sEWSiSyjdpq)^T~z7>cl~4ckP<-zOUGhyQ}lSv z869yhuspEq>!{DvZLG8V0k<(AfjaF5m%JZ}QsiKlA^ZdAW&Geg%64`|-J7~zjh_-J zP-e+?RPAVfO&y`8Ux?cap&y7F(|5#8w{O|MC4wS_Dw%@9I1cJ9RO$$@9+Y;X!xVVa z-I*EPaL~o>j3J<9Vp68T5PefnUjVwd2IaH7&rcI3`T`OP62Q8vm_jnv~wC}1%SULC&1$@ zjdLJDy{)04L08oM2yA)+z7&wU_}R_8S3}#2Q=4%wUgcfAIh5k6nCxX2Zq~Mok?^`6 z!Z28I?0GaI*aezG#z|qf{iKHb#X+=qh)0$tegwXaF$%0csAyJRk)fM+zlycHil{QU zku4OYY%P%VLrhm@tu5BPObf}x4v$@8ymN3XfIJj;*I53>?=6Z34RHD`oFXD4)w5yi zA%e682BY!*f^~G4kX;|K*}*KsBa6MI*LAKvy}eNdD`S~W&=eSG@l!sJPU7|&tdo6f zwi4rfTW)o<(7e|G^wZ4zga+HN^V7%NR32C)NZ-7W&jT!7Jvf>_=6SSa+f_{Eg6|Bp zEkVFQtGxM}fi~@Mkerlcpko|2{;e%0pH18k=uUS+Qn*b~n|*PXaXRKc7VKb6k3v&` z+Gu*$Dr?icFG(u=2_+MUNRs;J-}E!*l%jv3pFL8EAI#I4;w+mDf_G;ZS9Oq(b0suT zzr3wt)QK{eQzu)!hE#+SueyQ?f7yKJI>)JEXuicl`hNaFxxpBPd6u+26_PC-A0vPn_WpZHK_8Nutw^ z^);imQLX+Vv98Fk(0jcfR)?6i)=&Zm?mL%G3ryuY8F#!H*-fNl_%{F09PQOWf_DD} z1ML76ND0_>rmB|Ux7A75e0?H*OGUMnmG}O4AvPp>cvHcZ7d8qFA>(qdS@mp33P$sb z>XpmA&$tEwkAgevPs!-6^ZsK;%HnPi$wPk`Bxj!`T;2k8d%m=O@8sT{LoFkW_j8vA zP;1_{0C(V@%bolLYV-pS$Ae(fv7)%iPEYrP@cs44&Vpjr`y2_3_1D%wYF@tXY@0@( zgucEH)?Bu3Q@SRf$Mb6Z&dz(;3*W{cWXvP!M5qv!RZ|V5bo9gLniePLPpDvK+M*r{ zS8dcOhS0^w#nII{hh?vNm(LoPxpbD1IX5NZqkd+PFD?o(G`V;vTfM-~qTNAxQvF1n zoyTrBmacxh0QY$i8PB62ltjvg$tr_tvj?tC<8Fpjz;mL}-I1$JJI{{`9Adoixfsk! z4&6>-PeGGGB1ZO>H1-j+skYxuvRp5g8gLr2keoEFzT*ESQrh8%KS^mA1=NYjYG19L zRYdCLQChot0k2-!2U&9o8It_kIDBqnEn}4TzDVe55%C|noOa3r&pvyWPe#e4oW5DB zrRo_iIFoZbDy|F+y(4tC;hJOtvmP2fJxZ)^1@zaiHyX8)Bv@>W%P~{(Y|EBQV>p-D z+kMn?B)vs2_z1x1%)nQ#r1n-EI6d*9&3GMbDyl&+LqaZE5=#Ie(35o5;IJ{QyL*^k z7pMV16lJJSQEr+RAF+&v#>AcO*2Z};=va|a+|`VtBFB%tBQiiScn^pC3X!>jw!=lw zZLnawf8Cc#nSm_Kln$&OaLYTbjT_*Ut!{%f(3Tq~9?#MNL&OsDdU*K85RKZ!d3(O+ zxa8jDZAOhxpW3uuLfsl;IS{mVLa!>6y~&a6ftX_Lu(rUMI0~1^Dy*2r{MUBs>bVo6 zaMtFAAIHhNzTumw46Aq7eh2#rrFNk?kk~w__tiQ)e>T)5=PdCADdoQRZM1$ffpAEt zyYW6kgOr%#aTBbr)tF>6MDX~HOO3mD&m_)vigi`|`tD_T9D8=>_=DR9b96KG-fPh7+*<619 z5~*h&X6?nybJqiF${R4c9Zc?q|5Nr_uJyJQw7~n#cazfR2uOW4)94zVQ z{H3(rOYZ=YBAN;5!XA%4sHj9I1jAnL(nBvE+h1>$=>%?u9ISNr#4G+L`q2a@UBc|MSy@gr4J*J^~g>_BT&WJt$d&h!(AV? zp)XiC3{Yy5Oo?`?RZph-x*KP2T$XlxqW;h|-+gO7@}aqtgwdO~WVGwb-vEklqyhb+ zXXf$6AUw=g2HDv`?0*++6Vb`%q&t1|`UOS+&|YL#Z74Y${yB*bXLV`p(P-A7p3mN8 zn3CChYNZzqtLsPF843~dQB7C0C3s_y?G85p7Y zjkL9oeMj2pc*g9d^(9#QQJz7ns%4QtTYB9mlh3hMi_C(%5MO_?6lFXd;YZD+=rkC+ zz}xTh5?pnj?76?D5uu_<`Y68oK7v{AJZ}wF->02XhcJb){oqShTw?ZN z)Qmj)?Nd3zRAN4MfaK;I_a?HO99&RQBqtBn8o1ZyHFW?J`nJf8t@ck+V3k!qDB)Wu zkF6ZheufL`BtbQy>fMn-M@m58UQ-%#|E004F@H*N`e{9otDeQJcXP5*Yop<-Q{2HI zHUW9PUQwQZBWUVGePXzjn64>!V@-H=DLQB!JSZNt|ST@5*37V zDPZ++KEq<&0vxDKO#(i& z#O-hxid@C-1XI#qOw{QB4?aVoizZ{OA1Zsm*7;|SA%fH5hBKb?&XY2=zK!gMb$2cV zqtBHfH@Y_KR^4QSJDu}HWWJht)pPTsE)ev8jbla%FVjCQ3o?hi5C_Zx{ibN@~>v-k!VMmq9uyzuh-$^WA6}W)64@I zP4@Ipnj6nQ(%gy}xtJB;QRQW2g@_gXZ@>b#*R!nN4D0lZ7-jcrY+qaZRJU?;KT(mR zq#BHi6)Cm&Un03J9+=9b@EQEr?2SkOX2NvR6;-nMQ`;#y&R!1`OkxE04G!~Iv*O~~ z1nmI<72C6uS*rGE?QS3ef=V8OT4&y#+APGA5^K1F65eR8TYU`>)1v}OMrxkZ(H310 z*r>nqiNGE|@#xo4kJJ6{Zb^`jUt2ZClWXI^?VhfQEkB# zPsVvo5sp2gdv<$ZM7> zGY(S1I^OcB=ZuSqA55&rT5KnV}=d5OjS6)voKiEo_sdfRV` zFoU9ycUoo4)lr+OYFwbxndL{Vn;NyxpHg-2oZ4j0QIf8W9;xC#DawVoLHPZBm9otf=g&v#xZV(oHlv_BEL<1h zyZJ3BO&n9%_tKa*5z-z%QQ4;tgWmJ&T~5?$s%A$oZ1wkVh0w3stgBGnsehDu6ZKfr zq3SV7|9|Th_J4&3_J2i0iRQE392)cw_y6y1E_VXBBop`cKMk<{dDQ&=6Z&Gn{q5Et zf3ZsYJzV}W9FV^=Aq1o6zcsY0ndqed)6uP20?qAU6&PT0O&Xh;^u<}TL!V~{1_n0l zcS+5C*`Q7-JlAf5Rb?zQ^Z;4a%d3F$A?dcac4ua0#_r55I8ne;74$8X?dj4IP%1^f2 z>w^Ql5?2DQ;WH6CJF`+Fz^a>DQj=Rfb|cXe1&UbE&W)5H%rfe}U+b|TX1~q}Y5{;= zMr2}>&`F@bw50R)7Id{;ELRj$xr(&qm|xJ1k>5+2TcM}#)Y@!d1x<&k$#?u{X0Ltx z>+2hkgtzw_h47P;a829KiL|JdK#&dBOHSmKAS>vS=dGjF+GF@XUvO4_qRjAgUfhStNl#pPeS;h;fpsq|z zjGn6qsNPK9vV9%v69*0e>ChhCCcCVUb1S14Au=AX5YWeT#5D5ke_^>HWvfnd3|}XK z%}NeeAoImYMUM2PL%oEm8$WJFh)@WHj?6bT3=6o&2}J45eWH$}^PY%1u_yI07y9M; zfE&bEC*~7dNj@(Kx8OhkKfEYYXd;7%|Fv{3`~)*Y-Uy#_-2x~)InD6{S=F<}6? zMYjBq!b&4SZgT)i4`HqSfbY6gR7^87FO?J$n*X4=-ER!K$>Y{D$^g7Tg*Y&G5kuWK z_Y6iH%jrPP0o>T=GN0IQ0dqEx{?JW>C}^^-v3a0TMf}J90#N+e3l8Keh#=ggselP3 z($Obl*jW=c_2i%2*mBsue8I>R@!wCcmm3qF^W4HPI%;R^`F5`wE->yUH(g{&j&!{- z8dB4m4-87^-50qc)&+=)ALVdj^d~ODvo4q%`gAl&cPo$HkOfnVtIRtoxR0Dnl$wXU z*R1@cDT-tYnV}&aSqfB(qax@D4QHgv3l>vVTyDg>C{uI#|2F$)5CJSGy`2)#>K>#i zo61=6(86avzvvbDu*=pFqBxfqPBsk|=Gp>{CjFwozWxBsfe`}HJ*c%`DnuW|v#fVS zSWwUcN%3I3wfUpsDZ%s*(jDua#bV3CM?f(;Oy!Fg!_3tJPqCK-g?{nG+E7%1_vb|m zpfHP~?WejgZ&$R`ktNmnI@m@rXsb}^xwv?mNB28i<1^b9Jz7@QzHquEKIa=S_BV}I z8HJ1hcYAqt`KkN{xqHYlgczy*xe0N5r1I+d9jJ@j+scn21-8ZRyUTYpCMF2#H+?d5 zOk&gI!7yuiZ@=4NJ5kRyDvfwcP~S9_;iti4wP=liw=2i)@9+O6w&{6aj7Bj#0C2;N z8yz;NdoY*9Xt~NZzqr`x^QI~NKn{Qv`9$jFPK{XSs_O~`8_z2)74e!QPuoAXaOJl? z=Vf{IF@s+{jf{;YBJKobRKG z{)3}Bu0Y_Q6HC19?P;I3cf$mFUu4qHUkWmkuU4I`w`KZncWnTs&6o22a3$HTXIUXT zd;!T@tGY|^CvPn@iqRkwz`zt9xcQ~82?;)TsOc@JH4l56qhTjNO9!pd}B@CrcCoTbh%4B| zxKY)HhUj)QqiaSTRmLg{95zQ)_VaDuft}Bi*zQ}ZIM#bTc!gPNR)`D@8_-)pQNKPv z>)u2~#br!o^j#edexjtRTGhF2!+JJQoRE;v<94o=O)#;_fdC?_Vq(}WfC0U3o~bz- z%yE_*5J`Nf+^D@iUfND(I6~hKSZekZOTc6yUC$c9la-wvOI%y1RT-&XiKmt4CFE0+ z@4hx(;{psKi%H6jlOE%~35{NLua?b<62|K*bJ=1W7z5b)4~I3Suhxk9O%i?Gqn`r3 z6=xJ8N7{WbIev^KD*1cAK&@*L|7x;U7dVdeSc|kPRRT~fukXl%l!8)-AQy%QAR%Wz z@xJi#oKGm63M6{u4B=Yc;FCsp!#?;TN9s7?^HC=C_<{=()~x>HF$#hsOy!L4C|PUE zjbA94AP%8|!!1a0y+`sE!qkk?apaH8`h^7R>Iuyteze3#e{od%^v{lJPuB?`!1sON zA~5@o3|YWOqTb#VJUnaDJD=(4h_!^B>0znDo)LOr4ddWa+50f08pLXmSD)5SeFr(( zqo_e)&89p-|NA~XL9HA0mX}X8%q$`3I0*5`A$zo zeL}tKEr1>d2@cEY#vkOzEdiYtcean!dU1Wel#C4H@St<2KV`vIGa!b~KrF8K_~TI; zYhJkLvMlSmFVG=6SN!Eceh)_q)+WoT5P@t;Da-dxO-^$S#;15fz1p{3G?hDCKIKjh zz7@mDSlezfC9s@|0`(Ls@46E zpqb%ovc7X9X!iLo^SWIrztpD{_N5*}kv&-b^X=Vlq5lV6irG%_#96K0@wOE*veSSTmdN0;CFG2rX_xShR1#_J&5p{Z(&NQ!s) z>N6ngFehugZ#w5xaFoPqD^ zR8EemIw>KcL3&rW$nzom2&;kgV#Beb#vfsk$t`H$2+=$P!Xm4x|Kh#Ipg_gWE(KWq zy_Y9rOd6?9ydk;KFMFn;E2N}l&Ty}Y1T|eRh1J8u+=N-V9{k{}%5T;=nj&&ZY!ahI zaH;~Rj#fa{tUS<_K{1!p$lBkL7A>BvQ=OmV#Zkk^IW2M*FRU1kOGiFYda>27=eeQ6 z`8H%FlyL-Rl6IOb&RqSE)J|jVXFPSD8GK#nqdcuVWI!e#aFE>fN=gmvo`#N`isZPA zJkp2N1(~r7=?*f`Ji=Kxt$AD^nOl_a8*4SZb!4I!$98-;96bU2qmS~p%@*HJWZPK` zTUJZP$gb1rsW>F@#emvc&r~`(IgCy!=7}mcb$P{SyU^*eVg zGEdDrIJ~n^EOu*xYp|z8+~RYV5)$%Mp`QMnsZ)9EUT*2?%I&h8TBmA#JL1mtZNc0; z%~KE0EWH$6W36-KnQ@;O_-)SBrr$T1v`;CB zdoxCV#6a(0vJV`9aLB#Fb8}yW`D|}*%Pd%bNw2mX`_wSfh+FTtuI&=FvLKFbbDdy@ zJD|DCT2;!$+z>xme_6a6uj5&HPC}|vF-V(!A?ob!}H0^4ou-X-5`=$ zU6&IgaItsaNh9kTyyr;oCqTdT5x}XxNLG#(P`~?!^YW}1YYMzcXS$6E6%*& zU~kVZ(zBWzbYVWrf1$T9Uc`XrVDJX}-o4SM{Zic`HD*F_kq)woLxYl9mUG~E`zD#Z z=CC&7z?L6O;mUbqFP1f0F zi|>!&0`M#Zi082h43sNz4gJ6zZ+Yh#u=VH8@=1#-h;AG6Ot|fAg>AJ)%_9!{g&J=YIk^ z{`E(2{kfNl9-86)E`|RNb@~1~Z9NnQpWsr()H~guF%{9rVO?vF@VRCP1_N zO%UsQvgE0pgT*VKA#9s-zB4g#6#N=1R1ZOIE={L*!0y*3nXgAoSkx@`(vmLDN%Os; z)~n0*0~4qsLVQ#7qF(~LKP_rM%>EhIX^QQsX-wd7aUlpVwT-7)EuQD+8MZjCh??3*} z982K7hF((c`E35bh*+SWwYr`B{Ld?*C;A3zBsCMLve^cSXX)epwIGJl&mgMs4)Ez( zpR5dzpqJ|g8+nYl2zZlT6{4ZgZ=14EIP_JM%}(4VPHmC3_v<0$d%- z3f0kdvSOk|r>dORM-z)~s>qDhs}=8_vk=lx-v(6q?IpbPI{^VElFZ^E8#?nveC?5S zR*O>QQbF_tfKefuDzy}BHx%kS$ekNzXlUHka@l{rz$h#{EKK9eHJNyB-8u&|Rs|46 zd5WH*;=)JpV;sxhLc4;y%-U*2$^^Rl+x}|seB38&MyaSZlOB;berZPW@8Ulnq*dpi zhR{MFA}pDiH=asJ)T+-ndSy^vk#p5gcX4%#cl7c)ryIlvXNzD){7j0&&xbHV8Wt9U zTeld21bdK)Uwfnez^YT3t3*Ko8r^Z)CKUrRjA|cyoE`7=IQ#mGwHycspgjiHt#ozS zPnU4BUX0h#!lW1KT&Ov^Fo&J?G;L9nW<|T~ShlmO2;A**mU1vqRao(-xjP=NcJy^e zDCNikbTBB>eC+ew<|aMm*?J05S85YUe-xB=c^wmT*Z~EWdR)k*8wP}B9qkv|@muvCY#FS*moaHkjtKb7$Q@dzfa8)f1eGUT#-kQJYG9hv#zEx>6I#iT!Adqnn%xQ z9|4_IFLakwx)bg?5=j=$KFB zAX2^QG~unqBQh}XXnfcCoWN6jYg}t}i&6>YbeIsY8&U4fS||2}nG3IIc`*|tKuY3c zV&ia#1sqo{Tc5?ToAhqFp85E&*$2681L}9A*C-${F`wDKV zH;#43pjSh-0=@A;l}rd4PfDCEB7>1ZXpSkx`M@4JlX zD=kse)2kitZ5ZuaJAD9-Q@Ia)JE97}Ey=o75{~y6Z&vck(r?jh^B!?Y&zAy!XX$#6 zi3-_`k&OBZQ<&zAi+Ql=gh%5}^EoK+w$V>dJr-UsC3E7XI=tS<8yYBEtgj^M>L}6j zi#-ykwwjXNgkKE^!}MKcPNg(Nq%kIN;zaN6UK_{=e5iU6kH!@SD(8Zk*EtTD+yNlM zg)m}hetw6}?mc7m>S&%0O_R;XioAn_>N;my6yH^<{tR~#rFV4s^y|S%=utHye%EeL zZoaTjQ^@ceEcMhHGCzNbx1<@!zw_E8OXcyaVU3V;o^WHZnmLeA8aXwgijtU~0Zt%LAWyNkT{kk)h3M(@C# zZxp^{_r8rm&y-ekF}_6CerRlL1pY)znIb2g1Qf&!^m0i>VJtVuKqvd#?p+s9Tz)#e z8($8HM*!BoOQx|5YeqSvOVx!8)jtsK#gP?C<;7f^ESE!i9k@N;X>PtWQRkRb8Lkpj zEaG349c#O_HF)AjF-k*EpTZ8Y(|TyFYA8u$j#??-2iKd{h7BLzH3tF6P?~M>6?k#= zLnUYsZ)A)=sJYp^&rRkwHdqQZMa7jyM0oi5dn^!32y5LVBmg!p1quguiL&1gXU)QB zpOa-2TNUVtI(w(Rdt#htPG6FS=XYG40oY>Y_5K|f=-y}dZ2sQimznJpaSUJEVfV_@ zy_n12RpZu6Ov9#)c1G9V;mc>=V7v}g?rn@NLqkKor_Tw88v=Cd9MVy17Eg&2*+7gH zo6L20zof`Asay4gOZKw97tQAs=9;5LE=OaaZkk1;bqV|`Fnt+rU}EO7)|ydJ!|KKf zz$z)d*)&;cu95EY1b6|`^rs5@%o{G<;8~JOID}jL275H=UO`Ru;W811U@mXN!#6)wLcD@`G8pU06+2y_|u*eyT2->W6iBa-<=(mgX1b z`SjD!wl}MQdC(B{%Pad_n;H8tkbI%AAY{_$n2eAbnURr+gcOIf=@-QLgA8l-_Tim( znvcK_H8tD;YOMnFw8>$anT7~KDa~6kNlBKj-HfQRxBH=blyS$iXX*Yz7hqkFJK6FG z2nZkq;im&2MpMwHKQha}e?Qwc(`f#EG>Flh73R_`j@a4WBdU0l(;kIbeC*h?oLra0 z>vX@BD*mV!eiy*NikBuMB3<_+uqhnGWyg2vL3S%PNTrb##2T{@p1ylv znc%Pcm--gH%JSri-?a_azCIVl{q++S{>Fw(k$TSXVk^V3!YO^bgXVcGF^g0wAwP#qfy@b z5?HiyfsSUeYb+6I?W$&3a}{_rA5lSUSd=@MxB({N^Dv%GDP!a4k8N#I07yXY$%Yrj z7$bI}aVK1m+amiLQ=1>N=n$C7tiF9Jbc2y6n-L_*-jX^8n$idVd?6D{u+%QNlbdxbhj`P2nafuG&afvZvH7gB7MF z^NR~_i<(D-FGed(VT#Ef7IkYuyi_0*%WP(LW7UmYjYh4A({#78yy!75K%Af;^aEtOHJf=Z=ktV@r(2xmk5x|#x$6Dn18LG| z6a`|~o*=^mD;;SozzLt%!@gi1cz`aVW>mlfb+EC`$}05*7>g`Z3IDb^2bx3GwLiwk zcvIpw(!L>DTDLn-O9MMFIv#%u=8sW*s$bb<7AuP7wmB;e^TQC+0d(?JQsH)l>?k810{9KD76 z#1NmDsAeCdGD0<&zkH!KD}v*b^10OjTR+4x0aq@;194s~oUYq8h!?P?NSa+8}=yv|=U>1|aG?-$X5mH8n~k>i~52%+~3J@!Ha z*`S91_IAnMQc}7*72;{C7%sHUf-u9+9M9^eA(=%2=6B@IiNFR6*Rq|pKI#4h4mkPS zaG=J;t*AvzZ^so}96Kvnnc&SR+PP<_pA>m%ZYyiFeBnq|64CviX$Er?<_ zF|^n|-j;Vob^BvEFoq@Sn9mw<6B<8lo2(Z^Y+9fx6!OfLny&3ysRbkJmwWn zi7!b5vLAXJ7}| zd);;mE6ef`5D9R{3T+?laM~LpZdTW#Fyh`n#o5+RagEKQS15gbCZs2j*yK}I^yql#Virn zl|3J+!Fz*xd)5cFZVMBB3-_=kln#wS*k=by5XuAm3mBRYUPgG?7?S%I;Lq|yuQG+x z=!>CzhVUU{GK++TQUX5{|A9I=A@E@Pzc8l92Z;5RYXjgB{aaA)`wKqhSn?=q7Ab!m z{pajW3lQ3EaoO)LfXlyoC=T_yMK^xva$zrGhIcxx4k$irV__t)?L<(mU81;`)% z{}pU=Cg1uCg2kODv`OyP0do$H!oEkcP{}pJTz&%xExIlr$b~jv*^{Z8-yt#lk`qYF z$-`GFti!DdXQpu(7XzDi}|uUeA(*2C1%$ zj=oa>J=3i^Z^-!Zzd59u`})+f<&v0ihATfDAUKgHLUZCvSx=f<&;d9eUT;OoY&lsK zt*NU^0I-Vh3QYI?sJI;;pJO(oZ8X#I65pD-8cDDr9&LAL+3k*Ru~i$;{kZibGWxS1 zaA+;MB|IvM+1q8W&`gQn?UGtTNcfB2qlo4hrTz2~(v=Xh2v1R+VxU8IWj z_}pu|Lqv&|pJ{m17_7{<(Hy>Z2{xY8ncd~76^)E}L?a)8j6$D(P1@J79M*~yp27&- z)fjQXJtzo?`0(={2+5GddR(~J+B+8Dw^F=e+u|WO|F#phv(ObsJpt# zj2H_g2!_QkrJN$zx3=;ugABlDniUC&y7`@!nTIeP_Yti0H(B<+PMt?47~w$b6Q(`W z{H&_bbVxmTc|{+I#J`P+$yp(_&@gfB?dyyA$SzT4x)XIp51fn$ZuN-^5!2}=DWqDb zkQ-*2HDtPPub9JrVN)sxHPQENPho>qmgFG0zUVhJwaZaqg%8o@crz*t*Xwg#;?St~ zdg)PboD?v0+W;xc@j#50Zg{tR@Ge-1DVi3HiNWx+n&I+FjMHp+vaYgZkElu-6^&aI zIu!=M&vkCQ-5MsHCPmpqZo1+I{&K}&jW~=n3>zaed#2wvm>2lxYj38w6q_!*ci$B_ z=^-?txCdBf15-Bz9Fzfq%VG+v%bH(U>;y1{(Zt(gy4$zQd)76Oiw<=vx$Uy|YY{Gv zYlaYxcNs{Vky@j|O})Wv&$;Yk>?O#lK&I`5`gp~j9i_K% zsrj0FDgT#$kNr)DwgHy zlIyTCtedqL4)s1|MWR(`c`KoHj_c3J9$QS6D#?`E^;k>+b8L1tQ773dV085un0k-6 zjy{$t*v)L%U#!nAed6lcuT-?0yk93=)#N8=zn@rPIRwHdHt4W`n##4?Ni3624pUhR ziCpDdPB^rHUezci>+7FkXTI??_cw|jWTWqNS&xcqPA=F5!b%icZbC0#*(HKJRGD0G z$XowP2TWd6qFM^)3!TrE&8&UxoTZT>NH$-Rl#3)Zw8MlnSOjZk?hJ0qWKST)d833) z=&Oe~(LL{(I{Ui0@H#*;BK4*>x7uFxn{u#D{+vUgk^z`iVbMgnl;NERrK#7|#h*tg zGWrBsr;1&~y1-%CAIvA-GG@HIA=mDXc2gr&?11HtyVUUR9pK)}+5HpD8n7hG6Ya0t zRyzp25YpMy{Ln*^%yHXv1VCAPbpXk_Pt;szyBiZ2qZN+S&dFHA#^A9A>k7aw7?ae- zfRdEQt|rbctAXDo_vkg=O@Z`9Sa9?nf-Bw=qrkO3q{M&)$Hs) zFn$QE>|KjLI)S#tk21ypYZ-3Gkt-LVPukl)lyNEs-PqXJKDCz%@UQo03elz`Vbx_Q z6{Nwpx#FwizAph{MdyR3#H94~eJo&gLzh4|gk8%L=y^ec-8hxc@Gg#r-iJ zgzjB3Z?;tuuNm&(`u1131nf;eBeX=x*-)}**PXtptm=4j_uRVdk&Dksf~NplIRAXkUtyd{J8pQ*3KUP2}IAVLpD;p)>~z~yXBcM zJ-+Ejumok12#&93qNlHZoCXT6HobMF1IZ2`Yc5U3{B?J3`tEdgE;?&*oeu)vvHonC zR~r1b+mUqn!(;7~aSTCZocDL)R-am9VRF|uhtn|{w!O8^RBGQJEHL2;c=MckC|fo> zjjMIy09R`kGUL!{o8BoX4Yd+FWl5iOx~) z=$p$mf%i-o3%%~oFD#fw_Z5(TPMp4JI*=Z>>>|}~PrQ;gFMHN4nCHQ76cK4)#|vC?E6T@8?ut7LV&_sqm63 zuhyG4a~(TNj$^5p$QUt2HXA)ttO>kM?5#CrHy~9(Tn3@g`pl}V`F3vPy?fn0TUp~- zZ;|_DEfMP=UrjJ4OAbex2bT}@BA%;U^xa>cwl->h-RLxEz6EWov}(^+!wZv6^;#6~>B-Ad>+u_7^WpSM_8?Dg`jfvvd1&InhOzopF;- z`zJ!xX#=gZje2s$xbD%%Qlzt5B(m;=hh>fj2RU%yvEk3@{%A68C;CdHkky2c9^_u7 z!z)Kp>`H`ye#~F>tZYk;A9|M1AUc^16|iypOz>=But~PDa}g6$#17;nY}w|;UGl@Xh5WgJDJ)(E8kXC z0FuyruV+8HQ){Pkg5%0`HJ4;zEvfs0MZddM>w3C*>G%AA;=9Kib8=5m20#-{7aYEH zE^6&!kd?V5%LwrtH_xuyy!`ps%74&ywA!oay8hZQM)0Nf*7S1g0L`(ux%pdz$G?4l5i-l_OO>kv{7#+eiaatCZxBFX^ z6|$)Zh=?NU&d;+jgJ8VXo_2f4x?^_vhn(1)Rfw@K-DdbclofXlOF-bx&Sm{IGKxa2 zdv$g7$xt3$>vBPdkYTH$$}wC7>td~CLgb@HM`4^Ee=>k3yz+j=#9-#w7M7Z76%wQL zL|4wh;0CRNluTV$F6^(3ai^4YN~i<4YIt+@_3O1Nh$iS`msVodzPBonAW$nzkxT^L)7wHAGr!nIX2Xx|pCRRz^SOJSfi?jz?Q`UDUU-ek2I(oYfe+ z@`V+M8)Pz1t|B2vjsFc?m8}3eH?)h(GdHjDA9Wb_OPBEHY~4<>y_(%%1u!Mf5F#E_t{8iefoT5!OF{jQHSm`ufmKKbco6j8l5aYM|NH~`_kbw)-|C0v z<=E2y66M@O(ZI09mYiZOTDD`qx>w{*M=!%)EiWxm!%T6uo2sp?p&7bc&HLi1WI(kc zl1~CXb!LY?m%gND5DOcN@G!qfoxwG>qWwsSu3m-Oa2K;-W1d{ODRC<}l^2V)?iGAY zYzL3*_KARS&;hD}$33kbo<=Rc+UAP=$ZNlod757s?T!ni*j0E~9~bnY8C_lLLP9KM z%eF^ort?*l_4qWMuk7Rs63l#At8F)fujw^4$!{vW?3{Yg(AFJc@T8)nQ@h$(QyWZ= zQuvFyg#<4dgXjki48Snd@-Zxooc_#1X19kqxl-aMOr;25s;1B#*tAK7hmSLZJN^l# zDuBUMG5c2>N1jDhu`VIJUi^ulf*lQ0=_il@NCL|W~#7w zCvud-4Gw7~J1?)pLVnSCN*>?+Jv;Vdwy){|eKRLCz&^dk)&wTV>1H@6y4jIQ*Haifg{1sscLS=UyE- ziAqWq1KR3Cb3h_Eal;)FAk|Y7fv(CM4cD1z-lGe$LClU6Xg=DM z6fE@5&M3&g7zC(|@KE0L!}1B|(3Qj3GGhkWm6@6E)LU`f8K@`jwExUlv7I_#<(M-jf>dSl9!fF&u62<$h%65~UAUe9pY1_5`VUakP#(wy_FLh^d zL$glg8drfJco-SW?;DURS#ZPha9(D$>6)1_aoMl<#6e<>kND?DA2qe-Xmh9S?ImT% z+s}PnP2L`zS4@$N_l}EGUmdQF9EEaWxq%DXhX`8A%;C^*+j=oREQmWDL0rQxK5ba7 zp4r>1-3Kq(+hQOu)ah`A(L}X8f@3P?ttz|LHgBODP@>e~!1>r=wlbr$;Sq%L;3rqL zsP~+|g^=q_MGQj4%$LEXym3Wo-wMle3fR;lA~+4QR42Ms;F^g#F7UHlS2^7X*Fi)cd>WEVRrP>9nHJFkzAyo*W_=n$F5+B>HhW(OtUaCTp4c--3qn4I?)%G)5JC>{Ifijvp#ymS>Y$cI4k-a z&dQSN2WNF?vtwEs*!LXb<_0M}0iSXU|tuU2EgJi8qAVWIzX^L07hTZ1~=;dYT zn)eG|EPOTr2)K0$PwloY96%pS7xb|# z*dkq?QJHLOLWHjANZ!9!0KVXV*Q8cvQ`d)?IL+GHLDS@^%i3ih47FOm9(=~J@ZX|V z9sat2BBz(F0UtIS*1MjE0+vNqpW?QG8Xf|?bJ7;aVwU$#wBMX={01nupe{5W6)y}$7(OJ4EpolQNCrjHPO4E zTEN7x^2O9>Fk3OX_noS0)xhqqtW_r7rmXrHpO0WYHq!rwSIM&Z$Oy(WDeaGv^0*eg zIO%8+;ASa5R>(cjKC+MfGeTrw@hdaH)5Dwp>z0keQ=PTTat9ehxtZ3B8yn2KSu zr~@=M){p36YUL4*dFgP#2+X~6Be$aP9yT`YovU<-BZ>pGhXjBTR%gxg*pCGM zGE&1y2UM$6)YMXdo`3O&r7!dxX6gHm84+BpnmtwPi9Goj)NOh$Q)UfWPLB6$hJyj; zFX6c+Ma&a58!P$zP&iTW?BbKJ?^D^uMY0kDAJOu6y~;&K!(@J1mqsNk{$cDGS9?k-)~^kIe?4?l*} zpecR3%(&WHn{$?zNCWoGAf@c)6sX}r+Wes-@u$T3>&YEY>vz*HO-WhAYRf{y{P5HK z*4T3Cims|>GYEA>Ugre5Lk(vp@+IjUj-s1kVOThL$>~qu{g9r9te$Bhl>f8t^xN5) ziZZ$P$B!+w^IJikYGtjfE5D7VY92a6i}m<2x(X)sUc^fgk4KjP5YViQfe8~(%dE>& zsi?;-n6YI(i9bZAoHJ*XFyN6O5(5;K_Zer)-J6ALz6n2_t4TqUK(h3*2+Yyc^R5z} zh61l!@>?{o{I;$(=3U1864p9fiz67#Pak-piVhdgfN=Y$v`aUA8T!sD8(_Zrr{mYDHlij0xvi{ZeGtm8Of4c8D3Ah}0uhT7D<8=4{2{;j(%$Z5N> z;jVBFU<7p9W44D|fp(?JK938Rf%EFL(~vD(^rw@L#B?tqYs={xsIH|%XM`u9@v9VG z{e{*f%2yinijlw=Yzm707%Ao3fy6A&6*27YVGiCq>FF1}vx<`Fs;7-|p*By#l|rKV<=dj9~qcYo^L4%jy~XkfyVRN&p0 zKlWGPiR|b&5aWB(+hFqQ0Syoa7ztZ>Ks90u@8~K6$&hh$Y~3b;=ort&PJFtbupRK} zaqw-AY``1Bq@s`5Za*lq2>D8FRIw;m%ECzj$FPTwN&jpOBUN8MBm0PwxgGfS~Z zoNx%9u)uF}|MRttWVQC&zv@4KJ^OoJvI#B`5^7V`>$rzKYjH-3auZj;qU%1NBrUZJPioK{_$$TJWQ}+Xc_jrN`n<0 zona|1Hyg}fzH(&we&x^KmIg?6CH2QLe7Ll{N0NyVZWklB9syiTR1I@z-t7kd67|F~1 z|3Fsh|2M|K`pK8Pf8x}nXnTNn!rB{A!F{!A`nyL*5gQxyRwUPg@y);oj@z{WYfFLi8cykT zQis-#%ExjFFa?z}&>duczy=rscphjf2@#c~-R02^c6N3SJ07SwBqY=c2?>CNqI$q_ z_1LKHx}ekK6}aIQDP(|6X~O3Gok4$D>A>Dz$jOHnD&?*z8&kyv9e0rs2O?>}=H1|h z-ZXgO2ajOc>CC!QjpC{Pao5u+}r^V zlSyw)TAV)?lr0aCj;2g`c{ftc3j-SylLKTXXQrmAhXAg>Rs8x`{pJeH%&uaJT)Wmb zH8lxgkn)j7$}x$*@LOV@AI+eRYmLC}lw2&B0&_77zKsV1;5ANIAaS{%Gl42zQ4kXV z=DYj*;O&FVSBI<0j8vPPh>+OW9K!GyemOaQ6PEjumfe$YO-!57!0RUjU2AGl031<) zY=Sp$=F=?ZA4YS|lAxj)>af5L!h4{qlZ>gTc)?|}Rx+SGd@GQbRp?v8^B+HN_})Fk z+xud5a(MBJL8#Gl3mOVAmkp*$X-4gShV|WQ6jFpq2f32DkpOy?Asq^Glz%)A1pI%Y zS3wQvwN>J#n)w~Bo5ZaxEv)0byDO|9!$BQ(&=?u1K-=_w0XAPY__JAs_6TgtUAgR< zvooHM#6&aZy$zN?7)qXOrpJ_;8Wzo^VZjTe$`C*b(b~TwRj0Ka*@-9p-2t_EA8FwO|RjZ8$rE1F0J&)_{;cOIJ! z?V>tsmDExcM?)WU{tHS9(^?hooI`%ou{RpcFb`h*4@Aq;?Vk{>!C`bj{Oj~DI`G3 z^!U}vH^b7z3of=|Ja<8{lVAN;`{3}UeYnf57<=V1&gP%^5cp@F?psZEpdl(myQX{=6GXE^K>>q{$qJbFeBZYFMzlJ>~OM~5?I=5Nt2d&;bq zF_xb70d}CRBTi~uIDX%;3u?2@9uXY@)5Ry?6J5(%6t0v~??>FGLVAm)K1$BvVU1~5^AayRI?oY=EkW~DM6>TFQ%Ft~8)YeXMz#T|D(*^WTxv3{qY z9ws7Vg>nzf{(^&`x5XQBQ`#8O14R|&=@BWTlf|^81WFX+EyJ;Gmy$3;C|KlewPFfsyXyfoDgw3zwocYWmq4^XRW`hv~SCQT>U6j zJ_7@Wxf#{Hg6%c=il7N;gsbCpQ%C}1&w+n#Lg@Cy>7An2^MSZsorSLj)4+g=tc_ap z-Q<|{)G}ZiZv(GdXT5Aw$PrP&K7$fG(rB?O!eVGw4MptAxlOa5ddFI?PKerOIeZ2V zG_lU^8?#`JM*?3O4z{m=KW{RJg zY{ zn5@cjo5xI;j*bzh`~3G@rb-P7$Rrgp7tPtO%P?H)u9m`KGMIZUVjC2#a5(r+qDQ?A z_KB9`?&=qGxy<3}H1PR!JFO?LUJ`%He&?A$&wZtnb(Z1U|x zR_1QL{SRZp#QnDpniJXaRRH`IC;D$B*GkauOVgG6%Zu$yk*&RNoAU&df0`4?9%p`O zNtpYJv`s-C6aBH`!wC-RfqCEI`Y_Ax;^MPJtNy{qym>$ziYR+N%PQ`BPlw6hTV)lO*cm2JFDyyi-#m+io8 zhGcABIP~n&4UZ|*G#kF6GKSw5rtdJ!Y;H0*W>)Da63AC%Y`>R=%G4g|iGl=5@w{6@ zK;;M|lV(Glj4gl~Go-qr41$4hz0(ieV$Xf!xQR`EY&0-Zx^`}ToeqG*#pEd-E3a8? zIB`4e1UpZm9wFRS^`{FuyT|)%6sM^gbK_8oX9jJJ;#VCRN%!;tM0ieb;OyOXe z+rmNa?tj9a&dj(FLG;d4&Z)OG zRZr6$8lgD{02>B8>d6z=cd+>0uSc@|tkhy`x<-}s;KNB48m0KkU`{pf`N3Oe*9qc?$1DnqK^~V>Jdf0X z-OkKkA9M(^m44-F5$yhvt0k^v8dT-VDz1-}$5P$4O@D%QeTZeJSdA*O6F=;&kH! zrA=V2e_(M`)$fX70DxAM_j8a49}YT_ucV0hsjdw9W~AcBVqGrlcg(0He8E^&!~^xo zx8Lt7?_b)=EN=^DKWab)E{iYLGRvi|#%WI1>pk*^h(ir!)Cr;?cFQ$PYHm}nucE_0 zUj5mD`1~t9kcDmV?H3pELEAUbQRd1Q#E+`8n@&)cPdSHLua2p#ArEi}w%BftiNb;v z?2Lw$?J(NB-Q`hpfl%J5J0=d``^+zKq>=9wQ3n;-u=>$?_^vnTd0XbU zJZdg@72ySoyu30`gV0pT*Aw8cRZ2cjK`?d*LXZ&K z?)6~Cg83;f4hO*oYjBF0D`c}ae@WX?Kb^`vVNV4QFnzq1R+^Iln50K3#eZ_uf9@9E zd|=mZHjGj=+<$frI|Qb{k3{nu?P)@gmabe9B;qZhh{zlf)N5LLN}v_L6Z%5v(hyC3 z%tc__)}(`ba=kFta6^`JWj`Km<{LRZkKfPut>0@mVX#=)zrkYWzn5CsM~Q|4=IthY zOX#1%w+!zN0x6e(xdJL08)K^iYyEcRkj2CHHL$*Ds*sCFZaXgQsCBSE{c3@e`*N-i zo%x3p4MBq0+IBnNNXs651W#}U85rvGo~A&$=mr$iU*3ShqH;e$G5dU(c-hOD3=0_w zQ9if27D+RMk2BRNFaj*o5de_FiOr4*?zwVaW`KOonb@zcku$%7abJjW%JoBbFY;7N zJ9c^;SK5oPC!5PI#aI>Q| z5p)ZI6Xe)62@${y{*bmZRpBPp3QLmI2tms}tn3pfz%M{7quL{O#wk71JIC(|qkUkM z$y+327vUA;ab3tn{#Wh$L~zLWdvF!1p6LV0(M7<(z*i7#!(lcW#x&D^&E$&d=%D91 z7$=%a+e`$%UZ9=?9%=r3ZOhU*~mAo5lXPo3dm7Cog6XeAeuwR7k%DW8_OEiH2(LnjZ(nZK#Wii81amQ7z65 zZhjsBM|B1GXV3f>PW2O6Fs5dGxJbT><0O)8$-gv9Hk_s6!}Yp1Ct_FSNSXJbdP>xNh> zqO)7ie~uclH-Ker9rQpC%iaScL=ES>L9fBw98RZ$=Jd2QiNm{3D^~GfDkfeJdfN5D z*7{ygNh@2lM-j{h`4`Wlv!Ro6j%7bWg{n*3eK2kO=VP{jtb|{`cTwVZjSD!v%EFjHm1514tlm@-7CO1N@|eoDWrj!L+Rdtr>)Z zi(!dyhCT*o*R0!GvATU9oZ5NcjI$g5roxuG0f2H9I=92y``3q+;P@>2W*(<)A_2%c zz}W$YrJG_LeI%?J#j)1i0bNg2bOS>#Cnl4TBao3K3YxjG>}I9L)IWTS(;yUzEdU8I zPV$Fyalz+(f-?a7lZC5(g=*<06V4`sP_3nMsb8WPJ< zV}}nG#@W^-CVnbodJ9DDSNQZ7cEQu_fK}@5JpUdj-(NU@k6)@>o0vCl+t!yBy!0Dj z&pq1i{nfj;hoLSioQ!Nv^~~zGn{5dc$?${d85n}MF=ZMWCyh+)F-f_|=>`zyK7W=F zZf86N_Y)5qu=76MRdM8pL)(e@uM=c7drW3Ci zHO0aqPRDIA+e6Cs{4jlDok@oOp+Hel@xsPvDmgNb#a>C)EsQ(p;SFo*jG$8UGfi^Gl;&R@t6@XuqB5dzhhD!Ymu)dl!OL67SS+9VY-_LU4?T#Nl1M$lT z3Waia$F$sK%WE?-t26R?&BTPsM=M>GQM=_)@IWhp%Smdi%z)<7@i^qeiT!AeZZ#Jk zi~zHQ5n$PI2#US3pco*x$M|LVS15H)OoX<+C%MfGY)<{3DwPAb)~G8>Yj%f-!^;3m$awI9-)_JqZEn!odKcYlBT4KOU>C@XUSP%+fY z1J2TqkeiQ{@&)XuCb*o~K_(N5xR&iu#lli7exK{745ZPLD~zEaO~b6ubD+pAZDiObY(U)oN$GfxYt7nhz4R zE(X!$;c_2HJ6GCQvQ7Sz8IfM4=s93^yuH0)f>&oXF%Z1WSkKEO8eq;DTKBv$a96rR zUXsHRg)erd61qBsE@&i_f3lJHU{%G*J z8nxQI@AEyzuV^c)o~}#cH?by!d$-KQp*TX}|`B!f+=CM-(*X?MdlKB+d!yOm# z%^SC{%(`I9OPl$$%C(9T-F6HoiX28adwXShe?+!E_9{0mr|`Z$Iic==H2!JZY~Hpz zk^}Fw@CRuO^*2nN<_o0C4G%Mzb!19P0ab`OyjddK{mXbaf8e-^q)N2n`Vb7Io?-;j0u2gK?2{q{rRj z4-%%1cW}=(9T)q%ha(>47({cpK_!z1$3{|K20U@gT3s!&UTua^(!KJ@>sXUaZ5QGB zYTDX&f=Bwk3UxPp8;kb;klM(MYH4YeX3$SfT~`F=-EQTtmWw|stt-si_S!NB0Xjfz z{csDtUio=A?=KSn4$2A*$(=iBgJ;47M}2Fg_J{aAFa3EpEsViNG6@Uc7eL#)Bc^^W z97r4qdW2cMn45!{zIwXcJ_8UWLvV=}Q7IGq67#`{>iR%j|jOcD&9G$8^UrHF$U>{GR?N1*(TxV332x znUIiJl)(){w&U3eCAIyIxl`CDJaks*Fk zVun?as$}NRL|h8oIp3#CSoC!^tFE&TKVph14LL;fZ#$gtf_DTyP@H!wxu0A9HRZEj z6&@3^<8(SdG1^xmDr=^z;dm*eB28r{ktYhgIv!PYJ1v68F{|nj2t-Vw$f0=2QnpFq z0O6G{g8lnj@HWpuTd-R*5CYOVH$hb~I)CteP&tsb+irVQo;=|Z*g37>9T{Ya(_xAQB8bYSNJn(_=PHY++d>^0*9q42FVtLUhI&?Jj5V8HvT>@5t^l69c z`*?V5m`}fg8OK66_>tP_9K-9^Tcc_Rr$ZDq)vGJ-VzF~l2q$^ooM@l3S>zk<-eAdaoF-h zf|@agdwGjTE$rgg3D6J4c=F8iGttu*dfkpPt{1zHERJ`Ac1$%ElFz&K-B^eC5dj~qeg+1%)0vDTirU%+G;Ywlxip@A5n{m3)PP?fcFP-L-h34Q?c0Dt z*Kxb(Aj%+5a->0!<8^JI#OvC@s;O?i%T#rR;){;x^IQX>2X>uiRLS~wR?`K;rwP2P zFP)l-toC%8nsYY0M+NF>;T_lZO*Ocqjb5*p{f27rfYM|@UwQW9^Ir4{?v?H;#(17K z&*Mp|YTNDb`uZiq$r-+Ei*gyzKGpAAIoF=_$>l#ctvz)dy_i(uvS5~C&l0Yk+MeJF zY&|085$etyEEeVfc9SZmj<4b2ucxnEaHeYgB;uX@oQqd^O1BCM?h^KN6Se<%8WkhG z10ghzPk*t~c-SY_lgo2UTY7coN4}q*qz&%ZxQ&xs&{-ju=hEjGE#rPuwT%-ZfKgGxdo06m8Hr(5Q~GKvj$Md5JBtMwbInZe zwuqwq+q$zccy6Dt?{i%6Z1jaQ({~2XCd$QSWatd?t}OTWbQ-+;i=2+7({=C})mi@*fy7p&T-1zw&)%yd#b6Ln zzXzqrEx1RhtSD$(N~{?kq0E#&%;X-~s0&Ma$_%r(Vx_a~gUrqYCv;&vqoCn2h3wto?T37@fEScBZ;O;F-;^QDj=GQdHDB^f`$wxwZiugxGnPw9X_PsL@aP z#U4>oM`KHso%99P@Q2~ea={NW&8)4_f~i~~5m)W1sbz92Mk*Xfnq7BE)tA{NN%9^h z@d(DXwiHTxg1{0%MT)|@>&_0^$|aZGlFnET7V(s@I$P_jEQ8gxVwMd1J)Cje@MqGk zB!oERsJ_0ITk3kg^J4t7V{{DPtPl-f)_)o%r*Jn~x<=Fg6@z3LE})CfUz%MAI|aqj znjdX&Wh@EnftDe}V-IXc3^$nSQc-C9P7e)f8 zzaAbp`|C~T<<~bdPyY~EJAeHVLrwSFGcj)Hj{*Pxuk+5|el>F+4j7ES ziBSKie+b~_JFxX)`*q3h8SK@1oIL{cyGBa*)Xw4>A%y?YKWDwyqro=_`(Y zjL7)Ref86I=no*DEKkMg5MT@eY*d6Rfu5M@78}4a%BiU z6tzvy5H8$seKdnpVQCH9||B8BK$YLzZ}$_TgIizpZETA z8W#p4cxK-EFVeWQ*}z-MJNhK6`PXIjKdx-OhkK5v{h$1aYZdO*v9Y|z8=;Fsd!Cq) z;v4ysi(3>xQ80|GZ$y2YCauG?3&^UA3tlb@aw+i8dx3_AmaX2C1+b$R-CIRY-Fzw~ zC$+Ss!p}jG7$MMHcm(3D80KbY8L#aZwL;>Y+g>A)g9-N*!&geq&Mv8ig#thgS@18P z3Z9tY^=>W%N^G{)!(?U5O2dUG2Dl?~pt#eWp1R!YZO)+rK@n{qXZe!a6u`+6RI-_# z@C{xV!M)0XK{Ykb4oj8LfoMWz_=>KYFoj=H>=mpYLwTOCdF!C0qoSh9Yt(xAeN?<1 zrUl7Rz(b+ycCc!i^<9qu1`+4uW#(@2SKdd=MoWT$eF|$0HO1Nf?!R!ddvB?^uqQ}6`rLaIBk(mc z(DR`JGC2bMSrmo3cdYW-go3BC_rHHOkk3*7Z3`h=Lg=c}gc*764& zikAX%plOwd)x$4kv+*0Xez$I$6;nqjm~mTBN891N;A%iTAa)Qr%0fVZ8==TSwEptT z9ehSW#vNehWBJ9Sym~bg(+dqwfK-XTkt@>C(-Uhh#K0ZW`&MB@1%0Tc8FyTC>9X+q z`8M7pO0GW9$gZIA$L8XD;DZyMF&)H~@V<7~oVH|UoHFi?IZY}t!p|mr?<5AQu6xTX zq+19?typF@a4uRo+h%lVilXx?C)q^nxvT+gKcdy^>JNA_#6Xd(v)o0R=DGHpB*M;O zY{)O`pSu797K%cD<7!Y?*sD8YfaMDG4cFdDtDK+WGrwfRf+-lLXq53{5#c$**%&|$T3b+~%hdrX4o&_2g6zg4 zujU{+y*%4~35M)^WLe+lM`5}sMN)?4vBAVEskqO@99L^BOb*+E4sV7U`uMY@)6nZD zkQKU(npCo-f26e?jU@*=f5b7-f&T%k04G1)nc_8~xI4@>ZmgYNmBv&e-{qi>dVB)~FL0I^8d_*vC6; zPpArU~GFU$~awgcwKjU zqExu^Q?PEt^Jv%Q`=LuS9u3*^jZ(#VJg-bA>jW8!Ek}4sIUkCB&-$(lM4r*|>!dio zc)h*hlr0~b1s?c&Zi-%aRl(toJ zwv8p=G+c(_P;ZXVnTqhhbezuXNGLKHll*>s~)iGLbk)k+U^*q2_!^lL zTrzHVpKUIH2%ws^pYlIO80Kw&!Rs-y`vo;s^_opwf!$$JuV2rl)M2h;AGY(UQU%vi zEV!?slvV9_noXZgAMJ9 zR^>I{)-dcW#3JC|B2?LZDlemQkd`)bC^HkM+Rt+C98ke(`xKoWyLO<;&5$_d{rmTp zY+mTZ9^alHZLDi9|`-eJ)m(k z++WI`?~7pI+3?S;3YneNkkq(`bB_up$<+4u$#wduU!Io9FUo4Zo7-k$%$6VM8ks!$ z4nn5}*Q9k@lHM8M%dwI}iB21}sTMAmjB{s7opS%`;&XIWb|XdtScZ9cuPWE>^}2CSSRJ$W zi?AfQg*jKRRx>XS$#?tLE^&m!M(V%h3= z+J0alPsLpH2)+LB%nc>HfC2uIG#&#S_HQG}62TLblY=Xl`?_;Bh{te?MOZ4xe^O)4 zhX1O@e3gtPnPd_>&|1~bPy34$bKrBH4qRa;ZEZaQozgCmF&{HRRkdDqDww?g4`R%q zqhJ+&5yQ%j7GomI3wALE+?~BWX8FO@EK6%D!^5ZOaGlU~)#6T;Tmdc zT4pp^P>Ci@S%Q}VM6~gW^JZhwEJe1HZi8pvyea9{YdR8-Yc>_Y+XZ=R_uj3P#I^kD ziVM`s{Y$7(kVG)LbLLlM`Wtup5GBm_xryiVd4)>4!|@gMq~%-R_qKP9%n~y2&dJ(< zJd;38M)nLRG=z%g6lA-kj$Rw1TB`#He3K>+Jl-)8KS6~zMvJ=#>|17@Q5m`(4pMaP zgYhe2KFg?J8GUv)Wo>Kk4h=Be?3+8@2V>ygqNNTKlp;Y~@)*oXwL@pV=A+)oH7hhd zZa%)@NM`gQ6%~lU@OrQIYCEA;DA5e^tvWWk(3s_ojY5i(@Lf`R5|S;ig>OxMOTCkM zE0wMxxm&R|!mA08Z=DC7)E;O0GwzS~FS!^QyIv?NdCjn!NLFF;ort`7V;lWl3vyUO z@<%Xw978>dw!U8o>CFjA8`~pK%?;+fZ`n}6YzySSqTC`O!I{eQQ&-TkA1;{I4px&+p{T?mm+9} z;+H6t0dcs?h539-(#S5vOsW@kE@;c};rVM{-Zcsi_J@KqM=qnx zlvCpaGlmGB3`tpvJ3L^WUP@+!D6p|D{uK zP((sRB)j?0Nzo`BSPG%~CjnE_qclo8$1!xR{D|3rDKW^l?eLSvOTB3Lz8C@Q9N zHJht#h$&!7%RdKl-jR|AL#MT^!=l9W#_Fo_uc<9H%f<|_K6 zD~`ncc8EM;unXr(TTo_VPNCmaZiIIaRjMTD2`r_f3f@tY8Df%?BIEqRGldmo*$Q0Z znjesS(I?ba3OYN#ejlSI{*VDO`Pze6V;%!j8yOxCKXavSM5z>vTpVF1=3BFQ-+o82 z6`IUiS?N#&9pRo_jQ50LJu{X_gqo(ei2{GgG%zOiZ{-si9&oJACoVupgOx5f#qr;N z#i#}=Y^W*!bM$$VEs!eIc{Gv5{6Hs?V!gw4-bWbanEa!2?pb_F6_{=PUY4od3&%$OB9 zwF;Rz0sNV2iK;f*yZ_^K5%8H{{5OO4a;bsTGpPBr?N=Z8Z_HHz&Ty!qX}uy zy{Iq(3Ejes>J<-BeOvd2zBPqJhwF-eqX3(|C7c}x2RJ|}pkkO(n3`^d#K$x6*fzGc z4JInQ+S59(lYO1O0h;-$3_VYCYbBzc{p{^4+W9q4BPkyx(w5h_oWE%C=a6`8Hy!sV zk%1!tWG7`3z)4GER_<2q_N5u=?}G7vjj1{+*Mq}FEJw{~ckW~LD5Ot5RZ%T@M~(h~ zHLQe%0CfA%xU5e^J~n>^VggvU9#zy&j90J-Tnuw%>vI@fvfz)4n*G`S^(keS7bWDm#1$v6BuR zzB)~ZiPSX>K7vV_C@WpzZm0eIMPRtG!+c)TVRDxOj>j48%=YplyJ4-78yeC2O&F-U>H!orgF_LVnUvGG)H*64Mh@)Zrt=9#Vw62%AN1i&zF$@v1) zLYKos4vA;a6$Q6EkEcxttr8u!nk?^d$V_gp2ax3q<%XKoP3rWO$P>4aRBSU6Jax{b zSG~}zY{vF=S42EGehX<(6#7DIKt!w+{x&}RyDR}LHmV)Jhs9v^`!pEu6oz4#PPF|} zGcwVDq0Qs=jOxJ~nfo`7_L*T6M5Iz?@3d@L?ns=j1fECwM|vX<+z!8fHO%ImyhTJv zD2A|;rX7OkL5R~6&%vj8D(Y)Mat94L-Gmwz;^YVi8<@{=Ckm)&wXTAYV6De#vmXHolZndzowNRz)g&*{Vg@#by1Q#TmK zxLL%%7VQ}#oz{}xskUJOI?Ws`Xr%zCA!)u1uXOJ>&LrsP+8?@~_?MVf+COxp)J7a( zdFn|@jcQwLh)b0zGF!*0nr1)R#Jpr^cp5uNe;tqzx}l6xn#^zWO?rfcyZQ z5g_oe*>kvb!!5lj&5NrUOA6hhIlJ_%x0ET^GydfO`ye1ABOYoZB9h6=c5Km`avhM! zNt5Vu^ij2+qji?%5P!DswYD|?J)5Xfs8~O!4OD583U>R39dx!e`x>XaXG;RB$iZbz z0XdS7!SYkk9zTi_>%T8O(?2rKiU>KV-v*gJOH1CH8vI)k*RH#6O`%_5M>qN&)`tS1 zt1M={G9bk5xbeZ@76vLt1V|AIr%5yIC}MjzYU|}~7kV3=P{ICMTfChDzEt*MuAo!p zY?Z}Q%n2E_5`)En2oP-^!|Ks1a92nKyJZa3Zh@SQXl9pb55Yb@)>q_?w#o*Og=w=I z3S>;82#`NPUS#*-lxU*L#hXaRg8MEJ7S+7Myk%Vs_>n75FiEo@zjz2J$ew!_iCQ?5 zqsc|g_BqU}!AFjWb#>nSHr$F;wyTdl2ab1A8(+Y*6D!6mKy9sIzpB+UIgHEn>Uxe~ zj{duq>dm^XSAl0xLyXBiC}C4sE^eBfRIIYwq}LdXoP^e1IEK45_Cn&Egbtq6rr2c% z*Mkhz!iXOmf%`4D|EIn842o*&x`hD&L6oSXAW3o(Ng}zCELlR65tST8kkB+iK?DRO zwzL9GPLd@@MMZK3$%y2fnjG$G)RUfb&VA~uy7g7v`})Ibs~7Zk_1<&MIp!E+KD3&> zYGuLKV;SH|qf@81LQSkzM+_Fc^9cy3)HA-7$Bc}NWAydqPL1BPq3Jzgs5qMmo@Gh?yP~^Et0#T^4=(LeC?$kgqIr>h)Guv40qyB)bV5UEC;| zp^XyTnmyH}$-Q*zRDRrRQ06;60SC7#go)_azM)v~YIfE+i;f&X=lv^?ooYho&_~O! zJYKi#FGzB5#~<;DN$0?mywKr7qn_zqn@r%;8DxE#+K0AH>Er5>oY>pnQ*d@R(c2zC zOkM1`yh1%?u8f)ZKaT~AvTvx7oz%|4_ah+hCkUZWj z{G}K|Vc~L?wjZ>hMX4e>m;xBQ*P^v%(H_qkNk>MYD@8BoaxWA>Q2i!C#=v*vCAY!j zuhe=jyY=;zNNc8y@RH8M{lV<0m>7=MUgs8?!BWnGw?X2*gO*8h`}3+XqW4{gKomRD z&X$a3c$$^BtPn z?m&^Kx6cX8DXCzv*Tq%WvcjvU@IY=8E50#9dz>v%9Ja~M!~GD%%Y9tu)5NZ>+vNS; z06Sk#oyX;Scp%6Jrauavaf8P`F=^YEi*0!h?lBQ&l>GS{HW%sjV)d-80ynlQ;w0kk zmB8ViizghU)-x&Tse!c>lpS%kK_+=d6@IZ#Xv7~^eZU#@Zg=i%{xXYJM!y4Y$#1Xa zd+u`RrPlOs{Uj0T>Yk3}g=e+6uj>iNdFuCwC>Gl8-WGh?_a7`G2|A_IBrZJh5lH*6 z+>Eo}k-bp8dFOAysYACLm@2}8P{3J7ZW2?j{z!Ax`Ei7dB{im7ykzi+pBGYMNI}Z? zQ{{IDKpWn0ZG2)PDGdhGt*R26sx^6wa1eq+J%xrqqaNE=v2^%uuJ<7$bPbhm*~`GY z7A3B)W@JI64Ij%-ogu@}Q$Le;6!906kK7ev0cX{=MoF*R|^|O-xq(*R(K4lEXDaLr=;f z0^K`zzo4-B4%>!O^Yhiceh04jtILhoEdhNn%@~7QwMACkk33q)klPNuB=OZN#Bis4 z<6Y$tPrtI$I(sLh3v7!(s9R{rXVcYj?V~8+BS}6;fEwJnwFG)XcIR z94fx zo%NpK2D5gx{hr4ty?y8yf0Xg#4+B#SU=m?Qg^%$T0L3Ne&R&63L)C97`P z_SqiW|MFmRX+$9&zNc88L6tY%0`C(D4XKl<#mXu`vP%Ex$?X zUhJXveklIAS&PuA6Fc+)Kppra7tGiCV#mTJH|X@0qhl6Yo$u^z?&9sPms9mtep_%* zu{xv0Guy?Wj(*YyjN9mF21JuSF8AdOf%5;BA1gtRDt2}JK+>m`W;<)6HskpKLz+#$ zm2}ngriEkAdWlmIFXQ-uew1nF?31i2hgYX|06}lQ3gW&^aJ(^CJ0&3~Xq!K;oaFtg zZ-tXRD}2`5*noa7;2{uB_R#v`9UHTCr;l8d%Ibc$To#@!u_2V9imG&_4C$+N{FY>O zz->H{J5uo~-J{18BwC+bV>Lnrun_d$0%dXgJS$XhNe>}IUt%Dz)V_Y{HL_)I?_ELn z)uS<`=SXf=(6C79jC*~NXE$tea&pin>mTS#f-oH!8IsGwNtQYiz_yqFFvNl1e246TjY1xd@ zfmU=F1dSQ56l9z%%6*6^RQx^?Dt>*7jH;#;VyB^_#5gb>r#qDgWkR`nu01Z>` z+<%r_g{g2Vn8#-iza{CP)^O!uz*Lu%9p|*B1drw;76dg233^z4gO&sBh&|-qG(9n9 zEUQwFKH$8ayfU@+&*~4K~1R{mK6S`pXwdiNY?MHaT_s z4*=A!xb+u^t<})5> z|Lm@?@IPOd4(TNc>#7SuRy@hs@L-TYf+*_2dbgM)$735u!xYy#(Pvrg15BRV)0B-I zrpFjQQc8x>8{++%q^Rs6Ehh4_(r49vvkp71(^;^&MAMZC}Ttk|V6re)x@ejtBKg9USgM)4g z2eibaCBmyeHa9D+Z){9{47}<7=o>jZ8(W4`W4dZA6Pb8rGw|1b&^fW4<#~mW3{oco zNC7oY{hOj-=v&(Qr@eE9UWfhK9G=d{HBQ~$xAP@o3LoA_tZ*XhJX>=SxU` z2;!QNXfUu}Vq#%#-pi|ri7SxQ(R~iiF21GE#;zn;eygvj#FV(km#Iq7FNyW?9Acqy zKmK<;g1)BG0bgdbr+iLa|Y=0$`}~$4a+V zAAU)q_D)wV*Y@VYe#3EZc))+9O%W8S4Je|IOJVZA}JB?2@jJ^{{^%R$y) zaV~XCZms>B%nY^r4hveZBCe{3;hHPI<^a>AA^`0xFjy^0CkMx@Y0`j6-DoBB$ucPh z7*j#|`8^Q!I`9+F-p1M<7FW3?{e*@_P7DWqt8S!K zdEPK>)$GqEG`Y~^(;y#UC9D2m)<9Cg5{i-iJU%mPQ+vPRx-jgTW<1O^-muE8^Stvk z+wQ zPa^@%(PJI+tZYoNqNKV?GVF?YaY-U-0Mew**mWCcuSTccQClP9HkEt>bV}DE^`RF2 z1Q}#}9WQN6SX)0U_WI-H0}YXk&`tp?lNxs6-vjea4SEH^&DoboM1HYzwFBi6EsrSaBj;87*#_Ss2bt1_(gpcUIM) zgn9K31mhgt;iSIS6ti@_4R02t1zn1`XFrcquzqJMv!h;HbrfQJYPWA2wpYWjs}*EB zSoP^5GX^W$rr_2WC~YY41>|OY;#r>i+Ucy~5qYb(5SHOFAIV)@Bx6w<|~x=cQMSsIom`EZ5{j-xsVox{pnUD zQuTGkSv)*{J_R^Q|1QRO$^#GR4{WHsv$x;&y530h$(68a1KOJ(anF#Mk8~ZKgzJKvTe`9VYBHE>9=UNHq^Is&~5wK5@+nGkNYdAS+Fxn4|_c;NU z9pAo^ycS*#Ag#!>pN`zfC2-u|?+72mh+he^6IJQVT(@)lUeMShV+d3i73H$U^XOx0L9jl>ux!rv5zTu&B64_mcvBahzjiQ?cccVf?p5zq zy*gzsg8|2cvEgc@7kZ(0y4$}z%d5?KgigLi(8G*f{W*hnNmm3E6i7DL(kAac7cd!O zAWZy$NO+E6wN6{SI8;P5p7AcB@1@>A;Vg%gS!UHgpka6)>VspX6cm)BW{==YF1MAG zE{I<(1v%?t~(2qbI%@tl1x|W?o^hV%<-IK`$%_6FcSMN#EYA_Tnzt;fDJ{>0su_rIGPv$x-$2a8ZL^H5ZPGVAdhJBg7$SQ z3fbvzR-Xj50Bqa)9c!~M4etCtOxp0&QY$yKxk)zK*t z*xI^b<35KDZX$}0r{#l9w~HS^;T)B&$6CgGKskZBc*f1$J+S7eyQ@p-#R*$${X@~C zREM$AsT){fwBk+9JC0Dzj>BF5^hLpL$y>!%Be#tYHoDjI@En@gC|H;F0fo?akAXBx z?z*7%Ir+U@DOchmJRzu1QRWz3&5?QX+kM+=J4y_H=_$^fmDNO^$fNl-BfS~#*xYI* z#C6RqAl8HGR_w3DUh}woxjH^Gek%sZU+^{sTC#h#2Y>Omh!*Ji)6}Ac)g(C6Bh`ZS zSrucrO)||p0D&uO&U%_i{@ce!x1wzKA|F0QkV`N#3y#p5{NQhS%%%Q8XBV4#5p-Hc zy~IGf1X%UpQi*UfuK%v^$hhoFotMD&$XxR3snZ8t!2>@5veQF<2axfUCT6&KU?R?A zLK(Tu2v&1(u1Ndx0-5(B&x(cGHG>aHwGZ~x6cjM6RK?p8%qlJ~9#{L5-GboUhRf>scCL99AB)mF^mQk5<+PDJDx6hRSSZ(*<9BFHcTU z)NGjSF>fW#_X=|_-Zbzbt82T+4B)08#VN>?jvVTRFsd>`A=5V=i!7Hd+OyD-u;1Xa zC@Mm?zlY0GV&@xyk0?)w0&9=+LuG7eD-Tn;^f)=*rd9|A%L|QuSlQ10SdJXumFSDy z`Wf54x#pYkw5jRRa|_^{XJ(|rnXmstpB*oG*A0cicZ3li zi2T#Ap$YQdbbU&xVs2wbg*My9glB<3G+Ly7jSaEL~Kh$890=WDzm1lC78VANyyfyrmi{ai%NqWc4&&=W*K*g zxMj{IGs5JfzK(zi=~O;S&sT9lzXj!82VYA?OpU_K6`mtYwADtkq=6z5G=4Fxu=QN; zhGKT_3b%&20f0U0kmrY37e?=X@DEN~>)#sg{O%u2sntLZ;GA6m=ct_F+S$GpE3xz# zxZX17^qSZk$J?sMLF|+&qg>-$m-;@P*ZZOAlUYNv$%AWnx%%-cj*Wy7Yht2ZuYRqa z*~AWSTF;&bo5Y916`ooalF{S+B-l&`X{4O%bK|N>$q1n5%geMs8-Mege(%jI?Dl{# zSh?cO#tDUA4e43b1I>*Glg}Ag?9BVz_5OtuHbKDznpp7ZYZQ$?RoW+pUteCzHC|a!@j|t2L~=)!JAbFmDa6r>p564c z)a;dh;ZR~h8t~{y@l=!krs6vRz9jB*PMWgf^s?OjWD`zS*Sj_Ll;StdC)5~~#1n=X z+JQ|ewOq0(^GdM=4;v-npJK+V~ ztm2V6W>P#M>c$zjk1nJ(0`U4!GVhy_@zF=j$Fz}J&c0Co^51wnO#?-0?ry&i$aj9F zm;dxil?;F|>@ObtDy@Gcqkp%$rwVi<1&^uJaef7{zrt+49w0~^I|g_54_E#L!2R~l zUw;H3b3a&Mt&~qst`@CEFCAzGJw_1RFOVXLDWL?)Ml{2+n^j)%}weCZHC;IER@-SkiXN?`Z|tACgI zZuog@)-#Sv!eo(eNz2Y+!@2djuj9S@|CI*?w$F!w>L0i5*Bkjr@SXhMhs!}vul)f( z)YZK^AEk(CxB%~SK=b#?8%DOkonkOv46bA4EnK_Z2{VYwFbqq}2xr;e9<;(T$*&B{ z0mma|QBi}(i_fE@vn4b0Q9wauHb@hhDjRIxl`kc&C>qJ2gvfm<9T27k5F&tfRp0;& zs5z>!^f_P?9DI-VRs^lFfat)*5v9*Y`vz-k=Ybk%G<<@LwP zhm0FXDDSh~E9V{^UmyC$y9g3mBpHSYwy8sN!+GXK*^Z1=FGq*-W=FzWD9$!^=!56- z5E<9pgCQlJFC+ZRK$40JbeMlu{$-DSsG8Rbxr}X?Zmi1js{xBPLPCy!wHzM}r8kY2_mYWL^Xh%A(6U)BNLL`G)))3SYAW%X2qv^7n}C z=#QHV?XI2sj4Dp>X1L!IR*fKc{=TNo7!b?T#0mBCU=N762#^qkageO;x=pb%r@3>n zv8gBfwkuHxHuYdCb5AXM3e5C?Yt-;sHLZ4nJXlMZz;;9P|Ig0ON5Oe7t6H0_x@S zo+UpqEJQd)8AIy}43WMBMcYiyc79*q)O?gRlhW%J6BOXDbzkb{h2IX7x+%h0x!2g8 z8s;?Z=!M#v$(CH5WN&oTOM}vtmsJM`N)qv>z%#ao2T=3}$<`makCJ1ION#=LZNiyP zip9}kx;(AkdN~VvmORdGZbF?jQV~6azJRKfVSqDK((vl@SXR$%HTJyvqo)CrHL$d1 zqV}Usn z?89A`dYA7#hi|_C_YkMmak5^rq~c*%`&rlpOz)fD%tO^acTtOf_CXf2*5h4*8AN7h=kh1{RvvFyy%6o0MN?Vp$+70KMrL>Uf;{z4npn=v~36~=j8V1 zWYVp(W7^q$#`E7&K$}mWe)Z#`JTrZri6K?Rt5ABPF|X35)b%ZUCQbXw#ur#eZoSAK z>go&_4v5YwspiTFSuv50ypo}%mbCQHFse+iS$j^0Yh0CnG9#KOIRahjI{BRLxYq_H z-^~GfWszI*K4;2jzC}ZCTmr?%uw@_xyvhhPTc)g;mbPeQL&_L?&q7CyLzF$6W4Ke~ zw{y+?4mk6!b}~^(5Uv%CCfxRR$m6(eEddp?_5N|m-p_OA~;Pkd?+oDd-QJ>vw1nEuG9)QNC^N&je@ zYRwGF1rj-V%SVkpINH6R;v4?&OFt?SxquDJ}tA-H{cBMW#5e{Pf}BG>E&3hPI|WG$Sh9qrZP zX5iIG+TSjQ@^f?dzWCCc;2^3^JLS)EBpb)&`gyqo!0XO`fv3JH%RS@L-;CciTy6>DYwX zWv`zvAm)Dn#Ok`n^xtPx>3_OA`EUN!-RVd>4aY?m!U#?|BahdflA;{{UGV3ueX>=oNYTd^79{?GcvFjDC3C7Id`Y2 zD0`Zjb@UG#Sx@JxTEk5Z#?BpzzrjTMzXPeRdu*}^%HEfL2<=up!ImugOxT9r*)#JT z?ON^jKPjEs35?u=e-Z+%iIB32vZiV7p%#*=Pumz0X|X|Fdpi_JAeG)8B3zEDJTv>S z6K)<+U4GlQXt+J#5fEKwlCv^UD9c|I8XLbHin)ki)=&DB1%GS(1j8QLRq{R>x`nuA zYQ6#ND@!t*=*mgh5dI28L|i5{P0rTK1Id*b&w%`V;v|H?tBuJbCz0KE3jJ*uvQ}^S zoNlasT6zLIg+=hqhkT>9HykeB4K9@Q$bhXy^*HZu1T|fEnpB^AOXc0&_9nb|;V8S0 zQi4fOZ^rDXYG$dS2va`ZR6->d@m2!f4QBqAB@ye}9W4N<)Kq6 zQ})WBM~Zzr?Kks1bL##&Y>hPj$A*S)0<+$peQ!62bf)uM4gdIYk*_}^-a|j^EDI*+ zv|YT5`&W2_d(46I5GvB*J%<+`5YDqfIp~YF%Dmsma7T<{Jt*u$_KLRv7ls%CQdWjpjk3YqvDv0S? zE>JW(ZO-y`OHGofwM4=9iEk??7+4LlC=?bwVlubbU1039W3~=}ES=ZQ14Fs?wOi_)iG*qwDJSd`kXENC_ymf{_yFZw*JUFM)5xJdsPMq)oJ~& z72I;S2JscC(F59UiR#X$a*6kfRR39bDBv-0>fha?nCVfO)}+hkUAacv{=y}Ne2YW1 zYCw<~o*C&7?r;On>Qz(2X9`A9-{=9KK1T%@qo})**Lks00pDUDsZ| z?@VLenD4b|mB2t&HiWb27ElM7*uQp;+`MzHLS#1ksAo>g{V>7d6}~YIR9!uTu4nd1 zk|L_&@d9Y{T8v%B`3Irl4R5)nO$2fIktX%6EsgdroxfhEJC& zuI5j7yO2{2_Bs2#0X|ZhF*US7?amw92$RUuE63H=!{>CYq?M72Z?5S5M4i$*Lf%ub z8fH@kFn&@A!S&icBryX`hm>$cx{S;wM*aHg-G5~xHMlaQ!gR8osy|d^2ot=xmkfF* zr>>R?22!vl%u~<$sYNtN9B#y9&e=Zc>GFX*B?x`hQPFGKFE$CZ5`5wZ3-lm9OiV1% z`=J5tL+K*WctOo>MxAH zrxRv-Q0%*K01zod6(D#a1<2N7Hwpp8|G~L>U>SVvvOmR57)35e0=b5olj}IgNFC)1()%BNH5z}90b=Njif?; z8A;9VZ~Ym7VnZG`UltArXX=l1=J#6Vudg5>X8>t1`CnChKLfdAJisv8ikSWjdvQ4o zuBGvBpwO?x^rjkMA3VD`S$hEgO z{-N6pY7AZHIC=0eU(VZMQU-mBCd|hVCRan-ix?^gJ3}A$!6oF`TW|?ZKPqnd8kn{>7KzXobrHjy?j`lgxN{yG|1_ zZ>owN11G0upeI-oYU_;5)-v<=+{2um9f25(qHiurz}=#8-)X+bD!`xihV%0mH6DJG zQ&Y|S?T4RCMIM8eTQMH!je*I24qyVG>uv+*am3`LCNbv&Z=U~e&=bXfr%P0a){+1e zD)&$=^_O-+Jr8e_1OfycZI=MhmfLY}xcL6$yawZ^)>c_CRfFmB<(U-Ft6ra^qs?Bu z`53h7mM&c4b9<>A?;I(h(|;VEEYB>#ps1fk_t*kdMxeXIq3P%?De3On$H?ckXu0O- zO6kyh*$+ex7qvQ&s@eF77hz$M87az0X<;NSz#Js53m8}cZOO;x?ru}reOX!L_Af`O zv_}e-3i&OE^|n7;wyfpuetwtPW#Dqu6~{j@L6NEr{HZz_uji-M;{YLJ6Gaj2#W>&~ zF<>~Oa(LJS`zX-aF9Iy|xW<>KS-fF$c;&FqH0W603PyDv-1)t2Q#q{u;N#C)K)8RB zZ_WqT(Uhu@1J15?mOU8ooC26RV*3YTU`(W718{&ji-CglONk?PcKkS|q_2X)OdJOq za^;@fp+vgeae^qq>dfP%SDk!LA4%uNByZQ;VSEx4Fz2c&ck%7G&ld=lPw+y1 z2xNq;%zV=UGl$Cj!CiCnH0QGm>ZVgHFDiA`dt2yv+F*LEY!Rki5^l#MX{H&#!))LW zmQ^U%mH6q=!&mbeYZ&@fVHxuW-N>aSYg#195en7RrQ?l z1#VBb)AO$jdrhS5WNN^pL$DriJ4SBIJX!=N4S7RYLo8kRrj{eH7Ysr~-=cR^#95Ho zzXb-;g7^2v>*Yg{_~SllM`r6HAZrBk3gv+F`8733!SoidtC%d2;HSS;6QB+>_cWI3 z=w{{`^#~MN%Y~n#zA*^YLfFBh?j~0~(AW8iv|eEYG#539yC;w4o!L`Y8L=g*;N1ZZ z5rp2 zV&Uo%Ge%vU*K}UcK(#;DsKp}gcdcSE(;Z(!m)`4_lSNeKP_-uQ!2iT^w-4I3S!+VPyp2(bD3m(B>^A@If*8iX7LMa`xPP6|Cwt|X z+~Rk+=c~F_A=T^Rulhar${(1;<#oA_?j0|Uz+PPFy^OW0Np^uuSL&s@`uht~U%7#x z^B$+5ggzbn1hulhfXV{3$@#%c-Ra!Cf=3!dX@V-Y%2Gj=(P__QG$67>`h+_f8T9#8 ziR)eT;xlhyr-&+)3%}Uzi#9G-^KTEATX;oQ!d5&jYIxfGYIf5WK3qVA5F?EEI8x4Q zS5EM!s~sCe&J}Jg;5lD~jH3usD70o8M8*O>Rn%m*!o6y;_ecgiS3ltD$3W6mX*PWF zE(_i8x?vfu778RL>~G+GU)+)^<#!J0j(Q3of3YMyAR&4e>{8*nxMP_o{x&;1A*1tq z8P7AJi3g!+`a>o1&v>E65v)&C6V}``N5oZ8Q8?!)UZ;QJv@-E1mv}DfGzpa+x*I65U-@45=Z*@Oh5Vfmq5IQ0X3FL6-`ufKTp#QKO9io3Wi=fVU*oyTFX21Fr)`|w)n4~aR% z=UBJqFN?TJnCEf&-R9MON)JJ4;mCi2s9UphPm9-9@PNrz5-GMgl5gA$W*@C9?ye}_ z=FTIdcU;Bm!fkUdzW==hz8_jOpWmmFu&1)JGUQOr`%dDWi|U11_YH3=pW;8$7^}GMwY+pb-ur0k_DjJf$ng<;!wW<_zO#qxs3wUVliF)3oKD>{Q~nRB z_pRlj+WtBZ@AQ0l#cs3h+{I4|y9%hX0-G<2OEqn*&r%E7odJeI>PNMM`ziAs;>L-d zx8Byq=?83S@AmP4%@ROBx)X4a3(>X#SlB-{Z`_B#kbil;YD83q{}+{dx;6Q%!%P2keXV>BZKbp>Z`QoEk;Ex+7Z5=tXS<4fZ6 zA68$F9Ti+TC2$4@_cmw#T;zDWW>I|G`!RtIEy{;YJ#(hRr47$~PuV=OTkBf(@g>`l zB;Of-np2*l^xY^o=zUgC47Wk&PNH~>X4A}?kO^JsL#=o$&OSi~el0fXL2t_}=Lb*SxQ=Qf~8odwaB?#<6}lMBv+PMu<$3yxZG^yNAMNHMbr?-}ZefI+9&*qAulH%QXYeJVL@~%DB^UieGv%YjSmzv7WI9F<& zB_ONRo!S3-tzpt5jeRLc4wXujBGAHbE=Fc;v*!o>=vQ}%QYgeZp}qdvYZgm`=;(xJ;VCY! zh3p!Gg+Fb4L!%)JIyr3%;K}amDE1QWqr1%?F61!$uEB!{mmtan)k-GsC+bkiK78Zo znK=FsFj;fdeJcd+zOAOcEMgjt?GXm>B`teX00vWpl-wH$Pm)(f?XQ?|(Mbzbv!AwRFoR&-hz?m_&So>Y*eNQJP?|@wvjZD`tIM$Fo-KRG z!=WTRxwCW^Kf`C{4Vz{Yh>QtI4wl~o!D-N&QL$(h{dZ+Y#|A3LUgca(z>IQZNpWp{ zl)v_|$IXMtl_t8C+uhmH2M317Bf=wj*#>b+j6Hpu?Q^fYD|%}9Y#kLczan@{;t{W@ z>K~54CcQ``4-|Cs$9oTGRWj4Nqu*13rw?gRccHG8+Zy&Gh++A*YtX~3;yhOlVbv31 zEF-a=gP{SoyG3)uaATg^jA z?!zJDG#yg5N=TNxPN|1oO@u|)$D#V{0y({*61xvR*n+z$T~+QplSY@sW_uiWQz>U^ zYTq0z6t2Xqfe7YNdVU|i zPVcomcHxv!X4|$l^hK^Md}xcL-XvX8NAGa}M2Soxvt4bjTeOza_)RVSm9b=lS=wXQ zr2{t$;_x%xj--V51c99h8 z+D0eujeoqVlb=5iBHT5fRL+0@$R;juu1+W4xBYob{=;fEdaw*j3Ht9J8KnooDr=E% z_4oAA^&n+;4M5{T%Z5B(SB~_|J-PQyr=%_8|{e5m+TZdTBaEv3;a=(Rh7xTb@$2t E0x;o|=Kufz diff --git a/vizro-core/docs/pages/user_guides/table.md b/vizro-core/docs/pages/user_guides/table.md index 0026d3bc4..8283a20d6 100755 --- a/vizro-core/docs/pages/user_guides/table.md +++ b/vizro-core/docs/pages/user_guides/table.md @@ -25,7 +25,7 @@ You can use the [Dash DataTable](https://dash.plotly.com/datatable) in Vizro by ```py from vizro.tables import dash_data_table ``` -The Vizro version of the table differs in one way from the original table: it requires the user to provide a pandas dataframe as source of data. +The Vizro version of this table differs in one way from the original table: it requires the user to provide a pandas dataframe as source of data. This must be entered under the argument `data_frame`. All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/reference) can be entered as kwargs. @@ -33,18 +33,18 @@ All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/r === "app.py" ```py import vizro.models as vm - from vizro import Vizro import vizro.plotly.express as px + from vizro import Vizro from vizro.tables import dash_data_table - df = px.data.iris() + df = px.data.gapminder().query("year == 2007") page = vm.Page( - title="Dash DataTable", + title="Example of a Dash DataTable", components=[ - vm.Table(id="table", figure=dash_data_table(data_frame=df)), + vm.Table(id="table", title="Dash DataTable", figure=dash_data_table(data_frame=df)), ], - controls=[vm.Filter(column="species")], + controls=[vm.Filter(column="continent")], ) dashboard = vm.Dashboard(pages=[page]) @@ -58,13 +58,14 @@ All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/r - components: - figure: _target_: dash_data_table - data_frame: iris + data_frame: gapminder_2007 + title: Dash DataTable id: table type: table controls: - - column: species + - column: continent type: filter - title: Dash DataTable + title: Example of a Dash DataTable ``` === "Result" [![Table]][Table] @@ -73,7 +74,139 @@ All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/r #### Styling/Modifying the Dash DataTable -Lorem ipsum +As mentioned above, all [parameters of the Dash DataTable](https://dash.plotly.com/datatable/reference) can be entered as kwargs. Below you can find +an example of a styled table where some conditional formatting is applied. There are many more ways to alter table beyond this showcase. + +??? example "Styled Dash DataTable" + === "app.py" + ```py + import vizro.models as vm + import vizro.plotly.express as px + from vizro import Vizro + from vizro.tables import dash_data_table + + df = px.data.gapminder().query("year == 2007") + + column_definitions = [ + {"name": "country", "id": "country", "type": "text", "editable": False}, + {"name": "continent", "id": "continent", "type": "text"}, + {"name": "year", "id": "year", "type": "datetime"}, + {"name": "lifeExp", "id": "lifeExp", "type": "numeric"}, + {"name": "pop", "id": "pop", "type": "numeric"}, + {"name": "gdpPercap", "id": "gdpPercap", "type": "numeric"}, + ] + + style_data_conditional = [ + { + "if": { + "column_id": "year", + }, + "backgroundColor": "dodgerblue", + "color": "white", + }, + {"if": {"filter_query": "{lifeExp} < 55", "column_id": "lifeExp"}, "backgroundColor": "#85144b", "color": "white"}, + { + "if": {"filter_query": "{gdpPercap} > 10000", "column_id": "gdpPercap"}, + "backgroundColor": "green", + "color": "white", + }, + {"if": {"column_type": "text"}, "textAlign": "left"}, + { + "if": {"state": "active"}, + "backgroundColor": "rgba(0, 116, 217, 0.3)", + "border": "1px solid rgb(0, 116, 217)", + }, + ] + + style_header_conditional = [{"if": {"column_type": "text"}, "textAlign": "left"}] + + page = vm.Page( + title="Example of a styled Dash DataTable", + components=[ + vm.Table( + id="table", + title="Styled table", + figure=dash_data_table( + data_frame=df, + columns=column_definitions, + sort_action="native", + editable=True, + style_data_conditional=style_data_conditional, + style_header_conditional=style_header_conditional, + ), + ), + ], + controls=[vm.Filter(column="continent")], + ) + dashboard = vm.Dashboard(pages=[page]) + + Vizro().build(dashboard).run() + ``` + === "app.yaml" + ```yaml + # Still requires a .py to register data connector in Data Manager and parse yaml configuration + # See from_yaml example + pages: + - components: + - figure: + _target_: dash_data_table + data_frame: gapminder_2007 + sort_action: native + editable: true + columns: + - name: country + id: country + type: text + editable: false + - name: continent + id: continent + type: text + - name: year + id: year + type: datetime + - name: lifeExp + id: lifeExp + type: numeric + - name: pop + id: pop + type: numeric + - name: gdpPercap + id: gdpPercap + type: numeric + style_data_conditional: + - if: + column_id: year + backgroundColor: dodgerblue + color: white + - if: + filter_query: "{lifeExp} < 55" + column_id: lifeExp + backgroundColor: "#85144b" + color: white + - if: + filter_query: "{gdpPercap} > 10000" + column_id: gdpPercap + backgroundColor: green + color: white + - if: + column_type: text + textAlign: left + - if: + state: active + backgroundColor: rgba(0, 116, 217, 0.3) + border: 1px solid rgb(0, 116, 217) + id: table + type: table + controls: + - column: continent + type: filter + title: Dash DataTable + + ``` + === "Result" + [![Table2]][Table2] + + [Table2]: ../../assets/user_guides/table/styled_table.png #### Custom Table diff --git a/vizro-core/examples/from_yaml/dashboard.yaml b/vizro-core/examples/from_yaml/dashboard.yaml index 3a9cea5e7..a35474771 100644 --- a/vizro-core/examples/from_yaml/dashboard.yaml +++ b/vizro-core/examples/from_yaml/dashboard.yaml @@ -1,461 +1,58 @@ +# Still requires a .py to register data connector in Data Manager and parse yaml configuration +# See from_yaml example pages: - components: - - text: | - ![](assets/images/icons/content/hypotheses.svg#icon-top) - - ### Variable Analysis - Analyzing population, GDP per capita and life expectancy on country and continent level. - href: /variable-analysis - type: card - - text: | - ![](assets/images/icons/content/hypotheses.svg#icon-top) - - ### Relationship Analysis - Investigating the interconnection between population, GDP per capita and life expectancy. - href: /relationship-analysis - type: card - - text: | - ![](assets/images/icons/content/collections.svg#icon-top) - - ### Continent Summary - Summarizing the main findings for each continent. - href: /continent-summary - type: card - - text: | - ![](assets/images/icons/content/features.svg#icon-top) - - ### Country Analysis - Discovering how the metrics differ for each country and export data for further investigation. - href: /country-analysis - type: card - layout: - grid: [[0, 1], [2, 3]] - col_gap: 25px - row_gap: 16px - title: Homepage - - components: - - text: | - ### Overview - The world map provides initial insights into the variations of metrics across countries and - continents. Click on Play to see the animation and explore the development over time. - - #### Observation - A global trend of increasing life expectancy emerges, with some exceptions in specific African countries. - Additionally, despite similar population growth rates across continents, the overall global population - continues to expand, with India and China leading the way. Meanwhile, GDP per capita experiences growth in - most regions. - type: card - - figure: - _target_: choropleth - color: lifeExp - data_frame: gapminder - locations: iso_alpha - animation_frame: year - title: Global development over time - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - id: variable_map - type: graph - - text: | - ### Distribution - The boxplot illustrates the distribution of each metric across continents, facilitating comparisons of life - expectancy, GDP per capita, and population statistics. - - #### Observation - Observations reveal that Europe and Oceania have the highest life expectancy and GDP per capita, likely - influenced by their smaller population growth. Additionally, Asia and America exhibit notable GDP per capita - outliers, indicating variations among countries within these continents or large growth over the observed - years. - type: card - - figure: - _target_: box - color: continent - data_frame: gapminder - x: continent - y: lifeExp - title: Distribution per continent - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - id: variable_boxplot - type: graph - - text: | - ### Development - The line chart tracks the variable's progress from 1952 to 2007, facilitating a deeper comprehension of each - metric. - - #### Observation - Oceania and Europe are found to have the highest total GDP per capita and exhibit significant growth. In - contrast, Asia, Africa, and America demonstrate a more pronounced upward trend in population increase compared - to Europe and Oceania, suggesting that GDP per capita growth might be influenced by relatively smaller - population growth in the latter two continents. - type: card - - figure: - _target_: line - color: continent - data_frame: gapminder_avg - x: year - y: lifeExp - title: Development between 1952 and 2007 - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - id: variable_line - type: graph - - text: | - ### Recent status - Examining the data for 2007 provides insight into the current status of each continent and metrics. - - #### Observation - Asia held the largest population, followed by America, Europe, Africa, and Oceania. Life expectancy surpassed - 70 years for all continents, except Africa with 55 years. GDP per capita aligns with earlier findings, with - Oceania and Europe reporting the highest values and Africa recording the lowest. - type: card - - figure: - _target_: bar - color: continent - data_frame: gapminder_avg_2007 - x: lifeExp - y: continent - orientation: h - title: Comparison of average metric for 2007 - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - id: variable_bar - type: graph - controls: - - selector: - title: Select variable - type: radio_items - value: lifeExp - options: - - lifeExp - - pop - - gdpPercap - targets: - - variable_map.color - - variable_boxplot.y - - variable_line.y - - variable_bar.x - type: parameter - layout: - grid: [[0, 1, 1, 1], [2, 3, 3, 3], [4, 5, 5, 5], [6, 7, 7, 7]] - row_min_height: 400px - row_gap: 25px - title: Variable Analysis - - components: - - text: | - Population, GDP per capita, and life expectancy are interconnected metrics that provide insights into the - socio-economic well-being of a country. Rapid population growth can strain resources and infrastructure, - impacting GDP per capita. Higher GDP per capita often enables better healthcare and improved life expectancy, - but other factors such as healthcare quality and social policies also play significant roles. - type: card - - text: | - #### Last updated - July, 2023 - type: card - - figure: - _target_: box - color: continent - data_frame: gapminder_2007 - x: continent - y: lifeExp - title: Relationship in 2007 - hover_name: country - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - custom_data: ["continent"] - id: bar_relation_2007 - type: graph - actions: - - function: - _target_: filter_interaction - targets: - - scatter_relation_2007 - figure: - _target_: scatter - color: continent + _target_: dash_data_table data_frame: gapminder_2007 - x: gdpPercap - y: lifeExp - hover_name: country - size_max: 60 - size: pop - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - id: scatter_relation_2007 - type: graph - - figure: - _target_: scatter - color: continent - data_frame: gapminder - x: gdpPercap - y: lifeExp - animation_frame: year - animation_group: country - size: pop - hover_name: country - facet_col: continent - range_y: [25, 90] - labels: - year: Year - lifeExp: Life expectancy - pop: Population - gdpPercap: GDP per capita - continent: Continent - color_discrete_map: - Africa: "#00b4ff" - Americas: "#ff9222" - Asia: "#3949ab" - Europe: "#ff5267" - Oceania: "#08bdba" - id: scatter_relation - type: graph - controls: - - selector: - title: Choose x-axis - type: dropdown - value: lifeExp - multi: False - options: - - lifeExp - - pop - - gdpPercap - targets: - - scatter_relation_2007.x - - scatter_relation.x - type: parameter - - selector: - title: Choose y-axis - type: dropdown - value: gdpPercap - multi: False - options: - - lifeExp - - pop - - gdpPercap - targets: - - scatter_relation_2007.y - - scatter_relation.y - - bar_relation_2007.y - type: parameter - - selector: - title: Choose bubble size - type: dropdown - value: pop - multi: False - options: - - lifeExp - - pop - - gdpPercap - targets: - - scatter_relation_2007.size - - scatter_relation.size - type: parameter - layout: - grid: - [ - [0, 0, 0, 0, 1], - [2, 2, 3, 3, 3], - [2, 2, 3, 3, 3], - [2, 2, 3, 3, 3], - [2, 2, 3, 3, 3], - [4, 4, 4, 4, 4], - [4, 4, 4, 4, 4], - [4, 4, 4, 4, 4], - [4, 4, 4, 4, 4], - [4, 4, 4, 4, 4], - ] - row_min_height: 100px - row_gap: 25px - title: Relationship Analysis - - components: - - text: | - ### Africa - ![](assets/images/continents/africa.svg#my-image) - - Africa, a diverse and expansive continent, faces both challenges and progress in its socio-economic landscape. - In 2007, Africa's GDP per capita was approximately $3,000, reflecting relatively slower growth compared to - other continents like Oceania and Europe. - - However, Africa has shown notable improvements in life expectancy over time, reaching 55 years in 2007. - Despite these economic disparities, Africa's population has been steadily increasing, reflecting its - significant potential for development. - type: card - - text: | - ### Americas - ![](assets/images/continents/america.svg#my-image) - - Comprising North and South America, Americas represents a region of vast geographical and cultural diversity. - In 2007, the continent experienced substantial population growth, with a diverse mix of countries contributing - to this expansion. - - Although its GDP per capita of $11,000 in 2007 exhibited variations across countries, America maintained - similar levels to Asia, reflecting its economic significance. With North America generally reporting higher - life expectancy compared to South America, America remains a region of opportunities and challenges. - type: card - - text: | - ### Asia - ![](assets/images/continents/asia.svg#my-image) - - Asia holds a central role in the global economy. It's growth in GDP per capita to $12,000 in 2007 and - population has been significant, outpacing many other continents. In 2007, it boasted the highest population - among all continents, with countries like China and India leading the way. - - Despite facing various socio-economic challenges, Asia's increasing life expectancy from 46 years to 70 over - the years reflects advancements in healthcare and overall well-being, making it a vital region driving global - progress and development. - type: card - - text: | - ### Europe - ![](assets/images/continents/europe.svg#my-image) - - Europe boasts a strong and thriving economy. In 2007, it exhibited the second-highest GDP per capita of - $25,000 among continents, indicating sustained economic growth and development. - - Europe's life expectancy surpassed 75 years, showcasing a high standard of living and well-established - healthcare systems. With its robust infrastructure, advanced industries, and quality of life, Europe continues - to be a leading force in the global economy. Between 1952 and 2007, Europe's population experienced moderate - growth, with a factor of approximately 1.5, notably lower compared to other continents like Asia and America. - type: card - - text: | - ### Oceania - ![](assets/images/continents/oceania.svg#my-image) - - Oceania, comprising countries like Australia and New Zealand, stands out with notable economic prosperity and - longer life expectancy. In 2007, it boasted the highest GDP per capita of $27,000 among continents and - exhibited one of the highest life expectancy levels, surpassing 80 years. - - Despite a relatively smaller population size, Oceania's strong economic growth has contributed to improved - living standards and overall well-being of its population. - type: card - layout: - grid: [[0], [1], [2], [3], [4]] - row_min_height: 190px - row_gap: 25px - title: Continent Summary - - components: - - figure: - _target_: bar - color: data - data_frame: gapminder_country_analysis - x: year - y: pop - barmode: group - labels: - year: Year - data: Data - pop: Population - color_discrete_map: - Country: "#afe7f9" - Continent: "#003875" - id: bar_country - type: graph - - figure: - _target_: line - color: data - data_frame: gapminder_country_analysis - x: year - y: gdpPercap - labels: - year: Year - data: Data - gdpPercap: GDP per capita - color_discrete_map: - Country: "#afe7f9" - Continent: "#003875" - markers: True - id: line_country - type: graph - - type: button - text: Export data - id: export_data - actions: - - function: - _target_: export_data - targets: - - bar_country + sort_action: native + editable: true + columns: + - name: country + id: country + type: text + editable: false + - name: continent + id: continent + type: text + - name: year + id: year + type: datetime + - name: lifeExp + id: lifeExp + type: numeric + - name: pop + id: pop + type: numeric + - name: gdpPercap + id: gdpPercap + type: numeric + style_data_conditional: + - if: + column_id: year + backgroundColor: dodgerblue + color: white + - if: + filter_query: "{lifeExp} < 55" + column_id: lifeExp + backgroundColor: "#85144b" + color: white + - if: + filter_query: "{gdpPercap} > 10000" + column_id: gdpPercap + backgroundColor: green + color: white + - if: + column_type: text + textAlign: left + - if: + state: active + backgroundColor: rgba(0, 116, 217, 0.3) + border: 1px solid rgb(0, 116, 217) + title: Styled table + id: table + type: table controls: - - column: country - selector: - type: dropdown - value: India - multi: False - title: Select country - type: filter - - column: year - selector: - type: range_slider - title: Select timeframe + - column: continent type: filter - layout: - grid: - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [2, 2, 2, 2, 2, 2] - title: Country Analysis -navigation: - pages: - Analysis: - - Homepage - - Variable Analysis - - Relationship Analysis - - Country Analysis - Summary: - - Continent Summary + title: Example of a styled Dash DataTable From 30aa1687627f55ba2df3db36120c580a5504da34 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 19:49:24 +0200 Subject: [PATCH 077/121] Change test --- vizro-core/tests/unit/vizro/models/test_page.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vizro-core/tests/unit/vizro/models/test_page.py b/vizro-core/tests/unit/vizro/models/test_page.py index 71313fb58..0ccac6ac0 100644 --- a/vizro-core/tests/unit/vizro/models/test_page.py +++ b/vizro-core/tests/unit/vizro/models/test_page.py @@ -106,7 +106,7 @@ def test_valid_component_types(self, standard_px_chart, standard_dash_table): [vm.Checklist(), vm.Dropdown(), vm.RadioItems(), vm.RangeSlider(), vm.Slider()], ) def test_invalid_component_types(self, test_component): - with pytest.raises(ValidationError, match=re.escape("allowed values: ")): + with pytest.raises(ValidationError, match=re.escape("(allowed values: 'button', 'card', 'graph', 'table')")): vm.Page(title="Page Title", components=[test_component]) def test_valid_control_types(self, standard_px_chart): From 4257a4982faf2bb13ebd21e8cb65714e431078ed Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 07:47:21 +0200 Subject: [PATCH 078/121] Adjusting with the latest base branch changes --- vizro-core/src/vizro/charts/tables/dash_table.py | 14 -------------- vizro-core/src/vizro/models/_components/table.py | 4 +--- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 vizro-core/src/vizro/charts/tables/dash_table.py diff --git a/vizro-core/src/vizro/charts/tables/dash_table.py b/vizro-core/src/vizro/charts/tables/dash_table.py deleted file mode 100644 index 724bbe602..000000000 --- a/vizro-core/src/vizro/charts/tables/dash_table.py +++ /dev/null @@ -1,14 +0,0 @@ -import pandas as pd -from dash import dash_table - - -from vizro.models.types import capture - -@capture("table") -def dash_data_table(data_frame: pd.DataFrame, **kwargs): - """Standard `dash_table.DataTable`.""" - kwargs.setdefault("columns",[{"name": i, "id": i} for i in data_frame.columns]) - return dash_table.DataTable( - data=data_frame.to_dict("records"), - **kwargs - ) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index e761f88e1..ba1a29681 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -79,9 +79,7 @@ def pre_build(self): def build(self): # TODO: We also need to take case what empty object we need to create here once we support AgGrid and others. dash_datatable_object = ( - dash_table.DataTable(id=self._underlying_table_id, data=pd.DataFrame().to_dict("records"), columns=[]) - if self.actions - else dash_table.DataTable(data=pd.DataFrame().to_dict("records"), columns=[]) + dash_table.DataTable(id=self._underlying_table_id) if self.actions else dash_table.DataTable() ) return html.Div( From 438525eb8657355e7e99dc4cc15706feb85e0028 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 08:43:14 +0200 Subject: [PATCH 079/121] Documentation and changelog file --- ..._petar_pejovic_table_filter_interaction.md | 41 +++++++++++++++++++ vizro-core/docs/pages/user_guides/actions.md | 10 ++--- 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md diff --git a/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md b/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md new file mode 100644 index 000000000..d97b7de37 --- /dev/null +++ b/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md @@ -0,0 +1,41 @@ + + + + +### Added + +- Enable `filter_interaction` action when the source figure is a `vm.Table` component ([#119](https://github.com/mckinsey/vizro/pull/119)) + + + + + diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index 8935ae2b1..6c2d2f87c 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -103,17 +103,17 @@ a result, when a dashboard user now clicks the button, all data on the page will [Graph]: ../../assets/user_guides/actions/actions_export.png -### Filter data by clicking on chart +### Filter data by clicking on figure -To enable filtering when clicking on data in a (source) chart, you can add the [`filter_interaction`][vizro.actions.filter_interaction] action function to the [`Graph`][vizro.models.Graph] component. The [`filter_interaction`][vizro.actions.filter_interaction] is currently configured to be triggered on click only. +To enable filtering when clicking on data in a (source) figure, you can add the [`filter_interaction`][vizro.actions.filter_interaction] action function to the [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component. The [`filter_interaction`][vizro.actions.filter_interaction] is currently configured to be triggered on click only. -To configure this chart interaction follow the steps below: +To configure this figure interaction follow the steps below: -1. Add the action function to the source [`Graph`][vizro.models.Graph] and a list of IDs of the target charts into `targets` +1. Add the action function to the source [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component and a list of IDs of the target charts into `targets`. ```py actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))] ``` -2. Enter the filter columns in the `custom_data` argument of the underlying source chart `function` +2. If the source figure is [`Graph`][vizro.models.Graph], enter the filter columns in the `custom_data` argument of the underlying source chart `function` if the source figure is [`Graph`][vizro.models.Graph]. ```py Graph(figure=px.scatter(..., custom_data=["continent"])) ``` From 5669c120407efdac4ba4243d4456eb5535ec5411 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> Date: Thu, 26 Oct 2023 09:13:42 +0200 Subject: [PATCH 080/121] Update vizro-core/src/vizro/models/_components/table.py Co-authored-by: Li Nguyen <90609403+huong-li-nguyen@users.noreply.github.com> Signed-off-by: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> --- vizro-core/src/vizro/models/_components/table.py | 1 + 1 file changed, 1 insertion(+) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 157a32914..db381292c 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -59,4 +59,5 @@ def build(self): html.Div(dash_table.DataTable(), id=self.id), ], className="table-container", + id=f"{self.id}_outer", ) From 2b7d936d40c4f02af9a384607a8b7ea1f9ee67c0 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> Date: Thu, 26 Oct 2023 09:13:57 +0200 Subject: [PATCH 081/121] Update vizro-core/src/vizro/static/css/dropdown.css Co-authored-by: Li Nguyen <90609403+huong-li-nguyen@users.noreply.github.com> Signed-off-by: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> --- vizro-core/src/vizro/static/css/dropdown.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index 728fde9bb..7ef6d78a8 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -147,5 +147,5 @@ wrapper **/ } .Select-input > input { - padding: 0 !important; + padding: 0 !important; /*Required so tags don't jump caused by adding table */ } From 7aa773ea23c48e96172e3c086f0d28af76f8a60d Mon Sep 17 00:00:00 2001 From: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> Date: Thu, 26 Oct 2023 09:15:37 +0200 Subject: [PATCH 082/121] Update vizro-core/src/vizro/static/css/table.css Co-authored-by: Li Nguyen <90609403+huong-li-nguyen@users.noreply.github.com> Signed-off-by: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> --- vizro-core/src/vizro/static/css/table.css | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 08efb1995..2f00727c8 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -43,14 +43,10 @@ div.right_side font-size: 14px; } -.table-title { - padding-bottom: 14px; -} - .table-container { height: 100%; width: 100%; overflow: auto; padding: 12px; - padding-left: 20px; + padding-left: 32px; } From c1c442f3780fd00436ce05a00740091b6aab2736 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> Date: Thu, 26 Oct 2023 09:16:19 +0200 Subject: [PATCH 083/121] Update vizro-core/src/vizro/static/css/dropdown.css Co-authored-by: Li Nguyen <90609403+huong-li-nguyen@users.noreply.github.com> Signed-off-by: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> --- vizro-core/src/vizro/static/css/dropdown.css | 1 - 1 file changed, 1 deletion(-) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index 7ef6d78a8..4bd02a665 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -138,7 +138,6 @@ div.nav_panel a { /** spacing for tag elements only when elements are present inside wrapper **/ -/* Padding allows elements not to jump but may be too large */ .Select--multi.has-value .Select-multi-value-wrapper { display: flex; flex-wrap: wrap; From e2c346e405d962ea510dbabfaafea6b6d9e5dd5c Mon Sep 17 00:00:00 2001 From: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> Date: Thu, 26 Oct 2023 09:16:29 +0200 Subject: [PATCH 084/121] Update vizro-core/src/vizro/static/css/dropdown.css Co-authored-by: Li Nguyen <90609403+huong-li-nguyen@users.noreply.github.com> Signed-off-by: Maximilian Schulz <83698606+maxschulz-COL@users.noreply.github.com> --- vizro-core/src/vizro/static/css/dropdown.css | 1 - 1 file changed, 1 deletion(-) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index 4bd02a665..3b43f35ad 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -36,7 +36,6 @@ div.page_container .Select-control { height: 32px; } -/* Dropdown background color when focused */ div.page_container .Select.is-focused > .Select-control { background-color: var(--field-enabled); } From 1548913bd07d0c9a8db95583d6f8e8cebc102bb5 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 09:47:32 +0200 Subject: [PATCH 085/121] Minor comments and table.build method fixes --- vizro-core/docs/pages/user_guides/actions.md | 2 +- .../actions/_action_loop/_build_action_loop_callbacks.py | 4 ++-- vizro-core/src/vizro/actions/_actions_utils.py | 4 ++-- .../actions/_callback_mapping/_callback_mapping_utils.py | 2 +- vizro-core/src/vizro/models/_components/table.py | 8 +++----- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index 6c2d2f87c..a12dc4484 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -113,7 +113,7 @@ To configure this figure interaction follow the steps below: ```py actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))] ``` -2. If the source figure is [`Graph`][vizro.models.Graph], enter the filter columns in the `custom_data` argument of the underlying source chart `function` if the source figure is [`Graph`][vizro.models.Graph]. +2. If the source figure is [`Graph`][vizro.models.Graph], enter the filter columns in the `custom_data` argument of the underlying source chart `function`. ```py Graph(figure=px.scatter(..., custom_data=["continent"])) ``` diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index 08526dfb1..94f2789d9 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -28,10 +28,10 @@ def _build_action_loop_callbacks() -> None: actions_chain_trigger_component_id = actions_chain.trigger.component_id try: actions_chain_trigger_component = model_manager[ModelID(str(actions_chain_trigger_component_id))] - # Use underlying 'Datatable' object as a trigger component. + # Use underlying table object as a trigger component. if isinstance(actions_chain_trigger_component, Table): actions_chain_trigger_component_id = actions_chain_trigger_component._underlying_table_id - # Not all action_chain_trigger_components are included in model_manager. eg on_page_load_action_trigger + # Not all action_chain_trigger_components are included in model_manager e.g. on_page_load_action_trigger except KeyError: pass diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 77515e02a..62cc62081 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -70,7 +70,7 @@ def _apply_chart_filter_interaction( if not ctd_click_data["value"]: return data_frame - source_chart_id = ctd_click_data["id"] + source_chart_id: ModelID = ctd_click_data["id"] source_chart_actions = _get_component_actions(model_manager[source_chart_id]) try: custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] @@ -108,7 +108,7 @@ def _apply_table_filter_interaction( try: source_table_actions = _get_component_actions(model_manager[source_table_id]) except KeyError: - # source_table_id is dash.Datatable id and we need to fetch actions from parent Vizro.Table component + # source_table_id is underlying table id, so actions from parent Vizro.Table component should be considered. source_table_actions = _get_component_actions(_get_parent_vizro_table(source_table_id)) for action in source_table_actions: diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index c24c6ec77..ec407ed69 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -152,7 +152,7 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, Any]: "filter_interaction": ( _get_inputs_of_chart_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) if "filter_interaction" in include_inputs - else {} + else [] ), "theme_selector": (State("theme_selector", "on") if "theme_selector" in include_inputs else []), } diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index ba1a29681..d9fd9e972 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -78,14 +78,12 @@ def pre_build(self): @_log_call def build(self): # TODO: We also need to take case what empty object we need to create here once we support AgGrid and others. - dash_datatable_object = ( - dash_table.DataTable(id=self._underlying_table_id) if self.actions else dash_table.DataTable() - ) - return html.Div( [ html.H3(self.title, className="table-title") if self.title else None, - html.Div(dash_datatable_object, id=self.id), + html.Div( + dash_table.DataTable(**({"id": self._underlying_table_id} if self.actions else {})), id=self.id + ), ], className="table-container", ) From 5fe5989745266eb0e10a16042ac5278aa86a8b8d Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 09:56:15 +0200 Subject: [PATCH 086/121] Removing TODOs --- .../vizro/actions/_callback_mapping/_callback_mapping_utils.py | 1 - vizro-core/src/vizro/models/_components/table.py | 2 -- 2 files changed, 3 deletions(-) diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index ec407ed69..44fe81392 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -107,7 +107,6 @@ def _get_inputs_of_chart_interactions( inputs = [] for action in chart_interactions_on_page: triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) - # TODO: Consider do we want to move the following logic into Model implementations. if isinstance(triggered_model, Table): inputs.append( { diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index d9fd9e972..e4943de08 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -37,7 +37,6 @@ class Table(VizroBaseModel): _output_property: str = PrivateAttr("children") # validator - # TODO: We need to take care of this argument once we support AgGrid and others. set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] _validate_callable = validator("figure", allow_reuse=True, always=True)(_process_callable_data_frame) @@ -77,7 +76,6 @@ def pre_build(self): @_log_call def build(self): - # TODO: We also need to take case what empty object we need to create here once we support AgGrid and others. return html.Div( [ html.H3(self.title, className="table-title") if self.title else None, From 4eb5174f2c68a229ce18747980172cecf36972e7 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 10:09:11 +0200 Subject: [PATCH 087/121] Add helper functions return type --- vizro-core/examples/default/app.py | 10 ++++------ vizro-core/src/vizro/actions/_actions_utils.py | 9 +++++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 8035f5197..d6b34c1d2 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -61,9 +61,7 @@ def AgGrid(data_frame=None): vm.Table( id="table_id", figure=dash_data_table( - id="dash_datatable_id", - data_frame="table_data", - style_header={"border": "1px solid green"}, + id="dash_datatable_id", data_frame="table_data", style_cell={"border": "5px solid green"}, ), actions=[ vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart", "table_2_id"])) @@ -83,7 +81,7 @@ def AgGrid(data_frame=None): vm.Table( id="table_2_id", figure=dash_data_table( - id="dash_datatable_id_2", data_frame=data, style_header={"border": "1px solid green"} + id="dash_datatable_id_2", data_frame=data, style_cell={"border": "5px solid green"} ), actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))], ), @@ -98,8 +96,8 @@ def AgGrid(data_frame=None): controls=[ vm.Filter(column="State", selector=vm.Dropdown()), vm.Parameter( - targets=["table_id.style_header.border", "table_2_id.style_header.border"], - selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), + targets=["table_id.style_cell.border", "table_2_id.style_cell.border"], + selector=vm.RadioItems(options=["5px solid green", "5px solid pink"]), ), ], ) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 62cc62081..699309a38 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -14,7 +14,7 @@ from vizro.models.types import MultiValueType, SelectorType, SingleValueType if TYPE_CHECKING: - from vizro.models import Action + from vizro.models import Action, Table ValidatedNoneValueType = Union[SingleValueType, MultiValueType, None, List[None]] @@ -65,7 +65,7 @@ def _apply_filters( def _apply_chart_filter_interaction( data_frame: pd.DataFrame, target: str, ctd_filter_interaction: Dict[str, CallbackTriggerDict] -): +) -> pd.DataFrame: ctd_click_data = ctd_filter_interaction["clickData"] if not ctd_click_data["value"]: return data_frame @@ -88,17 +88,18 @@ def _apply_chart_filter_interaction( return data_frame -def _get_parent_vizro_table(_underlying_table_id: str): +def _get_parent_vizro_table(_underlying_table_id: str) -> Table: from vizro.models import Table for _, table in model_manager._items_with_type(Table): if table._underlying_table_id == _underlying_table_id: return table + raise KeyError(f"No parent Vizro.Table component found for underlying table with id {_underlying_table_id}.") def _apply_table_filter_interaction( data_frame: pd.DataFrame, target: str, ctd_filter_interaction: Dict[str, CallbackTriggerDict] -): +) -> pd.DataFrame: ctd_active_cell = ctd_filter_interaction["active_cell"] ctd_derived_viewport_data = ctd_filter_interaction["derived_viewport_data"] if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: From 8d3566cd6f7d54b01e5aceba6dfa9489759f21f9 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 10:26:14 +0200 Subject: [PATCH 088/121] Merge base branch --- vizro-core/examples/default/app.py | 7 ++----- vizro-core/src/vizro/static/css/dropdown.css | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index d6b34c1d2..95684ff4e 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -60,8 +60,7 @@ def AgGrid(data_frame=None): components=[ vm.Table( id="table_id", - figure=dash_data_table( - id="dash_datatable_id", data_frame="table_data", style_cell={"border": "5px solid green"}, + figure=dash_data_table(id="dash_datatable_id", data_frame="table_data", style_cell={"border": "5px solid green"}, ), actions=[ vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart", "table_2_id"])) @@ -80,9 +79,7 @@ def AgGrid(data_frame=None): ), vm.Table( id="table_2_id", - figure=dash_data_table( - id="dash_datatable_id_2", data_frame=data, style_cell={"border": "5px solid green"} - ), + figure=dash_data_table(id="dash_datatable_id_2", data_frame=data, style_cell={"border": "5px solid green"}), actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))], ), # TODO: Enable AgGrid to work with actions as action's trigger. diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index 3b43f35ad..5f5fcca63 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -145,5 +145,5 @@ wrapper **/ } .Select-input > input { - padding: 0 !important; /*Required so tags don't jump caused by adding table */ + padding: 0 !important; /*Required so tags don't jump caused by adding table */ } From 0e32f429dde4eb74cfd10e620fd87175a37f9094 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 15:27:52 +0200 Subject: [PATCH 089/121] Adjusted export_data tests (they include table filter interaction now) --- .../tests/unit/vizro/actions/conftest.py | 22 +++ .../vizro/actions/test_export_data_action.py | 158 ++++++++++++++---- 2 files changed, 147 insertions(+), 33 deletions(-) diff --git a/vizro-core/tests/unit/vizro/actions/conftest.py b/vizro-core/tests/unit/vizro/actions/conftest.py index 566f2bbbe..ab4473ee6 100644 --- a/vizro-core/tests/unit/vizro/actions/conftest.py +++ b/vizro-core/tests/unit/vizro/actions/conftest.py @@ -3,6 +3,7 @@ import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro +from vizro.tables import dash_data_table @pytest.fixture @@ -30,6 +31,11 @@ def scatter_chart(gapminder_2007, scatter_params): return px.scatter(gapminder_2007, **scatter_params).update_layout(margin_t=24) +@pytest.fixture +def dash_data_table_fixture(gapminder_2007): + return dash_data_table(data_frame=gapminder_2007) + + @pytest.fixture def target_scatter_filtered_continent(request, gapminder_2007, scatter_params): continent = request.param @@ -57,3 +63,19 @@ def managers_one_page_two_graphs_one_button(box_chart, scatter_chart): ], ) Vizro._pre_build() + + +@pytest.fixture +def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, dash_data_table_fixture): + """Instantiates a simple model_manager and data_manager with a page, two graph models and the button component.""" + vm.Page( + id="test_page", + title="My first dashboard", + components=[ + vm.Graph(id="box_chart", figure=box_chart), + vm.Graph(id="scatter_chart", figure=scatter_chart), + vm.Table(id="vizro_table", figure=dash_data_table_fixture), + vm.Button(id="button"), + ], + ) + Vizro._pre_build() diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index 5411e1abe..1bc3d2e4d 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -13,12 +13,14 @@ @pytest.fixture def target_scatter_filtered_pop_filter_interaction_continent(request, gapminder_2007): - pop_filter, continent_filter_interaction = request.param + pop_filter, continent_filter_interaction, country_table_filter_interaction = request.param data = gapminder_2007 if pop_filter: data = data[data["pop"].between(pop_filter[0], pop_filter[1], inclusive="both")] if continent_filter_interaction: data = data[data["continent"].isin(continent_filter_interaction)] + if country_table_filter_interaction: + data = data[data["country"].isin(country_table_filter_interaction)] return data @@ -45,7 +47,53 @@ def managers_one_page_without_graphs_one_button(): @pytest.fixture def callback_context_export_data(request): """Mock dash.callback_context that represents on page load.""" - targets, pop_filter, continent_filter_interaction = request.param + targets, pop_filter, continent_filter_interaction, country_table_filter_interaction = request.param + args_grouping_filter_interaction = [] + if continent_filter_interaction: + args_grouping_filter_interaction.append( + { + "clickData": CallbackTriggerDict( + id="box_chart", + property="clickData", + value={ + "points": [ + { + "customdata": [continent_filter_interaction], + } + ] + }, + str_id="box_chart", + triggered=False, + ) + } + ) + if country_table_filter_interaction: + args_grouping_filter_interaction.append( + { + "active_cell": CallbackTriggerDict( + id="vizro_table", + property="active_cell", + value={'row': 0, 'column': 0, 'column_id': 'country'}, + str_id="vizro_table", + triggered=False, + ), + "derived_viewport_data": CallbackTriggerDict( + id="vizro_table", + property="derived_viewport_data", + value=[ + {'country': 'Algeria', 'continent': 'Africa', 'year': 2007, 'lifeExp': 72.301, 'pop': 33333216, + 'gdpPercap': 6223.367465, 'iso_alpha': 'DZA', 'iso_num': 12}, + {'country': 'Egypt', 'continent': 'Africa', 'year': 2007, 'lifeExp': 71.33800000000002, + 'pop': 80264543, 'gdpPercap': 5581.180998, 'iso_alpha': 'EGY', 'iso_num': 818}, + {'country': 'South Africa', 'continent': 'Africa', 'year': 2007, 'lifeExp': 49.339, + 'pop': 43997828, + 'gdpPercap': 9269.657808, 'iso_alpha': 'ZAF', 'iso_num': 710} + ], + str_id="vizro_table", + triggered=False, + ) + } + ) mock_callback_context = { "args_grouping": { "filters": [ @@ -59,25 +107,7 @@ def callback_context_export_data(request): ] if pop_filter else [], - "filter_interaction": [ - { - "clickData": CallbackTriggerDict( - id="box_chart", - property="clickData", - value={ - "points": [ - { - "customdata": [continent_filter_interaction], - } - ] - }, - str_id="box_chart", - triggered=False, - ) - } - ] - if continent_filter_interaction - else [], + "filter_interaction": args_grouping_filter_interaction, }, "outputs_list": [ {"id": {"action_id": "test_action", "target_id": target, "type": "download-dataframe"}, "property": "data"} @@ -90,7 +120,7 @@ def callback_context_export_data(request): class TestExportData: @pytest.mark.usefixtures("managers_one_page_without_graphs_one_button") - @pytest.mark.parametrize("callback_context_export_data", [([[], None, None])], indirect=True) + @pytest.mark.parametrize("callback_context_export_data", [([[], None, None, None])], indirect=True) def test_no_graphs_no_targets(self, callback_context_export_data): # Add action to relevant component model_manager["button"].actions = [vm.Action(id="test_action", function=export_data())] @@ -102,7 +132,7 @@ def test_no_graphs_no_targets(self, callback_context_export_data): @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") @pytest.mark.parametrize( - "callback_context_export_data", [([["scatter_chart", "box_chart"], None, None])], indirect=True + "callback_context_export_data", [([["scatter_chart", "box_chart"], None, None, None])], indirect=True ) def test_graphs_no_targets(self, callback_context_export_data, gapminder_2007): # Add action to relevant component @@ -121,8 +151,8 @@ def test_graphs_no_targets(self, callback_context_export_data, gapminder_2007): @pytest.mark.parametrize( "callback_context_export_data, targets", [ - ([["scatter_chart", "box_chart"], None, None], None), - ([["scatter_chart", "box_chart"], None, None], []), + ([["scatter_chart", "box_chart"], None, None, None], None), + ([["scatter_chart", "box_chart"], None, None, None], []), ], indirect=["callback_context_export_data"], ) @@ -140,7 +170,7 @@ def test_graphs_false_targets(self, callback_context_export_data, targets, gapmi assert result["download-dataframe_box_chart"]["content"] == gapminder_2007.to_csv(index=False) @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") - @pytest.mark.parametrize("callback_context_export_data", [(["scatter_chart"], None, None)], indirect=True) + @pytest.mark.parametrize("callback_context_export_data", [(["scatter_chart"], None, None, None)], indirect=True) def test_one_target(self, callback_context_export_data, gapminder_2007): # Add action to relevant component model_manager["button"].actions = [vm.Action(id="test_action", function=export_data(targets=["scatter_chart"]))] @@ -155,7 +185,7 @@ def test_one_target(self, callback_context_export_data, gapminder_2007): @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") @pytest.mark.parametrize( - "callback_context_export_data", [(["scatter_chart", "box_chart"], None, None)], indirect=True + "callback_context_export_data", [(["scatter_chart", "box_chart"], None, None, None)], indirect=True ) def test_multiple_targets(self, callback_context_export_data, gapminder_2007): # Add action to relevant component @@ -173,7 +203,7 @@ def test_multiple_targets(self, callback_context_export_data, gapminder_2007): assert result["download-dataframe_box_chart"]["content"] == gapminder_2007.to_csv(index=False) @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") - @pytest.mark.parametrize("callback_context_export_data", [(["invalid_target_id"], None, None)], indirect=True) + @pytest.mark.parametrize("callback_context_export_data", [(["invalid_target_id"], None, None, None)], indirect=True) def test_invalid_target( self, callback_context_export_data, @@ -194,14 +224,14 @@ def test_invalid_target( "target_box_filtered_pop", [ ( - [["scatter_chart", "box_chart"], [10**6, 10**7], None], - [[10**6, 10**7], None], + [["scatter_chart", "box_chart"], [10**6, 10**7], None, None], + [[10**6, 10**7], None, None], [10**6, 10**7], ), - ([["scatter_chart", "box_chart"], None, "Africa"], [None, ["Africa"]], None), + ([["scatter_chart", "box_chart"], None, "Africa", None], [None, ["Africa"], None], None), ( - [["scatter_chart", "box_chart"], [10**6, 10**7], "Africa"], - [[10**6, 10**7], ["Africa"]], + [["scatter_chart", "box_chart"], [10**6, 10**7], "Africa", None], + [[10**6, 10**7], ["Africa"], None], [10**6, 10**7], ), ], @@ -239,3 +269,65 @@ def test_multiple_targets_with_filter_and_filter_interaction( assert result["download-dataframe_box_chart"]["filename"] == "box_chart.csv" assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) + + @pytest.mark.usefixtures("managers_one_page_two_graphs_one_table_one_button") + @pytest.mark.parametrize( + "callback_context_export_data, " + "target_scatter_filtered_pop_filter_interaction_continent, " + "target_box_filtered_pop", + [ + ( + [["scatter_chart", "box_chart"], [10**6, 10**7], None, "Algeria"], + [[10**6, 10**7], None, ["Algeria"]], + [10**6, 10**7], + ), + ( + [["scatter_chart", "box_chart"], None, "Africa", "Algeria"], + [None, ["Africa"], ["Algeria"]], + None + ), + ( + [["scatter_chart", "box_chart"], [10**6, 10**7], "Africa", "Algeria"], + [[10**6, 10**7], ["Africa"], ["Algeria"]], + [10**6, 10**7], + ), + ], + indirect=True, + ) + def test_multiple_targets_with_filter_and_filter_interaction_and_table( + self, + callback_context_export_data, + target_scatter_filtered_pop_filter_interaction_continent, + target_box_filtered_pop, + ): + # Creating and adding a Filter object to the existing Page + pop_filter = vm.Filter(column="pop", selector=vm.RangeSlider(id="pop_filter")) + model_manager["test_page"].controls = [pop_filter] + # Adds a default _filter Action to the filter selector objects + pop_filter.pre_build() + + # Add filter_interaction Action to scatter_chart component + model_manager["box_chart"].actions = [ + vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart"])) + ] + + # Add filter_interaction Action to scatter_chart component + model_manager["vizro_table"].actions = [ + vm.Action(id="table_filter_interaction", function=filter_interaction(targets=["scatter_chart"])) + ] + + # Add export_data action to relevant component + model_manager["button"].actions = [ + vm.Action(id="test_action", function=export_data(targets=["scatter_chart", "box_chart"])) + ] + + # Run action by picking the above added export_data action function and executing it with () + result = model_manager["test_action"].function() + + assert result["download-dataframe_scatter_chart"]["filename"] == "scatter_chart.csv" + assert result["download-dataframe_scatter_chart"][ + "content" + ] == target_scatter_filtered_pop_filter_interaction_continent.to_csv(index=False) + + assert result["download-dataframe_box_chart"]["filename"] == "box_chart.csv" + assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) \ No newline at end of file From 4f7e175730d6e83d062d4c91a34358343cfa8939 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 26 Oct 2023 15:31:08 +0200 Subject: [PATCH 090/121] Minor changes --- .../vizro/actions/test_export_data_action.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index 1bc3d2e4d..e7c52eb6d 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -12,7 +12,7 @@ @pytest.fixture -def target_scatter_filtered_pop_filter_interaction_continent(request, gapminder_2007): +def target_scatter_filter_and_filter_interaction(request, gapminder_2007): pop_filter, continent_filter_interaction, country_table_filter_interaction = request.param data = gapminder_2007 if pop_filter: @@ -220,7 +220,7 @@ def test_invalid_target( @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") @pytest.mark.parametrize( "callback_context_export_data, " - "target_scatter_filtered_pop_filter_interaction_continent, " + "target_scatter_filter_and_filter_interaction, " "target_box_filtered_pop", [ ( @@ -240,7 +240,7 @@ def test_invalid_target( def test_multiple_targets_with_filter_and_filter_interaction( self, callback_context_export_data, - target_scatter_filtered_pop_filter_interaction_continent, + target_scatter_filter_and_filter_interaction, target_box_filtered_pop, ): # Creating and adding a Filter object to the existing Page @@ -265,7 +265,7 @@ def test_multiple_targets_with_filter_and_filter_interaction( assert result["download-dataframe_scatter_chart"]["filename"] == "scatter_chart.csv" assert result["download-dataframe_scatter_chart"][ "content" - ] == target_scatter_filtered_pop_filter_interaction_continent.to_csv(index=False) + ] == target_scatter_filter_and_filter_interaction.to_csv(index=False) assert result["download-dataframe_box_chart"]["filename"] == "box_chart.csv" assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) @@ -273,7 +273,7 @@ def test_multiple_targets_with_filter_and_filter_interaction( @pytest.mark.usefixtures("managers_one_page_two_graphs_one_table_one_button") @pytest.mark.parametrize( "callback_context_export_data, " - "target_scatter_filtered_pop_filter_interaction_continent, " + "target_scatter_filter_and_filter_interaction, " "target_box_filtered_pop", [ ( @@ -297,7 +297,7 @@ def test_multiple_targets_with_filter_and_filter_interaction( def test_multiple_targets_with_filter_and_filter_interaction_and_table( self, callback_context_export_data, - target_scatter_filtered_pop_filter_interaction_continent, + target_scatter_filter_and_filter_interaction, target_box_filtered_pop, ): # Creating and adding a Filter object to the existing Page @@ -311,7 +311,7 @@ def test_multiple_targets_with_filter_and_filter_interaction_and_table( vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart"])) ] - # Add filter_interaction Action to scatter_chart component + # Add table filter_interaction Action to scatter_chart component model_manager["vizro_table"].actions = [ vm.Action(id="table_filter_interaction", function=filter_interaction(targets=["scatter_chart"])) ] @@ -327,7 +327,7 @@ def test_multiple_targets_with_filter_and_filter_interaction_and_table( assert result["download-dataframe_scatter_chart"]["filename"] == "scatter_chart.csv" assert result["download-dataframe_scatter_chart"][ "content" - ] == target_scatter_filtered_pop_filter_interaction_continent.to_csv(index=False) + ] == target_scatter_filter_and_filter_interaction.to_csv(index=False) assert result["download-dataframe_box_chart"]["filename"] == "box_chart.csv" assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) \ No newline at end of file From 4faa43eaea9a8c4dd62e027e65de2e1d00df71be Mon Sep 17 00:00:00 2001 From: petar-qb Date: Fri, 27 Oct 2023 08:18:34 +0200 Subject: [PATCH 091/121] Export data and filter interaction action tests updated --- .../vizro/actions/test_export_data_action.py | 37 ++- .../actions/test_filter_interaction_action.py | 245 +++++++++++++++--- 2 files changed, 221 insertions(+), 61 deletions(-) diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index e7c52eb6d..9fae41336 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -73,7 +73,7 @@ def callback_context_export_data(request): "active_cell": CallbackTriggerDict( id="vizro_table", property="active_cell", - value={'row': 0, 'column': 0, 'column_id': 'country'}, + value={"row": 0, "column": 0, "column_id": "country"}, str_id="vizro_table", triggered=False, ), @@ -81,17 +81,20 @@ def callback_context_export_data(request): id="vizro_table", property="derived_viewport_data", value=[ - {'country': 'Algeria', 'continent': 'Africa', 'year': 2007, 'lifeExp': 72.301, 'pop': 33333216, - 'gdpPercap': 6223.367465, 'iso_alpha': 'DZA', 'iso_num': 12}, - {'country': 'Egypt', 'continent': 'Africa', 'year': 2007, 'lifeExp': 71.33800000000002, - 'pop': 80264543, 'gdpPercap': 5581.180998, 'iso_alpha': 'EGY', 'iso_num': 818}, - {'country': 'South Africa', 'continent': 'Africa', 'year': 2007, 'lifeExp': 49.339, - 'pop': 43997828, - 'gdpPercap': 9269.657808, 'iso_alpha': 'ZAF', 'iso_num': 710} + { + "country": "Algeria", + "continent": "Africa", + "year": 2007, + }, + { + "country": "Egypt", + "continent": "Africa", + "year": 2007, + }, ], str_id="vizro_table", triggered=False, - ) + ), } ) mock_callback_context = { @@ -219,9 +222,7 @@ def test_invalid_target( @pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") @pytest.mark.parametrize( - "callback_context_export_data, " - "target_scatter_filter_and_filter_interaction, " - "target_box_filtered_pop", + "callback_context_export_data, " "target_scatter_filter_and_filter_interaction, " "target_box_filtered_pop", [ ( [["scatter_chart", "box_chart"], [10**6, 10**7], None, None], @@ -272,20 +273,14 @@ def test_multiple_targets_with_filter_and_filter_interaction( @pytest.mark.usefixtures("managers_one_page_two_graphs_one_table_one_button") @pytest.mark.parametrize( - "callback_context_export_data, " - "target_scatter_filter_and_filter_interaction, " - "target_box_filtered_pop", + "callback_context_export_data, " "target_scatter_filter_and_filter_interaction, " "target_box_filtered_pop", [ ( [["scatter_chart", "box_chart"], [10**6, 10**7], None, "Algeria"], [[10**6, 10**7], None, ["Algeria"]], [10**6, 10**7], ), - ( - [["scatter_chart", "box_chart"], None, "Africa", "Algeria"], - [None, ["Africa"], ["Algeria"]], - None - ), + ([["scatter_chart", "box_chart"], None, "Africa", "Algeria"], [None, ["Africa"], ["Algeria"]], None), ( [["scatter_chart", "box_chart"], [10**6, 10**7], "Africa", "Algeria"], [[10**6, 10**7], ["Africa"], ["Algeria"]], @@ -330,4 +325,4 @@ def test_multiple_targets_with_filter_and_filter_interaction_and_table( ] == target_scatter_filter_and_filter_interaction.to_csv(index=False) assert result["download-dataframe_box_chart"]["filename"] == "box_chart.csv" - assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) \ No newline at end of file + assert result["download-dataframe_box_chart"]["content"] == target_box_filtered_pop.to_csv(index=False) diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index ca999dfe4..3585fc465 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -2,6 +2,7 @@ from dash._callback_context import context_value from dash._utils import AttributeDict +import plotly.express as px import vizro.models as vm from vizro.actions import filter_interaction from vizro.actions._actions_utils import ( @@ -11,29 +12,64 @@ @pytest.fixture -def callback_context_click_continent(request): +def callback_context_filter_interaction(request): """Mock dash.callback_context that represents a click on a continent data-point.""" - continent = request.param + continent_filter_interaction, country_table_filter_interaction = request.param + + args_grouping_filter_interaction = [] + if continent_filter_interaction: + args_grouping_filter_interaction.append( + { + "clickData": CallbackTriggerDict( + id="box_chart", + property="clickData", + value={ + "points": [ + { + "customdata": [continent_filter_interaction], + } + ] + }, + str_id="box_chart", + triggered=False, + ) + } + ) + if country_table_filter_interaction: + args_grouping_filter_interaction.append( + { + "active_cell": CallbackTriggerDict( + id="vizro_table", + property="active_cell", + value={"row": 0, "column": 0, "column_id": "country"}, + str_id="vizro_table", + triggered=False, + ), + "derived_viewport_data": CallbackTriggerDict( + id="vizro_table", + property="derived_viewport_data", + value=[ + { + "country": country_table_filter_interaction, + "continent": "Africa", + "year": 2007, + }, + { + "country": "Egypt", + "continent": "Africa", + "year": 2007, + }, + ], + str_id="vizro_table", + triggered=False, + ), + } + ) + mock_callback_context = { "args_grouping": { "filters": [], - "filter_interaction": [ - { - "clickData": CallbackTriggerDict( - id="box_chart", - property="clickData", - value={ - "points": [ - { - "customdata": [continent], - } - ] - }, - str_id="box_chart", - triggered=False, - ) - } - ], + "filter_interaction": args_grouping_filter_interaction, "parameters": [], "theme_selector": CallbackTriggerDict( id="theme_selector", @@ -48,15 +84,48 @@ def callback_context_click_continent(request): return context_value -@pytest.mark.usefixtures("managers_one_page_two_graphs_one_button") +@pytest.fixture +def target_scatter_filtered_continent(request, gapminder_2007, scatter_params): + continent, country = request.param + + data = gapminder_2007 + if continent: + data = data[data["continent"].isin([continent])] + if country: + data = data[data["country"].isin([country])] + + return px.scatter(data, **scatter_params).update_layout(margin_t=24) + + +@pytest.fixture +def target_box_filtered_continent(request, gapminder_2007, box_params): + continent, country = request.param + + data = gapminder_2007 + if continent: + data = data[data["continent"].isin([continent])] + if country: + data = data[data["country"].isin([country])] + + return px.box(data, **box_params).update_layout(margin_t=24) + + +@pytest.mark.usefixtures("managers_one_page_two_graphs_one_table_one_button") class TestFilterInteraction: - @pytest.mark.parametrize("callback_context_click_continent", ["Africa", "Europe"], indirect=True) + @pytest.mark.parametrize( + "callback_context_filter_interaction", + [ + ("Africa", None), + ("Europe", None) + ], + indirect=True + ) def test_filter_interaction_without_targets_temporary_behavior( # temporary fix, see below test self, - callback_context_click_continent, + callback_context_filter_interaction, ): # Add action to relevant component - here component[0] is the source_chart - model_manager["test_page"].components[0].actions = [vm.Action(id="test_action", function=filter_interaction())] + model_manager["box_chart"].actions = [vm.Action(id="test_action", function=filter_interaction())] # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() @@ -65,18 +134,25 @@ def test_filter_interaction_without_targets_temporary_behavior( # temporary fix @pytest.mark.xfail # This is the desired behavior, ie when no target is provided, then all charts filtered @pytest.mark.parametrize( - "callback_context_click_continent,target_scatter_filtered_continent,target_box_filtered_continent", - [("Africa", "Africa", "Africa"), ("Europe", "Europe", "Europe"), ("Americas", "Americas", "Americas")], + "callback_context_filter_interaction," + "target_scatter_filtered_continent," + "target_box_filtered_continent", + [ + + (("Africa", None), ("Africa", None), ("Africa", None)), + (("Europe", None), ("Europe", None), ("Europe", None)), + (("Americas", None), ("Americas", None), ("Americas", None)) + ], indirect=True, ) def test_filter_interaction_without_targets_desired_behavior( self, - callback_context_click_continent, + callback_context_filter_interaction, target_scatter_filtered_continent, target_box_filtered_continent, ): # Add action to relevant component - here component[0] is the source_chart - model_manager["test_page"].components[0].actions = [vm.Action(id="test_action", function=filter_interaction())] + model_manager["box_chart"].actions = [vm.Action(id="test_action", function=filter_interaction())] # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() @@ -85,17 +161,21 @@ def test_filter_interaction_without_targets_desired_behavior( assert result["box_chart"] == target_box_filtered_continent @pytest.mark.parametrize( - "callback_context_click_continent,target_scatter_filtered_continent", - [("Africa", ["Africa"]), ("Europe", ["Europe"]), ("Americas", ["Americas"])], + "callback_context_filter_interaction,target_scatter_filtered_continent", + [ + (("Africa", None), ("Africa", None)), + (("Europe", None), ("Europe", None)), + (("Americas", None), ("Americas", None)) + ], indirect=True, ) def test_filter_interaction_with_one_target( self, - callback_context_click_continent, + callback_context_filter_interaction, target_scatter_filtered_continent, ): # Add action to relevant component - here component[0] is the source_chart - model_manager["test_page"].components[0].actions = [ + model_manager["box_chart"].actions = [ vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart"])) ] @@ -105,22 +185,22 @@ def test_filter_interaction_with_one_target( assert result["scatter_chart"] == target_scatter_filtered_continent @pytest.mark.parametrize( - "callback_context_click_continent,target_scatter_filtered_continent,target_box_filtered_continent", + "callback_context_filter_interaction,target_scatter_filtered_continent,target_box_filtered_continent", [ - ("Africa", ["Africa"], ["Africa"]), - ("Europe", ["Europe"], ["Europe"]), - ("Americas", ["Americas"], ["Americas"]), + (("Africa", None), ("Africa", None), ("Africa", None)), + (("Europe", None), ("Europe", None), ("Europe", None)), + (("Americas", None), ("Americas", None), ("Americas", None)), ], indirect=True, ) def test_filter_interaction_with_two_target( self, - callback_context_click_continent, + callback_context_filter_interaction, target_scatter_filtered_continent, target_box_filtered_continent, ): # Add action to relevant component - here component[0] is the source_chart - model_manager["test_page"].components[0].actions = [ + model_manager["box_chart"].actions = [ vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart", "box_chart"])) ] @@ -132,18 +212,103 @@ def test_filter_interaction_with_two_target( @pytest.mark.xfail # This (or similar code) should raise a Value/Validation error explaining next steps @pytest.mark.parametrize("target", ["scatter_chart", ["scatter_chart"]]) - @pytest.mark.parametrize("callback_context_click_continent", ["Africa", "Europe"], indirect=True) + @pytest.mark.parametrize("callback_context_filter_interaction", [("Africa", None), ("Europe", None)], indirect=True) def test_filter_interaction_with_invalid_targets( self, target, - callback_context_click_continent, + callback_context_filter_interaction, ): with pytest.raises(ValueError, match="Target invalid_target not found in model_manager."): # Add action to relevant component - here component[0] is the source_chart - model_manager["test_page"].components[0].actions = [ + model_manager["box_chart"].actions = [ vm.Action(id="test_action", function=filter_interaction(targets=target)) ] + @pytest.mark.parametrize( + "callback_context_filter_interaction,target_scatter_filtered_continent", + [ + ((None, "Algeria"), (None, "Algeria")), + ((None, "Albania"), (None, "Albania")), + ((None, "Argentina"), (None, "Argentina")) + ], + indirect=True, + ) + def test_table_filter_interaction_with_one_target( + self, + callback_context_filter_interaction, + target_scatter_filtered_continent, + ): + model_manager["box_chart"].actions = [ + vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart"])) + ] + + model_manager["vizro_table"].actions = [ + vm.Action(function=filter_interaction(targets=["scatter_chart"])) + ] + + # Run action by picking the above added action function and executing it with () + result = model_manager["test_action"].function() + + assert result["scatter_chart"] == target_scatter_filtered_continent + + @pytest.mark.parametrize( + "callback_context_filter_interaction, target_scatter_filtered_continent, target_box_filtered_continent", + [ + ((None, "Algeria"), (None, "Algeria"), (None, "Algeria")), + ((None, "Albania"), (None, "Albania"), (None, "Albania")), + ((None, "Argentina"), (None, "Argentina"), (None, "Argentina")) + ], + indirect=True, + ) + def test_table_filter_interaction_with_two_targets( + self, + callback_context_filter_interaction, + target_scatter_filtered_continent, + target_box_filtered_continent, + ): + model_manager["box_chart"].actions = [ + vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart", "box_chart"])) + ] + + model_manager["vizro_table"].actions = [ + vm.Action(function=filter_interaction(targets=["scatter_chart", "box_chart"])) + ] + + # Run action by picking the above added action function and executing it with () + result = model_manager["test_action"].function() + + assert result["scatter_chart"] == target_scatter_filtered_continent + assert result["box_chart"] == target_box_filtered_continent + + @pytest.mark.parametrize( + "callback_context_filter_interaction, target_scatter_filtered_continent, target_box_filtered_continent", + [ + (("Africa", "Algeria"), ("Africa", "Algeria"), ("Africa", "Algeria")), + (("Europe", "Albania"), ("Europe", "Albania"), ("Europe", "Albania")), + (("Americas", "Argentina"), ("Americas", "Argentina"), ("Americas", "Argentina")) + ], + indirect=True, + ) + def test_mixed_chart_and_table_filter_interaction_with_two_targets( + self, + callback_context_filter_interaction, + target_scatter_filtered_continent, + target_box_filtered_continent, + ): + model_manager["box_chart"].actions = [ + vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart", "box_chart"])) + ] + + model_manager["vizro_table"].actions = [ + vm.Action(function=filter_interaction(targets=["scatter_chart", "box_chart"])) + ] + + # Run action by picking the above added action function and executing it with () + result = model_manager["test_action"].function() + + assert result["scatter_chart"] == target_scatter_filtered_continent + assert result["box_chart"] == target_box_filtered_continent + # TODO: Simplify parametrization, such that we have less repetitive code # TODO: Eliminate above xfails # TODO: Complement tests above with backend tests (currently the targets are also taken from model_manager! From f44bd1858f7a80b99456fb8fc4920c667fafdf42 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Fri, 27 Oct 2023 08:46:44 +0200 Subject: [PATCH 092/121] Table tests --- vizro-core/examples/default/app.py | 5 +- .../actions/test_filter_interaction_action.py | 30 +++----- .../vizro/models/_components/test_table.py | 72 ++++++++++++++++++- 3 files changed, 84 insertions(+), 23 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 95684ff4e..bd76282b7 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -60,7 +60,10 @@ def AgGrid(data_frame=None): components=[ vm.Table( id="table_id", - figure=dash_data_table(id="dash_datatable_id", data_frame="table_data", style_cell={"border": "5px solid green"}, + figure=dash_data_table( + id="dash_datatable_id", + data_frame="table_data", + style_cell={"border": "5px solid green"}, ), actions=[ vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart", "table_2_id"])) diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index 3585fc465..a72693583 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -1,8 +1,8 @@ +import plotly.express as px import pytest from dash._callback_context import context_value from dash._utils import AttributeDict -import plotly.express as px import vizro.models as vm from vizro.actions import filter_interaction from vizro.actions._actions_utils import ( @@ -112,14 +112,7 @@ def target_box_filtered_continent(request, gapminder_2007, box_params): @pytest.mark.usefixtures("managers_one_page_two_graphs_one_table_one_button") class TestFilterInteraction: - @pytest.mark.parametrize( - "callback_context_filter_interaction", - [ - ("Africa", None), - ("Europe", None) - ], - indirect=True - ) + @pytest.mark.parametrize("callback_context_filter_interaction", [("Africa", None), ("Europe", None)], indirect=True) def test_filter_interaction_without_targets_temporary_behavior( # temporary fix, see below test self, callback_context_filter_interaction, @@ -134,14 +127,11 @@ def test_filter_interaction_without_targets_temporary_behavior( # temporary fix @pytest.mark.xfail # This is the desired behavior, ie when no target is provided, then all charts filtered @pytest.mark.parametrize( - "callback_context_filter_interaction," - "target_scatter_filtered_continent," - "target_box_filtered_continent", + "callback_context_filter_interaction," "target_scatter_filtered_continent," "target_box_filtered_continent", [ - (("Africa", None), ("Africa", None), ("Africa", None)), (("Europe", None), ("Europe", None), ("Europe", None)), - (("Americas", None), ("Americas", None), ("Americas", None)) + (("Americas", None), ("Americas", None), ("Americas", None)), ], indirect=True, ) @@ -165,7 +155,7 @@ def test_filter_interaction_without_targets_desired_behavior( [ (("Africa", None), ("Africa", None)), (("Europe", None), ("Europe", None)), - (("Americas", None), ("Americas", None)) + (("Americas", None), ("Americas", None)), ], indirect=True, ) @@ -229,7 +219,7 @@ def test_filter_interaction_with_invalid_targets( [ ((None, "Algeria"), (None, "Algeria")), ((None, "Albania"), (None, "Albania")), - ((None, "Argentina"), (None, "Argentina")) + ((None, "Argentina"), (None, "Argentina")), ], indirect=True, ) @@ -242,9 +232,7 @@ def test_table_filter_interaction_with_one_target( vm.Action(id="test_action", function=filter_interaction(targets=["scatter_chart"])) ] - model_manager["vizro_table"].actions = [ - vm.Action(function=filter_interaction(targets=["scatter_chart"])) - ] + model_manager["vizro_table"].actions = [vm.Action(function=filter_interaction(targets=["scatter_chart"]))] # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() @@ -256,7 +244,7 @@ def test_table_filter_interaction_with_one_target( [ ((None, "Algeria"), (None, "Algeria"), (None, "Algeria")), ((None, "Albania"), (None, "Albania"), (None, "Albania")), - ((None, "Argentina"), (None, "Argentina"), (None, "Argentina")) + ((None, "Argentina"), (None, "Argentina"), (None, "Argentina")), ], indirect=True, ) @@ -285,7 +273,7 @@ def test_table_filter_interaction_with_two_targets( [ (("Africa", "Algeria"), ("Africa", "Algeria"), ("Africa", "Algeria")), (("Europe", "Albania"), ("Europe", "Albania"), ("Europe", "Albania")), - (("Americas", "Argentina"), ("Americas", "Argentina"), ("Americas", "Argentina")) + (("Americas", "Argentina"), ("Americas", "Argentina"), ("Americas", "Argentina")), ], indirect=True, ) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index db6aa1612..43142450d 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -8,11 +8,17 @@ import vizro.models as vm import vizro.plotly.express as px +from vizro.actions import filter_interaction from vizro.managers import data_manager from vizro.models._action._action import Action from vizro.tables import dash_data_table +@pytest.fixture +def dash_table_with_id(gapminder): + return dash_data_table(id="underlying_table_id", data_frame=gapminder) + + @pytest.fixture def dash_table_with_arguments(): return dash_data_table(data_frame=px.data.gapminder(), style_header={"border": "1px solid green"}) @@ -31,9 +37,27 @@ def expected_table(): html.Div(dash_table.DataTable(), id="text_table"), ], className="table-container", + id="text_table_outer", ) +@pytest.fixture +def expected_table_with_id(): + return html.Div( + [ + None, + html.Div(dash_table.DataTable(id="underlying_table_id"), id="text_table"), + ], + className="table-container", + id="text_table_outer", + ) + + +@pytest.fixture +def filter_interaction_action(): + return vm.Action(function=filter_interaction()) + + class TestDunderMethodsTable: def test_create_graph_mandatory_only(self, standard_dash_table): table = vm.Table(figure=standard_dash_table) @@ -108,13 +132,59 @@ def test_process_figure_data_frame_df(self, standard_dash_table, gapminder): table_with_str_df.figure["data_frame"] +class TestPreBuildTable: + def test_pre_build_no_actions_no_underlying_table_id(self, standard_dash_table): + table = vm.Table( + id="text_table", + figure=standard_dash_table, + ) + table.pre_build() + + assert hasattr(table, "_underlying_table_id") is False + + def test_pre_build_actions_no_underlying_table_id_exception(self, standard_dash_table, filter_interaction_action): + table = vm.Table( + id="text_table", + figure=standard_dash_table, + actions=[filter_interaction_action], + ) + with pytest.raises(ValueError, match="Underlying table object has no attribute 'id'."): + table.pre_build() + + def test_pre_build_actions_underlying_table_id(self, dash_table_with_id, filter_interaction_action): + table = vm.Table( + id="text_table", + figure=dash_table_with_id, + actions=[filter_interaction_action], + ) + table.pre_build() + + assert hasattr(table, "_underlying_table_id") is True + assert table._underlying_table_id == "underlying_table_id" + + class TestBuildTable: - def test_table_build(self, standard_dash_table, expected_table): + def test_table_build_mandatory_only(self, standard_dash_table, expected_table): table = vm.Table( id="text_table", figure=standard_dash_table, ) + table.pre_build() + result = json.loads(json.dumps(table.build(), cls=plotly.utils.PlotlyJSONEncoder)) expected = json.loads(json.dumps(expected_table, cls=plotly.utils.PlotlyJSONEncoder)) assert result == expected + + def test_table_build_with_id(self, dash_table_with_id, filter_interaction_action, expected_table_with_id): + table = vm.Table( + id="text_table", + figure=dash_table_with_id, + actions=[filter_interaction_action], + ) + + table.pre_build() + + result = json.loads(json.dumps(table.build(), cls=plotly.utils.PlotlyJSONEncoder)) + expected = json.loads(json.dumps(expected_table_with_id, cls=plotly.utils.PlotlyJSONEncoder)) + assert result == expected From bd21f02c424df98f20e2595e7736a008747c8494 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Fri, 27 Oct 2023 12:50:54 +0200 Subject: [PATCH 093/121] Adding more tests --- .../test_get_action_loop_components.py | 28 +++++-- .../test_get_action_callback_mapping.py | 74 +++++++++++++++---- .../tests/unit/vizro/actions/conftest.py | 8 +- .../actions/test_filter_interaction_action.py | 7 +- 4 files changed, 89 insertions(+), 28 deletions(-) diff --git a/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py b/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py index 68d23cbfb..15e3ae93c 100644 --- a/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py +++ b/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py @@ -9,9 +9,10 @@ import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro -from vizro.actions import export_data +from vizro.actions import export_data, filter_interaction from vizro.actions._action_loop._get_action_loop_components import _get_action_loop_components from vizro.managers import model_manager +from vizro.tables import dash_data_table @pytest.fixture @@ -68,7 +69,12 @@ def trigger_to_actions_chain_mapper_component(request): @pytest.fixture -def managers_one_page_two_components_two_controls(): +def dash_data_table_fixture_with_id(gapminder_2007): + return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) + + +@pytest.fixture +def managers_one_page_two_components_two_controls(dash_data_table_fixture_with_id): """Instantiates managers with one page that contains two controls and two components.""" vm.Dashboard( pages=[ @@ -76,6 +82,16 @@ def managers_one_page_two_components_two_controls(): id="test_page", title="First page", components=[ + vm.Table( + id="vizro_table", + figure=dash_data_table_fixture_with_id, + actions=[ + vm.Action( + id="table_filter_interaction_action", + function=filter_interaction(targets=["scatter_chart"]), + ) + ], + ), vm.Graph( id="scatter_chart", figure=px.scatter(px.data.gapminder(), x="lifeExp", y="gdpPercap"), @@ -141,10 +157,10 @@ def test_no_components(self): "trigger_to_actions_chain_mapper_component", [ ( - ["test_page", "export_data_button", "filter_continent_selector", "parameter_x_selector"], - ["test_page", "export_data_button", "filter_continent_selector", "parameter_x_selector"], - ["test_page", "export_data_button", "filter_continent_selector", "parameter_x_selector"], - ["test_page", "export_data_button", "filter_continent_selector", "parameter_x_selector"], + ["test_page", "vizro_table", "export_data_button", "filter_continent_selector", "parameter_x_selector"], + ["test_page", "vizro_table", "export_data_button", "filter_continent_selector", "parameter_x_selector"], + ["test_page", "vizro_table", "export_data_button", "filter_continent_selector", "parameter_x_selector"], + ["test_page", "vizro_table", "export_data_button", "filter_continent_selector", "parameter_x_selector"], ) ], indirect=True, diff --git a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py index a1f2bd395..a1865e6ba 100644 --- a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py +++ b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py @@ -12,6 +12,7 @@ from vizro.actions import export_data, filter_interaction from vizro.actions._callback_mapping._get_action_callback_mapping import _get_action_callback_mapping from vizro.models.types import capture +from vizro.tables import dash_data_table @capture("action") @@ -29,7 +30,12 @@ def export_data(): @pytest.fixture -def managers_one_page_four_controls_two_graphs_filter_interaction(request): +def dash_data_table_fixture_with_id(gapminder_2007): + return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) + + +@pytest.fixture +def managers_one_page_four_controls_two_figures_filter_interaction(request, dash_data_table_fixture_with_id): """Instantiates managers with one page that contains four controls, two graphs and filter interaction.""" # If the fixture is parametrised set the targets. Otherwise, set export_data without targets. export_data_action_function = export_data(targets=request.param) if hasattr(request, "param") else export_data() @@ -50,6 +56,16 @@ def managers_one_page_four_controls_two_graphs_filter_interaction(request): figure=px.scatter(px.data.gapminder(), x="lifeExp", y="gdpPercap", custom_data=["continent"]), actions=[vm.Action(id="custom_action", function=custom_action_example())], ), + vm.Table( + id="vizro_table", + figure=dash_data_table_fixture_with_id, + actions=[ + vm.Action( + id="table_filter_interaction_action", + function=filter_interaction(targets=["scatter_chart", "scatter_chart_2"]), + ) + ], + ), vm.Button( id="export_data_button", actions=[ @@ -63,7 +79,7 @@ def managers_one_page_four_controls_two_graphs_filter_interaction(request): vm.Filter(id="filter_country", column="country", selector=vm.Dropdown(id="filter_country_selector")), vm.Parameter( id="parameter_x", - targets=["scatter_chart.x", "scatter_chart_2.x"], + targets=["scatter_chart.x", "scatter_chart_2.x", "vizro_table.columns"], selector=vm.Dropdown( id="parameter_x_selector", options=["lifeExp", "gdpPercap", "pop"], @@ -73,7 +89,7 @@ def managers_one_page_four_controls_two_graphs_filter_interaction(request): ), vm.Parameter( id="parameter_y", - targets=["scatter_chart.y", "scatter_chart_2.y"], + targets=["scatter_chart.y", "scatter_chart_2.y", "vizro_table.values"], selector=vm.Dropdown( id="parameter_y_selector", options=["lifeExp", "gdpPercap", "pop"], @@ -100,7 +116,11 @@ def action_callback_inputs_expected(): "filter_interaction": [ { "clickData": dash.State("scatter_chart", "clickData"), - } + }, + { + "active_cell": dash.State("underlying_table_id", "active_cell"), + "derived_viewport_data": dash.State("underlying_table_id", "derived_viewport_data"), + }, ], "theme_selector": dash.State("theme_selector", "on"), } @@ -125,7 +145,11 @@ def export_data_inputs_expected(): "filter_interaction": [ { "clickData": dash.State("scatter_chart", "clickData"), - } + }, + { + "active_cell": dash.State("underlying_table_id", "active_cell"), + "derived_viewport_data": dash.State("underlying_table_id", "derived_viewport_data"), + }, ], "theme_selector": [], } @@ -149,7 +173,7 @@ def export_data_components_expected(request): ] -@pytest.mark.usefixtures("managers_one_page_four_controls_two_graphs_filter_interaction") +@pytest.mark.usefixtures("managers_one_page_four_controls_two_figures_filter_interaction") class TestCallbackMapping: """Tests action callback mapping for predefined and custom actions.""" @@ -180,14 +204,31 @@ def test_action_callback_mapping_inputs(self, action_id, callback_mapping_inputs [ {"component_id": "scatter_chart", "component_property": "figure"}, {"component_id": "scatter_chart_2", "component_property": "figure"}, + {"component_id": "vizro_table", "component_property": "children"}, ], ), ("filter_interaction_action", [{"component_id": "scatter_chart_2", "component_property": "figure"}]), + ( + "table_filter_interaction_action", + [ + {"component_id": "scatter_chart", "component_property": "figure"}, + {"component_id": "scatter_chart_2", "component_property": "figure"}, + ], + ), ( "parameter_action_parameter_x", [ {"component_id": "scatter_chart", "component_property": "figure"}, {"component_id": "scatter_chart_2", "component_property": "figure"}, + {"component_id": "vizro_table", "component_property": "children"}, + ], + ), + ( + "parameter_action_parameter_y", + [ + {"component_id": "scatter_chart", "component_property": "figure"}, + {"component_id": "scatter_chart_2", "component_property": "figure"}, + {"component_id": "vizro_table", "component_property": "children"}, ], ), ( @@ -195,6 +236,7 @@ def test_action_callback_mapping_inputs(self, action_id, callback_mapping_inputs [ {"component_id": "scatter_chart", "component_property": "figure"}, {"component_id": "scatter_chart_2", "component_property": "figure"}, + {"component_id": "vizro_table", "component_property": "children"}, ], ), ], @@ -209,7 +251,7 @@ def test_action_callback_mapping_outputs(self, action_id, action_callback_output @pytest.mark.parametrize( "export_data_outputs_expected", - [("scatter_chart", "scatter_chart_2")], + [("scatter_chart", "scatter_chart_2", "vizro_table")], indirect=True, ) def test_export_data_no_targets_set_mapping_outputs(self, export_data_outputs_expected): @@ -221,17 +263,17 @@ def test_export_data_no_targets_set_mapping_outputs(self, export_data_outputs_ex assert result == export_data_outputs_expected @pytest.mark.parametrize( - "managers_one_page_four_controls_two_graphs_filter_interaction, export_data_outputs_expected", + "managers_one_page_four_controls_two_figures_filter_interaction, export_data_outputs_expected", [ - (None, ["scatter_chart", "scatter_chart_2"]), - ([], ["scatter_chart", "scatter_chart_2"]), + (None, ["scatter_chart", "scatter_chart_2", "vizro_table"]), + ([], ["scatter_chart", "scatter_chart_2", "vizro_table"]), (["scatter_chart"], ["scatter_chart"]), (["scatter_chart", "scatter_chart_2"], ["scatter_chart", "scatter_chart_2"]), ], indirect=True, ) def test_export_data_targets_set_mapping_outputs( - self, managers_one_page_four_controls_two_graphs_filter_interaction, export_data_outputs_expected + self, managers_one_page_four_controls_two_figures_filter_interaction, export_data_outputs_expected ): result = _get_action_callback_mapping( action_id="export_data_action", @@ -242,7 +284,7 @@ def test_export_data_targets_set_mapping_outputs( @pytest.mark.parametrize( "export_data_components_expected", - [("scatter_chart", "scatter_chart_2")], + [("scatter_chart", "scatter_chart_2", "vizro_table")], indirect=True, ) def test_export_data_no_targets_set_mapping_components(self, export_data_components_expected): @@ -256,17 +298,17 @@ def test_export_data_no_targets_set_mapping_components(self, export_data_compone assert result == expected @pytest.mark.parametrize( - "managers_one_page_four_controls_two_graphs_filter_interaction, export_data_components_expected", + "managers_one_page_four_controls_two_figures_filter_interaction, export_data_components_expected", [ - (None, ["scatter_chart", "scatter_chart_2"]), - ([], ["scatter_chart", "scatter_chart_2"]), + (None, ["scatter_chart", "scatter_chart_2", "vizro_table"]), + ([], ["scatter_chart", "scatter_chart_2", "vizro_table"]), (["scatter_chart"], ["scatter_chart"]), (["scatter_chart", "scatter_chart_2"], ["scatter_chart", "scatter_chart_2"]), ], indirect=True, ) def test_export_data_targets_set_mapping_components( - self, managers_one_page_four_controls_two_graphs_filter_interaction, export_data_components_expected + self, managers_one_page_four_controls_two_figures_filter_interaction, export_data_components_expected ): result_components = _get_action_callback_mapping( action_id="export_data_action", diff --git a/vizro-core/tests/unit/vizro/actions/conftest.py b/vizro-core/tests/unit/vizro/actions/conftest.py index ab4473ee6..5fa39e9f1 100644 --- a/vizro-core/tests/unit/vizro/actions/conftest.py +++ b/vizro-core/tests/unit/vizro/actions/conftest.py @@ -32,8 +32,8 @@ def scatter_chart(gapminder_2007, scatter_params): @pytest.fixture -def dash_data_table_fixture(gapminder_2007): - return dash_data_table(data_frame=gapminder_2007) +def dash_data_table_fixture_with_id(gapminder_2007): + return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) @pytest.fixture @@ -66,7 +66,7 @@ def managers_one_page_two_graphs_one_button(box_chart, scatter_chart): @pytest.fixture -def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, dash_data_table_fixture): +def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, dash_data_table_fixture_with_id): """Instantiates a simple model_manager and data_manager with a page, two graph models and the button component.""" vm.Page( id="test_page", @@ -74,7 +74,7 @@ def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, components=[ vm.Graph(id="box_chart", figure=box_chart), vm.Graph(id="scatter_chart", figure=scatter_chart), - vm.Table(id="vizro_table", figure=dash_data_table_fixture), + vm.Table(id="vizro_table", figure=dash_data_table_fixture_with_id), vm.Button(id="button"), ], ) diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index a72693583..6a5ff2783 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -39,14 +39,14 @@ def callback_context_filter_interaction(request): args_grouping_filter_interaction.append( { "active_cell": CallbackTriggerDict( - id="vizro_table", + id="underlying_table_id", property="active_cell", value={"row": 0, "column": 0, "column_id": "country"}, str_id="vizro_table", triggered=False, ), "derived_viewport_data": CallbackTriggerDict( - id="vizro_table", + id="underlying_table_id", property="derived_viewport_data", value=[ { @@ -233,6 +233,7 @@ def test_table_filter_interaction_with_one_target( ] model_manager["vizro_table"].actions = [vm.Action(function=filter_interaction(targets=["scatter_chart"]))] + model_manager["vizro_table"].pre_build() # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() @@ -261,6 +262,7 @@ def test_table_filter_interaction_with_two_targets( model_manager["vizro_table"].actions = [ vm.Action(function=filter_interaction(targets=["scatter_chart", "box_chart"])) ] + model_manager["vizro_table"].pre_build() # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() @@ -290,6 +292,7 @@ def test_mixed_chart_and_table_filter_interaction_with_two_targets( model_manager["vizro_table"].actions = [ vm.Action(function=filter_interaction(targets=["scatter_chart", "box_chart"])) ] + model_manager["vizro_table"].pre_build() # Run action by picking the above added action function and executing it with () result = model_manager["test_action"].function() From 0383f0226d4f065f59d4bc15028d16c5778bacd2 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Fri, 27 Oct 2023 14:05:41 +0200 Subject: [PATCH 094/121] Replacing chart/-s with figure/-s where necessary. --- vizro-core/src/vizro/actions/_actions_utils.py | 16 ++++++++-------- .../_callback_mapping/_callback_mapping_utils.py | 10 +++++----- vizro-core/src/vizro/actions/_filter_action.py | 8 ++++---- .../src/vizro/actions/_on_page_load_action.py | 8 ++++---- .../src/vizro/actions/_parameter_action.py | 9 ++++----- .../src/vizro/actions/export_data_action.py | 4 ++-- .../vizro/actions/filter_interaction_action.py | 16 +++++++++------- vizro-core/src/vizro/models/_controls/filter.py | 4 ++-- vizro-core/src/vizro/models/_layout.py | 2 +- vizro-core/src/vizro/plotly/express.py | 2 +- .../actions/test_filter_interaction_action.py | 2 +- .../unit/vizro/models/_controls/test_filter.py | 4 ++-- 12 files changed, 43 insertions(+), 42 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 699309a38..ed0e0c4dc 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -63,23 +63,23 @@ def _apply_filters( return data_frame -def _apply_chart_filter_interaction( +def _apply_graph_filter_interaction( data_frame: pd.DataFrame, target: str, ctd_filter_interaction: Dict[str, CallbackTriggerDict] ) -> pd.DataFrame: ctd_click_data = ctd_filter_interaction["clickData"] if not ctd_click_data["value"]: return data_frame - source_chart_id: ModelID = ctd_click_data["id"] - source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + source_graph_id: ModelID = ctd_click_data["id"] + source_graph_actions = _get_component_actions(model_manager[source_graph_id]) try: - custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] + custom_data_columns = model_manager[source_graph_id]["custom_data"] # type: ignore[index] except KeyError as exc: - raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc + raise KeyError(f"No `custom_data` argument found for source graph with id {source_graph_id}.") from exc customdata = ctd_click_data["value"]["points"][0]["customdata"] - for action in source_chart_actions: + for action in source_graph_actions: if target not in action.function["targets"]: continue for custom_data_idx, column in enumerate(custom_data_columns): @@ -130,7 +130,7 @@ def _apply_filter_interaction( ) -> pd.DataFrame: for ctd_filter_interaction in ctds_filter_interaction: if "clickData" in ctd_filter_interaction: - data_frame = _apply_chart_filter_interaction( + data_frame = _apply_graph_filter_interaction( data_frame=data_frame, target=target, ctd_filter_interaction=ctd_filter_interaction, @@ -236,7 +236,7 @@ def _get_filtered_data( return filtered_data -def _get_modified_page_charts( +def _get_modified_page_figures( ctds_filter: List[CallbackTriggerDict], ctds_filter_interaction: List[Dict[str, CallbackTriggerDict]], ctds_parameters: List[CallbackTriggerDict], diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 44fe81392..6e36553af 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -96,16 +96,16 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li ] -def _get_inputs_of_chart_interactions( +def _get_inputs_of_figure_interactions( action_id: ModelID, action_function: Callable[[Any], Dict[str, Any]] ) -> List[Dict[str, State]]: - """Gets list of States for selected chart interaction `action_name` of triggered page.""" - chart_interactions_on_page = _get_matching_actions_by_function( + """Gets list of States for selected figure interaction `action_name` of triggered page.""" + figure_interactions_on_page = _get_matching_actions_by_function( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) inputs = [] - for action in chart_interactions_on_page: + for action in figure_interactions_on_page: triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) if isinstance(triggered_model, Table): inputs.append( @@ -149,7 +149,7 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, Any]: ), # TODO: Probably need to adjust other inputs to follow the same structure List[Dict[str, State]] "filter_interaction": ( - _get_inputs_of_chart_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) + _get_inputs_of_figure_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) if "filter_interaction" in include_inputs else [] ), diff --git a/vizro-core/src/vizro/actions/_filter_action.py b/vizro-core/src/vizro/actions/_filter_action.py index 16b29b39e..afc467e3b 100644 --- a/vizro-core/src/vizro/actions/_filter_action.py +++ b/vizro-core/src/vizro/actions/_filter_action.py @@ -6,7 +6,7 @@ from dash import ctx from vizro.actions._actions_utils import ( - _get_modified_page_charts, + _get_modified_page_figures, ) from vizro.managers._model_manager import ModelID from vizro.models.types import capture @@ -19,7 +19,7 @@ def _filter( filter_function: Callable[[pd.Series, Any], pd.Series], **inputs: Dict[str, Any], ) -> Dict[ModelID, Any]: - """Filters targeted charts/components on page by interaction with `Filter` control. + """Filters targeted figures/components on page by interaction with `Filter` control. Args: filter_column: Data column to filter @@ -29,9 +29,9 @@ def _filter( inputs = {'filters': [], 'parameters': ['gdpPercap'], 'filter_interaction': [], 'theme_selector': True} Returns: - Dict mapping target component ids to modified charts/components e.g. {'my_scatter': Figure({})} + Dict mapping target component ids to modified figures/components e.g. {'my_scatter': Figure({})} """ - return _get_modified_page_charts( + return _get_modified_page_figures( targets=targets, ctds_filter=ctx.args_grouping["filters"], ctds_filter_interaction=ctx.args_grouping["filter_interaction"], diff --git a/vizro-core/src/vizro/actions/_on_page_load_action.py b/vizro-core/src/vizro/actions/_on_page_load_action.py index 268fbfe60..deccc938a 100644 --- a/vizro-core/src/vizro/actions/_on_page_load_action.py +++ b/vizro-core/src/vizro/actions/_on_page_load_action.py @@ -5,7 +5,7 @@ from dash import ctx from vizro.actions._actions_utils import ( - _get_modified_page_charts, + _get_modified_page_figures, ) from vizro.managers import data_manager, model_manager from vizro.managers._model_manager import ModelID @@ -14,7 +14,7 @@ @capture("action") def _on_page_load(page_id: ModelID, **inputs: Dict[str, Any]) -> Dict[ModelID, Any]: - """Applies controls to charts on page once the page is opened (or refreshed). + """Applies controls to figures on page once the page is opened (or refreshed). Args: page_id: Page ID of relevant page @@ -22,11 +22,11 @@ def _on_page_load(page_id: ModelID, **inputs: Dict[str, Any]) -> Dict[ModelID, A inputs = {'filters': [], 'parameters': ['gdpPercap'], 'filter_interaction': [], 'theme_selector': True} Returns: - Dict mapping targeted chart ids to modified figures e.g. {'my_scatter': Figure({})} + Dict mapping target component ids to modified figures e.g. {'my_scatter': Figure({})} """ targets = [component.id for component in model_manager[page_id].components if data_manager._has_registered_data(component.id)] # type: ignore[attr-defined] # noqa: E501 - return _get_modified_page_charts( + return _get_modified_page_figures( targets=targets, ctds_filter=ctx.args_grouping["filters"], ctds_filter_interaction=ctx.args_grouping["filter_interaction"], diff --git a/vizro-core/src/vizro/actions/_parameter_action.py b/vizro-core/src/vizro/actions/_parameter_action.py index 14f492b35..850406a9e 100644 --- a/vizro-core/src/vizro/actions/_parameter_action.py +++ b/vizro-core/src/vizro/actions/_parameter_action.py @@ -5,16 +5,15 @@ from dash import ctx from vizro.actions._actions_utils import ( - _get_modified_page_charts, + _get_modified_page_figures, ) from vizro.managers._model_manager import ModelID from vizro.models.types import capture -# TODO - consider using dash.Patch() for parameter action @capture("action") def _parameter(targets: List[str], **inputs: Dict[str, Any]) -> Dict[ModelID, Any]: - """Modifies parameters of targeted charts/components on page. + """Modifies parameters of targeted figures/components on page. Args: targets: List of target component ids to change parameters of. @@ -22,11 +21,11 @@ def _parameter(targets: List[str], **inputs: Dict[str, Any]) -> Dict[ModelID, An inputs = {'filters': [], 'parameters': ['gdpPercap'], 'filter_interaction': [], 'theme_selector': True} Returns: - Dict mapping target component ids to modified charts/components e.g. {'my_scatter': Figure({})} + Dict mapping target component ids to modified figures/components e.g. {'my_scatter': Figure({})} """ target_ids: List[ModelID] = [target.split(".")[0] for target in targets] # type: ignore[misc] - return _get_modified_page_charts( + return _get_modified_page_figures( targets=target_ids, ctds_filter=ctx.args_grouping["filters"], ctds_filter_interaction=ctx.args_grouping["filter_interaction"], diff --git a/vizro-core/src/vizro/actions/export_data_action.py b/vizro-core/src/vizro/actions/export_data_action.py index afaded8cf..a81a555b5 100644 --- a/vizro-core/src/vizro/actions/export_data_action.py +++ b/vizro-core/src/vizro/actions/export_data_action.py @@ -19,7 +19,7 @@ def export_data( file_format: Literal["csv", "xlsx"] = "csv", **inputs: Dict[str, Any], ) -> Dict[str, Any]: - """Exports visible data of target charts/components on page after being triggered. + """Exports visible data of target figures/components on page after being triggered. Args: targets: List of target component ids to download data from. Defaults to None. @@ -32,7 +32,7 @@ def export_data( ValueError: If target component does not exist on page. Returns: - Dict mapping target component id to modified charts/components e.g. {'my_scatter': Figure({})} + Dict mapping target component id to modified figures/components e.g. {'my_scatter': Figure({})} """ if not targets: targets = [ diff --git a/vizro-core/src/vizro/actions/filter_interaction_action.py b/vizro-core/src/vizro/actions/filter_interaction_action.py index 00e30a64c..99ed10079 100644 --- a/vizro-core/src/vizro/actions/filter_interaction_action.py +++ b/vizro-core/src/vizro/actions/filter_interaction_action.py @@ -5,7 +5,7 @@ from dash import ctx from vizro.actions._actions_utils import ( - _get_modified_page_charts, + _get_modified_page_figures, ) from vizro.managers._model_manager import ModelID from vizro.models.types import capture @@ -16,21 +16,23 @@ def filter_interaction( targets: Optional[List[ModelID]] = None, **inputs: Dict[str, Any], ) -> Dict[ModelID, Any]: - """Filters targeted charts/components on page by clicking on data points of the source chart. + """Filters targeted figures/components on page by clicking on data points or table cells of the source figure. - To set up filtering on specific columns of the target chart(s), include these columns in the 'custom_data' - parameter of the source chart e.g. `px.bar(..., custom_data=["species", "sepal_length"])` + To set up filtering on specific columns of the target graph(s), include these columns in the 'custom_data' + parameter of the source graph e.g. `px.bar(..., custom_data=["species", "sepal_length"])`. + If filter interaction source is table e.g. `vm.Table(..., actions=[filter_interaction])`, then the table doesn't + need to have 'custom_data' parameter set up. Args: - targets: List of target component ids to filter by chart interaction. If missing, will target all valid + targets: List of target component ids to filter by figure interaction. If missing, will target all valid components on page. Defaults to None. inputs: Dict mapping action function names with their inputs e.g. inputs = {'filters': [], 'parameters': ['gdpPercap'], 'filter_interaction': [], 'theme_selector': True} Returns: - Dict mapping target component ids to modified charts/components e.g. {'my_scatter': Figure({})} + Dict mapping target component ids to modified figures/components e.g. {'my_scatter': Figure({})} """ - return _get_modified_page_charts( + return _get_modified_page_figures( targets=targets, ctds_filter=ctx.args_grouping["filters"], ctds_filter_interaction=ctx.args_grouping["filter_interaction"], diff --git a/vizro-core/src/vizro/models/_controls/filter.py b/vizro-core/src/vizro/models/_controls/filter.py index 565a575d1..afdb31610 100644 --- a/vizro-core/src/vizro/models/_controls/filter.py +++ b/vizro-core/src/vizro/models/_controls/filter.py @@ -131,8 +131,8 @@ def _set_slider_values(self): max_values.append(data_frame[self.column].max()) if not is_numeric_dtype(pd.Series(min_values)) or not is_numeric_dtype(pd.Series(max_values)): raise ValueError( - f"Non-numeric values detected in the shared data column '{self.column}' for targeted charts. " - f"Please ensure that the data column contains the same data type across all targeted charts." + f"Non-numeric values detected in the shared data column '{self.column}' for targeted figures. " + f"Please ensure that the data column contains the same data type across all targeted figures." ) if self.selector.min is None: self.selector.min = min(min_values) diff --git a/vizro-core/src/vizro/models/_layout.py b/vizro-core/src/vizro/models/_layout.py index 0bc22e43e..6968fe13c 100644 --- a/vizro-core/src/vizro/models/_layout.py +++ b/vizro-core/src/vizro/models/_layout.py @@ -114,7 +114,7 @@ def _get_grid_lines(grid: List[List[int]]) -> Tuple[List[ColRowGridLines], List[ class Layout(VizroBaseModel): - """Grid specification to place chart/components on the [`Page`][vizro.models.Page]. + """Grid specification to place figures/components on the [`Page`][vizro.models.Page]. Args: grid (List[List[int]]): Grid specification to arrange components on screen. diff --git a/vizro-core/src/vizro/plotly/express.py b/vizro-core/src/vizro/plotly/express.py index bdaff69b5..e0794d333 100644 --- a/vizro-core/src/vizro/plotly/express.py +++ b/vizro-core/src/vizro/plotly/express.py @@ -10,7 +10,7 @@ from vizro.models.types import capture -# TODO: is there a better way to see if the import is a chart? Don't want to check return type though. -> MS +# TODO: is there a better way to see if the import is a graph? Don't want to check return type though. -> MS # Might also want to define __dir__ or __all__ in order to facilitate IDE completion etc. # TODO: type hints -> MS def __getattr__(name: str) -> Any: diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index 6a5ff2783..95757a991 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -125,7 +125,7 @@ def test_filter_interaction_without_targets_temporary_behavior( # temporary fix assert result == {} - @pytest.mark.xfail # This is the desired behavior, ie when no target is provided, then all charts filtered + @pytest.mark.xfail # This is the desired behavior, ie when no target is provided, then all figures filtered @pytest.mark.parametrize( "callback_context_filter_interaction," "target_scatter_filtered_continent," "target_box_filtered_continent", [ diff --git a/vizro-core/tests/unit/vizro/models/_controls/test_filter.py b/vizro-core/tests/unit/vizro/models/_controls/test_filter.py index 7dd43f322..36868ed75 100644 --- a/vizro-core/tests/unit/vizro/models/_controls/test_filter.py +++ b/vizro-core/tests/unit/vizro/models/_controls/test_filter.py @@ -128,8 +128,8 @@ def test_set_slider_values_shared_column_inconsistent_dtype( model_manager["graphs_with_shared_column"].controls = [filter] with pytest.raises( ValueError, - match=f"Non-numeric values detected in the shared data column '{filter.column}' for targeted charts. " - f"Please ensure that the data column contains the same data type across all targeted charts.", + match=f"Non-numeric values detected in the shared data column '{filter.column}' for targeted figures. " + f"Please ensure that the data column contains the same data type across all targeted figures.", ): filter.pre_build() From 905115649114efb2feb39d9c3f5ecede67188484 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Fri, 27 Oct 2023 15:33:03 +0200 Subject: [PATCH 095/121] dash_with_id fixture refactored + building datatable in pre_build Table method --- vizro-core/src/vizro/models/_components/table.py | 14 +++++++------- .../test_get_action_loop_components.py | 10 ++-------- .../test_get_action_callback_mapping.py | 10 ++-------- vizro-core/tests/unit/vizro/actions/conftest.py | 10 ++-------- vizro-core/tests/unit/vizro/conftest.py | 5 +++++ .../unit/vizro/models/_components/test_table.py | 13 ++++--------- 6 files changed, 22 insertions(+), 40 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index ab1827359..d2c88b38d 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -2,6 +2,7 @@ from typing import List, Literal, Optional from dash import dash_table, html +from pandas import DataFrame from pydantic import Field, PrivateAttr, validator import vizro.tables as vt @@ -53,17 +54,16 @@ def __getitem__(self, arg_name: str): return self.type return self.figure[arg_name] - def _build_underlying_table_object(self): - data = data_manager._get_component_data(self.id) # type: ignore - kwargs = self.figure._arguments.copy() - kwargs.pop("data_frame", None) - return self.figure._function(data_frame=data, **kwargs) - @_log_call def pre_build(self): if self.actions: + kwargs = self.figure._arguments.copy() + + # This is a hack to get around the fact that the underlying table object requires a data_frame + kwargs["data_frame"] = DataFrame() + # The underlying table object is pre-built, so we can fetch its ID. - underlying_table_object = self._build_underlying_table_object() + underlying_table_object = self.figure._function(**kwargs) # Underlying table object has to have "id" defined if it triggers actions chain. if not hasattr(underlying_table_object, "id"): diff --git a/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py b/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py index 15e3ae93c..51353645d 100644 --- a/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py +++ b/vizro-core/tests/unit/vizro/actions/_action_loop/test_get_action_loop_components.py @@ -12,7 +12,6 @@ from vizro.actions import export_data, filter_interaction from vizro.actions._action_loop._get_action_loop_components import _get_action_loop_components from vizro.managers import model_manager -from vizro.tables import dash_data_table @pytest.fixture @@ -69,12 +68,7 @@ def trigger_to_actions_chain_mapper_component(request): @pytest.fixture -def dash_data_table_fixture_with_id(gapminder_2007): - return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) - - -@pytest.fixture -def managers_one_page_two_components_two_controls(dash_data_table_fixture_with_id): +def managers_one_page_two_components_two_controls(dash_data_table_with_id): """Instantiates managers with one page that contains two controls and two components.""" vm.Dashboard( pages=[ @@ -84,7 +78,7 @@ def managers_one_page_two_components_two_controls(dash_data_table_fixture_with_i components=[ vm.Table( id="vizro_table", - figure=dash_data_table_fixture_with_id, + figure=dash_data_table_with_id, actions=[ vm.Action( id="table_filter_interaction_action", diff --git a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py index a1865e6ba..3d65132ab 100644 --- a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py +++ b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py @@ -12,7 +12,6 @@ from vizro.actions import export_data, filter_interaction from vizro.actions._callback_mapping._get_action_callback_mapping import _get_action_callback_mapping from vizro.models.types import capture -from vizro.tables import dash_data_table @capture("action") @@ -30,12 +29,7 @@ def export_data(): @pytest.fixture -def dash_data_table_fixture_with_id(gapminder_2007): - return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) - - -@pytest.fixture -def managers_one_page_four_controls_two_figures_filter_interaction(request, dash_data_table_fixture_with_id): +def managers_one_page_four_controls_two_figures_filter_interaction(request, dash_data_table_with_id): """Instantiates managers with one page that contains four controls, two graphs and filter interaction.""" # If the fixture is parametrised set the targets. Otherwise, set export_data without targets. export_data_action_function = export_data(targets=request.param) if hasattr(request, "param") else export_data() @@ -58,7 +52,7 @@ def managers_one_page_four_controls_two_figures_filter_interaction(request, dash ), vm.Table( id="vizro_table", - figure=dash_data_table_fixture_with_id, + figure=dash_data_table_with_id, actions=[ vm.Action( id="table_filter_interaction_action", diff --git a/vizro-core/tests/unit/vizro/actions/conftest.py b/vizro-core/tests/unit/vizro/actions/conftest.py index 5fa39e9f1..4060db269 100644 --- a/vizro-core/tests/unit/vizro/actions/conftest.py +++ b/vizro-core/tests/unit/vizro/actions/conftest.py @@ -3,7 +3,6 @@ import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro -from vizro.tables import dash_data_table @pytest.fixture @@ -31,11 +30,6 @@ def scatter_chart(gapminder_2007, scatter_params): return px.scatter(gapminder_2007, **scatter_params).update_layout(margin_t=24) -@pytest.fixture -def dash_data_table_fixture_with_id(gapminder_2007): - return dash_data_table(id="underlying_table_id", data_frame=gapminder_2007) - - @pytest.fixture def target_scatter_filtered_continent(request, gapminder_2007, scatter_params): continent = request.param @@ -66,7 +60,7 @@ def managers_one_page_two_graphs_one_button(box_chart, scatter_chart): @pytest.fixture -def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, dash_data_table_fixture_with_id): +def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, dash_data_table_with_id): """Instantiates a simple model_manager and data_manager with a page, two graph models and the button component.""" vm.Page( id="test_page", @@ -74,7 +68,7 @@ def managers_one_page_two_graphs_one_table_one_button(box_chart, scatter_chart, components=[ vm.Graph(id="box_chart", figure=box_chart), vm.Graph(id="scatter_chart", figure=scatter_chart), - vm.Table(id="vizro_table", figure=dash_data_table_fixture_with_id), + vm.Table(id="vizro_table", figure=dash_data_table_with_id), vm.Button(id="button"), ], ) diff --git a/vizro-core/tests/unit/vizro/conftest.py b/vizro-core/tests/unit/vizro/conftest.py index ba3cff2bd..85a80464c 100644 --- a/vizro-core/tests/unit/vizro/conftest.py +++ b/vizro-core/tests/unit/vizro/conftest.py @@ -31,6 +31,11 @@ def standard_dash_table(gapminder): return dash_data_table(data_frame=gapminder) +@pytest.fixture +def dash_data_table_with_id(gapminder): + return dash_data_table(id="underlying_table_id", data_frame=gapminder) + + @pytest.fixture def standard_go_chart(gapminder): return go.Figure(data=go.Scatter(x=gapminder["gdpPercap"], y=gapminder["lifeExp"], mode="markers")) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index 43142450d..feac8c48e 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -14,11 +14,6 @@ from vizro.tables import dash_data_table -@pytest.fixture -def dash_table_with_id(gapminder): - return dash_data_table(id="underlying_table_id", data_frame=gapminder) - - @pytest.fixture def dash_table_with_arguments(): return dash_data_table(data_frame=px.data.gapminder(), style_header={"border": "1px solid green"}) @@ -151,10 +146,10 @@ def test_pre_build_actions_no_underlying_table_id_exception(self, standard_dash_ with pytest.raises(ValueError, match="Underlying table object has no attribute 'id'."): table.pre_build() - def test_pre_build_actions_underlying_table_id(self, dash_table_with_id, filter_interaction_action): + def test_pre_build_actions_underlying_table_id(self, dash_data_table_with_id, filter_interaction_action): table = vm.Table( id="text_table", - figure=dash_table_with_id, + figure=dash_data_table_with_id, actions=[filter_interaction_action], ) table.pre_build() @@ -176,10 +171,10 @@ def test_table_build_mandatory_only(self, standard_dash_table, expected_table): expected = json.loads(json.dumps(expected_table, cls=plotly.utils.PlotlyJSONEncoder)) assert result == expected - def test_table_build_with_id(self, dash_table_with_id, filter_interaction_action, expected_table_with_id): + def test_table_build_with_id(self, dash_data_table_with_id, filter_interaction_action, expected_table_with_id): table = vm.Table( id="text_table", - figure=dash_table_with_id, + figure=dash_data_table_with_id, actions=[filter_interaction_action], ) From c6cf9ab26a21353f29de81db83672134c6b8955a Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Tue, 31 Oct 2023 13:11:14 +0100 Subject: [PATCH 096/121] Add vizro favicon.ico --- vizro-core/examples/assets/favicon.ico | Bin 0 -> 1535 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 vizro-core/examples/assets/favicon.ico diff --git a/vizro-core/examples/assets/favicon.ico b/vizro-core/examples/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..240c9f541de1e47599bb047e63b008ccb268a4c3 GIT binary patch literal 1535 zcmb7^|4-Cr9LJ0H*!7UCcjXESCb#1RycT7CV-hhtcH9^4043OU&ShQAA|Bbo1PvqV zpg}l#DB!-hFqGSwOmclf`fM>V%7{< zykAd$dGhpatMg}DR#-3$%MJ#-4H%Ze8q1uilMfFa+poWfmcSdW7?wpDD+3!I$DI)wVamU8PB3AY1=7qs{AzwDgzZFsi5}rRLAWYoYBcPNPDL_(I-!w0oa;?fD zp0&oowVLS>7x%Y5^-RzOde*0dYc|t=y103L>Y1P?0$_$>+q?LbgTL3!r(WXkb@C}E z-_pyc3i*2`C6mN7bQyJlwWNMf_*mj zhESQ%6UB2pd~k<#4?zy zS4%vggJiE!%2qt~vzE+7&Qdt%R|7%NVPmgZl}S9-s3pshGaFW^0T1}aO#j|ze`;l` zDCTf6-@S@E=;FIw+`($q><8!ks<|4pdsXvmpxvjMJ)r%F07v*mHxgGv@kJyqhvHf! z5-@E>Vg*c>Akhue%aFJNrdcFfVA>+3TEx^2Jocp~GX(uz)c!if_K=K^WY-jP{Z4*Y z4af_s=lc1VhlLLaC}yJc1}M@fodd-plrDqfCX^eS;T zLxLR5a+n0O`m}|_Fs$nuBd%W5%1AwF`p5&Pxw@tV%kp% zr7lh#5K5h#Ix3VpxR!pQwuoyP5o%pr%Q2zW$+eskYIUBCR)oQ9g|u;yM`!V75=!&L z3?`a(n`cs*<$Ej0>a+K+;&ZJ`UcIWH{IXu*q>C#X5Kij(gs@W2qryrDr}hX7`Y(?O z3wr)c_%;B9O4QNCdzMM}yLnH6bib4Lu+sis-m^uzZ-Ub2`212Rox|tLMH3`u>P6Ec zF;fd1u?NV;Tt2;D)hzq==Ce>bxHB^Z9A^#~SlMCVW=hA8cj6%s@A*r|W2f7699eC& zJ8JZH{HuKiRvHb=8108OM!WYP9p5Q5_U;H8?ZXX5`%IgG8DsC~y)*Ux*sZr0<2Nfm RKGGx`cCfn6J6 Date: Tue, 31 Oct 2023 13:54:30 +0100 Subject: [PATCH 097/121] Replacing table._underlying_table_id with table._callable_object_id --- .../_action_loop/_build_action_loop_callbacks.py | 2 +- vizro-core/src/vizro/actions/_actions_utils.py | 9 ++------- .../_callback_mapping/_callback_mapping_utils.py | 4 ++-- vizro-core/src/vizro/models/_components/table.py | 6 +++--- .../unit/vizro/actions/test_export_data_action.py | 13 ++++++------- .../vizro/actions/test_filter_interaction_action.py | 4 ++-- .../unit/vizro/models/_components/test_table.py | 10 ++++++---- 7 files changed, 22 insertions(+), 26 deletions(-) diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index 94f2789d9..b462156db 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -30,7 +30,7 @@ def _build_action_loop_callbacks() -> None: actions_chain_trigger_component = model_manager[ModelID(str(actions_chain_trigger_component_id))] # Use underlying table object as a trigger component. if isinstance(actions_chain_trigger_component, Table): - actions_chain_trigger_component_id = actions_chain_trigger_component._underlying_table_id + actions_chain_trigger_component_id = actions_chain_trigger_component._callable_object_id # Not all action_chain_trigger_components are included in model_manager e.g. on_page_load_action_trigger except KeyError: pass diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index ed0e0c4dc..7356cbd2e 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -92,7 +92,7 @@ def _get_parent_vizro_table(_underlying_table_id: str) -> Table: from vizro.models import Table for _, table in model_manager._items_with_type(Table): - if table._underlying_table_id == _underlying_table_id: + if table._callable_object_id == _underlying_table_id: return table raise KeyError(f"No parent Vizro.Table component found for underlying table with id {_underlying_table_id}.") @@ -105,12 +105,7 @@ def _apply_table_filter_interaction( if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: return data_frame - source_table_id = ctd_active_cell["id"] - try: - source_table_actions = _get_component_actions(model_manager[source_table_id]) - except KeyError: - # source_table_id is underlying table id, so actions from parent Vizro.Table component should be considered. - source_table_actions = _get_component_actions(_get_parent_vizro_table(source_table_id)) + source_table_actions = _get_component_actions(_get_parent_vizro_table(ctd_active_cell["id"])) for action in source_table_actions: if target not in action.function["targets"]: diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 79561cae8..e5c2368a3 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -111,10 +111,10 @@ def _get_inputs_of_figure_interactions( inputs.append( { "active_cell": State( - component_id=triggered_model._underlying_table_id, component_property="active_cell" + component_id=triggered_model._callable_object_id, component_property="active_cell" ), "derived_viewport_data": State( - component_id=triggered_model._underlying_table_id, + component_id=triggered_model._callable_object_id, component_property="derived_viewport_data", ), } diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index bb2f96bf4..960b7ddef 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -32,7 +32,7 @@ class Table(VizroBaseModel): title: Optional[str] = Field(None, description="Title of the table") actions: List[Action] = [] - _underlying_table_id: str = PrivateAttr() + _callable_object_id: str = PrivateAttr() # Component properties for actions and interactions _output_property: str = PrivateAttr("children") @@ -72,7 +72,7 @@ def pre_build(self): " Underlying table object has to be provided." ) - self._underlying_table_id = underlying_table_object.id + self._callable_object_id = underlying_table_object.id def build(self): return dcc.Loading( @@ -80,7 +80,7 @@ def build(self): [ html.H3(self.title, className="table-title") if self.title else None, html.Div( - dash_table.DataTable(**({"id": self._underlying_table_id} if self.actions else {})), id=self.id + dash_table.DataTable(**({"id": self._callable_object_id} if self.actions else {})), id=self.id ), ], className="table-container", diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index 9fae41336..4e787129e 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -71,14 +71,14 @@ def callback_context_export_data(request): args_grouping_filter_interaction.append( { "active_cell": CallbackTriggerDict( - id="vizro_table", + id="underlying_table_id", property="active_cell", value={"row": 0, "column": 0, "column_id": "country"}, - str_id="vizro_table", + str_id="underlying_table_id", triggered=False, ), "derived_viewport_data": CallbackTriggerDict( - id="vizro_table", + id="underlying_table_id", property="derived_viewport_data", value=[ { @@ -92,7 +92,7 @@ def callback_context_export_data(request): "year": 2007, }, ], - str_id="vizro_table", + str_id="underlying_table_id", triggered=False, ), } @@ -307,9 +307,8 @@ def test_multiple_targets_with_filter_and_filter_interaction_and_table( ] # Add table filter_interaction Action to scatter_chart component - model_manager["vizro_table"].actions = [ - vm.Action(id="table_filter_interaction", function=filter_interaction(targets=["scatter_chart"])) - ] + model_manager["vizro_table"].actions = [vm.Action(function=filter_interaction(targets=["scatter_chart"]))] + model_manager["vizro_table"].pre_build() # Add export_data action to relevant component model_manager["button"].actions = [ diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index 95757a991..4e7031801 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -42,7 +42,7 @@ def callback_context_filter_interaction(request): id="underlying_table_id", property="active_cell", value={"row": 0, "column": 0, "column_id": "country"}, - str_id="vizro_table", + str_id="underlying_table_id", triggered=False, ), "derived_viewport_data": CallbackTriggerDict( @@ -60,7 +60,7 @@ def callback_context_filter_interaction(request): "year": 2007, }, ], - str_id="vizro_table", + str_id="underlying_table_id", triggered=False, ), } diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index 63ecb230e..e4cd3b7ed 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -50,7 +50,9 @@ def expected_table_with_id(): ], className="table-container", id="text_table_outer", - ) + ), + color="grey", + parent_className="loading-container", ) @@ -141,7 +143,7 @@ def test_pre_build_no_actions_no_underlying_table_id(self, standard_dash_table): ) table.pre_build() - assert hasattr(table, "_underlying_table_id") is False + assert hasattr(table, "_callable_object_id") is False def test_pre_build_actions_no_underlying_table_id_exception(self, standard_dash_table, filter_interaction_action): table = vm.Table( @@ -160,8 +162,8 @@ def test_pre_build_actions_underlying_table_id(self, dash_data_table_with_id, fi ) table.pre_build() - assert hasattr(table, "_underlying_table_id") is True - assert table._underlying_table_id == "underlying_table_id" + assert hasattr(table, "_callable_object_id") is True + assert table._callable_object_id == "underlying_table_id" class TestBuildTable: From ed09d14f0186acd4099258fb6071395514129b0a Mon Sep 17 00:00:00 2001 From: petar-qb Date: Tue, 31 Oct 2023 14:57:32 +0100 Subject: [PATCH 098/121] Removing isinstance Table checking where needed --- .../actions/_action_loop/_build_action_loop_callbacks.py | 6 +++--- vizro-core/src/vizro/actions/_actions_utils.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index b462156db..23be06049 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -10,7 +10,6 @@ ) from vizro.managers import model_manager from vizro.managers._model_manager import ModelID -from vizro.models import Table logger = logging.getLogger(__name__) @@ -25,11 +24,12 @@ def _build_action_loop_callbacks() -> None: gateway_inputs: List[Input] = [] for actions_chain in actions_chains: + # Recalculating the trigger component id to use the underlying callable object as a trigger component if needed. actions_chain_trigger_component_id = actions_chain.trigger.component_id try: actions_chain_trigger_component = model_manager[ModelID(str(actions_chain_trigger_component_id))] - # Use underlying table object as a trigger component. - if isinstance(actions_chain_trigger_component, Table): + # Use underlying callable object as a trigger component. + if hasattr(actions_chain_trigger_component, "_callable_object_id"): actions_chain_trigger_component_id = actions_chain_trigger_component._callable_object_id # Not all action_chain_trigger_components are included in model_manager e.g. on_page_load_action_trigger except KeyError: diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 7356cbd2e..6f52b4d2c 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -105,6 +105,7 @@ def _apply_table_filter_interaction( if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: return data_frame + # ctd_active_cell["id"] represents the underlying table id, so we need to fetch its parent Vizro Table actions. source_table_actions = _get_component_actions(_get_parent_vizro_table(ctd_active_cell["id"])) for action in source_table_actions: From 2e371661c8ad65dbbd2c354baa37067b523a0e24 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Tue, 31 Oct 2023 15:07:41 +0100 Subject: [PATCH 099/121] CallbackTriggerDict and mock_callback_context docstrings. --- vizro-core/src/vizro/actions/_actions_utils.py | 17 +++++++++++------ .../vizro/actions/test_export_data_action.py | 2 +- .../unit/vizro/actions/test_filter_action.py | 2 +- .../actions/test_filter_interaction_action.py | 2 +- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 6f52b4d2c..68fe1cd9e 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -19,16 +19,21 @@ ValidatedNoneValueType = Union[SingleValueType, MultiValueType, None, List[None]] -class CallbackTriggerDict(TypedDict): # shortened as 'ctd' - # The component ID. If it`s a pattern matching ID, it will be a dict. +class CallbackTriggerDict(TypedDict): + """ Represent dash.callback_context.args_grouping item. Shortened as 'ctd' in the code. + + Args: + id (ModelID): The component ID. If it`s a pattern matching ID, it will be a dict. + property (Literal["clickData", "value", "n_clicks", "active_cell", "derived_viewport_data"]): + The component property used in the callback. + value (Optional[Any]): The value of the component property at the time the callback was fired. + str_id (str): For pattern matching IDs, it`s the stringified dict ID with no white spaces. + triggered (bool): A boolean indicating whether this input triggered the callback. + """ id: ModelID - # The component property used in the callback. property: Literal["clickData", "value", "n_clicks", "active_cell", "derived_viewport_data"] - # The value of the component property at the time the callback was fired. value: Optional[Any] - # For pattern matching IDs, it`s the stringified dict ID with no white spaces. str_id: str - # A boolean indicating whether this input triggered the callback. triggered: bool diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index 4e787129e..7f9440976 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -46,7 +46,7 @@ def managers_one_page_without_graphs_one_button(): @pytest.fixture def callback_context_export_data(request): - """Mock dash.callback_context that represents on page load.""" + """Mock dash.callback_context that represents filters and filter interactions applied.""" targets, pop_filter, continent_filter_interaction, country_table_filter_interaction = request.param args_grouping_filter_interaction = [] if continent_filter_interaction: diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_action.py index 2291adb71..ccb84a66b 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_action.py @@ -61,7 +61,7 @@ def callback_context_filter_continent(request): @pytest.fixture def callback_context_filter_continent_and_pop(request): - """Mock dash.callback_context that represents continent Filter value selection.""" + """Mock dash.callback_context that represents continent and pop Filter value selection.""" continent, pop = request.param mock_callback_context = { "args_grouping": { diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index 4e7031801..c15e7b1ce 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -13,7 +13,7 @@ @pytest.fixture def callback_context_filter_interaction(request): - """Mock dash.callback_context that represents a click on a continent data-point.""" + """Mock dash.callback_context that represents a click on a continent data-point and table selected cell.""" continent_filter_interaction, country_table_filter_interaction = request.param args_grouping_filter_interaction = [] From c9870b0bcc2431f5bfb6e0b394d4a1ffe8e1f42b Mon Sep 17 00:00:00 2001 From: petar-qb Date: Tue, 31 Oct 2023 18:57:01 +0100 Subject: [PATCH 100/121] Getting rid of 'Table' reference in _actions_utils.py file --- .../src/vizro/actions/_actions_utils.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 68fe1cd9e..3d4169533 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -14,13 +14,13 @@ from vizro.models.types import MultiValueType, SelectorType, SingleValueType if TYPE_CHECKING: - from vizro.models import Action, Table + from vizro.models import Action, VizroBaseModel ValidatedNoneValueType = Union[SingleValueType, MultiValueType, None, List[None]] class CallbackTriggerDict(TypedDict): - """ Represent dash.callback_context.args_grouping item. Shortened as 'ctd' in the code. + """Represent dash.callback_context.args_grouping item. Shortened as 'ctd' in the code. Args: id (ModelID): The component ID. If it`s a pattern matching ID, it will be a dict. @@ -30,6 +30,7 @@ class CallbackTriggerDict(TypedDict): str_id (str): For pattern matching IDs, it`s the stringified dict ID with no white spaces. triggered (bool): A boolean indicating whether this input triggered the callback. """ + id: ModelID property: Literal["clickData", "value", "n_clicks", "active_cell", "derived_viewport_data"] value: Optional[Any] @@ -93,13 +94,18 @@ def _apply_graph_filter_interaction( return data_frame -def _get_parent_vizro_table(_underlying_table_id: str) -> Table: - from vizro.models import Table +def _get_parent_vizro_model(_underlying_callable_object_id: str) -> VizroBaseModel: + from vizro.models import VizroBaseModel - for _, table in model_manager._items_with_type(Table): - if table._callable_object_id == _underlying_table_id: - return table - raise KeyError(f"No parent Vizro.Table component found for underlying table with id {_underlying_table_id}.") + for _, vizro_base_model in model_manager._items_with_type(VizroBaseModel): + if ( + hasattr(vizro_base_model, "_callable_object_id") + and vizro_base_model._callable_object_id == _underlying_callable_object_id + ): + return vizro_base_model + raise KeyError( + f"No parent Vizro model found for underlying callable object with id: {_underlying_callable_object_id}." + ) def _apply_table_filter_interaction( @@ -111,7 +117,7 @@ def _apply_table_filter_interaction( return data_frame # ctd_active_cell["id"] represents the underlying table id, so we need to fetch its parent Vizro Table actions. - source_table_actions = _get_component_actions(_get_parent_vizro_table(ctd_active_cell["id"])) + source_table_actions = _get_component_actions(_get_parent_vizro_model(ctd_active_cell["id"])) for action in source_table_actions: if target not in action.function["targets"]: From 438839f04ac9bdfe7a825a5e3f1aaa770469bbfc Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 07:38:31 +0100 Subject: [PATCH 101/121] Small changes --- vizro-core/src/vizro/models/_components/table.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 960b7ddef..f17e74947 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -65,11 +65,10 @@ def pre_build(self): # The underlying table object is pre-built, so we can fetch its ID. underlying_table_object = self.figure._function(**kwargs) - # Underlying table object has to have "id" defined if it triggers actions chain. if not hasattr(underlying_table_object, "id"): raise ValueError( - "Underlying table object has no attribute 'id'. To perform specified actions, a valid 'id' to the" - " Underlying table object has to be provided." + "Underlying `Table` callable has no attribute 'id'. To enable actions triggered by the `Table`" + " a valid 'id' has to be provided to the `Table` callable." ) self._callable_object_id = underlying_table_object.id From d0937d039aacd83f254e416c57609fcc42abc024 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 07:42:11 +0100 Subject: [PATCH 102/121] _validate_selector_value_NONE -> _validate_selector_value_none --- vizro-core/src/vizro/actions/_actions_utils.py | 4 ++-- vizro-core/tests/unit/vizro/models/_components/test_table.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 3d4169533..7b14904a6 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -153,7 +153,7 @@ def _apply_filter_interaction( return data_frame -def _validate_selector_value_NONE(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: +def _validate_selector_value_none(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: if value == NONE_OPTION: return None elif isinstance(value, list): @@ -198,7 +198,7 @@ def _get_parametrized_config( if hasattr(selector_value, "__iter__") and ALL_OPTION in selector_value: # type: ignore[operator] selector: SelectorType = model_manager[ctd["id"]] selector_value = selector.options - selector_value = _validate_selector_value_NONE(selector_value) + selector_value = _validate_selector_value_none(selector_value) selector_actions = _get_component_actions(model_manager[ctd["id"]]) for action in selector_actions: diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index e4cd3b7ed..ee1b8c733 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -151,7 +151,7 @@ def test_pre_build_actions_no_underlying_table_id_exception(self, standard_dash_ figure=standard_dash_table, actions=[filter_interaction_action], ) - with pytest.raises(ValueError, match="Underlying table object has no attribute 'id'."): + with pytest.raises(ValueError, match="Underlying `Table` callable has no attribute 'id'"): table.pre_build() def test_pre_build_actions_underlying_table_id(self, dash_data_table_with_id, filter_interaction_action): From 93ba70657924915dd038d5f8a7a7b938f64fc0de Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 07:57:26 +0100 Subject: [PATCH 103/121] schema updated --- vizro-core/schemas/0.1.6.dev0.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vizro-core/schemas/0.1.6.dev0.json b/vizro-core/schemas/0.1.6.dev0.json index 95b345bcb..61b839f96 100644 --- a/vizro-core/schemas/0.1.6.dev0.json +++ b/vizro-core/schemas/0.1.6.dev0.json @@ -193,7 +193,7 @@ }, "Layout": { "title": "Layout", - "description": "Grid specification to place chart/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", + "description": "Grid specification to place figures/components on the [`Page`][vizro.models.Page].\n\nArgs:\n grid (List[List[int]]): Grid specification to arrange components on screen.\n row_gap (str): Gap between rows in px. Defaults to `\"12px\"`.\n col_gap (str): Gap between columns in px. Defaults to `\"12px\"`.\n row_min_height (str): Minimum row height in px. Defaults to `\"0px\"`.\n col_min_width (str): Minimum column width in px. Defaults to `\"0px\"`.", "type": "object", "properties": { "id": { From 4c41873ccc4cf8ee5cc943a29db7f3e4f8179599 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 08:03:32 +0100 Subject: [PATCH 104/121] Uncomment dash_ag_grid --- vizro-core/examples/default/app.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index bd76282b7..d6ba91673 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,7 +1,7 @@ """Example to show dashboard configuration specified as pydantic models.""" import os -import dash_ag_grid as dag +# import dash_ag_grid as dag # import d3_bar_chart import pandas as pd @@ -39,15 +39,15 @@ def retrieve_table_data(): return pd.DataFrame(data) -@capture("table") -def AgGrid(data_frame=None): - """Custom AgGrid.""" - return dag.AgGrid( - id="get-started-example-basic", - rowData=data_frame.to_dict("records"), - columnDefs=[{"field": col} for col in data_frame.columns], - # className="ag-theme-alpine-dark", - ) +# @capture("table") +# def AgGrid(data_frame=None): +# """Custom AgGrid.""" +# return dag.AgGrid( +# id="get-started-example-basic", +# rowData=data_frame.to_dict("records"), +# columnDefs=[{"field": col} for col in data_frame.columns], +# # className="ag-theme-alpine-dark", +# ) data_manager["table_data"] = retrieve_table_data From 0fe42f1628fae709bdfb543a8bea77dbcc01db99 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 13:20:00 +0100 Subject: [PATCH 105/121] Table filter interaction example added --- .../actions_table_filter_interaction.png | Bin 0 -> 453486 bytes vizro-core/docs/pages/user_guides/actions.md | 87 +++++++++++++++++- 2 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 vizro-core/docs/assets/user_guides/actions/actions_table_filter_interaction.png diff --git a/vizro-core/docs/assets/user_guides/actions/actions_table_filter_interaction.png b/vizro-core/docs/assets/user_guides/actions/actions_table_filter_interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..d70ae4bd38f41c0ad85a4a1cef2dc6ea225391ce GIT binary patch literal 453486 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±^Yy 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�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

    *NWJNz1(J# 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 z%0D+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 literal 0 HcmV?d00001 diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index a12dc4484..a3026824d 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -117,12 +117,13 @@ actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"] ```py Graph(figure=px.scatter(..., custom_data=["continent"])) ``` - Selecting a data point with a corresponding value of "Africa" in the continent column will result in filtering the dataset of target charts to show only entries with "Africa" in the continent column. The same applies when providing multiple columns in `custom_data`. +Selecting a data point with a corresponding value of "Africa" in the continent column will result in filtering the dataset of target charts to show only entries with "Africa" in the continent column. The same applies when providing multiple columns in `custom_data`. !!! tip - You can reset your chart interaction filters by refreshing the page - You can create a "self-interaction" by providing the source chart id as its own `target` +Here is an example of how to configure a figure interaction when the source is a [`Graph`][vizro.models.Graph] component. !!! example "`filter_interaction`" === "app.py" @@ -199,9 +200,9 @@ Graph(figure=px.scatter(..., custom_data=["continent"])) x: gdpPercap y: lifeExp size: pop - controls: - - column: continent - type: filter + controls: + - column: continent + type: filter title: Filter interaction ``` === "Result" @@ -209,6 +210,84 @@ Graph(figure=px.scatter(..., custom_data=["continent"])) [Graph2]: ../../assets/user_guides/actions/actions_filter_interaction.png +Here is an example of how to configure a figure interaction when the source is a [`Table`][vizro.models.Table] component. + +!!! example "`filter_interaction`" + === "app.py" + ```py + import vizro.models as vm + import vizro.plotly.express as px + from vizro import Vizro + from vizro.actions import filter_interaction + from vizro.tables import dash_data_table + + df_gapminder = px.data.gapminder().query("year == 2007") + + dashboard = vm.Dashboard( + pages=[ + vm.Page( + title="Filter interaction", + components=[ + vm.Table( + figure=dash_data_table(id="dash_datatable_id", data_frame=df_gapminder), + actions=[ + vm.Action(function=filter_interaction(targets=["scatter_relation_2007"])) + ], + ), + vm.Graph( + id="scatter_relation_2007", + figure=px.scatter( + df_gapminder, + x="gdpPercap", + y="lifeExp", + size="pop", + color="continent", + ), + ), + ], + controls=[vm.Filter(column='continent')] + ), + ] + ) + + if __name__ == "__main__": + Vizro().build(dashboard).run() + ``` + === "app.yaml" + ```yaml + # Still requires a .py to register data connector in Data Manager and parse yaml configuration + # See from_yaml example + pages: + - components: + - type: table + figure: + _target_: dash_data_table + data_frame: gapminder_2007 + id: dash_datatable_id + actions: + - function: + _target_: filter_interaction + targets: + - scatter_relation_2007 + - type: graph + id: scatter_relation_2007 + figure: + _target_: scatter + data_frame: gapminder_2007 + color: continent + x: gdpPercap + y: lifeExp + size: pop + controls: + - column: continent + type: filter + title: Filter interaction + ``` + === "Result" + [![Table]][Table] + + [Table]: ../../assets/user_guides/actions/actions_table_filter_interaction.png + ## Predefined actions customization Many predefined actions are customizable which helps to achieve more specific desired goal. For specific options, please refer to the [API reference][vizro.actions] on this topic. From ba236d2a49c65f88527b479b1ec193cb4995dcaf Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 13:31:08 +0100 Subject: [PATCH 106/121] reverting app.py --- vizro-core/docs/pages/user_guides/actions.md | 4 +- vizro-core/examples/default/app.py | 614 ++++++++++++++++--- vizro-core/pyproject.toml | 1 - 3 files changed, 522 insertions(+), 97 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index a3026824d..b0c972f97 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -109,7 +109,7 @@ To enable filtering when clicking on data in a (source) figure, you can add the To configure this figure interaction follow the steps below: -1. Add the action function to the source [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component and a list of IDs of the target charts into `targets`. +1. Add the action function to the source [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component and a list of IDs of the target figures into `targets`. ```py actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))] ``` @@ -121,7 +121,7 @@ Selecting a data point with a corresponding value of "Africa" in the continent c !!! tip - You can reset your chart interaction filters by refreshing the page - - You can create a "self-interaction" by providing the source chart id as its own `target` + - You can create a "self-interaction" by providing the source figure id as its own `target` Here is an example of how to configure a figure interaction when the source is a [`Graph`][vizro.models.Graph] component. diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index d6ba91673..989901141 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -1,111 +1,537 @@ -"""Example to show dashboard configuration specified as pydantic models.""" +"""Example to show dashboard configuration.""" import os -# import dash_ag_grid as dag - -# import d3_bar_chart import pandas as pd import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro from vizro.actions import export_data, filter_interaction -from vizro.managers import data_manager -from vizro.models.types import capture -from vizro.tables import dash_data_table - - -def retrieve_table_data(): - """Return data for table for testing.""" - states = [ - "California", - "Arizona", - "Nevada", - "New Mexico", - "Colorado", - "Texas", - "North Carolina", - "New York", - ] - - data = { - "State": states + states[::-1], - "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13] * 2, - "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53] * 2, - "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1] * 2, - "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84] * 2, - } - - return pd.DataFrame(data) - - -# @capture("table") -# def AgGrid(data_frame=None): -# """Custom AgGrid.""" -# return dag.AgGrid( -# id="get-started-example-basic", -# rowData=data_frame.to_dict("records"), -# columnDefs=[{"field": col} for col in data_frame.columns], -# # className="ag-theme-alpine-dark", -# ) - - -data_manager["table_data"] = retrieve_table_data -data = retrieve_table_data() - -# TODO: Check the Page.layout. There seem to be some issues when there are several tables on a page. -page_0 = vm.Page( - title="Color manager", - path="color-manager", - components=[ - vm.Table( - id="table_id", - figure=dash_data_table( - id="dash_datatable_id", - data_frame="table_data", - style_cell={"border": "5px solid green"}, - ), - actions=[ - vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart", "table_2_id"])) + + +def retrieve_avg_continent_data(): + """This is function returns gapminder data grouped by continent.""" + df = px.data.gapminder() + mean = ( + df.groupby(by=["continent", "year"]).agg({"lifeExp": "mean", "pop": "mean", "gdpPercap": "mean"}).reset_index() + ) + return mean + + +def create_variable_analysis(): + """Function returns a page with gapminder data to do variable analysis.""" + df_gapminder = px.data.gapminder() + df_avg_gapminder = retrieve_avg_continent_data() + + page_variable = vm.Page( + title="Variable Analysis", + layout=vm.Layout( + grid=[ + # fmt: off + [0, 1, 1, 1], + [2, 3, 3, 3], + [4, 5, 5, 5], + [6, 7, 7, 7], + # fmt: on ], + row_min_height="400px", + row_gap="25px", ), - vm.Graph( - id="scatter_chart", - figure=px.scatter( - data_frame="table_data", - x="State", - y="Number of Solar Plants", - color="Number of Solar Plants", - custom_data=["State"], - ), - actions=[vm.Action(function=filter_interaction(targets=["table_id"]))], - ), - vm.Table( - id="table_2_id", - figure=dash_data_table(id="dash_datatable_id_2", data_frame=data, style_cell={"border": "5px solid green"}), - actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))], - ), - # TODO: Enable AgGrid to work with actions as action's trigger. - # Currently, AgGrid can be only used as action's output. - # vm.Table( - # id="ag_grid", - # figure=AgGrid(data_frame="table_data"), - # ), - vm.Button(id="export_data_button", text="Export data", actions=[vm.Action(function=export_data())]), - ], - controls=[ - vm.Filter(column="State", selector=vm.Dropdown()), - vm.Parameter( - targets=["table_id.style_cell.border", "table_2_id.style_cell.border"], - selector=vm.RadioItems(options=["5px solid green", "5px solid pink"]), + components=[ + vm.Card( + text=""" + ### Overview + The world map provides initial insights into the variations of metrics across countries and + continents. Click on Play to see the animation and explore the development over time. + + #### Observation + A global trend of increasing life expectancy emerges, with some exceptions in specific African + countries. Additionally, despite similar population growth rates across continents, the overall + global population continues to expand, with India and China leading the way. Meanwhile, GDP per + capita experiences growth in most regions. + + """ + ), + vm.Graph( + id="variable_map", + figure=px.choropleth( + df_gapminder, + locations="iso_alpha", + color="lifeExp", + hover_name="country", + animation_frame="year", + labels={ + "year": "year", + "lifeExp": "Life expectancy", + "pop": "Population", + "gdpPercap": "GDP per capita", + }, + title="Global development over time", + ), + ), + vm.Card( + text=""" + ### Distribution + The boxplot illustrates the distribution of each metric across continents, facilitating comparisons + of life expectancy, GDP per capita, and population statistics. + + Observations reveal that Europe and Oceania have the highest life expectancy and GDP per capita, + likely influenced by their smaller population growth. Additionally, Asia and America exhibit + notable GDP per capita outliers, indicating variations among countries within these continents or + large growth over the observed years. + """ + ), + vm.Graph( + id="variable_boxplot", + figure=px.box( + df_gapminder, + x="continent", + y="lifeExp", + color="continent", + labels={ + "year": "year", + "lifeExp": "Life expectancy", + "pop": "Population", + "gdpPercap": "GDP per capita", + "continent": "Continent", + }, + title="Distribution per continent", + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + ), + ), + vm.Card( + text=""" + ### Development + The line chart tracks the variable's progress from 1952 to 2007, facilitating a deeper comprehension + of each metric. + + #### Observation + Oceania and Europe are found to have the highest total GDP per capita and exhibit significant + growth. In contrast, Asia, Africa, and America demonstrate a more pronounced upward trend in + population increase compared to Europe and Oceania, suggesting that GDP per capita growth might be + influenced by relatively smaller population growth in the latter two continents. + + """ + ), + vm.Graph( + id="variable_line", + figure=px.line( + df_avg_gapminder, + y="lifeExp", + x="year", + color="continent", + title="Development between 1952 and 2007", + labels={ + "year": "Year", + "lifeExp": "Life expectancy", + "pop": "Population", + "gdpPercap": "GDP per capita", + "continent": "Continent", + }, + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + ), + ), + vm.Card( + text=""" + ### Recent status + Examining the data for 2007 provides insight into the current status of each continent and metrics. + + #### Observation + Asia held the largest population, followed by America, Europe, Africa, and Oceania. Life expectancy + surpassed 70 years for all continents, except Africa with 55 years. GDP per capita aligns with + earlier findings, with Oceania and Europe reporting the highest values and Africa recording the + lowest. + """ + ), + vm.Graph( + id="variable_bar", + figure=px.bar( + df_avg_gapminder.query("year == 2007"), + x="lifeExp", + y="continent", + orientation="h", + title="Comparison of average metric for 2007", + labels={ + "year": "year", + "continent": "Continent", + "lifeExp": "Life expectancy", + "pop": "Population", + "gdpPercap": "GDP per capita", + }, + color="continent", + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + ), + ), + ], + controls=[ + vm.Parameter( + targets=["variable_map.color", "variable_boxplot.y", "variable_line.y", "variable_bar.x"], + selector=vm.RadioItems(options=["lifeExp", "pop", "gdpPercap"], title="Select variable"), + ) + ], + ) + return page_variable + + +def create_relation_analysis(): + """Function returns a page to perform relation analysis.""" + df_gapminder = px.data.gapminder() + + page_relation_analysis = vm.Page( + title="Relationship Analysis", + layout=vm.Layout( + grid=[[0, 0, 0, 0, 1]] + [[2, 2, 3, 3, 3]] * 4 + [[4, 4, 4, 4, 4]] * 5, + row_min_height="100px", + row_gap="24px", ), + components=[ + vm.Card( + text=""" + Population, GDP per capita, and life expectancy are interconnected metrics that provide insights + into the socio-economic well-being of a country. + Rapid population growth can strain resources and infrastructure, impacting GDP per capita. Higher + GDP per capita often enables better healthcare and improved life expectancy, but other factors such + as healthcare quality and social policies also play significant roles. + """ + ), + vm.Card( + text=""" + #### Last updated + July, 2023 + """ + ), + vm.Graph( + id="bar_relation_2007", + figure=px.box( + df_gapminder.query("year == 2007"), + x="continent", + y="lifeExp", + color="continent", + hover_name="continent", + title="Relationship in 2007", + labels={ + "gdpPercap": "GDP per capita", + "pop": "Population", + "lifeExp": "Life expectancy", + "continent": "Continent", + }, + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + custom_data=["continent"], + ), + actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))], + ), + vm.Graph( + id="scatter_relation_2007", + figure=px.scatter( + df_gapminder.query("year == 2007"), + x="gdpPercap", + y="lifeExp", + size="pop", + color="continent", + hover_name="country", + size_max=60, + labels={ + "gdpPercap": "GDP per capita", + "pop": "Population", + "lifeExp": "Life expectancy", + "continent": "Continent", + }, + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + ), + ), + vm.Graph( + id="scatter_relation", + figure=px.scatter( + df_gapminder, + x="gdpPercap", + y="lifeExp", + animation_frame="year", + animation_group="country", + size="pop", + color="continent", + hover_name="country", + facet_col="continent", + labels={ + "gdpPercap": "GDP per capita", + "pop": "Population", + "lifeExp": "Life expectancy", + "continent": "Continent", + }, + range_y=[25, 90], + color_discrete_map={ + "Africa": "#00b4ff", + "Americas": "#ff9222", + "Asia": "#3949ab", + "Europe": "#ff5267", + "Oceania": "#08bdba", + }, + ), + ), + ], + controls=[ + vm.Parameter( + targets=["scatter_relation_2007.x", "scatter_relation.x"], + selector=vm.Dropdown( + options=["lifeExp", "gdpPercap", "pop"], multi=False, value="gdpPercap", title="Choose x-axis" + ), + ), + vm.Parameter( + targets=["scatter_relation_2007.y", "scatter_relation.y", "bar_relation_2007.y"], + selector=vm.Dropdown( + options=["lifeExp", "gdpPercap", "pop"], multi=False, value="lifeExp", title="Choose y-axis" + ), + ), + vm.Parameter( + targets=["scatter_relation_2007.size", "scatter_relation.size"], + selector=vm.Dropdown( + options=["lifeExp", "gdpPercap", "pop"], multi=False, value="pop", title="Choose bubble size" + ), + ), + ], + ) + return page_relation_analysis + + +def create_continent_summary(): + """Function returns a page with markdown including images.""" + page_summary = vm.Page( + title="Continent Summary", + layout=vm.Layout(grid=[[i] for i in range(5)], row_min_height="190px", row_gap="25px"), + components=[ + vm.Card( + text=""" + ### Africa + ![](assets/images/continents/africa.svg#my-image) + + Africa, a diverse and expansive continent, faces both challenges and progress in its socio-economic + landscape. In 2007, Africa's GDP per capita was approximately $3,000, reflecting relatively slower + growth compared to other continents like Oceania and Europe. + + However, Africa has shown notable improvements in life expectancy over time, reaching 55 years in + 2007. Despite these economic disparities, Africa's population has been steadily increasing, + reflecting its significant potential for development. + """, + ), + vm.Card( + text=""" + ### Americas + ![](assets/images/continents/america.svg#my-image) + + Comprising North and South America, Americas represents a region of vast geographical and cultural + diversity. In 2007, the continent experienced substantial population growth, with a diverse mix of + countries contributing to this expansion. + + Although its GDP per capita of $11,000 in 2007 exhibited variations across countries, America + maintained similar levels to Asia, reflecting its economic significance. With North America + generally reporting higher life expectancy compared to South America, America remains a region of + opportunities and challenges. + """, + ), + vm.Card( + text=""" + ### Asia + ![](assets/images/continents/asia.svg#my-image) + + Asia holds a central role in the global economy. It's growth in GDP per capita to $12,000 in 2007 + and population has been significant, outpacing many other continents. In 2007, it boasted the + highest population among all continents, with countries like China and India leading the way. + + Despite facing various socio-economic challenges, Asia's increasing life expectancy from 46 years + to 70 over the years reflects advancements in healthcare and overall well-being, making it a vital + region driving global progress and development. + """, + ), + vm.Card( + text=""" + ### Europe + ![](assets/images/continents/europe.svg#my-image) + + Europe boasts a strong and thriving economy. In 2007, it exhibited the second-highest GDP per + capita of $25,000 among continents, indicating sustained economic growth and development. + + Europe's life expectancy surpassed 75 years, showcasing a high standard of living and + well-established healthcare systems. With its robust infrastructure, advanced industries, and + quality of life, Europe continues to be a leading force in the global economy. Between 1952 and + 2007, Europe's population experienced moderate growth, with a factor of approximately 1.5, + notably lower compared to other continents like Asia and America. + """, + ), + vm.Card( + text=""" + ### Oceania + ![](assets/images/continents/oceania.svg#my-image) + + Oceania, comprising countries like Australia and New Zealand, stands out with notable economic + prosperity and longer life expectancy. In 2007, it boasted the highest GDP per capita of $27,000 + among continents and exhibited one of the highest life expectancy levels, surpassing 80 years. + + Despite a relatively smaller population size, Oceania's strong economic growth has contributed + to improved living standards and overall well-being of its population. + """, + ), + ], + ) + return page_summary + + +def create_country_analysis(): + """Function returns a page to perform analysis on country level.""" + df_gapminder = px.data.gapminder() + + df_gapminder_agg = px.data.gapminder() + df_gapminder_agg["lifeExp"] = df_gapminder_agg.groupby(by=["continent", "year"])["lifeExp"].transform("mean") + df_gapminder_agg["gdpPercap"] = df_gapminder_agg.groupby(by=["continent", "year"])["gdpPercap"].transform("mean") + df_gapminder_agg["pop"] = df_gapminder_agg.groupby(by=["continent", "year"])["pop"].transform("sum") + + df_gapminder["data"] = "Country" + df_gapminder_agg["data"] = "Continent" + + df_gapminder = pd.concat([df_gapminder_agg, df_gapminder], ignore_index=True) + + page_country = vm.Page( + title="Country Analysis", + layout=vm.Layout(grid=[[0, 0, 0, 1, 1, 1]] * 7 + [[2, 2, 2, 2, 2, 2]]), + components=[ + vm.Graph( + id="bar_country", + figure=px.bar( + df_gapminder, + x="year", + y="pop", + color="data", + barmode="group", + labels={"year": "Year", "data": "Data", "pop": "Population"}, + color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, + ), + ), + vm.Graph( + id="line_country", + figure=px.line( + df_gapminder, + x="year", + y="gdpPercap", + color="data", + labels={"year": "Year", "data": "Data", "gdpPercap": "GDP per capita"}, + color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, + markers=True, + ), + ), + vm.Button( + text="Export data", + actions=[ + vm.Action( + function=export_data( + targets=["bar_country"], + ) + ), + ], + ), + ], + controls=[ + vm.Filter(column="country", selector=vm.Dropdown(value="India", multi=False, title="Select country")), + vm.Filter(column="year", selector=vm.RangeSlider(title="Select timeframe", step=1, marks=None)), + ], + ) + return page_country + + +def create_home_page(): + """Function returns the homepage.""" + page_home = vm.Page( + title="Homepage", + layout=vm.Layout(grid=[[0, 1], [2, 3]], row_gap="16px", col_gap="24px"), + components=[ + vm.Card( + text=""" + ![](assets/images/icons/content/hypotheses.svg#icon-top) + + ### Variable Analysis + + Analyzing population, GDP per capita and life expectancy on country and continent level. + """, + href="/variable-analysis", + ), + vm.Card( + text=""" + ![](assets/images/icons/content/hypotheses.svg#icon-top) + + ### Relationship Analysis + + Investigating the interconnection between population, GDP per capita and life expectancy. + """, + href="/relationship-analysis", + ), + vm.Card( + text=""" + ![](assets/images/icons/content/collections.svg#icon-top) + + ### Continent Summary + + Summarizing the main findings for each continent. + """, + href="/continent-summary", + ), + vm.Card( + text=""" + ![](assets/images/icons/content/features.svg#icon-top) + + ### Country Analysis + + Discovering how the metrics differ for each country and export data for further investigation. + """, + href="/country-analysis", + ), + ], + ) + return page_home + + +dashboard = vm.Dashboard( + pages=[ + create_home_page(), + create_variable_analysis(), + create_relation_analysis(), + create_continent_summary(), + create_country_analysis(), ], + navigation=vm.Navigation( + pages={ + "Analysis": ["Homepage", "Variable Analysis", "Relationship Analysis", "Country Analysis"], + "Summary": ["Continent Summary"], + } + ), ) -dashboard = vm.Dashboard(pages=[page_0]) if __name__ == "__main__": - # data_manager["table_data"] = retrieve_table_data - # data = retrieve_table_data() - # print(vm.Table(id="table2", table=dash_data_table(data, style_header={"border": "1px solid green"}))()) Vizro._user_assets_folder = os.path.abspath("../assets") Vizro().build(dashboard).run() diff --git a/vizro-core/pyproject.toml b/vizro-core/pyproject.toml index fb0c8c015..265614172 100644 --- a/vizro-core/pyproject.toml +++ b/vizro-core/pyproject.toml @@ -23,7 +23,6 @@ dependencies = [ "pandas", "pydantic>=1.10.13, <2", # must be synced with pre-commit mypy hook "dash_daq", - "dash_ag_grid", "ipython>=8.10.0", # not directly required, pinned by Snyk to avoid a vulnerability: https://app.snyk.io/vuln/SNYK-PYTHON-IPYTHON-3318382 "numpy>=1.22.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-NUMPY-2321970 "tornado>=6.3.2", # not directly required, pinned by Snyk to avoid a vulnerability: https://security.snyk.io/vuln/SNYK-PYTHON-TORNADO-5537286 From cdf77279a46dacb491c9e9a0ae89f04252734526 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 14:02:45 +0100 Subject: [PATCH 107/121] Minor changes --- vizro-core/examples/default/app.py | 2 +- vizro-core/src/vizro/actions/_actions_utils.py | 11 +++++------ .../_callback_mapping/_callback_mapping_utils.py | 1 + .../src/vizro/actions/filter_interaction_action.py | 4 ++-- vizro-core/src/vizro/models/_components/table.py | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 989901141..03d09411d 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -215,7 +215,7 @@ def create_relation_analysis(): vm.Card( text=""" #### Last updated - July, 2023 + November, 2023 """ ), vm.Graph( diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index 7b14904a6..e82756e03 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -23,12 +23,11 @@ class CallbackTriggerDict(TypedDict): """Represent dash.callback_context.args_grouping item. Shortened as 'ctd' in the code. Args: - id (ModelID): The component ID. If it`s a pattern matching ID, it will be a dict. - property (Literal["clickData", "value", "n_clicks", "active_cell", "derived_viewport_data"]): - The component property used in the callback. - value (Optional[Any]): The value of the component property at the time the callback was fired. - str_id (str): For pattern matching IDs, it`s the stringified dict ID with no white spaces. - triggered (bool): A boolean indicating whether this input triggered the callback. + id: The component ID. If it`s a pattern matching ID, it will be a dict. + property: The component property used in the callback. + value: The value of the component property at the time the callback was fired. + str_id: For pattern matching IDs, it's the stringified dict ID without white spaces. + triggered: A boolean indicating whether this input triggered the callback. """ id: ModelID diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index e5c2368a3..48a195bf6 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -106,6 +106,7 @@ def _get_inputs_of_figure_interactions( ) inputs = [] for action in figure_interactions_on_page: + # TODO: Consider do we want to move the following logic into Model implementation triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) if isinstance(triggered_model, Table): inputs.append( diff --git a/vizro-core/src/vizro/actions/filter_interaction_action.py b/vizro-core/src/vizro/actions/filter_interaction_action.py index 99ed10079..c66a708a6 100644 --- a/vizro-core/src/vizro/actions/filter_interaction_action.py +++ b/vizro-core/src/vizro/actions/filter_interaction_action.py @@ -20,8 +20,8 @@ def filter_interaction( To set up filtering on specific columns of the target graph(s), include these columns in the 'custom_data' parameter of the source graph e.g. `px.bar(..., custom_data=["species", "sepal_length"])`. - If filter interaction source is table e.g. `vm.Table(..., actions=[filter_interaction])`, then the table doesn't - need to have 'custom_data' parameter set up. + If the filter interaction source is a table e.g. `vm.Table(..., actions=[filter_interaction])`, + then the table doesn't need to have a 'custom_data' parameter set up. Args: targets: List of target component ids to filter by figure interaction. If missing, will target all valid diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index f17e74947..e6f963a06 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -59,7 +59,7 @@ def pre_build(self): if self.actions: kwargs = self.figure._arguments.copy() - # This is a hack to get around the fact that the underlying table object requires a data_frame + # This workaround is needed because the underlying table object requires a data_frame kwargs["data_frame"] = DataFrame() # The underlying table object is pre-built, so we can fetch its ID. From d375272f0e2dea9a95c1221f7f922309dde878da Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 15:03:29 +0100 Subject: [PATCH 108/121] get_action_callback_mapping test fixed --- vizro-core/docs/pages/user_guides/actions.md | 6 ++--- .../test_get_action_callback_mapping.py | 23 +++++++++++++++---- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index b0c972f97..ad275cc0a 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -220,9 +220,9 @@ Here is an example of how to configure a figure interaction when the source is a from vizro import Vizro from vizro.actions import filter_interaction from vizro.tables import dash_data_table - + df_gapminder = px.data.gapminder().query("year == 2007") - + dashboard = vm.Dashboard( pages=[ vm.Page( @@ -249,7 +249,7 @@ Here is an example of how to configure a figure interaction when the source is a ), ] ) - + if __name__ == "__main__": Vizro().build(dashboard).run() ``` diff --git a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py index 3d65132ab..e83301c02 100644 --- a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py +++ b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py @@ -73,7 +73,7 @@ def managers_one_page_four_controls_two_figures_filter_interaction(request, dash vm.Filter(id="filter_country", column="country", selector=vm.Dropdown(id="filter_country_selector")), vm.Parameter( id="parameter_x", - targets=["scatter_chart.x", "scatter_chart_2.x", "vizro_table.columns"], + targets=["scatter_chart.x", "scatter_chart_2.x"], selector=vm.Dropdown( id="parameter_x_selector", options=["lifeExp", "gdpPercap", "pop"], @@ -83,7 +83,7 @@ def managers_one_page_four_controls_two_figures_filter_interaction(request, dash ), vm.Parameter( id="parameter_y", - targets=["scatter_chart.y", "scatter_chart_2.y", "vizro_table.values"], + targets=["scatter_chart.y", "scatter_chart_2.y"], selector=vm.Dropdown( id="parameter_y_selector", options=["lifeExp", "gdpPercap", "pop"], @@ -91,6 +91,16 @@ def managers_one_page_four_controls_two_figures_filter_interaction(request, dash value="lifeExp", ), ), + vm.Parameter( + id="vizro_table_row_selectable", + targets=["vizro_table.row_selectable"], + selector=vm.Dropdown( + id="parameter_table_row_selectable", + options=["multi", "single"], + multi=False, + value="single", + ), + ), ], ) Vizro._pre_build() @@ -106,6 +116,7 @@ def action_callback_inputs_expected(): "parameters": [ dash.State("parameter_x_selector", "value"), dash.State("parameter_y_selector", "value"), + dash.State("parameter_table_row_selectable", "value"), ], "filter_interaction": [ { @@ -214,7 +225,6 @@ def test_action_callback_mapping_inputs(self, action_id, callback_mapping_inputs [ {"component_id": "scatter_chart", "component_property": "figure"}, {"component_id": "scatter_chart_2", "component_property": "figure"}, - {"component_id": "vizro_table", "component_property": "children"}, ], ), ( @@ -222,7 +232,6 @@ def test_action_callback_mapping_inputs(self, action_id, callback_mapping_inputs [ {"component_id": "scatter_chart", "component_property": "figure"}, {"component_id": "scatter_chart_2", "component_property": "figure"}, - {"component_id": "vizro_table", "component_property": "children"}, ], ), ( @@ -233,6 +242,12 @@ def test_action_callback_mapping_inputs(self, action_id, callback_mapping_inputs {"component_id": "vizro_table", "component_property": "children"}, ], ), + ( + "parameter_action_vizro_table_row_selectable", + [ + {"component_id": "vizro_table", "component_property": "children"}, + ], + ), ], indirect=["action_callback_outputs_expected"], ) From bab2884d6e0bcdfaea240c4e775f77cccf824f31 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 16:49:43 +0100 Subject: [PATCH 109/121] Small change in the tests --- vizro-core/tests/unit/vizro/models/_components/test_table.py | 1 - 1 file changed, 1 deletion(-) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index ee1b8c733..87f4bd1e7 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -162,7 +162,6 @@ def test_pre_build_actions_underlying_table_id(self, dash_data_table_with_id, fi ) table.pre_build() - assert hasattr(table, "_callable_object_id") is True assert table._callable_object_id == "underlying_table_id" From e8ac518fe633d0725b7f04a1c479c9dda174afd4 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 1 Nov 2023 16:55:58 +0100 Subject: [PATCH 110/121] Revert example/from_yaml changes --- vizro-core/examples/from_yaml/dashboard.yaml | 507 +++++++++++++++++-- 1 file changed, 455 insertions(+), 52 deletions(-) diff --git a/vizro-core/examples/from_yaml/dashboard.yaml b/vizro-core/examples/from_yaml/dashboard.yaml index a35474771..3a9cea5e7 100644 --- a/vizro-core/examples/from_yaml/dashboard.yaml +++ b/vizro-core/examples/from_yaml/dashboard.yaml @@ -1,58 +1,461 @@ -# Still requires a .py to register data connector in Data Manager and parse yaml configuration -# See from_yaml example pages: - components: + - text: | + ![](assets/images/icons/content/hypotheses.svg#icon-top) + + ### Variable Analysis + Analyzing population, GDP per capita and life expectancy on country and continent level. + href: /variable-analysis + type: card + - text: | + ![](assets/images/icons/content/hypotheses.svg#icon-top) + + ### Relationship Analysis + Investigating the interconnection between population, GDP per capita and life expectancy. + href: /relationship-analysis + type: card + - text: | + ![](assets/images/icons/content/collections.svg#icon-top) + + ### Continent Summary + Summarizing the main findings for each continent. + href: /continent-summary + type: card + - text: | + ![](assets/images/icons/content/features.svg#icon-top) + + ### Country Analysis + Discovering how the metrics differ for each country and export data for further investigation. + href: /country-analysis + type: card + layout: + grid: [[0, 1], [2, 3]] + col_gap: 25px + row_gap: 16px + title: Homepage + - components: + - text: | + ### Overview + The world map provides initial insights into the variations of metrics across countries and + continents. Click on Play to see the animation and explore the development over time. + + #### Observation + A global trend of increasing life expectancy emerges, with some exceptions in specific African countries. + Additionally, despite similar population growth rates across continents, the overall global population + continues to expand, with India and China leading the way. Meanwhile, GDP per capita experiences growth in + most regions. + type: card + - figure: + _target_: choropleth + color: lifeExp + data_frame: gapminder + locations: iso_alpha + animation_frame: year + title: Global development over time + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + id: variable_map + type: graph + - text: | + ### Distribution + The boxplot illustrates the distribution of each metric across continents, facilitating comparisons of life + expectancy, GDP per capita, and population statistics. + + #### Observation + Observations reveal that Europe and Oceania have the highest life expectancy and GDP per capita, likely + influenced by their smaller population growth. Additionally, Asia and America exhibit notable GDP per capita + outliers, indicating variations among countries within these continents or large growth over the observed + years. + type: card + - figure: + _target_: box + color: continent + data_frame: gapminder + x: continent + y: lifeExp + title: Distribution per continent + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + id: variable_boxplot + type: graph + - text: | + ### Development + The line chart tracks the variable's progress from 1952 to 2007, facilitating a deeper comprehension of each + metric. + + #### Observation + Oceania and Europe are found to have the highest total GDP per capita and exhibit significant growth. In + contrast, Asia, Africa, and America demonstrate a more pronounced upward trend in population increase compared + to Europe and Oceania, suggesting that GDP per capita growth might be influenced by relatively smaller + population growth in the latter two continents. + type: card + - figure: + _target_: line + color: continent + data_frame: gapminder_avg + x: year + y: lifeExp + title: Development between 1952 and 2007 + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + id: variable_line + type: graph + - text: | + ### Recent status + Examining the data for 2007 provides insight into the current status of each continent and metrics. + + #### Observation + Asia held the largest population, followed by America, Europe, Africa, and Oceania. Life expectancy surpassed + 70 years for all continents, except Africa with 55 years. GDP per capita aligns with earlier findings, with + Oceania and Europe reporting the highest values and Africa recording the lowest. + type: card + - figure: + _target_: bar + color: continent + data_frame: gapminder_avg_2007 + x: lifeExp + y: continent + orientation: h + title: Comparison of average metric for 2007 + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + id: variable_bar + type: graph + controls: + - selector: + title: Select variable + type: radio_items + value: lifeExp + options: + - lifeExp + - pop + - gdpPercap + targets: + - variable_map.color + - variable_boxplot.y + - variable_line.y + - variable_bar.x + type: parameter + layout: + grid: [[0, 1, 1, 1], [2, 3, 3, 3], [4, 5, 5, 5], [6, 7, 7, 7]] + row_min_height: 400px + row_gap: 25px + title: Variable Analysis + - components: + - text: | + Population, GDP per capita, and life expectancy are interconnected metrics that provide insights into the + socio-economic well-being of a country. Rapid population growth can strain resources and infrastructure, + impacting GDP per capita. Higher GDP per capita often enables better healthcare and improved life expectancy, + but other factors such as healthcare quality and social policies also play significant roles. + type: card + - text: | + #### Last updated + July, 2023 + type: card + - figure: + _target_: box + color: continent + data_frame: gapminder_2007 + x: continent + y: lifeExp + title: Relationship in 2007 + hover_name: country + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + custom_data: ["continent"] + id: bar_relation_2007 + type: graph + actions: + - function: + _target_: filter_interaction + targets: + - scatter_relation_2007 - figure: - _target_: dash_data_table + _target_: scatter + color: continent data_frame: gapminder_2007 - sort_action: native - editable: true - columns: - - name: country - id: country - type: text - editable: false - - name: continent - id: continent - type: text - - name: year - id: year - type: datetime - - name: lifeExp - id: lifeExp - type: numeric - - name: pop - id: pop - type: numeric - - name: gdpPercap - id: gdpPercap - type: numeric - style_data_conditional: - - if: - column_id: year - backgroundColor: dodgerblue - color: white - - if: - filter_query: "{lifeExp} < 55" - column_id: lifeExp - backgroundColor: "#85144b" - color: white - - if: - filter_query: "{gdpPercap} > 10000" - column_id: gdpPercap - backgroundColor: green - color: white - - if: - column_type: text - textAlign: left - - if: - state: active - backgroundColor: rgba(0, 116, 217, 0.3) - border: 1px solid rgb(0, 116, 217) - title: Styled table - id: table - type: table + x: gdpPercap + y: lifeExp + hover_name: country + size_max: 60 + size: pop + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + id: scatter_relation_2007 + type: graph + - figure: + _target_: scatter + color: continent + data_frame: gapminder + x: gdpPercap + y: lifeExp + animation_frame: year + animation_group: country + size: pop + hover_name: country + facet_col: continent + range_y: [25, 90] + labels: + year: Year + lifeExp: Life expectancy + pop: Population + gdpPercap: GDP per capita + continent: Continent + color_discrete_map: + Africa: "#00b4ff" + Americas: "#ff9222" + Asia: "#3949ab" + Europe: "#ff5267" + Oceania: "#08bdba" + id: scatter_relation + type: graph + controls: + - selector: + title: Choose x-axis + type: dropdown + value: lifeExp + multi: False + options: + - lifeExp + - pop + - gdpPercap + targets: + - scatter_relation_2007.x + - scatter_relation.x + type: parameter + - selector: + title: Choose y-axis + type: dropdown + value: gdpPercap + multi: False + options: + - lifeExp + - pop + - gdpPercap + targets: + - scatter_relation_2007.y + - scatter_relation.y + - bar_relation_2007.y + type: parameter + - selector: + title: Choose bubble size + type: dropdown + value: pop + multi: False + options: + - lifeExp + - pop + - gdpPercap + targets: + - scatter_relation_2007.size + - scatter_relation.size + type: parameter + layout: + grid: + [ + [0, 0, 0, 0, 1], + [2, 2, 3, 3, 3], + [2, 2, 3, 3, 3], + [2, 2, 3, 3, 3], + [2, 2, 3, 3, 3], + [4, 4, 4, 4, 4], + [4, 4, 4, 4, 4], + [4, 4, 4, 4, 4], + [4, 4, 4, 4, 4], + [4, 4, 4, 4, 4], + ] + row_min_height: 100px + row_gap: 25px + title: Relationship Analysis + - components: + - text: | + ### Africa + ![](assets/images/continents/africa.svg#my-image) + + Africa, a diverse and expansive continent, faces both challenges and progress in its socio-economic landscape. + In 2007, Africa's GDP per capita was approximately $3,000, reflecting relatively slower growth compared to + other continents like Oceania and Europe. + + However, Africa has shown notable improvements in life expectancy over time, reaching 55 years in 2007. + Despite these economic disparities, Africa's population has been steadily increasing, reflecting its + significant potential for development. + type: card + - text: | + ### Americas + ![](assets/images/continents/america.svg#my-image) + + Comprising North and South America, Americas represents a region of vast geographical and cultural diversity. + In 2007, the continent experienced substantial population growth, with a diverse mix of countries contributing + to this expansion. + + Although its GDP per capita of $11,000 in 2007 exhibited variations across countries, America maintained + similar levels to Asia, reflecting its economic significance. With North America generally reporting higher + life expectancy compared to South America, America remains a region of opportunities and challenges. + type: card + - text: | + ### Asia + ![](assets/images/continents/asia.svg#my-image) + + Asia holds a central role in the global economy. It's growth in GDP per capita to $12,000 in 2007 and + population has been significant, outpacing many other continents. In 2007, it boasted the highest population + among all continents, with countries like China and India leading the way. + + Despite facing various socio-economic challenges, Asia's increasing life expectancy from 46 years to 70 over + the years reflects advancements in healthcare and overall well-being, making it a vital region driving global + progress and development. + type: card + - text: | + ### Europe + ![](assets/images/continents/europe.svg#my-image) + + Europe boasts a strong and thriving economy. In 2007, it exhibited the second-highest GDP per capita of + $25,000 among continents, indicating sustained economic growth and development. + + Europe's life expectancy surpassed 75 years, showcasing a high standard of living and well-established + healthcare systems. With its robust infrastructure, advanced industries, and quality of life, Europe continues + to be a leading force in the global economy. Between 1952 and 2007, Europe's population experienced moderate + growth, with a factor of approximately 1.5, notably lower compared to other continents like Asia and America. + type: card + - text: | + ### Oceania + ![](assets/images/continents/oceania.svg#my-image) + + Oceania, comprising countries like Australia and New Zealand, stands out with notable economic prosperity and + longer life expectancy. In 2007, it boasted the highest GDP per capita of $27,000 among continents and + exhibited one of the highest life expectancy levels, surpassing 80 years. + + Despite a relatively smaller population size, Oceania's strong economic growth has contributed to improved + living standards and overall well-being of its population. + type: card + layout: + grid: [[0], [1], [2], [3], [4]] + row_min_height: 190px + row_gap: 25px + title: Continent Summary + - components: + - figure: + _target_: bar + color: data + data_frame: gapminder_country_analysis + x: year + y: pop + barmode: group + labels: + year: Year + data: Data + pop: Population + color_discrete_map: + Country: "#afe7f9" + Continent: "#003875" + id: bar_country + type: graph + - figure: + _target_: line + color: data + data_frame: gapminder_country_analysis + x: year + y: gdpPercap + labels: + year: Year + data: Data + gdpPercap: GDP per capita + color_discrete_map: + Country: "#afe7f9" + Continent: "#003875" + markers: True + id: line_country + type: graph + - type: button + text: Export data + id: export_data + actions: + - function: + _target_: export_data + targets: + - bar_country controls: - - column: continent + - column: country + selector: + type: dropdown + value: India + multi: False + title: Select country + type: filter + - column: year + selector: + type: range_slider + title: Select timeframe type: filter - title: Example of a styled Dash DataTable + layout: + grid: + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [0, 0, 0, 1, 1, 1] + - [2, 2, 2, 2, 2, 2] + title: Country Analysis +navigation: + pages: + Analysis: + - Homepage + - Variable Analysis + - Relationship Analysis + - Country Analysis + Summary: + - Continent Summary From 4a4f98760c8769decbd9d3807faa57debf571961 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 06:49:56 +0100 Subject: [PATCH 111/121] Test adjusted --- vizro-core/tests/unit/vizro/models/_components/test_table.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index e75d2d937..eedd2d83c 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -45,7 +45,7 @@ def expected_table_with_id(): return dcc.Loading( html.Div( [ - None, + html.Div(hidden=True), html.Div(dash_table.DataTable(id="underlying_table_id"), id="text_table"), ], className="table-container", From 51966c612b8410f98c9429cd14884c94385877f9 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 11:00:17 +0100 Subject: [PATCH 112/121] Add table example in default app.py --- vizro-core/examples/default/app.py | 31 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 03d09411d..f241775b5 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -7,6 +7,7 @@ import vizro.plotly.express as px from vizro import Vizro from vizro.actions import export_data, filter_interaction +from vizro.tables import dash_data_table def retrieve_avg_continent_data(): @@ -420,30 +421,34 @@ def create_country_analysis(): page_country = vm.Page( title="Country Analysis", - layout=vm.Layout(grid=[[0, 0, 0, 1, 1, 1]] * 7 + [[2, 2, 2, 2, 2, 2]]), components=[ - vm.Graph( - id="bar_country", - figure=px.bar( - df_gapminder, - x="year", - y="pop", - color="data", - barmode="group", - labels={"year": "Year", "data": "Data", "pop": "Population"}, - color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, + vm.Table( + id="table_country", + title="Table Country", + figure=dash_data_table( + id="dash_data_table_country", + data_frame=px.data.gapminder(), ), + actions=[ + vm.Action( + function=filter_interaction( + targets=["line_country"] + ) + ) + ], ), vm.Graph( id="line_country", figure=px.line( df_gapminder, + title="Line Country", x="year", y="gdpPercap", color="data", labels={"year": "Year", "data": "Data", "gdpPercap": "GDP per capita"}, color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, markers=True, + hover_name="country", ), ), vm.Button( @@ -451,14 +456,14 @@ def create_country_analysis(): actions=[ vm.Action( function=export_data( - targets=["bar_country"], + targets=["table_country", "line_country"], ) ), ], ), ], controls=[ - vm.Filter(column="country", selector=vm.Dropdown(value="India", multi=False, title="Select country")), + vm.Filter(column="continent", selector=vm.Dropdown(value="Europe", multi=False, title="Select continent")), vm.Filter(column="year", selector=vm.RangeSlider(title="Select timeframe", step=1, marks=None)), ], ) From f3fd4abba96c22f38e9af0939c67aa5ddc61bb3a Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 11:11:27 +0100 Subject: [PATCH 113/121] Reverting 'figure' -> 'chart' in actions.md --- vizro-core/docs/pages/user_guides/actions.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/actions.md b/vizro-core/docs/pages/user_guides/actions.md index ad275cc0a..b178c91cb 100644 --- a/vizro-core/docs/pages/user_guides/actions.md +++ b/vizro-core/docs/pages/user_guides/actions.md @@ -103,13 +103,13 @@ a result, when a dashboard user now clicks the button, all data on the page will [Graph]: ../../assets/user_guides/actions/actions_export.png -### Filter data by clicking on figure +### Filter data by clicking on chart -To enable filtering when clicking on data in a (source) figure, you can add the [`filter_interaction`][vizro.actions.filter_interaction] action function to the [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component. The [`filter_interaction`][vizro.actions.filter_interaction] is currently configured to be triggered on click only. +To enable filtering when clicking on data in a (source) chart, you can add the [`filter_interaction`][vizro.actions.filter_interaction] action function to the [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component. The [`filter_interaction`][vizro.actions.filter_interaction] is currently configured to be triggered on click only. -To configure this figure interaction follow the steps below: +To configure this chart interaction follow the steps below: -1. Add the action function to the source [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component and a list of IDs of the target figures into `targets`. +1. Add the action function to the source [`Graph`][vizro.models.Graph] or [`Table`][vizro.models.Table] component and a list of IDs of the target charts into `targets`. ```py actions=[vm.Action(function=filter_interaction(targets=["scatter_relation_2007"]))] ``` @@ -121,7 +121,7 @@ Selecting a data point with a corresponding value of "Africa" in the continent c !!! tip - You can reset your chart interaction filters by refreshing the page - - You can create a "self-interaction" by providing the source figure id as its own `target` + - You can create a "self-interaction" by providing the source chart id as its own `target` Here is an example of how to configure a figure interaction when the source is a [`Graph`][vizro.models.Graph] component. From 989142ebd69d42ddc2429e7a96ba13f7ee8df279 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 11:13:44 +0100 Subject: [PATCH 114/121] Small changes --- ...0231026_084022_petar_pejovic_table_filter_interaction.md | 2 +- vizro-core/docs/pages/user_guides/actions.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md b/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md index d97b7de37..1d1bf84ee 100644 --- a/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md +++ b/vizro-core/changelog.d/20231026_084022_petar_pejovic_table_filter_interaction.md @@ -13,7 +13,7 @@ Uncomment the section that is right (remove the HTML comment wrapper). ### Added -- Enable `filter_interaction` action when the source figure is a `vm.Table` component ([#119](https://github.com/mckinsey/vizro/pull/119)) +- Enable `filter_interaction` action when the source chart is a `vm.Table` component ([#119](https://github.com/mckinsey/vizro/pull/119)) - - - -### Added - -- Enable `filter_interaction` action when the source chart is a `vm.Table` component ([#119](https://github.com/mckinsey/vizro/pull/119)) - - - - - diff --git a/vizro-core/changelog.d/20231102_145448_petar_pejovic_table_filter_interaction.md b/vizro-core/changelog.d/20231102_145448_petar_pejovic_table_filter_interaction.md new file mode 100644 index 000000000..f1f65e73c --- /dev/null +++ b/vizro-core/changelog.d/20231102_145448_petar_pejovic_table_filter_interaction.md @@ -0,0 +1,48 @@ + + + + + + + + + From 4c6167c99c2db01f7ceff975076a64e2307b8fb7 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 15:26:37 +0100 Subject: [PATCH 120/121] Added dict, json and yaml examples --- vizro-core/examples/from_dict/app.py | 30 +++++------ vizro-core/examples/from_json/dashboard.json | 54 ++++++++------------ vizro-core/examples/from_yaml/dashboard.yaml | 47 ++++++----------- 3 files changed, 52 insertions(+), 79 deletions(-) diff --git a/vizro-core/examples/from_dict/app.py b/vizro-core/examples/from_dict/app.py index f21e91fa9..794e53cc6 100644 --- a/vizro-core/examples/from_dict/app.py +++ b/vizro-core/examples/from_dict/app.py @@ -8,6 +8,7 @@ from vizro.actions import export_data, filter_interaction from vizro.managers import data_manager from vizro.models import Dashboard +from vizro.tables import dash_data_table def retrieve_gapminder(): @@ -254,7 +255,7 @@ def retrieve_avg_gapminder_year(year: int): "type": "card", "text": """ #### Last updated - July, 2023 + November, 2023 """, }, { @@ -464,26 +465,25 @@ def retrieve_avg_gapminder_year(year: int): page_country = { "title": "Country Analysis", - "layout": {"grid": [[0, 0, 0, 1, 1, 1]] * 7 + [[2, 2, 2, 2, 2, 2]]}, "components": [ { - "type": "graph", - "id": "bar_country", - "figure": px.bar( - "gapminder_country_analysis", - x="year", - y="pop", - color="data", - barmode="group", - labels={"year": "Year", "data": "Data", "pop": "Population"}, - color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, + "type": "table", + "id": "table_country", + "title": "Table Country", + "figure": dash_data_table( + id="dash_data_table_country", + data_frame="gapminder", ), + "actions": [ + {"function": filter_interaction(targets=["line_country"])}, + ], }, { "type": "graph", "id": "line_country", "figure": px.line( "gapminder_country_analysis", + title="Line Country", x="year", y="gdpPercap", color="data", @@ -497,15 +497,15 @@ def retrieve_avg_gapminder_year(year: int): "id": "export_data_button", "text": "Export data", "actions": [ - {"function": export_data(targets=["scatter_relation_2007"])}, + {"function": export_data(targets=["line_country"])}, ], }, ], "controls": [ { "type": "filter", - "column": "country", - "selector": {"type": "dropdown", "title": "Select country", "multi": False, "value": "India"}, + "column": "continent", + "selector": {"type": "dropdown", "title": "Select continent", "multi": False, "value": "Europe"}, }, { "type": "filter", diff --git a/vizro-core/examples/from_json/dashboard.json b/vizro-core/examples/from_json/dashboard.json index 13a7c714b..0278141a0 100644 --- a/vizro-core/examples/from_json/dashboard.json +++ b/vizro-core/examples/from_json/dashboard.json @@ -185,7 +185,7 @@ "type": "card" }, { - "text": "#### Last updated\nJuly, 2023\n", + "text": "#### Last updated\nNovember, 2023\n", "type": "card" }, { @@ -374,30 +374,28 @@ "components": [ { "figure": { - "_target_": "bar", - "color": "data", - "data_frame": "gapminder_country_analysis", - "x": "year", - "y": "pop", - "barmode": "group", - "labels": { - "year": "Year", - "data": "Data", - "pop": "Population" - }, - "color_discrete_map": { - "Country": "#afe7f9", - "Continent": "#003875" - } + "_target_": "dash_data_table", + "data_frame": "gapminder", + "id": "dash_data_table_country" }, - "id": "bar_country", - "type": "graph" + "id": "table_country", + "title": "Table Country", + "type": "table", + "actions": [ + { + "function": { + "_target_": "filter_interaction", + "targets": ["line_country"] + } + } + ] }, { "figure": { "_target_": "line", "color": "data", "data_frame": "gapminder_country_analysis", + "title": "Line Country", "x": "year", "y": "gdpPercap", "labels": { @@ -422,7 +420,7 @@ { "function": { "_target_": "export_data", - "targets": ["bar_country"] + "targets": ["line_country"] } } ] @@ -430,12 +428,12 @@ ], "controls": [ { - "column": "country", + "column": "continent", "selector": { "type": "dropdown", - "value": "India", + "value": "Europe", "multi": false, - "title": "Select country" + "title": "Select continent" }, "type": "filter" }, @@ -448,18 +446,6 @@ "type": "filter" } ], - "layout": { - "grid": [ - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [0, 0, 0, 1, 1, 1], - [2, 2, 2, 2, 2, 2] - ] - }, "title": "Country Analysis" } ], diff --git a/vizro-core/examples/from_yaml/dashboard.yaml b/vizro-core/examples/from_yaml/dashboard.yaml index 3a9cea5e7..021c8d280 100644 --- a/vizro-core/examples/from_yaml/dashboard.yaml +++ b/vizro-core/examples/from_yaml/dashboard.yaml @@ -183,7 +183,7 @@ pages: type: card - text: | #### Last updated - July, 2023 + November, 2023 type: card - figure: _target_: box @@ -387,25 +387,22 @@ pages: title: Continent Summary - components: - figure: - _target_: bar - color: data - data_frame: gapminder_country_analysis - x: year - y: pop - barmode: group - labels: - year: Year - data: Data - pop: Population - color_discrete_map: - Country: "#afe7f9" - Continent: "#003875" - id: bar_country - type: graph + _target_: dash_data_table + data_frame: gapminder + id: dash_data_table_country + id: table_country + title: Table Country + type: table + actions: + - function: + _target_: filter_interaction + targets: + - line_country - figure: _target_: line color: data data_frame: gapminder_country_analysis + title: Line Country x: year y: gdpPercap labels: @@ -425,30 +422,20 @@ pages: - function: _target_: export_data targets: - - bar_country + - line_country controls: - - column: country + - column: continent selector: type: dropdown - value: India + value: Europe multi: False - title: Select country + title: Select continent type: filter - column: year selector: type: range_slider title: Select timeframe type: filter - layout: - grid: - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [0, 0, 0, 1, 1, 1] - - [2, 2, 2, 2, 2, 2] title: Country Analysis navigation: pages: From eb79c2d8b9b4e11427fd67c629900167deae9ba8 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Thu, 2 Nov 2023 16:47:32 +0100 Subject: [PATCH 121/121] Minor changes --- vizro-core/examples/from_dict/app.py | 1 + vizro-core/examples/from_json/dashboard.json | 3 ++- vizro-core/examples/from_yaml/dashboard.yaml | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/vizro-core/examples/from_dict/app.py b/vizro-core/examples/from_dict/app.py index 794e53cc6..804610ecc 100644 --- a/vizro-core/examples/from_dict/app.py +++ b/vizro-core/examples/from_dict/app.py @@ -490,6 +490,7 @@ def retrieve_avg_gapminder_year(year: int): labels={"year": "Year", "data": "Data", "gdpPercap": "GDP per capita"}, color_discrete_map={"Country": "#afe7f9", "Continent": "#003875"}, markers=True, + hover_name="country", ), }, { diff --git a/vizro-core/examples/from_json/dashboard.json b/vizro-core/examples/from_json/dashboard.json index 0278141a0..0ea95ef96 100644 --- a/vizro-core/examples/from_json/dashboard.json +++ b/vizro-core/examples/from_json/dashboard.json @@ -407,7 +407,8 @@ "Country": "#afe7f9", "Continent": "#003875" }, - "markers": "True" + "markers": "True", + "hover_name": "country" }, "id": "line_country", "type": "graph" diff --git a/vizro-core/examples/from_yaml/dashboard.yaml b/vizro-core/examples/from_yaml/dashboard.yaml index 021c8d280..1c873dbe8 100644 --- a/vizro-core/examples/from_yaml/dashboard.yaml +++ b/vizro-core/examples/from_yaml/dashboard.yaml @@ -413,6 +413,7 @@ pages: Country: "#afe7f9" Continent: "#003875" markers: True + hover_name: country id: line_country type: graph - type: button

;9oh(uxlr_!)2c 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 E0x;o|=Kufz literal 0 HcmV?d00001 diff --git a/vizro-core/docs/pages/user_guides/components.md b/vizro-core/docs/pages/user_guides/components.md index b73faa94d..0018964bd 100755 --- a/vizro-core/docs/pages/user_guides/components.md +++ b/vizro-core/docs/pages/user_guides/components.md @@ -1,89 +1,9 @@ -# How to use charts/components +# How to use cards & buttons -This guide shows you how to use charts/components to visualize your data in the dashboard. +This guide shows you how to use cards and buttons to visualize and interact with your data in the dashboard. The [`Page`][vizro.models.Page] models accepts the `components` argument, where you can enter your visual content e.g. -[`Graph`][vizro.models.Graph], [`Card`][vizro.models.Card] or [`Button`][vizro.models.Button]. - -## Graph - -The [`Graph`][vizro.models.Graph] model is the most used component in many dashboards, allowing you to visualize data in a variety of ways. - -You can add a [`Graph`][vizro.models.Graph] -to your dashboard by inserting the [`Graph`][vizro.models.Graph] model into the `components` argument of the -[`Page`][vizro.models.Page] model. You will need to specify the `figure` argument, where you can enter any of the -currently available charts of the open source library [`plotly.express`](https://plotly.com/python/plotly-express/). - -!!! note - - Note that in order to use the [`plotly.express`](https://plotly.com/python/plotly-express/) chart in a Vizro dashboard, you need to import it as `import vizro.plotly.express as px`. - This leaves any of the [`plotly.express`](https://plotly.com/python/plotly-express/) functionality untouched, but allows _direct insertion_ into the [`Graph`][vizro.models.Graph] model _as is_. - -!!! example "Graph" - === "app.py" - ```py - import vizro.models as vm - import vizro.plotly.express as px - from vizro import Vizro - - df = px.data.iris() - - page = vm.Page( - title="My first page", - components=[ - vm.Graph( - id="my_chart", - figure=px.scatter_matrix( - df, dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"], color="species" - ), - ), - ], - controls=[vm.Filter(column="species", selector=vm.Dropdown(title="Species"))], - ) - - dashboard = vm.Dashboard(pages=[page]) - - Vizro().build(dashboard).run() - ``` - === "app.yaml" - ```yaml - # Still requires a .py to register data connector in Data Manager and parse yaml configuration - # See from_yaml example - pages: - - components: - - figure: - _target_: scatter_matrix - color: species - data_frame: iris - dimensions: ["sepal_length", "sepal_width", "petal_length", "petal_width"] - id: my_chart - type: graph - controls: - - column: species - type: filter - selector: - title: Species - type: dropdown - title: My first page - ``` - === "Result" - [![Graph]][Graph] - - [Graph]: ../../assets/user_guides/components/graph1.png - -Note that in the above example we directly inserted the chart into the `figure` argument for the `.py` version. This is also the simplest way to connect your chart to a Pandas `DataFrame` - for other connections, please refer to [this guide](data.md). For the `yaml` version, we simply referred to the [`plotly.express`](https://plotly.com/python/plotly-express/) name by string. - - -???+ info - - When importing Vizro, we automatically set the `plotly` [default template](https://plotly.com/python/templates/#specifying-a-default-themes) to - a custom designed template. In case you would like to set the default back, simply run - ```py - import plotly.io as pio - pio.templates.default = "plotly" - ``` - or enter your desired template into any `plotly.express` chart as `template="plotly"` on a case-by-case basis. - Note that we do not recommend the above steps for use in dashboards, as other templates will look out-of-sync with overall dashboard design. +[`Graph`][vizro.models.Graph], [`Table`][vizro.models.Table], [`Card`][vizro.models.Card] or [`Button`][vizro.models.Button]. ## Card diff --git a/vizro-core/docs/pages/user_guides/graph.md b/vizro-core/docs/pages/user_guides/graph.md new file mode 100755 index 000000000..8f5c91a23 --- /dev/null +++ b/vizro-core/docs/pages/user_guides/graph.md @@ -0,0 +1,89 @@ +# How to use graphs + +This guide shows you how to use graphs to visualize your data in the dashboard. + +The [`Page`][vizro.models.Page] models accepts the `components` argument, where you can enter your visual content e.g. +[`Graph`][vizro.models.Graph], [`Table`][vizro.models.Table], [`Card`][vizro.models.Card] or [`Button`][vizro.models.Button]. + +## Graph + +The [`Graph`][vizro.models.Graph] model is the most used component in many dashboards, allowing you to visualize data in a variety of ways. + +To add a [`Graph`][vizro.models.Graph] to your page, do the following: + +- insert the [`Graph`][vizro.models.Graph] model into the `components` argument of the +[`Page`][vizro.models.Page] model +- enter any of the currently available charts of the open source library [`plotly.express`](https://plotly.com/python/plotly-express/) into the `figure` argument + +!!! note + + In order to use the [`plotly.express`](https://plotly.com/python/plotly-express/) chart in a Vizro dashboard, you need to import it as `import vizro.plotly.express as px`. + This leaves any of the [`plotly.express`](https://plotly.com/python/plotly-express/) functionality untouched, but allows _direct insertion_ into the [`Graph`][vizro.models.Graph] model _as is_. + + + +!!! example "Graph" + === "app.py" + ```py + import vizro.models as vm + import vizro.plotly.express as px + from vizro import Vizro + + df = px.data.iris() + + page = vm.Page( + title="My first page", + components=[ + vm.Graph( + id="my_chart", + figure=px.scatter_matrix( + df, dimensions=["sepal_length", "sepal_width", "petal_length", "petal_width"], color="species" + ), + ), + ], + controls=[vm.Filter(column="species", selector=vm.Dropdown(title="Species"))], + ) + + dashboard = vm.Dashboard(pages=[page]) + + Vizro().build(dashboard).run() + ``` + === "app.yaml" + ```yaml + # Still requires a .py to register data connector in Data Manager and parse yaml configuration + # See from_yaml example + pages: + - components: + - figure: + _target_: scatter_matrix + color: species + data_frame: iris + dimensions: ["sepal_length", "sepal_width", "petal_length", "petal_width"] + id: my_chart + type: graph + controls: + - column: species + type: filter + selector: + title: Species + type: dropdown + title: My first page + ``` + === "Result" + [![Graph]][Graph] + + [Graph]: ../../assets/user_guides/components/graph1.png + +Note that in the above example we directly inserted the chart into the `figure` argument for the `.py` version. This is also the simplest way to connect your chart to a Pandas `DataFrame` - for other connections, please refer to [this guide on data connections](data.md). For the `yaml` version, we simply referred to the [`plotly.express`](https://plotly.com/python/plotly-express/) name by string. + + +??? info "Vizro automatically sets the plotly default template" + + When importing Vizro, we automatically set the `plotly` [default template](https://plotly.com/python/templates/#specifying-a-default-themes) to + a custom designed template. In case you would like to set the default back, simply run + ```py + import plotly.io as pio + pio.templates.default = "plotly" + ``` + or enter your desired template into any `plotly.express` chart as `template="plotly"` on a case-by-case basis. + Note that we do not recommend the above steps for use in dashboards, as other templates will look out-of-sync with overall dashboard design. diff --git a/vizro-core/docs/pages/user_guides/table.md b/vizro-core/docs/pages/user_guides/table.md new file mode 100755 index 000000000..9b8fa280a --- /dev/null +++ b/vizro-core/docs/pages/user_guides/table.md @@ -0,0 +1,72 @@ +# How to use tables + +This guide shows you how to use tables to visualize your data in the dashboard. + +The [`Page`][vizro.models.Page] models accepts the `components` argument, where you can enter your visual content e.g. +[`Graph`][vizro.models.Graph], [`Table`][vizro.models.Table], [`Card`][vizro.models.Card] or [`Button`][vizro.models.Button]. + +## Table + +The [`Table`][vizro.models.Table] model allows you to visualize data in a tabular format. + +To add a [`Table`][vizro.models.Table] to your page, do the following: + +- insert the [`Table`][vizro.models.Table] model into the `components` argument of the +[`Page`][vizro.models.Page] model +- enter any of the currently available table functions + +See below for an overview of currently supported table functions. + +### Dash DataTable + +The [Dash DataTable](https://dash.plotly.com/datatable) is an interactive table component designed for viewing, editing, and exploring large datasets. + +You can use the [Dash DataTable](https://dash.plotly.com/datatable) in Vizro by importing +```py +from vizro.tables import dash_data_table +``` +The Vizro version of the table differs in one way from the original table: it requires the user to provide a pandas dataframe as source of data. +This must be entered under the argument `data_frame`. +All other parameters of the [Dash DataTable](https://dash.plotly.com/datatable) can be entered as kwargs. + +!!! example "Dash DataTable" + === "app.py" + ```py + import vizro.models as vm + from vizro import Vizro + import vizro.plotly.express as px + from vizro.tables import dash_data_table + + df = px.data.iris() + + page = vm.Page( + title="Dash DataTable", + components=[ + vm.Table(id="table", figure=dash_data_table(data_frame=df)), + ], + controls=[vm.Filter(column="species")], + ) + dashboard = vm.Dashboard(pages=[page]) + + Vizro().build(dashboard).run() + ``` + === "app.yaml" + ```yaml + # Still requires a .py to register data connector in Data Manager and parse yaml configuration + # See from_yaml example + pages: + - components: + - figure: + _target_: dash_data_table + data_frame: iris + id: table + type: table + controls: + - column: species + type: filter + title: Dash DataTable + ``` + === "Result" + [![Table]][Table] + + [Table]: ../../assets/user_guides/table/table.png \ No newline at end of file diff --git a/vizro-core/mkdocs.yml b/vizro-core/mkdocs.yml index 5f925659f..65a9ba483 100644 --- a/vizro-core/mkdocs.yml +++ b/vizro-core/mkdocs.yml @@ -12,7 +12,10 @@ nav: - Pages: pages/user_guides/pages.md - Run Methods: pages/user_guides/run.md - Components: - - Charts, Cards, Buttons: pages/user_guides/components.md + - Graphs: pages/user_guides/graph.md + - Tables: pages/user_guides/table.md + - Cards & Buttons: pages/user_guides/components.md + - Controls: - Filters: pages/user_guides/filters.md - Parameters: pages/user_guides/parameters.md diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 644d163b7..3dd49cdd3 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -5,7 +5,7 @@ logger = logging.getLogger(__name__) -# Validator for re-use in other models to validate pages +# Validator for reuse in other models to validate pages def _process_callable_data_frame(captured_callable, values): data_frame = captured_callable["data_frame"] From c8cbdf7063605ffc152d1da282f49d33c756222c Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Mon, 23 Oct 2023 21:26:27 +0200 Subject: [PATCH 064/121] Cleanup --- vizro-core/docs/pages/user_guides/table.md | 4 ++-- .../_callback_mapping/_callback_mapping_utils.py | 15 ++++++--------- vizro-core/src/vizro/models/__init__.py | 2 +- .../models/_components/_components_utils.py | 4 ++-- vizro-core/src/vizro/models/_components/graph.py | 4 +--- .../unit/vizro/models/_components/test_table.py | 10 ---------- vizro-core/tests/unit/vizro/models/test_types.py | 16 ---------------- 7 files changed, 12 insertions(+), 43 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/table.md b/vizro-core/docs/pages/user_guides/table.md index 9b8fa280a..0363ca015 100755 --- a/vizro-core/docs/pages/user_guides/table.md +++ b/vizro-core/docs/pages/user_guides/table.md @@ -21,7 +21,7 @@ See below for an overview of currently supported table functions. The [Dash DataTable](https://dash.plotly.com/datatable) is an interactive table component designed for viewing, editing, and exploring large datasets. -You can use the [Dash DataTable](https://dash.plotly.com/datatable) in Vizro by importing +You can use the [Dash DataTable](https://dash.plotly.com/datatable) in Vizro by importing ```py from vizro.tables import dash_data_table ``` @@ -69,4 +69,4 @@ All other parameters of the [Dash DataTable](https://dash.plotly.com/datatable) === "Result" [![Table]][Table] - [Table]: ../../assets/user_guides/table/table.png \ No newline at end of file + [Table]: ../../assets/user_guides/table/table.png diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 2067ff6cc..ff2ced01d 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -104,16 +104,13 @@ def _get_inputs_of_chart_interactions( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) - inputs = [] - for action in chart_interactions_on_page: - triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) - inputs.append( - State( - component_id=triggered_model.id, - component_property="clickData", # TODO: needs to be refactored to abstract implementation detail - ) + return [ + State( + component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, + component_property="clickData", # TODO: needs to be refactored to abstract implementation detail ) - return inputs + for action in chart_interactions_on_page + ] def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: diff --git a/vizro-core/src/vizro/models/__init__.py b/vizro-core/src/vizro/models/__init__.py index 8021bdfe5..e7a517220 100644 --- a/vizro-core/src/vizro/models/__init__.py +++ b/vizro-core/src/vizro/models/__init__.py @@ -29,6 +29,6 @@ "RadioItems", "RangeSlider", "Slider", - "VizroBaseModel", "Table", + "VizroBaseModel", ] diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 3dd49cdd3..75c559ab1 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -9,7 +9,7 @@ def _process_callable_data_frame(captured_callable, values): data_frame = captured_callable["data_frame"] - # Enable running px.scatter("iris") from the Python API and specification of "data_frame": "iris" through JSON. + # Enable running e.g. px.scatter("iris") from the Python API and specification of "data_frame": "iris" through JSON. # In these cases, data already exists in the data manager and just needs to be linked to the component. if isinstance(data_frame, str): data_manager._add_component(values["id"], data_frame) @@ -19,7 +19,7 @@ def _process_callable_data_frame(captured_callable, values): # Extract dataframe from the captured function and put it into the data manager. dataset_name = str(id(data_frame)) - logger.debug("Adding data to data manager for Graph with id %s", values["id"]) + logger.debug("Adding data to data manager for Figure with id %s", values["id"]) # If the dataset already exists in the data manager then it's not a problem, it just means that we don't need # to duplicate it. Just log the exception for debugging purposes. try: diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 88cd2fecb..25a555f24 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -57,9 +57,7 @@ def __call__(self, **kwargs): # Remove top margin if title is provided if fig.layout.title.text is None: - fig.update_layout( - margin_t=24 - ) # TODO: needs to be refactored so plotly-independent or extendable: No, as boundaries of Graph model + fig.update_layout(margin_t=24) return fig # Convenience wrapper/syntactic sugar. diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index a072fdb56..ac0944ec8 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -82,16 +82,6 @@ def test_getitem_unknown_args(self, standard_dash_table): with pytest.raises(KeyError): table["unknown_args"] - # @pytest.mark.parametrize("title, expected", [(None, 24), ("Test", None)]) - # def test_title_margin_adjustment(self, gapminder, title, expected): - # figure = vm.Graph(figure=px.bar(data_frame=gapminder, x="year", y="pop", title=title)).__call__() - - # assert figure.layout.margin.t == expected - # assert figure.layout.template.layout.margin.t == 64 - # assert figure.layout.template.layout.margin.l == 80 - # assert figure.layout.template.layout.margin.b == 64 - # assert figure.layout.template.layout.margin.r == 12 - def test_set_action_via_validator(self, standard_dash_table, test_action_function): table = vm.Table(figure=standard_dash_table, actions=[Action(function=test_action_function)]) actions_chain = table.actions[0] diff --git a/vizro-core/tests/unit/vizro/models/test_types.py b/vizro-core/tests/unit/vizro/models/test_types.py index 2e5cfce1c..455c0e9ed 100644 --- a/vizro-core/tests/unit/vizro/models/test_types.py +++ b/vizro-core/tests/unit/vizro/models/test_types.py @@ -64,22 +64,6 @@ def test_varkwargs(varkwargs_function): varkwargs_function(c=3, d=4) == 1 + 2 + 3 -@pytest.fixture -def varkwargs_function2(): - def function(a, b=2, **kwargs): - return a + b + kwargs["c"] - - return CapturedCallable(function, 1, c=3) # Note c=3 is given here unlike in varkwargs_function - - -def test_varkwargs2(varkwargs_function2): - varkwargs_function2(d=4) == 1 + 2 + 3 - - -def test_varkwargs_argument_attribute(varkwargs_function2): - assert varkwargs_function2._arguments == {"a": 1, "c": 3} - - @pytest.fixture def simple_function(): def function(a, b, c, d=4): From 7670eab8d7674c5864901acbc4e733bd0cadd935 Mon Sep 17 00:00:00 2001 From: nadijagraca Date: Tue, 24 Oct 2023 13:22:24 +0200 Subject: [PATCH 065/121] dropdown css bugfix --- vizro-core/src/vizro/static/css/dropdown.css | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/vizro-core/src/vizro/static/css/dropdown.css b/vizro-core/src/vizro/static/css/dropdown.css index e023feb2b..728fde9bb 100644 --- a/vizro-core/src/vizro/static/css/dropdown.css +++ b/vizro-core/src/vizro/static/css/dropdown.css @@ -17,13 +17,6 @@ div.page_container .Select-menu-outer { line-height: var(--text-size-05); } -/* Dropdown background color when focused */ -div.page_container .Select.is-focused > .Select-control { - background-color: var(--field-enabled); - height: 100%; - padding: 0 !important; -} - /* Dropdown menu options */ div.page_container .VirtualizedSelectOption { color: var(--text-primary); @@ -43,9 +36,16 @@ div.page_container .Select-control { height: 32px; } +/* Dropdown background color when focused */ +div.page_container .Select.is-focused > .Select-control { + background-color: var(--field-enabled); +} + /* User input */ -div.page_container .Select-input { +div.page_container .dash-dropdown .Select-input { + display: block; height: var(--tag-height); + margin-left: unset; } div.page_container.Select-input > input { @@ -143,9 +143,9 @@ wrapper **/ display: flex; flex-wrap: wrap; gap: 4px; - padding: 13px 8px; + padding: 4px 8px; } .Select-input > input { - padding: 0; + padding: 0 !important; } From 546dc4f7631d97a05370fb3f8d233ce763979e8c Mon Sep 17 00:00:00 2001 From: petar-qb Date: Tue, 24 Oct 2023 14:56:41 +0200 Subject: [PATCH 066/121] Fixing example --- vizro-core/examples/default/app.py | 83 +++++++------ .../_build_action_loop_callbacks.py | 13 +- .../src/vizro/actions/_actions_utils.py | 117 +++++++++++++----- .../_callback_mapping_utils.py | 38 ++++-- .../src/vizro/models/_components/table.py | 26 +++- 5 files changed, 199 insertions(+), 78 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 41e2f8bb3..647b28f07 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -10,7 +10,8 @@ import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro -from vizro.actions import filter_interaction +from vizro.actions import export_data, filter_interaction +from vizro.tables import dash_data_table from vizro.managers import data_manager from vizro.models.types import capture from vizro.tables import dash_data_table @@ -18,36 +19,28 @@ def retrieve_table_data(): """Return data for table for testing.""" + states = [ + "California", + "Arizona", + "Nevada", + "New Mexico", + "Colorado", + "Texas", + "North Carolina", + "New York", + ] + data = { - "State": [ - "California", - "Arizona", - "Nevada", - "New Mexico", - "Colorado", - "Texas", - "North Carolina", - "New York", - ], - "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13], - "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53], - "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1], - "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84], + "State": states + states[::-1], + "Number of Solar Plants": [289, 48, 11, 33, 20, 12, 148, 13] * 2, + "Installed Capacity (MW)": [4395, 1078, 238, 261, 118, 187, 669, 53] * 2, + "Average MW Per Plant": [15.3, 22.5, 21.6, 7.9, 5.9, 15.6, 4.5, 4.1] * 2, + "Generation (GWh)": [10826, 2550, 557, 590, 235, 354, 1162, 84] * 2, } return pd.DataFrame(data) -@capture("table") -def table_dash(data_frame=None, style_header=None): - """Custom table.""" - return dash_table.DataTable( - data=data_frame.to_dict("records"), - columns=[{"name": i, "id": i} for i in data_frame.columns], - style_header=style_header, - ) - - @capture("table") def AgGrid(data_frame=None): """Custom AgGrid.""" @@ -62,32 +55,50 @@ def AgGrid(data_frame=None): data_manager["table_data"] = retrieve_table_data data = retrieve_table_data() +# TODO: Check the Page.layout. There seem to be some issues when there are several tables on a page. page_0 = vm.Page( title="Color manager", path="color-manager", components=[ - vm.Table(id="table2", figure=dash_data_table(data_frame=data, style_header={"border": "1px solid green"})), + vm.Table( + id="table_id", + figure=dash_data_table( + id="dash_datatable_id", + data_frame="table_data", + style_header={"border": "1px solid green"}, + ), + actions=[vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart"]))], + ), vm.Graph( - id="graph", + id="scatter_chart", figure=px.scatter( - data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species", custom_data=["species"] + data_frame="table_data", + x="State", + y="Number of Solar Plants", + color="Number of Solar Plants", + custom_data=["State"], ), - actions=[vm.Action(function=filter_interaction(targets=["hist"]))], + actions=[vm.Action(function=filter_interaction(targets=["table_id"]))], ), - vm.Graph( - id="hist", - figure=px.histogram(data_frame=px.data.iris(), x="sepal_width", y="sepal_length", color="species"), + vm.Table( + id="table_2_id", + figure=dash_data_table(id="dash_datatable_id_2", data_frame=data, style_header={"border": "1px solid green"}), + actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))] ), - vm.Table(id="grid", figure=AgGrid(data_frame="table_data")), + # vm.Table( + # id="ag_grid", + # table=AgGrid(data_frame="table_data"), + # # TODO: Probably we need to enable filter_interactions out of the box only for AgGrid objects. + # # actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))] + # ), + vm.Button(id="export_data_button", actions=[vm.Action(function=export_data())]), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), vm.Parameter( - targets=["table2.style_header.border"], + targets=["table_id.style_header.border", "table_2_id.style_header.border"], selector=vm.RadioItems(options=["1px solid green", "1px solid pink"]), ), - vm.Filter(column="species", selector=vm.Dropdown()), - vm.Parameter(targets=["graph.x"], selector=vm.RadioItems(options=["petal_length", "sepal_length"])), ], ) dashboard = vm.Dashboard(pages=[page_0]) diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index df8cebf32..e85abe9d1 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -8,6 +8,7 @@ _get_actions_chains_on_registered_pages, _get_actions_on_registered_pages, ) +from vizro.managers import model_manager logger = logging.getLogger(__name__) @@ -22,12 +23,22 @@ def _build_action_loop_callbacks() -> None: gateway_inputs: List[Input] = [] for actions_chain in actions_chains: + actions_chain_trigger_component_id = actions_chain.trigger.component_id + try: + actions_chain_trigger_component = model_manager[actions_chain_trigger_component_id] + # Use underlying 'Datatable' object as a trigger component. + if actions_chain_trigger_component.type in ["table", "react"]: + actions_chain_trigger_component_id = actions_chain_trigger_component._datatable_id + # Not all action_chain_trigger_components are included in model_manager. eg on_page_load_action_trigger + except KeyError: + pass + # Callback that enables gateway callback to work in the multiple page app clientside_callback( ClientsideFunction(namespace="clientside", function_name="trigger_to_global_store"), Output({"type": "gateway_input", "trigger_id": actions_chain.id}, "data"), Input( - component_id=actions_chain.trigger.component_id, + component_id=actions_chain_trigger_component_id, component_property=actions_chain.trigger.component_property, ), State({"type": "gateway_input", "trigger_id": actions_chain.id}, "data"), diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index f1b45b284..c9280a58a 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -20,11 +20,16 @@ class CallbackTriggerDict(TypedDict): # shortened as 'ctd' - id: ModelID # the component ID. If it`s a pattern matching ID, it will be a dict. - property: Literal["clickData", "value", "n_clicks", "active_cell"] # the component property used in the callback. - value: Optional[Any] # the value of the component property at the time the callback was fired. - str_id: str # for pattern matching IDs, it`s the stringified dict ID with no white spaces. - triggered: bool # a boolean indicating whether this input triggered the callback. + # The component ID. If it`s a pattern matching ID, it will be a dict. + id: ModelID + # The component property used in the callback. + property: Literal["clickData", "value", "n_clicks", "active_cell", "derived_viewport_data"] + # The value of the component property at the time the callback was fired. + value: Optional[Any] + # For pattern matching IDs, it`s the stringified dict ID with no white spaces. + str_id: str + # A boolean indicating whether this input triggered the callback. + triggered: bool # Utility functions for helper functions used in pre-defined actions ---- @@ -36,14 +41,6 @@ def _get_component_actions(component) -> List[Action]: ) -def _validate_selector_value_NONE(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: - if value == NONE_OPTION: - return None - elif isinstance(value, list): - return [i for i in value if i != NONE_OPTION] or [None] # type: ignore[list-item, return-value] - return value - - def _apply_filters( data_frame: pd.DataFrame, ctds_filters: List[CallbackTriggerDict], @@ -66,32 +63,90 @@ def _apply_filters( return data_frame +def _apply_chart_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): + ctd_click_data = ctd_value["clickData"] + if not ctd_click_data["value"]: + return data_frame + + source_chart_id = ctd_click_data["id"] + source_chart_actions = _get_component_actions(model_manager[source_chart_id]) + try: + custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] + except KeyError as exc: + raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc + + customdata = ctd_click_data["value"]["points"][0]["customdata"] # type: ignore[call-overload] + + for action in source_chart_actions: + if target not in action.function["targets"]: + continue + for custom_data_idx, column in enumerate(custom_data_columns): + data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] + + return data_frame + + +def _get_parent_vizro_table(dash_datatable_id: str): + from vizro.models import Table + + for _, table in model_manager._items_with_type(Table): + if table._datatable_id == dash_datatable_id: + return table + + +def _apply_table_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): + ctd_active_cell = ctd_value["active_cell"] + ctd_derived_viewport_data = ctd_value["derived_viewport_data"] + if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: + return data_frame + + source_table_id = ctd_active_cell["id"] + try: + source_table_actions = _get_component_actions(model_manager[source_table_id]) + except KeyError: + # source_table_id is dash.Datatable id and we need to fetch actions from parent Vizro.Table component + source_table_actions = _get_component_actions(_get_parent_vizro_table(source_table_id)) + + for action in source_table_actions: + if target not in action.function["targets"]: + continue + column = ctd_active_cell["value"]["column_id"] + derived_viewport_data_row = ctd_active_cell["value"]["row"] + clicked_data = ctd_derived_viewport_data["value"][derived_viewport_data_row][column] + data_frame = data_frame[data_frame[column].isin([clicked_data])] + + return data_frame + + def _apply_filter_interaction( data_frame: pd.DataFrame, ctds_filter_interaction: List[CallbackTriggerDict], target: str, ) -> pd.DataFrame: - for ctd in ctds_filter_interaction: - if not ctd["value"]: - continue - - source_chart_id = ctd["id"] - source_chart_actions = _get_component_actions(model_manager[source_chart_id]) - - try: - custom_data_columns = model_manager[source_chart_id]["custom_data"] # type: ignore[index] - except KeyError as exc: - raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc + for ctd_key, ctd_value in ctds_filter_interaction.items(): + if "clickData" in ctd_value: + data_frame = _apply_chart_filter_interaction( + data_frame=data_frame, + target=target, + ctd_value=ctd_value, + ) + + if "active_cell" in ctd_value and "derived_viewport_data" in ctd_value: + data_frame = _apply_table_filter_interaction( + data_frame=data_frame, + target=target, + ctd_value=ctd_value, + ) - customdata = ctd["value"]["points"][0]["customdata"] + return data_frame - for action in source_chart_actions: - if target not in action.function["targets"]: - continue - for custom_data_idx, column in enumerate(custom_data_columns): - data_frame = data_frame[data_frame[column].isin([customdata[custom_data_idx]])] - return data_frame +def _validate_selector_value_NONE(value: Union[SingleValueType, MultiValueType]) -> ValidatedNoneValueType: + if value == NONE_OPTION: + return None + elif isinstance(value, list): + return [i for i in value if i != NONE_OPTION] or [None] # type: ignore[list-item, return-value] + return value def _create_target_arg_mapping(dot_separated_strings: List[str]) -> Dict[str, List[str]]: diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index ff2ced01d..9573f0a2a 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -98,19 +98,39 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li def _get_inputs_of_chart_interactions( action_id: ModelID, action_function: Callable[[Any], Dict[str, Any]] -) -> List[State]: +) -> Dict[str, Dict[str, State]]: """Gets list of States for selected chart interaction `action_name` of triggered page.""" chart_interactions_on_page = _get_matching_actions_by_function( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) - return [ - State( - component_id=_get_triggered_model(action_id=ModelID(str(action.id))).id, - component_property="clickData", # TODO: needs to be refactored to abstract implementation detail - ) - for action in chart_interactions_on_page - ] + inputs = {} + for action in chart_interactions_on_page: + triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) + # TODO: Consider do we want to move the following logic into Model implementations. + if triggered_model.type in ["table", "react"]: + inputs.update( + { + action.id: { + "active_cell": State( + component_id=triggered_model._datatable_id, component_property="active_cell" + ), + "derived_viewport_data": State( + component_id=triggered_model._datatable_id, component_property="derived_viewport_data" + ), + } + } + ) + else: + inputs.update( + { + action.id: { + "clickData": State(component_id=triggered_model.id, component_property="clickData"), + } + } + ) + + return inputs def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: @@ -134,7 +154,7 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: "filter_interaction": ( _get_inputs_of_chart_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) if "filter_interaction" in include_inputs - else [] + else {} ), "theme_selector": (State("theme_selector", "on") if "theme_selector" in include_inputs else []), } diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index fdaa06aab..340058b10 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -30,6 +30,8 @@ class Table(VizroBaseModel): figure: CapturedCallable = Field(..., import_path=vt, description="Table to be visualized on dashboard") actions: List[Action] = [] + _datatable_id: str = PrivateAttr() + # Component properties for actions and interactions _output_property: str = PrivateAttr("children") @@ -50,6 +52,28 @@ def __getitem__(self, arg_name: str): return self.type return self.figure[arg_name] + def _build_datatable_object(self): + data = data_manager._get_component_data(self.id) # type: ignore + kwargs = self.figure._arguments.copy() + kwargs.pop("data_frame", None) + return self.figure._function(data_frame=data, **kwargs) + + @_log_call + def pre_build(self): + if self.actions: + # The Datatable object is pre-built, so we can fetch its ID. + datatable_object = self._build_datatable_object() + + # Datatable object has to have "id" defined if it triggers actions chain. + if not hasattr(datatable_object, "id"): + raise ValueError( + "'DataTable' object has no attribute 'id'. To perform specified actions, a valid 'id' to the" + " 'Datatable' object has to be provided." + ) + + self._datatable_id = datatable_object.id + @_log_call def build(self): - return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id) + # return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id) + return html.Div(self._build_datatable_object(), id=self.id) From 205b7597af6c0d31be58dfee0484307c611d72c3 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 13:48:55 +0200 Subject: [PATCH 067/121] First round of PR comments --- vizro-core/docs/pages/user_guides/table.md | 2 +- vizro-core/src/vizro/models/_components/graph.py | 6 ++---- vizro-core/src/vizro/models/types.py | 2 +- vizro-core/src/vizro/static/css/table.css | 9 +++++++++ 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/table.md b/vizro-core/docs/pages/user_guides/table.md index 0363ca015..4dd6420af 100755 --- a/vizro-core/docs/pages/user_guides/table.md +++ b/vizro-core/docs/pages/user_guides/table.md @@ -27,7 +27,7 @@ from vizro.tables import dash_data_table ``` The Vizro version of the table differs in one way from the original table: it requires the user to provide a pandas dataframe as source of data. This must be entered under the argument `data_frame`. -All other parameters of the [Dash DataTable](https://dash.plotly.com/datatable) can be entered as kwargs. +All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/reference) can be entered as kwargs. !!! example "Dash DataTable" === "app.py" diff --git a/vizro-core/src/vizro/models/_components/graph.py b/vizro-core/src/vizro/models/_components/graph.py index 25a555f24..253007582 100644 --- a/vizro-core/src/vizro/models/_components/graph.py +++ b/vizro-core/src/vizro/models/_components/graph.py @@ -38,9 +38,7 @@ class Graph(VizroBaseModel): """ type: Literal["graph"] = "graph" - figure: CapturedCallable = Field( - ..., import_path=px - ) # TODO: needs to be refactored so plotly-independent or extendable - No, as within the boundaries of Graph model + figure: CapturedCallable = Field(..., import_path=px) actions: List[Action] = [] # Component properties for actions and interactions @@ -48,7 +46,7 @@ class Graph(VizroBaseModel): # Re-used validators _set_actions = _action_validator_factory("clickData") - _validate_callable = validator("figure", allow_reuse=True, always=True)(_process_callable_data_frame) + _validate_callable = validator("figure", allow_reuse=True)(_process_callable_data_frame) # Convenience wrapper/syntactic sugar. def __call__(self, **kwargs): diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 7db9f08c0..f15522c12 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -219,7 +219,7 @@ def wrapped(*args, **kwargs): return wrapped elif self._mode == "table": - # The table component + @functools.wraps(func) def wrapped(*args, **kwargs): if "data_frame" not in inspect.signature(func).parameters: diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index a6fd902ee..06092f80c 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -30,3 +30,12 @@ div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { padding: 0px 4px; } + +.table-title { + padding-bottom: 14px; +} + +.table-container { + padding: 12px; + padding-left: 18px; +} \ No newline at end of file From d0d472ade427c1ca4c88268b1665e1453a46426d Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 25 Oct 2023 14:51:20 +0200 Subject: [PATCH 068/121] Changing format of filter_interaction --- vizro-core/examples/default/app.py | 20 +++++----- .../_build_action_loop_callbacks.py | 8 ++-- .../src/vizro/actions/_actions_utils.py | 36 ++++++++++-------- .../_callback_mapping_utils.py | 37 +++++++++---------- .../src/vizro/models/_components/table.py | 32 ++++++++++------ .../test_get_action_callback_mapping.py | 8 +++- .../vizro/actions/test_export_data_action.py | 28 +++++++------- .../actions/test_filter_interaction_action.py | 28 +++++++------- 8 files changed, 111 insertions(+), 86 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index 647b28f07..8035f5197 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -5,13 +5,11 @@ # import d3_bar_chart import pandas as pd -from dash import dash_table import vizro.models as vm import vizro.plotly.express as px from vizro import Vizro from vizro.actions import export_data, filter_interaction -from vizro.tables import dash_data_table from vizro.managers import data_manager from vizro.models.types import capture from vizro.tables import dash_data_table @@ -67,7 +65,9 @@ def AgGrid(data_frame=None): data_frame="table_data", style_header={"border": "1px solid green"}, ), - actions=[vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart"]))], + actions=[ + vm.Action(id="filter_interaction", function=filter_interaction(targets=["scatter_chart", "table_2_id"])) + ], ), vm.Graph( id="scatter_chart", @@ -82,16 +82,18 @@ def AgGrid(data_frame=None): ), vm.Table( id="table_2_id", - figure=dash_data_table(id="dash_datatable_id_2", data_frame=data, style_header={"border": "1px solid green"}), - actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))] + figure=dash_data_table( + id="dash_datatable_id_2", data_frame=data, style_header={"border": "1px solid green"} + ), + actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))], ), + # TODO: Enable AgGrid to work with actions as action's trigger. + # Currently, AgGrid can be only used as action's output. # vm.Table( # id="ag_grid", - # table=AgGrid(data_frame="table_data"), - # # TODO: Probably we need to enable filter_interactions out of the box only for AgGrid objects. - # # actions=[vm.Action(id="filter_interaction_2", function=filter_interaction(targets=["scatter_chart"]))] + # figure=AgGrid(data_frame="table_data"), # ), - vm.Button(id="export_data_button", actions=[vm.Action(function=export_data())]), + vm.Button(id="export_data_button", text="Export data", actions=[vm.Action(function=export_data())]), ], controls=[ vm.Filter(column="State", selector=vm.Dropdown()), diff --git a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py index e85abe9d1..08526dfb1 100644 --- a/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py +++ b/vizro-core/src/vizro/actions/_action_loop/_build_action_loop_callbacks.py @@ -9,6 +9,8 @@ _get_actions_on_registered_pages, ) from vizro.managers import model_manager +from vizro.managers._model_manager import ModelID +from vizro.models import Table logger = logging.getLogger(__name__) @@ -25,10 +27,10 @@ def _build_action_loop_callbacks() -> None: for actions_chain in actions_chains: actions_chain_trigger_component_id = actions_chain.trigger.component_id try: - actions_chain_trigger_component = model_manager[actions_chain_trigger_component_id] + actions_chain_trigger_component = model_manager[ModelID(str(actions_chain_trigger_component_id))] # Use underlying 'Datatable' object as a trigger component. - if actions_chain_trigger_component.type in ["table", "react"]: - actions_chain_trigger_component_id = actions_chain_trigger_component._datatable_id + if isinstance(actions_chain_trigger_component, Table): + actions_chain_trigger_component_id = actions_chain_trigger_component._underlying_table_id # Not all action_chain_trigger_components are included in model_manager. eg on_page_load_action_trigger except KeyError: pass diff --git a/vizro-core/src/vizro/actions/_actions_utils.py b/vizro-core/src/vizro/actions/_actions_utils.py index c9280a58a..77515e02a 100644 --- a/vizro-core/src/vizro/actions/_actions_utils.py +++ b/vizro-core/src/vizro/actions/_actions_utils.py @@ -63,8 +63,10 @@ def _apply_filters( return data_frame -def _apply_chart_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): - ctd_click_data = ctd_value["clickData"] +def _apply_chart_filter_interaction( + data_frame: pd.DataFrame, target: str, ctd_filter_interaction: Dict[str, CallbackTriggerDict] +): + ctd_click_data = ctd_filter_interaction["clickData"] if not ctd_click_data["value"]: return data_frame @@ -75,7 +77,7 @@ def _apply_chart_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_v except KeyError as exc: raise KeyError(f"No `custom_data` argument found for source chart with id {source_chart_id}.") from exc - customdata = ctd_click_data["value"]["points"][0]["customdata"] # type: ignore[call-overload] + customdata = ctd_click_data["value"]["points"][0]["customdata"] for action in source_chart_actions: if target not in action.function["targets"]: @@ -86,17 +88,19 @@ def _apply_chart_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_v return data_frame -def _get_parent_vizro_table(dash_datatable_id: str): +def _get_parent_vizro_table(_underlying_table_id: str): from vizro.models import Table for _, table in model_manager._items_with_type(Table): - if table._datatable_id == dash_datatable_id: + if table._underlying_table_id == _underlying_table_id: return table -def _apply_table_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_value: CallbackTriggerDict): - ctd_active_cell = ctd_value["active_cell"] - ctd_derived_viewport_data = ctd_value["derived_viewport_data"] +def _apply_table_filter_interaction( + data_frame: pd.DataFrame, target: str, ctd_filter_interaction: Dict[str, CallbackTriggerDict] +): + ctd_active_cell = ctd_filter_interaction["active_cell"] + ctd_derived_viewport_data = ctd_filter_interaction["derived_viewport_data"] if not ctd_active_cell["value"] or not ctd_derived_viewport_data["value"]: return data_frame @@ -120,22 +124,22 @@ def _apply_table_filter_interaction(data_frame: pd.DataFrame, target: str, ctd_v def _apply_filter_interaction( data_frame: pd.DataFrame, - ctds_filter_interaction: List[CallbackTriggerDict], + ctds_filter_interaction: List[Dict[str, CallbackTriggerDict]], target: str, ) -> pd.DataFrame: - for ctd_key, ctd_value in ctds_filter_interaction.items(): - if "clickData" in ctd_value: + for ctd_filter_interaction in ctds_filter_interaction: + if "clickData" in ctd_filter_interaction: data_frame = _apply_chart_filter_interaction( data_frame=data_frame, target=target, - ctd_value=ctd_value, + ctd_filter_interaction=ctd_filter_interaction, ) - if "active_cell" in ctd_value and "derived_viewport_data" in ctd_value: + if "active_cell" in ctd_filter_interaction and "derived_viewport_data" in ctd_filter_interaction: data_frame = _apply_table_filter_interaction( data_frame=data_frame, target=target, - ctd_value=ctd_value, + ctd_filter_interaction=ctd_filter_interaction, ) return data_frame @@ -209,7 +213,7 @@ def _get_parametrized_config( def _get_filtered_data( targets: List[ModelID], ctds_filters: List[CallbackTriggerDict], - ctds_filter_interaction: List[CallbackTriggerDict], + ctds_filter_interaction: List[Dict[str, CallbackTriggerDict]], ) -> Dict[ModelID, pd.DataFrame]: filtered_data = {} for target in targets: @@ -233,7 +237,7 @@ def _get_filtered_data( def _get_modified_page_charts( ctds_filter: List[CallbackTriggerDict], - ctds_filter_interaction: List[CallbackTriggerDict], + ctds_filter_interaction: List[Dict[str, CallbackTriggerDict]], ctds_parameters: List[CallbackTriggerDict], ctd_theme: CallbackTriggerDict, targets: Optional[List[ModelID]] = None, diff --git a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py index 9573f0a2a..535841b76 100644 --- a/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py +++ b/vizro-core/src/vizro/actions/_callback_mapping/_callback_mapping_utils.py @@ -8,7 +8,7 @@ from vizro.actions import _on_page_load, _parameter, export_data, filter_interaction from vizro.managers import data_manager, model_manager from vizro.managers._model_manager import ModelID -from vizro.models import Action, Page, VizroBaseModel +from vizro.models import Action, Page, Table, VizroBaseModel from vizro.models._action._actions_chain import ActionsChain from vizro.models._controls import Filter, Parameter from vizro.models.types import ControlType @@ -98,42 +98,40 @@ def _get_inputs_of_controls(action_id: ModelID, control_type: ControlType) -> Li def _get_inputs_of_chart_interactions( action_id: ModelID, action_function: Callable[[Any], Dict[str, Any]] -) -> Dict[str, Dict[str, State]]: +) -> List[Dict[str, State]]: """Gets list of States for selected chart interaction `action_name` of triggered page.""" chart_interactions_on_page = _get_matching_actions_by_function( page=_get_triggered_page(action_id=action_id), action_function=action_function, ) - inputs = {} + + inputs = [] for action in chart_interactions_on_page: triggered_model = _get_triggered_model(action_id=ModelID(str(action.id))) # TODO: Consider do we want to move the following logic into Model implementations. - if triggered_model.type in ["table", "react"]: - inputs.update( + if isinstance(triggered_model, Table): + inputs.append( { - action.id: { - "active_cell": State( - component_id=triggered_model._datatable_id, component_property="active_cell" - ), - "derived_viewport_data": State( - component_id=triggered_model._datatable_id, component_property="derived_viewport_data" - ), - } + "active_cell": State( + component_id=triggered_model._underlying_table_id, component_property="active_cell" + ), + "derived_viewport_data": State( + component_id=triggered_model._underlying_table_id, + component_property="derived_viewport_data", + ), } ) else: - inputs.update( + inputs.append( { - action.id: { - "clickData": State(component_id=triggered_model.id, component_property="clickData"), - } + "clickData": State(component_id=triggered_model.id, component_property="clickData"), } ) return inputs -def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: +def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, Any]: """Creates mapping of pre-defined action names and a list of States.""" action_function = model_manager[action_id].function._function # type: ignore[attr-defined] @@ -151,10 +149,11 @@ def _get_action_callback_inputs(action_id: ModelID) -> Dict[str, List[State]]: if "parameters" in include_inputs else [] ), + # TODO: Probably need to adjust other inputs to follow the same structure List[Dict[str, State]] "filter_interaction": ( _get_inputs_of_chart_interactions(action_id=action_id, action_function=filter_interaction.__wrapped__) if "filter_interaction" in include_inputs - else {} + else [] ), "theme_selector": (State("theme_selector", "on") if "theme_selector" in include_inputs else []), } diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index 340058b10..7f1127343 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -30,12 +30,13 @@ class Table(VizroBaseModel): figure: CapturedCallable = Field(..., import_path=vt, description="Table to be visualized on dashboard") actions: List[Action] = [] - _datatable_id: str = PrivateAttr() + _underlying_table_id: str = PrivateAttr() # Component properties for actions and interactions _output_property: str = PrivateAttr("children") # validator + # TODO: We need to take care of this argument once we support AgGrid and others. set_actions = _action_validator_factory("active_cell") # type: ignore[pydantic-field] _validate_callable = validator("figure", allow_reuse=True, always=True)(_process_callable_data_frame) @@ -52,7 +53,7 @@ def __getitem__(self, arg_name: str): return self.type return self.figure[arg_name] - def _build_datatable_object(self): + def _build_underlying_table_object(self): data = data_manager._get_component_data(self.id) # type: ignore kwargs = self.figure._arguments.copy() kwargs.pop("data_frame", None) @@ -61,19 +62,28 @@ def _build_datatable_object(self): @_log_call def pre_build(self): if self.actions: - # The Datatable object is pre-built, so we can fetch its ID. - datatable_object = self._build_datatable_object() + # The underlying table object is pre-built, so we can fetch its ID. + underlying_table_object = self._build_underlying_table_object() - # Datatable object has to have "id" defined if it triggers actions chain. - if not hasattr(datatable_object, "id"): + # Underlying table object has to have "id" defined if it triggers actions chain. + if not hasattr(underlying_table_object, "id"): raise ValueError( - "'DataTable' object has no attribute 'id'. To perform specified actions, a valid 'id' to the" - " 'Datatable' object has to be provided." + "Underlying table object has no attribute 'id'. To perform specified actions, a valid 'id' to the" + " Underlying table object has to be provided." ) - self._datatable_id = datatable_object.id + self._underlying_table_id = underlying_table_object.id @_log_call def build(self): - # return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id) - return html.Div(self._build_datatable_object(), id=self.id) + # TODO: We also need to take case what empty object we need to create here once we support AgGrid and others. + dash_datatable_object = ( + dash_table.DataTable(id=self._underlying_table_id, data=pd.DataFrame().to_dict("records"), columns=[]) + if self.actions + else dash_table.DataTable(data=pd.DataFrame().to_dict("records"), columns=[]) + ) + + return html.Div( + dash_datatable_object, + id=self.id, + ) diff --git a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py index 9c7a56e6d..a1f2bd395 100644 --- a/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py +++ b/vizro-core/tests/unit/vizro/actions/_callback_mapping/test_get_action_callback_mapping.py @@ -98,7 +98,9 @@ def action_callback_inputs_expected(): dash.State("parameter_y_selector", "value"), ], "filter_interaction": [ - dash.State("scatter_chart", "clickData"), + { + "clickData": dash.State("scatter_chart", "clickData"), + } ], "theme_selector": dash.State("theme_selector", "on"), } @@ -121,7 +123,9 @@ def export_data_inputs_expected(): ], "parameters": [], "filter_interaction": [ - dash.State("scatter_chart", "clickData"), + { + "clickData": dash.State("scatter_chart", "clickData"), + } ], "theme_selector": [], } diff --git a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py index 1fa8a5699..5411e1abe 100644 --- a/vizro-core/tests/unit/vizro/actions/test_export_data_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_export_data_action.py @@ -60,19 +60,21 @@ def callback_context_export_data(request): if pop_filter else [], "filter_interaction": [ - CallbackTriggerDict( - id="box_chart", - property="clickData", - value={ - "points": [ - { - "customdata": [continent_filter_interaction], - } - ] - }, - str_id="box_chart", - triggered=False, - ) + { + "clickData": CallbackTriggerDict( + id="box_chart", + property="clickData", + value={ + "points": [ + { + "customdata": [continent_filter_interaction], + } + ] + }, + str_id="box_chart", + triggered=False, + ) + } ] if continent_filter_interaction else [], diff --git a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py index 337daf3a5..ca999dfe4 100644 --- a/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py +++ b/vizro-core/tests/unit/vizro/actions/test_filter_interaction_action.py @@ -18,19 +18,21 @@ def callback_context_click_continent(request): "args_grouping": { "filters": [], "filter_interaction": [ - CallbackTriggerDict( - id="box_chart", - property="clickData", - value={ - "points": [ - { - "customdata": [continent], - } - ] - }, - str_id="box_chart", - triggered=False, - ) + { + "clickData": CallbackTriggerDict( + id="box_chart", + property="clickData", + value={ + "points": [ + { + "customdata": [continent], + } + ] + }, + str_id="box_chart", + triggered=False, + ) + } ], "parameters": [], "theme_selector": CallbackTriggerDict( From ab5d73868dc6ed696964c50a07f6dc2acb1c2f96 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 14:55:44 +0200 Subject: [PATCH 069/121] Table styling and default setting --- .../src/vizro/models/_components/table.py | 13 +++++++--- vizro-core/src/vizro/static/css/table.css | 24 ++++++++++++----- vizro-core/src/vizro/tables/dash_table.py | 26 ++++++++++++++++++- .../unit/vizro/tables/test_dash_table.py | 16 ++++++++++++ 4 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 vizro-core/tests/unit/vizro/tables/test_dash_table.py diff --git a/vizro-core/src/vizro/models/_components/table.py b/vizro-core/src/vizro/models/_components/table.py index fdaa06aab..157a32914 100644 --- a/vizro-core/src/vizro/models/_components/table.py +++ b/vizro-core/src/vizro/models/_components/table.py @@ -1,7 +1,6 @@ import logging -from typing import List, Literal +from typing import List, Literal, Optional -import pandas as pd from dash import dash_table, html from pydantic import Field, PrivateAttr, validator @@ -23,11 +22,13 @@ class Table(VizroBaseModel): type (Literal["table"]): Defaults to `"table"`. figure (CapturedCallable): Table like object to be displayed. Current choices include: [`dash_table.DataTable`](https://dash.plotly.com/datatable). + title (str): Title of the table. Defaults to `None`. actions (List[Action]): See [`Action`][vizro.models.Action]. Defaults to `[]`. """ type: Literal["table"] = "table" figure: CapturedCallable = Field(..., import_path=vt, description="Table to be visualized on dashboard") + title: Optional[str] = Field(None, description="Title of the table") actions: List[Action] = [] # Component properties for actions and interactions @@ -52,4 +53,10 @@ def __getitem__(self, arg_name: str): @_log_call def build(self): - return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id=self.id) + return html.Div( + [ + html.H3(self.title, className="table-title") if self.title else None, + html.Div(dash_table.DataTable(), id=self.id), + ], + className="table-container", + ) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 06092f80c..9f157e943 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -26,16 +26,28 @@ div.right_side .dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner - td, -.dash-table-container .dash-spreadsheet-container .dash-spreadsheet-inner th { - padding: 0px 4px; + td + .dash-cell-value.unfocused { + color: var(--text-primary); + font-size: 14px; } -.table-title { +div.right_side + .dash-table-container + .dash-spreadsheet-container + .dash-spreadsheet-inner + .column-header-name { + color: var( + --text-primary + ); /* Should be text-secondary when hover color is implemented */ + font-size: 14px; +} + +div.right_side .table-title { padding-bottom: 14px; } -.table-container { +div.right_side .table-container { padding: 12px; padding-left: 18px; -} \ No newline at end of file +} diff --git a/vizro-core/src/vizro/tables/dash_table.py b/vizro-core/src/vizro/tables/dash_table.py index fc2fca23d..31b197f4b 100644 --- a/vizro-core/src/vizro/tables/dash_table.py +++ b/vizro-core/src/vizro/tables/dash_table.py @@ -1,12 +1,36 @@ """Module containing the standard implementation of `dash_table.DataTable`.""" +from collections import defaultdict +from collections.abc import Mapping +from typing import Any + import pandas as pd from dash import dash_table from vizro.models.types import capture +def _set_defaults_nested(supplied: Mapping[str,Any], defaults: Mapping[str,Any]) -> dict[str,Any]: + supplied = defaultdict(dict, supplied) + for default_key, default_value in defaults.items(): + if isinstance(default_value, Mapping): + supplied[default_key] = _set_defaults_nested(supplied[default_key], default_value) + else: + supplied.setdefault(default_key, default_value) + return dict(supplied) + + @capture("table") def dash_data_table(data_frame: pd.DataFrame, **kwargs): """Standard `dash_table.DataTable`.""" - kwargs.setdefault("columns", [{"name": i, "id": i} for i in data_frame.columns]) + defaults = { + "columns": [{"name": i, "id": i} for i in data_frame.columns], + "style_as_list_view": True, + "style_data": {"border_bottom": "1px solid var(--border-subtle-alpha-01)", "height": "40px"}, + "style_header": { + "border_bottom": "1px solid var(--state-overlays-selected-hover)", + "border_top": "1px solid var(--main-container-bg-color)", + "height": "32px", + }, + } + kwargs = _set_defaults_nested(kwargs, defaults) return dash_table.DataTable(data=data_frame.to_dict("records"), **kwargs) diff --git a/vizro-core/tests/unit/vizro/tables/test_dash_table.py b/vizro-core/tests/unit/vizro/tables/test_dash_table.py new file mode 100644 index 000000000..f95d38921 --- /dev/null +++ b/vizro-core/tests/unit/vizro/tables/test_dash_table.py @@ -0,0 +1,16 @@ +from vizro.tables.dash_table import _set_defaults_nested +import pytest + +@pytest.fixture +def default_dictionary(): + return {"a": {"b": {"c": 1, "d": 2}},"e": 3} + +@pytest.mark.parametrize("input, expected_output", [ + ({},{"a": {"b": {"c": 1, "d": 2}},"e": 3}), # nothing supplied + ({'e': 10},{"a": {"b": {"c": 1, "d": 2}},"e": 10}), # flat main key + ({"a": {"b": {"c": 11, "d": 12}}},{"a": {"b": {"c": 11, "d": 12}},"e": 3}), # updated multiple nested keys + ({"a": {"b": {"c": 1, "d": {"f":42}}}},{"a": {"b": {"c": 1, "d": {"f":42}}},"e": 3}), # add new dict + ({"a": {"b": {"c": 5}}},{'a': {'b': {'c': 5, 'd': 2}},"e": 3}) #arbitrary nesting + ]) +def test_set_defaults_nested(default_dictionary, input, expected_output): + assert _set_defaults_nested(input, default_dictionary) == expected_output \ No newline at end of file From ff3f9ff6bc2370368daf7363860116bb63590b9c Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 15:11:35 +0200 Subject: [PATCH 070/121] Update docs and remove comments --- vizro-core/docs/pages/user_guides/table.md | 8 +++++++ .../src/vizro/managers/_model_manager.py | 2 -- .../models/_components/_components_utils.py | 2 -- vizro-core/src/vizro/models/types.py | 22 ++++++++++++------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/vizro-core/docs/pages/user_guides/table.md b/vizro-core/docs/pages/user_guides/table.md index 4dd6420af..0026d3bc4 100755 --- a/vizro-core/docs/pages/user_guides/table.md +++ b/vizro-core/docs/pages/user_guides/table.md @@ -70,3 +70,11 @@ All other [parameters of the Dash DataTable](https://dash.plotly.com/datatable/r [![Table]][Table] [Table]: ../../assets/user_guides/table/table.png + +#### Styling/Modifying the Dash DataTable + +Lorem ipsum + +#### Custom Table + +Lorem Ispum diff --git a/vizro-core/src/vizro/managers/_model_manager.py b/vizro-core/src/vizro/managers/_model_manager.py index 8dd1ac2a7..cc1b9984d 100644 --- a/vizro-core/src/vizro/managers/_model_manager.py +++ b/vizro-core/src/vizro/managers/_model_manager.py @@ -12,9 +12,7 @@ rd = random.Random(0) -# Type used for model_manager IDs ModelID = NewType("ModelID", str) - Model = TypeVar("Model", bound="VizroBaseModel") diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 75c559ab1..8723d2664 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -4,8 +4,6 @@ logger = logging.getLogger(__name__) - -# Validator for reuse in other models to validate pages def _process_callable_data_frame(captured_callable, values): data_frame = captured_callable["data_frame"] diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index f15522c12..5e204e66d 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -30,10 +30,11 @@ class CapturedCallable: `functools.partial`. Ready-to-use `CapturedCallable` instances are provided by Vizro. In this case refer to the user guide on - [Charts/Graph][graph] or [Actions][pre-defined-actions] to see available choices. + [Charts/Graph][graph], [Table][table] or [Actions][pre-defined-actions] to see available choices. (Advanced) In case you would like to create your own `CapturedCallable`, please refer to the user guide on - [custom charts](../user_guides/custom_charts.md) or [custom actions][custom-actions]. + [custom charts](../user_guides/custom_charts.md), [custom tables][custom-table] or + [custom actions][custom-actions]. """ def __init__(self, function, /, *args, **kwargs): @@ -152,12 +153,16 @@ class capture: """Captures a function call to create a [`CapturedCallable`][vizro.models.types.CapturedCallable]. This is used to add the functionality required to make graphs and actions work in a dashboard. - Typically it should be used as a function decorator. There are two possible modes: `"graph"` and `"action"`. + Typically it should be used as a function decorator. There are three possible modes: `"graph"`, `"table"` and + `"action"`. Examples: >>> @capture("graph") >>> def plot_function(): >>> ... + >>> @capture("table") + >>> def plot_function(): + >>> ... >>> @capture("action") >>> def action_function(): >>> ... @@ -167,14 +172,15 @@ class capture: """ def __init__(self, mode: Literal["graph", "action", "table"]): - """Instantiates the decorator to capture a function call. Valid modes are "graph" and "action".""" + """Instantiates the decorator to capture a function call. Valid modes are "graph", "table" and "action".""" self._mode = mode def __call__(self, func, /): """Produces a CapturedCallable or _DashboardReadyFigure. - mode="action" gives a CapturedCallable, while mode="graph" gives a _DashboardReadyFigure that contains a - CapturedCallable. In both cases, the CapturedCallable is based on func and the provided *args and **kwargs. + mode="action" and mode="table" give a CapturedCallable, while mode="graph" gives a _DashboardReadyFigure that + contains a CapturedCallable. In both cases, the CapturedCallable is based on func and the provided + *args and **kwargs. """ if self._mode == "graph": # The more difficult case, where we need to still have a valid plotly figure that renders in a notebook. @@ -219,7 +225,6 @@ def wrapped(*args, **kwargs): return wrapped elif self._mode == "table": - @functools.wraps(func) def wrapped(*args, **kwargs): if "data_frame" not in inspect.signature(func).parameters: @@ -294,7 +299,8 @@ class OptionsDictType(TypedDict): ), ] """Discriminated union. Type of component that makes up part of the layout on the page: -[`Button`][vizro.models.Button], [`Card`][vizro.models.Card] or [`Graph`][vizro.models.Graph].""" +[`Button`][vizro.models.Button], [`Card`][vizro.models.Card], [`Table`][vizro.models.Table] or +[`Graph`][vizro.models.Graph].""" # Types used for pages values in the Navigation model. NavigationPagesType = Annotated[ From e73f3c6ad496b4f899a79e0c4ce22244b7723448 Mon Sep 17 00:00:00 2001 From: petar-qb Date: Wed, 25 Oct 2023 15:24:49 +0200 Subject: [PATCH 071/121] Minor app change --- vizro-core/examples/default/app.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/vizro-core/examples/default/app.py b/vizro-core/examples/default/app.py index ea38941c1..8035f5197 100644 --- a/vizro-core/examples/default/app.py +++ b/vizro-core/examples/default/app.py @@ -10,10 +10,6 @@ import vizro.plotly.express as px from vizro import Vizro from vizro.actions import export_data, filter_interaction -<<<<<<< HEAD -======= -from vizro.charts.tables import dash_data_table ->>>>>>> 4493fd48385c4a5567d76241da3eaca7d471612b from vizro.managers import data_manager from vizro.models.types import capture from vizro.tables import dash_data_table From 7632ea72f86f8ac8793aa1aeaea2f15f3e90af94 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 15:33:38 +0200 Subject: [PATCH 072/121] adjusting tests to keep up with code change --- vizro-core/tests/unit/vizro/conftest.py | 5 +++++ .../unit/vizro/models/_components/test_table.py | 15 ++++++++------- vizro-core/tests/unit/vizro/models/test_page.py | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/vizro-core/tests/unit/vizro/conftest.py b/vizro-core/tests/unit/vizro/conftest.py index be2c41e6f..1048465f0 100644 --- a/vizro-core/tests/unit/vizro/conftest.py +++ b/vizro-core/tests/unit/vizro/conftest.py @@ -5,6 +5,7 @@ import vizro.models as vm import vizro.plotly.express as px +from vizro.tables import dash_data_table @pytest.fixture @@ -24,6 +25,10 @@ def standard_px_chart(gapminder): size_max=60, ) +@pytest.fixture +def standard_dash_table(gapminder): + return dash_data_table(data_frame=gapminder) + @pytest.fixture def standard_go_chart(gapminder): diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index ac0944ec8..e1c8d8ff1 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -14,11 +14,6 @@ from vizro.tables import dash_data_table -@pytest.fixture -def standard_dash_table(): - return dash_data_table(data_frame=px.data.gapminder()) - - @pytest.fixture def dash_table_with_arguments(): return dash_data_table(data_frame=px.data.gapminder(), style_header={"border": "1px solid green"}) @@ -31,7 +26,13 @@ def dash_table_with_str_dataframe(): @pytest.fixture def expected_table(): - return html.Div(dash_table.DataTable(pd.DataFrame().to_dict("records"), []), id="text_table") + return html.Div( + [ + None, + html.Div(dash_table.DataTable(), id="text_table"), + ], + className="table-container", + ) class TestDunderMethodsTable: @@ -109,7 +110,7 @@ def test_process_figure_data_frame_df(self, standard_dash_table, gapminder): class TestBuildTable: - def test_graph_build(self, standard_dash_table, expected_table): + def test_table_build(self, standard_dash_table, expected_table): table = vm.Table( id="text_table", figure=standard_dash_table, diff --git a/vizro-core/tests/unit/vizro/models/test_page.py b/vizro-core/tests/unit/vizro/models/test_page.py index 416ba458c..18d18ed5d 100644 --- a/vizro-core/tests/unit/vizro/models/test_page.py +++ b/vizro-core/tests/unit/vizro/models/test_page.py @@ -90,10 +90,10 @@ def test_set_layout_invalid(self): with pytest.raises(ValidationError, match="Number of page and grid components need to be the same."): vm.Page(title="Page 4", components=[vm.Button()], layout=vm.Layout(grid=[[0, 1]])) - def test_valid_component_types(self, standard_px_chart): + def test_valid_component_types(self, standard_px_chart,standard_dash_table): vm.Page( title="Page Title", - components=[vm.Graph(figure=standard_px_chart), vm.Card(text="""# Header 1"""), vm.Button()], + components=[vm.Graph(figure=standard_px_chart), vm.Card(text="""# Header 1"""), vm.Button(),vm.Table(figure=standard_dash_table)], ) @pytest.mark.parametrize( From 369d63f697451725e73c892065b1720cb9655ca5 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 15:52:07 +0200 Subject: [PATCH 073/121] Lint --- .../models/_components/_components_utils.py | 1 + vizro-core/src/vizro/models/types.py | 1 + vizro-core/src/vizro/tables/dash_table.py | 2 +- vizro-core/tests/unit/vizro/conftest.py | 1 + .../vizro/models/_components/test_table.py | 13 +++++----- .../tests/unit/vizro/models/test_page.py | 9 +++++-- .../unit/vizro/tables/test_dash_table.py | 26 ++++++++++++------- 7 files changed, 33 insertions(+), 20 deletions(-) diff --git a/vizro-core/src/vizro/models/_components/_components_utils.py b/vizro-core/src/vizro/models/_components/_components_utils.py index 8723d2664..6f6e7c275 100644 --- a/vizro-core/src/vizro/models/_components/_components_utils.py +++ b/vizro-core/src/vizro/models/_components/_components_utils.py @@ -4,6 +4,7 @@ logger = logging.getLogger(__name__) + def _process_callable_data_frame(captured_callable, values): data_frame = captured_callable["data_frame"] diff --git a/vizro-core/src/vizro/models/types.py b/vizro-core/src/vizro/models/types.py index 5e204e66d..06272bcd3 100644 --- a/vizro-core/src/vizro/models/types.py +++ b/vizro-core/src/vizro/models/types.py @@ -225,6 +225,7 @@ def wrapped(*args, **kwargs): return wrapped elif self._mode == "table": + @functools.wraps(func) def wrapped(*args, **kwargs): if "data_frame" not in inspect.signature(func).parameters: diff --git a/vizro-core/src/vizro/tables/dash_table.py b/vizro-core/src/vizro/tables/dash_table.py index 31b197f4b..0ee68440c 100644 --- a/vizro-core/src/vizro/tables/dash_table.py +++ b/vizro-core/src/vizro/tables/dash_table.py @@ -9,7 +9,7 @@ from vizro.models.types import capture -def _set_defaults_nested(supplied: Mapping[str,Any], defaults: Mapping[str,Any]) -> dict[str,Any]: +def _set_defaults_nested(supplied: Mapping[str, Any], defaults: Mapping[str, Any]) -> dict[str, Any]: supplied = defaultdict(dict, supplied) for default_key, default_value in defaults.items(): if isinstance(default_value, Mapping): diff --git a/vizro-core/tests/unit/vizro/conftest.py b/vizro-core/tests/unit/vizro/conftest.py index 1048465f0..ba3cff2bd 100644 --- a/vizro-core/tests/unit/vizro/conftest.py +++ b/vizro-core/tests/unit/vizro/conftest.py @@ -25,6 +25,7 @@ def standard_px_chart(gapminder): size_max=60, ) + @pytest.fixture def standard_dash_table(gapminder): return dash_data_table(data_frame=gapminder) diff --git a/vizro-core/tests/unit/vizro/models/_components/test_table.py b/vizro-core/tests/unit/vizro/models/_components/test_table.py index e1c8d8ff1..db6aa1612 100644 --- a/vizro-core/tests/unit/vizro/models/_components/test_table.py +++ b/vizro-core/tests/unit/vizro/models/_components/test_table.py @@ -1,7 +1,6 @@ """Unit tests for vizro.models.Table.""" import json -import pandas as pd import plotly import pytest from dash import dash_table, html @@ -27,12 +26,12 @@ def dash_table_with_str_dataframe(): @pytest.fixture def expected_table(): return html.Div( - [ - None, - html.Div(dash_table.DataTable(), id="text_table"), - ], - className="table-container", - ) + [ + None, + html.Div(dash_table.DataTable(), id="text_table"), + ], + className="table-container", + ) class TestDunderMethodsTable: diff --git a/vizro-core/tests/unit/vizro/models/test_page.py b/vizro-core/tests/unit/vizro/models/test_page.py index 18d18ed5d..71313fb58 100644 --- a/vizro-core/tests/unit/vizro/models/test_page.py +++ b/vizro-core/tests/unit/vizro/models/test_page.py @@ -90,10 +90,15 @@ def test_set_layout_invalid(self): with pytest.raises(ValidationError, match="Number of page and grid components need to be the same."): vm.Page(title="Page 4", components=[vm.Button()], layout=vm.Layout(grid=[[0, 1]])) - def test_valid_component_types(self, standard_px_chart,standard_dash_table): + def test_valid_component_types(self, standard_px_chart, standard_dash_table): vm.Page( title="Page Title", - components=[vm.Graph(figure=standard_px_chart), vm.Card(text="""# Header 1"""), vm.Button(),vm.Table(figure=standard_dash_table)], + components=[ + vm.Graph(figure=standard_px_chart), + vm.Card(text="""# Header 1"""), + vm.Button(), + vm.Table(figure=standard_dash_table), + ], ) @pytest.mark.parametrize( diff --git a/vizro-core/tests/unit/vizro/tables/test_dash_table.py b/vizro-core/tests/unit/vizro/tables/test_dash_table.py index f95d38921..776c387a5 100644 --- a/vizro-core/tests/unit/vizro/tables/test_dash_table.py +++ b/vizro-core/tests/unit/vizro/tables/test_dash_table.py @@ -1,16 +1,22 @@ -from vizro.tables.dash_table import _set_defaults_nested import pytest +from vizro.tables.dash_table import _set_defaults_nested + + @pytest.fixture def default_dictionary(): - return {"a": {"b": {"c": 1, "d": 2}},"e": 3} + return {"a": {"b": {"c": 1, "d": 2}}, "e": 3} + -@pytest.mark.parametrize("input, expected_output", [ - ({},{"a": {"b": {"c": 1, "d": 2}},"e": 3}), # nothing supplied - ({'e': 10},{"a": {"b": {"c": 1, "d": 2}},"e": 10}), # flat main key - ({"a": {"b": {"c": 11, "d": 12}}},{"a": {"b": {"c": 11, "d": 12}},"e": 3}), # updated multiple nested keys - ({"a": {"b": {"c": 1, "d": {"f":42}}}},{"a": {"b": {"c": 1, "d": {"f":42}}},"e": 3}), # add new dict - ({"a": {"b": {"c": 5}}},{'a': {'b': {'c': 5, 'd': 2}},"e": 3}) #arbitrary nesting - ]) +@pytest.mark.parametrize( + "input, expected_output", + [ + ({}, {"a": {"b": {"c": 1, "d": 2}}, "e": 3}), # nothing supplied + ({"e": 10}, {"a": {"b": {"c": 1, "d": 2}}, "e": 10}), # flat main key + ({"a": {"b": {"c": 11, "d": 12}}}, {"a": {"b": {"c": 11, "d": 12}}, "e": 3}), # updated multiple nested keys + ({"a": {"b": {"c": 1, "d": {"f": 42}}}}, {"a": {"b": {"c": 1, "d": {"f": 42}}}, "e": 3}), # add new dict + ({"a": {"b": {"c": 5}}}, {"a": {"b": {"c": 5, "d": 2}}, "e": 3}), # arbitrary nesting + ], +) def test_set_defaults_nested(default_dictionary, input, expected_output): - assert _set_defaults_nested(input, default_dictionary) == expected_output \ No newline at end of file + assert _set_defaults_nested(input, default_dictionary) == expected_output From 6ce1015fb2b03e62361751da3f099fddd00739c4 Mon Sep 17 00:00:00 2001 From: huong-li-nguyen Date: Wed, 25 Oct 2023 16:02:48 +0200 Subject: [PATCH 074/121] Fix overflow of table --- vizro-core/src/vizro/static/css/scroll_bar.css | 4 ++++ vizro-core/src/vizro/static/css/table.css | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/vizro-core/src/vizro/static/css/scroll_bar.css b/vizro-core/src/vizro/static/css/scroll_bar.css index 6af55c15a..2f1122509 100644 --- a/vizro-core/src/vizro/static/css/scroll_bar.css +++ b/vizro-core/src/vizro/static/css/scroll_bar.css @@ -27,3 +27,7 @@ .component_container::-webkit-scrollbar-thumb { border-color: var(--main-container-bg-color); } + +.table-container::-webkit-scrollbar-thumb { + border-color: var(--surfaces-bg-02); +} diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 9f157e943..74c20abff 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -43,11 +43,14 @@ div.right_side font-size: 14px; } -div.right_side .table-title { +.table-title { padding-bottom: 14px; } -div.right_side .table-container { +.table-container { + height: 100%; + overflow: auto; padding: 12px; padding-left: 18px; + width: 100%; } From 5f4c46b2b267ae3c6ec1ea985913fd4e6cb42f61 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 17:53:53 +0200 Subject: [PATCH 075/121] PR comments --- vizro-core/src/vizro/static/css/table.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vizro-core/src/vizro/static/css/table.css b/vizro-core/src/vizro/static/css/table.css index 74c20abff..08efb1995 100644 --- a/vizro-core/src/vizro/static/css/table.css +++ b/vizro-core/src/vizro/static/css/table.css @@ -49,8 +49,8 @@ div.right_side .table-container { height: 100%; + width: 100%; overflow: auto; padding: 12px; - padding-left: 18px; - width: 100%; + padding-left: 20px; } From b75d2bfb18900bc49f629e6e5d6c5a7a4a85a9d2 Mon Sep 17 00:00:00 2001 From: Maximilian Schulz Date: Wed, 25 Oct 2023 19:38:17 +0200 Subject: [PATCH 076/121] Improve table docs --- .../assets/user_guides/table/styled_table.png | Bin 0 -> 532273 bytes .../docs/assets/user_guides/table/table.png | Bin 171789 -> 495221 bytes vizro-core/docs/pages/user_guides/table.md | 153 +++++- vizro-core/examples/from_yaml/dashboard.yaml | 507 ++---------------- 4 files changed, 195 insertions(+), 465 deletions(-) create mode 100644 vizro-core/docs/assets/user_guides/table/styled_table.png diff --git a/vizro-core/docs/assets/user_guides/table/styled_table.png b/vizro-core/docs/assets/user_guides/table/styled_table.png new file mode 100644 index 0000000000000000000000000000000000000000..773aaa4b36cf8846c62f1186d1eb93563a16a759 GIT binary patch literal 532273 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