aboutsummaryrefslogtreecommitdiff
path: root/venv/lib/python3.8/site-packages/plotly/io/_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.8/site-packages/plotly/io/_utils.py')
-rw-r--r--venv/lib/python3.8/site-packages/plotly/io/_utils.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/venv/lib/python3.8/site-packages/plotly/io/_utils.py b/venv/lib/python3.8/site-packages/plotly/io/_utils.py
new file mode 100644
index 0000000..4d27e03
--- /dev/null
+++ b/venv/lib/python3.8/site-packages/plotly/io/_utils.py
@@ -0,0 +1,93 @@
+from typing import List
+
+import plotly
+import plotly.graph_objs as go
+from plotly.offline import get_plotlyjs_version
+
+
+def validate_coerce_fig_to_dict(fig, validate):
+ from plotly.basedatatypes import BaseFigure
+
+ if isinstance(fig, BaseFigure):
+ fig_dict = fig.to_dict()
+ elif isinstance(fig, dict):
+ if validate:
+ # This will raise an exception if fig is not a valid plotly figure
+ fig_dict = plotly.graph_objs.Figure(fig).to_plotly_json()
+ else:
+ fig_dict = fig
+ elif hasattr(fig, "to_plotly_json"):
+ fig_dict = fig.to_plotly_json()
+ else:
+ raise ValueError(
+ """
+The fig parameter must be a dict or Figure.
+ Received value of type {typ}: {v}""".format(typ=type(fig), v=fig)
+ )
+ return fig_dict
+
+
+def validate_coerce_output_type(output_type):
+ if output_type == "Figure" or output_type == go.Figure:
+ cls = go.Figure
+ elif output_type == "FigureWidget" or (
+ hasattr(go, "FigureWidget") and output_type == go.FigureWidget
+ ):
+ cls = go.FigureWidget
+ else:
+ raise ValueError(
+ """
+Invalid output type: {output_type}
+ Must be one of: 'Figure', 'FigureWidget'"""
+ )
+ return cls
+
+
+def broadcast_args_to_dicts(**kwargs: dict) -> List[dict]:
+ """
+ Given one or more keyword arguments which may be either a single value or a list of values,
+ return a list of keyword dictionaries by broadcasting the single valuesacross all the dicts.
+ If more than one item in the input is a list, all lists must be the same length.
+
+ Parameters
+ ----------
+ **kwargs: dict
+ The keyword arguments
+
+ Returns
+ -------
+ list of dicts
+ A list of dictionaries
+
+ Raises
+ ------
+ ValueError
+ If any of the input lists are not the same length
+ """
+ # Check that all list arguments have the same length,
+ # and find out what that length is
+ # If there are no list arguments, length is 1
+ list_lengths = [len(v) for v in tuple(kwargs.values()) if isinstance(v, list)]
+ if list_lengths and len(set(list_lengths)) > 1:
+ raise ValueError("All list arguments must have the same length.")
+ list_length = list_lengths[0] if list_lengths else 1
+
+ # Expand all arguments to lists of the same length
+ expanded_kwargs = {
+ k: [v] * list_length if not isinstance(v, list) else v
+ for k, v in kwargs.items()
+ }
+ # Reshape into a list of dictionaries
+ # Each dictionary represents the keyword arguments for a single function call
+ list_of_kwargs = [
+ {k: v[i] for k, v in expanded_kwargs.items()} for i in range(list_length)
+ ]
+
+ return list_of_kwargs
+
+
+def plotly_cdn_url(cdn_ver=get_plotlyjs_version()):
+ """Return a valid plotly CDN url."""
+ return "https://cdn.plot.ly/plotly-{cdn_ver}.min.js".format(
+ cdn_ver=cdn_ver,
+ )