From 3aa98dc15f58bce8bb4cd12c2db3dfca2b727772 Mon Sep 17 00:00:00 2001 From: Shivkanth Bagavathy Date: Wed, 18 Sep 2024 13:54:17 -0400 Subject: [PATCH 1/5] visualizer interface --- python/src/robyn/visualization/visualizer.py | 105 +++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 python/src/robyn/visualization/visualizer.py diff --git a/python/src/robyn/visualization/visualizer.py b/python/src/robyn/visualization/visualizer.py new file mode 100644 index 000000000..67d49e46d --- /dev/null +++ b/python/src/robyn/visualization/visualizer.py @@ -0,0 +1,105 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +import seaborn as sns + +class RobynVisualizer: + def __init__(self): + pass + + def plot_adstock(self, plot: bool = False) -> plt.Figure: + """ + Create example plots for adstock hyperparameters. + + Args: + plot (bool): Whether to display the plot. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_saturation(self, plot: bool = False) -> plt.Figure: + """ + Create example plots for saturation hyperparameters. + + Args: + plot (bool): Whether to display the plot. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_moo_distribution(self, output_models: Dict[str, Any]) -> plt.Figure: + """ + Plot MOO (multi-objective optimization) distribution. + + Args: + output_models (Dict[str, Any]): The output models data. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_moo_cloud(self, output_models: Dict[str, Any]) -> plt.Figure: + """ + Plot MOO (multi-objective optimization) cloud. + + Args: + output_models (Dict[str, Any]): The output models data. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_ts_validation(self, output_models: Dict[str, Any]) -> plt.Figure: + """ + Plot time-series validation. + + Args: + output_models (Dict[str, Any]): The output models data. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_onepager(self, input_collect: Dict[str, Any], output_collect: Dict[str, Any], select_model: str) -> Dict[str, plt.Figure]: + """ + Generate one-pager plots for a selected model. + + Args: + input_collect (Dict[str, Any]): The input collection data. + output_collect (Dict[str, Any]): The output collection data. + select_model (str): The selected model identifier. + + Returns: + Dict[str, plt.Figure]: A dictionary of generated figures. + """ + pass + + def plot_allocator(self, allocator_collect: Dict[str, Any]) -> plt.Figure: + """ + Plot allocator's output. + + Args: + allocator_collect (Dict[str, Any]): The allocator collection data. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_response(self, response_data: Dict[str, Any]) -> plt.Figure: + """ + Plot response curves. + + Args: + response_data (Dict[str, Any]): The response data. + + Returns: + plt.Figure: The generated figure. + """ + pass From b3baeaba1d414dc6c4b2bf7d6e1a1e66f381a5ba Mon Sep 17 00:00:00 2001 From: Shivkanth Bagavathy Date: Fri, 4 Oct 2024 15:40:57 -0700 Subject: [PATCH 2/5] visualizer classes --- .../visualization/allocator_visualizer.py | 17 ++++++ .../robyn/visualization/base_visualizer.py | 9 ++++ .../robyn/visualization/input_visualizer.py | 41 +++++++++++++++ .../robyn/visualization/model_visualizer.py | 49 +++++++++++++++++ .../visualization/response_visualizer.py | 26 ++++++++++ .../robyn/visualization/robyn_visualizer.py | 52 +++++++++++++++++++ 6 files changed, 194 insertions(+) create mode 100644 python/src/robyn/visualization/allocator_visualizer.py create mode 100644 python/src/robyn/visualization/base_visualizer.py create mode 100644 python/src/robyn/visualization/input_visualizer.py create mode 100644 python/src/robyn/visualization/model_visualizer.py create mode 100644 python/src/robyn/visualization/response_visualizer.py create mode 100644 python/src/robyn/visualization/robyn_visualizer.py diff --git a/python/src/robyn/visualization/allocator_visualizer.py b/python/src/robyn/visualization/allocator_visualizer.py new file mode 100644 index 000000000..f27490ee8 --- /dev/null +++ b/python/src/robyn/visualization/allocator_visualizer.py @@ -0,0 +1,17 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +from .base_visualizer import BaseVisualizer + +class AllocatorVisualizer(BaseVisualizer): + def __init__(self, allocator_data: Dict[str, Any]): + super().__init__() + self.allocator_data = allocator_data + + def plot_allocator(self) -> plt.Figure: + """ + Plot allocator's output. + + Returns: + plt.Figure: The generated figure. + """ + pass diff --git a/python/src/robyn/visualization/base_visualizer.py b/python/src/robyn/visualization/base_visualizer.py new file mode 100644 index 000000000..9f76639f4 --- /dev/null +++ b/python/src/robyn/visualization/base_visualizer.py @@ -0,0 +1,9 @@ +import matplotlib.pyplot as plt + +class BaseVisualizer: + def __init__(self): + pass + + def _setup_plot(self): + # Common plot setup logic + pass \ No newline at end of file diff --git a/python/src/robyn/visualization/input_visualizer.py b/python/src/robyn/visualization/input_visualizer.py new file mode 100644 index 000000000..e2a8387d5 --- /dev/null +++ b/python/src/robyn/visualization/input_visualizer.py @@ -0,0 +1,41 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +from .base_visualizer import BaseVisualizer + +class InputVisualizer(BaseVisualizer): + def __init__(self, input_data: Dict[str, Any]): + super().__init__() + self.input_data = input_data + + def plot_adstock(self, plot: bool = False) -> plt.Figure: + """ + Create example plots for adstock hyperparameters. + + Args: + plot (bool): Whether to display the plot. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_saturation(self, plot: bool = False) -> plt.Figure: + """ + Create example plots for saturation hyperparameters. + + Args: + plot (bool): Whether to display the plot. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_spend_exposure_fit(self) -> Dict[str, plt.Figure]: + """ + Check spend exposure fit if available. + + Returns: + Dict[str, plt.Figure]: A dictionary of generated figures. + """ + pass \ No newline at end of file diff --git a/python/src/robyn/visualization/model_visualizer.py b/python/src/robyn/visualization/model_visualizer.py new file mode 100644 index 000000000..785b9a9ec --- /dev/null +++ b/python/src/robyn/visualization/model_visualizer.py @@ -0,0 +1,49 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +from .base_visualizer import BaseVisualizer + +class ModelVisualizer(BaseVisualizer): + def __init__(self, model_data: Dict[str, Any]): + super().__init__() + self.model_data = model_data + + def plot_moo_distribution(self) -> plt.Figure: + """ + Plot MOO (multi-objective optimization) distribution. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_moo_cloud(self) -> plt.Figure: + """ + Plot MOO (multi-objective optimization) cloud. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_ts_validation(self) -> plt.Figure: + """ + Plot time-series validation. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_onepager(self, input_collect: Dict[str, Any], output_collect: Dict[str, Any], select_model: str) -> Dict[str, plt.Figure]: + """ + Generate one-pager plots for a selected model. + + Args: + input_collect (Dict[str, Any]): The input collection data. + output_collect (Dict[str, Any]): The output collection data. + select_model (str): The selected model identifier. + + Returns: + Dict[str, plt.Figure]: A dictionary of generated figures. + """ + pass diff --git a/python/src/robyn/visualization/response_visualizer.py b/python/src/robyn/visualization/response_visualizer.py new file mode 100644 index 000000000..e91875b3b --- /dev/null +++ b/python/src/robyn/visualization/response_visualizer.py @@ -0,0 +1,26 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +from .base_visualizer import BaseVisualizer + +class ResponseVisualizer(BaseVisualizer): + def __init__(self, response_data: Dict[str, Any]): + super().__init__() + self.response_data = response_data + + def plot_response(self) -> plt.Figure: + """ + Plot response curves. + + Returns: + plt.Figure: The generated figure. + """ + pass + + def plot_marginal_response(self) -> plt.Figure: + """ + Plot marginal response curves. + + Returns: + plt.Figure: The generated figure. + """ + pass \ No newline at end of file diff --git a/python/src/robyn/visualization/robyn_visualizer.py b/python/src/robyn/visualization/robyn_visualizer.py new file mode 100644 index 000000000..2d34545fa --- /dev/null +++ b/python/src/robyn/visualization/robyn_visualizer.py @@ -0,0 +1,52 @@ +from typing import Dict, Any +import matplotlib.pyplot as plt +from .input_visualizer import InputVisualizer +from .model_visualizer import ModelVisualizer +from .allocator_visualizer import AllocatorVisualizer +from .response_visualizer import ResponseVisualizer + +class RobynVisualizer: + def __init__(self): + self.input_visualizer = None + self.model_visualizer = None + self.allocator_visualizer = None + self.response_visualizer = None + + def set_input_data(self, input_data: Dict[str, Any]): + self.input_visualizer = InputVisualizer(input_data) + + def set_model_data(self, model_data: Dict[str, Any]): + self.model_visualizer = ModelVisualizer(model_data) + + def set_allocator_data(self, allocator_data: Dict[str, Any]): + self.allocator_visualizer = AllocatorVisualizer(allocator_data) + + def set_response_data(self, response_data: Dict[str, Any]): + self.response_visualizer = ResponseVisualizer(response_data) + + def plot_adstock(self, plot: bool = False) -> plt.Figure: + return self.input_visualizer.plot_adstock(plot) + + def plot_saturation(self, plot: bool = False) -> plt.Figure: + return self.input_visualizer.plot_saturation(plot) + + def plot_moo_distribution(self) -> plt.Figure: + return self.model_visualizer.plot_moo_distribution() + + def plot_moo_cloud(self) -> plt.Figure: + return self.model_visualizer.plot_moo_cloud() + + def plot_ts_validation(self) -> plt.Figure: + return self.model_visualizer.plot_ts_validation() + + def plot_onepager(self, input_collect: Dict[str, Any], output_collect: Dict[str, Any], select_model: str) -> Dict[str, plt.Figure]: + return self.model_visualizer.plot_onepager(input_collect, output_collect, select_model) + + def plot_allocator(self) -> plt.Figure: + return self.allocator_visualizer.plot_allocator() + + def plot_response(self) -> plt.Figure: + return self.response_visualizer.plot_response() + + def plot_marginal_response(self) -> plt.Figure: + return self.response_visualizer.plot_marginal_response() From 582b9570d30eedbe61a8c95dee740bd93fd813e5 Mon Sep 17 00:00:00 2001 From: Shivkanth Bagavathy Date: Fri, 4 Oct 2024 15:41:49 -0700 Subject: [PATCH 3/5] Delete visualizer.py --- python/src/robyn/visualization/visualizer.py | 105 ------------------- 1 file changed, 105 deletions(-) delete mode 100644 python/src/robyn/visualization/visualizer.py diff --git a/python/src/robyn/visualization/visualizer.py b/python/src/robyn/visualization/visualizer.py deleted file mode 100644 index 67d49e46d..000000000 --- a/python/src/robyn/visualization/visualizer.py +++ /dev/null @@ -1,105 +0,0 @@ -from typing import Dict, Any -import matplotlib.pyplot as plt -import seaborn as sns - -class RobynVisualizer: - def __init__(self): - pass - - def plot_adstock(self, plot: bool = False) -> plt.Figure: - """ - Create example plots for adstock hyperparameters. - - Args: - plot (bool): Whether to display the plot. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_saturation(self, plot: bool = False) -> plt.Figure: - """ - Create example plots for saturation hyperparameters. - - Args: - plot (bool): Whether to display the plot. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_moo_distribution(self, output_models: Dict[str, Any]) -> plt.Figure: - """ - Plot MOO (multi-objective optimization) distribution. - - Args: - output_models (Dict[str, Any]): The output models data. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_moo_cloud(self, output_models: Dict[str, Any]) -> plt.Figure: - """ - Plot MOO (multi-objective optimization) cloud. - - Args: - output_models (Dict[str, Any]): The output models data. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_ts_validation(self, output_models: Dict[str, Any]) -> plt.Figure: - """ - Plot time-series validation. - - Args: - output_models (Dict[str, Any]): The output models data. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_onepager(self, input_collect: Dict[str, Any], output_collect: Dict[str, Any], select_model: str) -> Dict[str, plt.Figure]: - """ - Generate one-pager plots for a selected model. - - Args: - input_collect (Dict[str, Any]): The input collection data. - output_collect (Dict[str, Any]): The output collection data. - select_model (str): The selected model identifier. - - Returns: - Dict[str, plt.Figure]: A dictionary of generated figures. - """ - pass - - def plot_allocator(self, allocator_collect: Dict[str, Any]) -> plt.Figure: - """ - Plot allocator's output. - - Args: - allocator_collect (Dict[str, Any]): The allocator collection data. - - Returns: - plt.Figure: The generated figure. - """ - pass - - def plot_response(self, response_data: Dict[str, Any]) -> plt.Figure: - """ - Plot response curves. - - Args: - response_data (Dict[str, Any]): The response data. - - Returns: - plt.Figure: The generated figure. - """ - pass From f3b8ad83f8bfd6430b9764f62482cc1b3fcc690c Mon Sep 17 00:00:00 2001 From: Shivkanth Bagavathy Date: Mon, 7 Oct 2024 11:15:31 -0700 Subject: [PATCH 4/5] Update robyn_visualizer.py remove the need for bool --- python/src/robyn/visualization/robyn_visualizer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/src/robyn/visualization/robyn_visualizer.py b/python/src/robyn/visualization/robyn_visualizer.py index 2d34545fa..19d64dd19 100644 --- a/python/src/robyn/visualization/robyn_visualizer.py +++ b/python/src/robyn/visualization/robyn_visualizer.py @@ -24,11 +24,11 @@ def set_allocator_data(self, allocator_data: Dict[str, Any]): def set_response_data(self, response_data: Dict[str, Any]): self.response_visualizer = ResponseVisualizer(response_data) - def plot_adstock(self, plot: bool = False) -> plt.Figure: - return self.input_visualizer.plot_adstock(plot) + def plot_adstock(self) -> plt.Figure: + return self.input_visualizer.plot_adstock() - def plot_saturation(self, plot: bool = False) -> plt.Figure: - return self.input_visualizer.plot_saturation(plot) + def plot_saturation(self) -> plt.Figure: + return self.input_visualizer.plot_saturation() def plot_moo_distribution(self) -> plt.Figure: return self.model_visualizer.plot_moo_distribution() From 2deb356e8351555adfe38cb5abb1215d5bc198b6 Mon Sep 17 00:00:00 2001 From: Shivkanth Bagavathy Date: Mon, 7 Oct 2024 11:24:26 -0700 Subject: [PATCH 5/5] Update input_visualizer.py --- .../robyn/visualization/input_visualizer.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/python/src/robyn/visualization/input_visualizer.py b/python/src/robyn/visualization/input_visualizer.py index e2a8387d5..8f6d4bc08 100644 --- a/python/src/robyn/visualization/input_visualizer.py +++ b/python/src/robyn/visualization/input_visualizer.py @@ -7,29 +7,27 @@ def __init__(self, input_data: Dict[str, Any]): super().__init__() self.input_data = input_data - def plot_adstock(self, plot: bool = False) -> plt.Figure: + def plot_adstock(self) -> plt.Figure: """ Create example plots for adstock hyperparameters. - Args: - plot (bool): Whether to display the plot. - Returns: plt.Figure: The generated figure. """ - pass + fig, ax = plt.subplots() + # Add plotting logic here + return fig - def plot_saturation(self, plot: bool = False) -> plt.Figure: + def plot_saturation(self) -> plt.Figure: """ Create example plots for saturation hyperparameters. - Args: - plot (bool): Whether to display the plot. - Returns: plt.Figure: The generated figure. """ - pass + fig, ax = plt.subplots() + # Add plotting logic here + return fig def plot_spend_exposure_fit(self) -> Dict[str, plt.Figure]: """ @@ -38,4 +36,6 @@ def plot_spend_exposure_fit(self) -> Dict[str, plt.Figure]: Returns: Dict[str, plt.Figure]: A dictionary of generated figures. """ - pass \ No newline at end of file + figures = {} + # Add plotting logic here + return figures \ No newline at end of file