diff options
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.py | 93 |
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, + ) |