From 19fe225dfd58884c4fea8c1f66515624b463f892 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 14:24:46 -0400 Subject: [PATCH 01/34] Rename chart_studio -> chartstudio and move under chartstudio-package directory. Add dedicated setup.py --- chart_studio/__init__.py | 2 - chart_studio/api/v1/__init__.py | 3 -- chart_studio/api/v2/__init__.py | 5 -- chart_studio/widgets/__init__.py | 3 -- .../README.md | 0 chartstudio-package/chartstudio/__init__.py | 2 + .../chartstudio}/api/__init__.py | 0 .../chartstudio}/api/utils.py | 0 .../chartstudio/api/v1/__init__.py | 3 ++ .../chartstudio}/api/v1/clientresp.py | 4 +- .../chartstudio}/api/v1/utils.py | 8 ++-- .../chartstudio/api/v2/__init__.py | 5 ++ .../chartstudio}/api/v2/dash_apps.py | 2 +- .../chartstudio}/api/v2/dashboards.py | 2 +- .../chartstudio}/api/v2/files.py | 2 +- .../chartstudio}/api/v2/folders.py | 2 +- .../chartstudio}/api/v2/grids.py | 2 +- .../chartstudio}/api/v2/images.py | 2 +- .../chartstudio}/api/v2/plot_schema.py | 2 +- .../chartstudio}/api/v2/plots.py | 2 +- .../api/v2/spectacle_presentations.py | 2 +- .../chartstudio}/api/v2/users.py | 2 +- .../chartstudio}/api/v2/utils.py | 4 +- .../chartstudio}/config.py | 2 +- .../chartstudio}/dashboard_objs/__init__.py | 0 .../dashboard_objs/dashboard_objs.py | 2 +- .../chartstudio}/exceptions.py | 2 +- .../chartstudio}/files.py | 0 .../chartstudio}/grid_objs/__init__.py | 2 +- .../chartstudio}/grid_objs/grid_objs.py | 2 +- .../chartstudio}/plotly/__init__.py | 0 .../plotly/chunked_requests/__init__.py | 0 .../chunked_requests/chunked_request.py | 2 +- .../chartstudio}/plotly/plotly.py | 14 +++--- .../presentation_objs/__init__.py | 0 .../presentation_objs/presentation_objs.py | 4 +- .../chartstudio}/session.py | 0 .../chartstudio}/tests/__init__.py | 0 .../chartstudio/tests/test_core}/__init__.py | 0 .../tests/test_core/test_tools}/__init__.py | 0 .../test_tools/test_configuration.py | 4 +- .../test_core/test_tools/test_file_tools.py | 4 +- .../test_core/test_tools/test_get_embed.py | 2 +- .../tests/test_optional}/__init__.py | 0 .../test_optional/test_grid}/__init__.py | 0 .../test_optional/test_grid/test_grid.py | 4 +- .../test_optional/test_ipython}/__init__.py | 0 .../test_ipython/test_widgets.py | 2 +- .../test_matplotlylib}/__init__.py | 0 .../test_matplotlylib/test_plot_mpl.py | 2 +- .../test_optional/test_utils}/__init__.py | 0 .../test_optional/test_utils/test_utils.py | 2 +- .../tests/test_plot_ly}/__init__.py | 0 .../tests/test_plot_ly/test_api/__init__.py | 4 +- .../test_api/test_v1}/__init__.py | 0 .../test_api/test_v1/test_clientresp.py | 8 ++-- .../test_api/test_v1/test_utils.py | 16 +++---- .../test_api/test_v2}/__init__.py | 0 .../test_api/test_v2/test_files.py | 8 ++-- .../test_api/test_v2/test_folders.py | 8 ++-- .../test_api/test_v2/test_grids.py | 8 ++-- .../test_api/test_v2/test_images.py | 8 ++-- .../test_api/test_v2/test_plot_schema.py | 8 ++-- .../test_api/test_v2/test_plots.py | 8 ++-- .../test_api/test_v2/test_users.py | 8 ++-- .../test_api/test_v2/test_utils.py | 14 +++--- .../test_plot_ly/test_dashboard}/__init__.py | 0 .../test_dashboard/test_dashboard.py | 2 +- .../tests/test_plot_ly/test_file}/__init__.py | 0 .../tests/test_plot_ly/test_file/test_file.py | 6 +-- .../test_plot_ly/test_get_figure/__init__.py | 0 .../test_get_figure/test_get_figure.py | 6 +-- .../test_get_requests}/__init__.py | 0 .../test_get_requests/test_get_requests.py | 2 +- .../tests/test_plot_ly/test_grid}/__init__.py | 0 .../tests/test_plot_ly/test_grid/test_grid.py | 10 ++-- .../test_plot_ly/test_image}/__init__.py | 0 .../test_plot_ly/test_image/test_image.py | 4 +- .../tests/test_plot_ly/test_meta}/__init__.py | 0 .../tests/test_plot_ly/test_meta/test_meta.py | 8 ++-- .../test_plot_ly/test_plotly/__init__.py | 0 .../test_plotly/test_credentials.py | 10 ++-- .../test_plot_ly/test_plotly/test_plot.py | 12 ++--- .../test_plot_ly/test_session}/__init__.py | 0 .../test_plot_ly/test_session/test_session.py | 8 ++-- .../test_spectacle_presentation}/__init__.py | 0 .../test_spectacle_presentation.py | 10 ++-- .../test_plot_ly/test_stream/__init__.py | 0 .../test_plot_ly/test_stream/test_stream.py | 4 +- .../chartstudio}/tests/utils.py | 4 +- .../chartstudio}/tools.py | 6 +-- .../chartstudio}/utils.py | 0 .../chartstudio/widgets/__init__.py | 3 ++ .../chartstudio}/widgets/graph_widget.py | 2 +- chartstudio-package/setup.py | 48 +++++++++++++++++++ .../specs}/GraphWidgetSpec.md | 0 .../specs}/gridspec.md | 0 97 files changed, 200 insertions(+), 152 deletions(-) delete mode 100644 chart_studio/__init__.py delete mode 100644 chart_studio/api/v1/__init__.py delete mode 100644 chart_studio/api/v2/__init__.py delete mode 100644 chart_studio/widgets/__init__.py rename chart_studio/tests/test_core/__init__.py => chartstudio-package/README.md (100%) create mode 100644 chartstudio-package/chartstudio/__init__.py rename {chart_studio => chartstudio-package/chartstudio}/api/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/api/utils.py (100%) create mode 100644 chartstudio-package/chartstudio/api/v1/__init__.py rename {chart_studio => chartstudio-package/chartstudio}/api/v1/clientresp.py (93%) rename {chart_studio => chartstudio-package/chartstudio}/api/v1/utils.py (93%) create mode 100644 chartstudio-package/chartstudio/api/v2/__init__.py rename {chart_studio => chartstudio-package/chartstudio}/api/v2/dash_apps.py (90%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/dashboards.py (93%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/files.py (97%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/folders.py (97%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/grids.py (98%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/images.py (88%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/plot_schema.py (88%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/plots.py (98%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/spectacle_presentations.py (92%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/users.py (86%) rename {chart_studio => chartstudio-package/chartstudio}/api/v2/utils.py (98%) rename {chart_studio => chartstudio-package/chartstudio}/config.py (96%) rename {chart_studio => chartstudio-package/chartstudio}/dashboard_objs/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/dashboard_objs/dashboard_objs.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/exceptions.py (97%) rename {chart_studio => chartstudio-package/chartstudio}/files.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/grid_objs/__init__.py (54%) rename {chart_studio => chartstudio-package/chartstudio}/grid_objs/grid_objs.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/plotly/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/plotly/chunked_requests/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/plotly/chunked_requests/chunked_request.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/plotly/plotly.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/presentation_objs/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/presentation_objs/presentation_objs.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/session.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/__init__.py (100%) rename {chart_studio/tests/test_core/test_tools => chartstudio-package/chartstudio/tests/test_core}/__init__.py (100%) rename {chart_studio/tests/test_optional => chartstudio-package/chartstudio/tests/test_core/test_tools}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_core/test_tools/test_configuration.py (75%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_core/test_tools/test_file_tools.py (98%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_core/test_tools/test_get_embed.py (98%) rename {chart_studio/tests/test_optional/test_grid => chartstudio-package/chartstudio/tests/test_optional}/__init__.py (100%) rename {chart_studio/tests/test_optional/test_ipython => chartstudio-package/chartstudio/tests/test_optional/test_grid}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_optional/test_grid/test_grid.py (88%) rename {chart_studio/tests/test_optional/test_matplotlylib => chartstudio-package/chartstudio/tests/test_optional/test_ipython}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_optional/test_ipython/test_widgets.py (83%) rename {chart_studio/tests/test_optional/test_utils => chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_optional/test_matplotlylib/test_plot_mpl.py (97%) rename {chart_studio/tests/test_plot_ly => chartstudio-package/chartstudio/tests/test_optional/test_utils}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_optional/test_utils/test_utils.py (95%) rename {chart_studio/tests/test_plot_ly/test_api/test_v1 => chartstudio-package/chartstudio/tests/test_plot_ly}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/__init__.py (95%) rename {chart_studio/tests/test_plot_ly/test_api/test_v2 => chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v1/test_clientresp.py (89%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v1/test_utils.py (93%) rename {chart_studio/tests/test_plot_ly/test_dashboard => chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_files.py (93%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_folders.py (93%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_grids.py (96%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_images.py (80%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py (75%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_plots.py (93%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_users.py (73%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_api/test_v2/test_utils.py (95%) rename {chart_studio/tests/test_plot_ly/test_file => chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_dashboard/test_dashboard.py (98%) rename {chart_studio/tests/test_plot_ly/test_get_requests => chartstudio-package/chartstudio/tests/test_plot_ly/test_file}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_file/test_file.py (91%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_get_figure/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_get_figure/test_get_figure.py (95%) rename {chart_studio/tests/test_plot_ly/test_grid => chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_get_requests/test_get_requests.py (98%) rename {chart_studio/tests/test_plot_ly/test_image => chartstudio-package/chartstudio/tests/test_plot_ly/test_grid}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_grid/test_grid.py (95%) rename {chart_studio/tests/test_plot_ly/test_meta => chartstudio-package/chartstudio/tests/test_plot_ly/test_image}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_image/test_image.py (96%) rename {chart_studio/tests/test_plot_ly/test_session => chartstudio-package/chartstudio/tests/test_plot_ly/test_meta}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_meta/test_meta.py (89%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_plotly/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_plotly/test_credentials.py (92%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_plotly/test_plot.py (98%) rename {chart_studio/tests/test_plot_ly/test_spectacle_presentation => chartstudio-package/chartstudio/tests/test_plot_ly/test_session}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_session/test_session.py (82%) rename {chart_studio/tests/test_plot_ly/test_stream => chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation}/__init__.py (100%) rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py (98%) create mode 100644 chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/__init__.py rename {chart_studio => chartstudio-package/chartstudio}/tests/test_plot_ly/test_stream/test_stream.py (98%) rename {chart_studio => chartstudio-package/chartstudio}/tests/utils.py (94%) rename {chart_studio => chartstudio-package/chartstudio}/tools.py (99%) rename {chart_studio => chartstudio-package/chartstudio}/utils.py (100%) create mode 100644 chartstudio-package/chartstudio/widgets/__init__.py rename {chart_studio => chartstudio-package/chartstudio}/widgets/graph_widget.py (99%) create mode 100644 chartstudio-package/setup.py rename {specs => chartstudio-package/specs}/GraphWidgetSpec.md (100%) rename {specs => chartstudio-package/specs}/gridspec.md (100%) diff --git a/chart_studio/__init__.py b/chart_studio/__init__.py deleted file mode 100644 index c1adbe629b9..00000000000 --- a/chart_studio/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from __future__ import absolute_import -from chart_studio import (plotly, dashboard_objs, grid_objs, session) diff --git a/chart_studio/api/v1/__init__.py b/chart_studio/api/v1/__init__.py deleted file mode 100644 index 05fbba4143a..00000000000 --- a/chart_studio/api/v1/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from chart_studio.api.v1.clientresp import clientresp diff --git a/chart_studio/api/v2/__init__.py b/chart_studio/api/v2/__init__.py deleted file mode 100644 index c248f72543d..00000000000 --- a/chart_studio/api/v2/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import absolute_import - -from chart_studio.api.v2 import (dash_apps, dashboards, files, folders, grids, - images, plot_schema, plots, - spectacle_presentations, users) diff --git a/chart_studio/widgets/__init__.py b/chart_studio/widgets/__init__.py deleted file mode 100644 index f1a63808df9..00000000000 --- a/chart_studio/widgets/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from chart_studio.widgets.graph_widget import GraphWidget diff --git a/chart_studio/tests/test_core/__init__.py b/chartstudio-package/README.md similarity index 100% rename from chart_studio/tests/test_core/__init__.py rename to chartstudio-package/README.md diff --git a/chartstudio-package/chartstudio/__init__.py b/chartstudio-package/chartstudio/__init__.py new file mode 100644 index 00000000000..5ca3a3a65b7 --- /dev/null +++ b/chartstudio-package/chartstudio/__init__.py @@ -0,0 +1,2 @@ +from __future__ import absolute_import +from chartstudio import (plotly, dashboard_objs, grid_objs, session) diff --git a/chart_studio/api/__init__.py b/chartstudio-package/chartstudio/api/__init__.py similarity index 100% rename from chart_studio/api/__init__.py rename to chartstudio-package/chartstudio/api/__init__.py diff --git a/chart_studio/api/utils.py b/chartstudio-package/chartstudio/api/utils.py similarity index 100% rename from chart_studio/api/utils.py rename to chartstudio-package/chartstudio/api/utils.py diff --git a/chartstudio-package/chartstudio/api/v1/__init__.py b/chartstudio-package/chartstudio/api/v1/__init__.py new file mode 100644 index 00000000000..c738db20411 --- /dev/null +++ b/chartstudio-package/chartstudio/api/v1/__init__.py @@ -0,0 +1,3 @@ +from __future__ import absolute_import + +from chartstudio.api.v1.clientresp import clientresp diff --git a/chart_studio/api/v1/clientresp.py b/chartstudio-package/chartstudio/api/v1/clientresp.py similarity index 93% rename from chart_studio/api/v1/clientresp.py rename to chartstudio-package/chartstudio/api/v1/clientresp.py index 1f7707e1d97..cfbfb89aafb 100644 --- a/chart_studio/api/v1/clientresp.py +++ b/chartstudio-package/chartstudio/api/v1/clientresp.py @@ -7,8 +7,8 @@ from _plotly_utils.utils import PlotlyJSONEncoder -from chart_studio import config, utils -from chart_studio.api.v1.utils import request +from chartstudio import config, utils +from chartstudio.api.v1.utils import request def clientresp(data, **kwargs): diff --git a/chart_studio/api/v1/utils.py b/chartstudio-package/chartstudio/api/v1/utils.py similarity index 93% rename from chart_studio/api/v1/utils.py rename to chartstudio-package/chartstudio/api/v1/utils.py index d0c40263a17..ed7a998fd95 100644 --- a/chart_studio/api/v1/utils.py +++ b/chartstudio-package/chartstudio/api/v1/utils.py @@ -5,9 +5,9 @@ from retrying import retry import _plotly_utils.exceptions -from chart_studio import config, exceptions -from chart_studio.api.utils import basic_auth -from chart_studio.api.v2.utils import should_retry +from chartstudio import config, exceptions +from chartstudio.api.utils import basic_auth +from chartstudio.api.v2.utils import should_retry def validate_response(response): @@ -75,7 +75,7 @@ def request(method, url, **kwargs): """ if kwargs.get('json', None) is not None: - # See chart_studio.api.v2.utils.request for examples on how to do this. + # See chartstudio.api.v2.utils.request for examples on how to do this. raise _plotly_utils.exceptions.PlotlyError( 'V1 API does not handle arbitrary json.') kwargs['headers'] = dict(kwargs.get('headers', {}), **get_headers()) diff --git a/chartstudio-package/chartstudio/api/v2/__init__.py b/chartstudio-package/chartstudio/api/v2/__init__.py new file mode 100644 index 00000000000..790b971d726 --- /dev/null +++ b/chartstudio-package/chartstudio/api/v2/__init__.py @@ -0,0 +1,5 @@ +from __future__ import absolute_import + +from chartstudio.api.v2 import (dash_apps, dashboards, files, folders, grids, + images, plot_schema, plots, + spectacle_presentations, users) diff --git a/chart_studio/api/v2/dash_apps.py b/chartstudio-package/chartstudio/api/v2/dash_apps.py similarity index 90% rename from chart_studio/api/v2/dash_apps.py rename to chartstudio-package/chartstudio/api/v2/dash_apps.py index c46ec3ff69e..04da94f2a15 100644 --- a/chart_studio/api/v2/dash_apps.py +++ b/chartstudio-package/chartstudio/api/v2/dash_apps.py @@ -3,7 +3,7 @@ """ from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, request +from chartstudio.api.v2.utils import build_url, request RESOURCE = 'dash-apps' diff --git a/chart_studio/api/v2/dashboards.py b/chartstudio-package/chartstudio/api/v2/dashboards.py similarity index 93% rename from chart_studio/api/v2/dashboards.py rename to chartstudio-package/chartstudio/api/v2/dashboards.py index 60c4e0dd898..21e9de65a4c 100644 --- a/chart_studio/api/v2/dashboards.py +++ b/chartstudio-package/chartstudio/api/v2/dashboards.py @@ -6,7 +6,7 @@ """ from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, request +from chartstudio.api.v2.utils import build_url, request RESOURCE = 'dashboards' diff --git a/chart_studio/api/v2/files.py b/chartstudio-package/chartstudio/api/v2/files.py similarity index 97% rename from chart_studio/api/v2/files.py rename to chartstudio-package/chartstudio/api/v2/files.py index 1e250158f66..8f9e75c1cd1 100644 --- a/chart_studio/api/v2/files.py +++ b/chartstudio-package/chartstudio/api/v2/files.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/files endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, make_params, request +from chartstudio.api.v2.utils import build_url, make_params, request RESOURCE = 'files' diff --git a/chart_studio/api/v2/folders.py b/chartstudio-package/chartstudio/api/v2/folders.py similarity index 97% rename from chart_studio/api/v2/folders.py rename to chartstudio-package/chartstudio/api/v2/folders.py index 81d72466ca1..064944dabc9 100644 --- a/chart_studio/api/v2/folders.py +++ b/chartstudio-package/chartstudio/api/v2/folders.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/folders endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, make_params, request +from chartstudio.api.v2.utils import build_url, make_params, request RESOURCE = 'folders' diff --git a/chart_studio/api/v2/grids.py b/chartstudio-package/chartstudio/api/v2/grids.py similarity index 98% rename from chart_studio/api/v2/grids.py rename to chartstudio-package/chartstudio/api/v2/grids.py index 726419a9b3d..d5b7964454c 100644 --- a/chart_studio/api/v2/grids.py +++ b/chartstudio-package/chartstudio/api/v2/grids.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/grids endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, make_params, request +from chartstudio.api.v2.utils import build_url, make_params, request RESOURCE = 'grids' diff --git a/chart_studio/api/v2/images.py b/chartstudio-package/chartstudio/api/v2/images.py similarity index 88% rename from chart_studio/api/v2/images.py rename to chartstudio-package/chartstudio/api/v2/images.py index c6f7ea1a781..4bd7641bc9d 100644 --- a/chart_studio/api/v2/images.py +++ b/chartstudio-package/chartstudio/api/v2/images.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/images endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, request +from chartstudio.api.v2.utils import build_url, request RESOURCE = 'images' diff --git a/chart_studio/api/v2/plot_schema.py b/chartstudio-package/chartstudio/api/v2/plot_schema.py similarity index 88% rename from chart_studio/api/v2/plot_schema.py rename to chartstudio-package/chartstudio/api/v2/plot_schema.py index 9b9a7ea7edf..23e1887aa2a 100644 --- a/chart_studio/api/v2/plot_schema.py +++ b/chartstudio-package/chartstudio/api/v2/plot_schema.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/plot-schema endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, make_params, request +from chartstudio.api.v2.utils import build_url, make_params, request RESOURCE = 'plot-schema' diff --git a/chart_studio/api/v2/plots.py b/chartstudio-package/chartstudio/api/v2/plots.py similarity index 98% rename from chart_studio/api/v2/plots.py rename to chartstudio-package/chartstudio/api/v2/plots.py index d33c01b7068..892da148c53 100644 --- a/chart_studio/api/v2/plots.py +++ b/chartstudio-package/chartstudio/api/v2/plots.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/plots endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, make_params, request +from chartstudio.api.v2.utils import build_url, make_params, request RESOURCE = 'plots' diff --git a/chart_studio/api/v2/spectacle_presentations.py b/chartstudio-package/chartstudio/api/v2/spectacle_presentations.py similarity index 92% rename from chart_studio/api/v2/spectacle_presentations.py rename to chartstudio-package/chartstudio/api/v2/spectacle_presentations.py index 343809d4586..3f7b9030f23 100644 --- a/chart_studio/api/v2/spectacle_presentations.py +++ b/chartstudio-package/chartstudio/api/v2/spectacle_presentations.py @@ -3,7 +3,7 @@ """ from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, request +from chartstudio.api.v2.utils import build_url, request RESOURCE = 'spectacle-presentations' diff --git a/chart_studio/api/v2/users.py b/chartstudio-package/chartstudio/api/v2/users.py similarity index 86% rename from chart_studio/api/v2/users.py rename to chartstudio-package/chartstudio/api/v2/users.py index b9300c2107e..430982efc07 100644 --- a/chart_studio/api/v2/users.py +++ b/chartstudio-package/chartstudio/api/v2/users.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/files endpoints.""" from __future__ import absolute_import -from chart_studio.api.v2.utils import build_url, request +from chartstudio.api.v2.utils import build_url, request RESOURCE = 'users' diff --git a/chart_studio/api/v2/utils.py b/chartstudio-package/chartstudio/api/v2/utils.py similarity index 98% rename from chart_studio/api/v2/utils.py rename to chartstudio-package/chartstudio/api/v2/utils.py index 8d7a14dfa36..1489813f440 100644 --- a/chart_studio/api/v2/utils.py +++ b/chartstudio-package/chartstudio/api/v2/utils.py @@ -6,8 +6,8 @@ from retrying import retry import _plotly_utils.exceptions -from chart_studio import config, exceptions -from chart_studio.api.utils import basic_auth +from chartstudio import config, exceptions +from chartstudio.api.utils import basic_auth from _plotly_utils.utils import PlotlyJSONEncoder diff --git a/chart_studio/config.py b/chartstudio-package/chartstudio/config.py similarity index 96% rename from chart_studio/config.py rename to chartstudio-package/chartstudio/config.py index 5cb2b30ad48..17e584e3045 100644 --- a/chart_studio/config.py +++ b/chartstudio-package/chartstudio/config.py @@ -6,7 +6,7 @@ """ from __future__ import absolute_import -from chart_studio import session, tools +from chartstudio import session, tools def get_credentials(): diff --git a/chart_studio/dashboard_objs/__init__.py b/chartstudio-package/chartstudio/dashboard_objs/__init__.py similarity index 100% rename from chart_studio/dashboard_objs/__init__.py rename to chartstudio-package/chartstudio/dashboard_objs/__init__.py diff --git a/chart_studio/dashboard_objs/dashboard_objs.py b/chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py similarity index 99% rename from chart_studio/dashboard_objs/dashboard_objs.py rename to chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py index 13ef7032e00..e05d42b7ce3 100644 --- a/chart_studio/dashboard_objs/dashboard_objs.py +++ b/chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py @@ -12,7 +12,7 @@ import _plotly_utils.exceptions from _plotly_utils import optional_imports -from chart_studio import exceptions +from chartstudio import exceptions IPython = optional_imports.get_module('IPython') diff --git a/chart_studio/exceptions.py b/chartstudio-package/chartstudio/exceptions.py similarity index 97% rename from chart_studio/exceptions.py rename to chartstudio-package/chartstudio/exceptions.py index fa5054b86b3..fcc6289ef85 100644 --- a/chart_studio/exceptions.py +++ b/chartstudio-package/chartstudio/exceptions.py @@ -7,7 +7,7 @@ """ from __future__ import absolute_import -from chart_studio.api.utils import to_native_utf8_string +from chartstudio.api.utils import to_native_utf8_string # Base Plotly Error diff --git a/chart_studio/files.py b/chartstudio-package/chartstudio/files.py similarity index 100% rename from chart_studio/files.py rename to chartstudio-package/chartstudio/files.py diff --git a/chart_studio/grid_objs/__init__.py b/chartstudio-package/chartstudio/grid_objs/__init__.py similarity index 54% rename from chart_studio/grid_objs/__init__.py rename to chartstudio-package/chartstudio/grid_objs/__init__.py index ae484f25e17..01d4d5e5565 100644 --- a/chart_studio/grid_objs/__init__.py +++ b/chartstudio-package/chartstudio/grid_objs/__init__.py @@ -5,4 +5,4 @@ """ from __future__ import absolute_import -from chart_studio.grid_objs.grid_objs import Grid, Column +from chartstudio.grid_objs.grid_objs import Grid, Column diff --git a/chart_studio/grid_objs/grid_objs.py b/chartstudio-package/chartstudio/grid_objs/grid_objs.py similarity index 99% rename from chart_studio/grid_objs/grid_objs.py rename to chartstudio-package/chartstudio/grid_objs/grid_objs.py index 92363da3852..f7e57bc5738 100644 --- a/chart_studio/grid_objs/grid_objs.py +++ b/chartstudio-package/chartstudio/grid_objs/grid_objs.py @@ -15,7 +15,7 @@ import json as _json from _plotly_utils.optional_imports import get_module -from chart_studio import utils, exceptions +from chartstudio import utils, exceptions __all__ = None diff --git a/chart_studio/plotly/__init__.py b/chartstudio-package/chartstudio/plotly/__init__.py similarity index 100% rename from chart_studio/plotly/__init__.py rename to chartstudio-package/chartstudio/plotly/__init__.py diff --git a/chart_studio/plotly/chunked_requests/__init__.py b/chartstudio-package/chartstudio/plotly/chunked_requests/__init__.py similarity index 100% rename from chart_studio/plotly/chunked_requests/__init__.py rename to chartstudio-package/chartstudio/plotly/chunked_requests/__init__.py diff --git a/chart_studio/plotly/chunked_requests/chunked_request.py b/chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py similarity index 99% rename from chart_studio/plotly/chunked_requests/chunked_request.py rename to chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py index 5f39704c720..98f9151b357 100644 --- a/chart_studio/plotly/chunked_requests/chunked_request.py +++ b/chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py @@ -6,7 +6,7 @@ from six.moves import http_client from six.moves.urllib.parse import urlparse, unquote -from chart_studio.api import utils +from chartstudio.api import utils class Stream: diff --git a/chart_studio/plotly/plotly.py b/chartstudio-package/chartstudio/plotly/plotly.py similarity index 99% rename from chart_studio/plotly/plotly.py rename to chartstudio-package/chartstudio/plotly/plotly.py index 7bfb50c2af8..feea3b97940 100644 --- a/chart_studio/plotly/plotly.py +++ b/chartstudio-package/chartstudio/plotly/plotly.py @@ -33,14 +33,14 @@ from _plotly_utils.basevalidators import CompoundValidator, is_array from _plotly_utils.utils import PlotlyJSONEncoder -from chart_studio import files, session, tools, utils, exceptions -from chart_studio.api import v1, v2 -from chart_studio.plotly import chunked_requests -from chart_studio.grid_objs import Grid -from chart_studio.dashboard_objs import dashboard_objs as dashboard +from chartstudio import files, session, tools, utils, exceptions +from chartstudio.api import v1, v2 +from chartstudio.plotly import chunked_requests +from chartstudio.grid_objs import Grid +from chartstudio.dashboard_objs import dashboard_objs as dashboard # This is imported like this for backwards compat. Careful if changing. -from chart_studio.config import get_config, get_credentials +from chartstudio.config import get_config, get_credentials __all__ = None @@ -1692,7 +1692,7 @@ def _extract_grid_graph_obj(obj_dict, reference_obj, grid, path): Function modifies obj_dict and grid in-place """ - from chart_studio.grid_objs import Column + from chartstudio.grid_objs import Column for prop in list(obj_dict.keys()): propsrc = '{}src'.format(prop) diff --git a/chart_studio/presentation_objs/__init__.py b/chartstudio-package/chartstudio/presentation_objs/__init__.py similarity index 100% rename from chart_studio/presentation_objs/__init__.py rename to chartstudio-package/chartstudio/presentation_objs/__init__.py diff --git a/chart_studio/presentation_objs/presentation_objs.py b/chartstudio-package/chartstudio/presentation_objs/presentation_objs.py similarity index 99% rename from chart_studio/presentation_objs/presentation_objs.py rename to chartstudio-package/chartstudio/presentation_objs/presentation_objs.py index 699f6996121..7cecd5861eb 100644 --- a/chart_studio/presentation_objs/presentation_objs.py +++ b/chartstudio-package/chartstudio/presentation_objs/presentation_objs.py @@ -12,8 +12,8 @@ import warnings import _plotly_utils.exceptions -from chart_studio import exceptions -from chart_studio.config import get_config +from chartstudio import exceptions +from chartstudio.config import get_config HEIGHT = 700.0 WIDTH = 1000.0 diff --git a/chart_studio/session.py b/chartstudio-package/chartstudio/session.py similarity index 100% rename from chart_studio/session.py rename to chartstudio-package/chartstudio/session.py diff --git a/chart_studio/tests/__init__.py b/chartstudio-package/chartstudio/tests/__init__.py similarity index 100% rename from chart_studio/tests/__init__.py rename to chartstudio-package/chartstudio/tests/__init__.py diff --git a/chart_studio/tests/test_core/test_tools/__init__.py b/chartstudio-package/chartstudio/tests/test_core/__init__.py similarity index 100% rename from chart_studio/tests/test_core/test_tools/__init__.py rename to chartstudio-package/chartstudio/tests/test_core/__init__.py diff --git a/chart_studio/tests/test_optional/__init__.py b/chartstudio-package/chartstudio/tests/test_core/test_tools/__init__.py similarity index 100% rename from chart_studio/tests/test_optional/__init__.py rename to chartstudio-package/chartstudio/tests/test_core/test_tools/__init__.py diff --git a/chart_studio/tests/test_core/test_tools/test_configuration.py b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py similarity index 75% rename from chart_studio/tests/test_core/test_tools/test_configuration.py rename to chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py index 9215b008e47..31114397294 100644 --- a/chart_studio/tests/test_core/test_tools/test_configuration.py +++ b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py @@ -2,8 +2,8 @@ from unittest import TestCase -from chart_studio.files import CONFIG_FILE, FILE_CONTENT -from chart_studio.tools import get_config_defaults +from chartstudio.files import CONFIG_FILE, FILE_CONTENT +from chartstudio.tools import get_config_defaults class TestGetConfigDefaults(TestCase): diff --git a/chart_studio/tests/test_core/test_tools/test_file_tools.py b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py similarity index 98% rename from chart_studio/tests/test_core/test_tools/test_file_tools.py rename to chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py index 3f5549625ca..42c757d0e37 100644 --- a/chart_studio/tests/test_core/test_tools/test_file_tools.py +++ b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py @@ -1,5 +1,5 @@ -from chart_studio import tools -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio import tools +from chartstudio.tests.utils import PlotlyTestCase import warnings diff --git a/chart_studio/tests/test_core/test_tools/test_get_embed.py b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py similarity index 98% rename from chart_studio/tests/test_core/test_tools/test_get_embed.py rename to chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py index 7b49365e54f..e964e1c3430 100644 --- a/chart_studio/tests/test_core/test_tools/test_get_embed.py +++ b/chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py @@ -4,7 +4,7 @@ from nose.tools import raises -import chart_studio.tools as tls +import chartstudio.tools as tls from _plotly_utils.exceptions import PlotlyError diff --git a/chart_studio/tests/test_optional/test_grid/__init__.py b/chartstudio-package/chartstudio/tests/test_optional/__init__.py similarity index 100% rename from chart_studio/tests/test_optional/test_grid/__init__.py rename to chartstudio-package/chartstudio/tests/test_optional/__init__.py diff --git a/chart_studio/tests/test_optional/test_ipython/__init__.py b/chartstudio-package/chartstudio/tests/test_optional/test_grid/__init__.py similarity index 100% rename from chart_studio/tests/test_optional/test_ipython/__init__.py rename to chartstudio-package/chartstudio/tests/test_optional/test_grid/__init__.py diff --git a/chart_studio/tests/test_optional/test_grid/test_grid.py b/chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py similarity index 88% rename from chart_studio/tests/test_optional/test_grid/test_grid.py rename to chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py index aaf48967843..6b469e657d7 100644 --- a/chart_studio/tests/test_optional/test_grid/test_grid.py +++ b/chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py @@ -9,8 +9,8 @@ from unittest import TestCase -from chart_studio.exceptions import InputError -from chart_studio.grid_objs import Grid +from chartstudio.exceptions import InputError +from chartstudio.grid_objs import Grid import pandas as pd diff --git a/chart_studio/tests/test_optional/test_matplotlylib/__init__.py b/chartstudio-package/chartstudio/tests/test_optional/test_ipython/__init__.py similarity index 100% rename from chart_studio/tests/test_optional/test_matplotlylib/__init__.py rename to chartstudio-package/chartstudio/tests/test_optional/test_ipython/__init__.py diff --git a/chart_studio/tests/test_optional/test_ipython/test_widgets.py b/chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py similarity index 83% rename from chart_studio/tests/test_optional/test_ipython/test_widgets.py rename to chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py index 8cd365d1e49..597834032c0 100644 --- a/chart_studio/tests/test_optional/test_ipython/test_widgets.py +++ b/chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py @@ -6,7 +6,7 @@ from unittest import TestCase -from chart_studio.widgets import GraphWidget +from chartstudio.widgets import GraphWidget class TestWidgets(TestCase): diff --git a/chart_studio/tests/test_optional/test_utils/__init__.py b/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/__init__.py similarity index 100% rename from chart_studio/tests/test_optional/test_utils/__init__.py rename to chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/__init__.py diff --git a/chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py b/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py similarity index 97% rename from chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py rename to chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py index 83732461ba9..5e9bbf3924c 100644 --- a/chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py +++ b/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py @@ -12,7 +12,7 @@ import _plotly_utils.exceptions from plotly import optional_imports -from chart_studio.plotly import plotly as py +from chartstudio.plotly import plotly as py from unittest import TestCase matplotlylib = optional_imports.get_module('plotly.matplotlylib') diff --git a/chart_studio/tests/test_plot_ly/__init__.py b/chartstudio-package/chartstudio/tests/test_optional/test_utils/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/__init__.py rename to chartstudio-package/chartstudio/tests/test_optional/test_utils/__init__.py diff --git a/chart_studio/tests/test_optional/test_utils/test_utils.py b/chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py similarity index 95% rename from chart_studio/tests/test_optional/test_utils/test_utils.py rename to chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py index 0af99a87be4..63ab9a38bae 100644 --- a/chart_studio/tests/test_optional/test_utils/test_utils.py +++ b/chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py @@ -2,7 +2,7 @@ from unittest import TestCase import _plotly_utils.utils -from chart_studio.grid_objs import Column +from chartstudio.grid_objs import Column from plotly import utils from plotly.tests.test_optional.test_utils.test_utils import numeric_list, \ mixed_list, np_list diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v1/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_api/test_v1/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_api/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py similarity index 95% rename from chart_studio/tests/test_plot_ly/test_api/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py index 5a2ce755612..c36a2c72a4f 100644 --- a/chart_studio/tests/test_plot_ly/test_api/__init__.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py @@ -2,8 +2,8 @@ from requests import Response -from chart_studio.session import sign_in -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.session import sign_in +from chartstudio.tests.utils import PlotlyTestCase import sys diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py similarity index 89% rename from chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py index 2ce3fe66df2..712d4c836d8 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py @@ -1,8 +1,8 @@ from __future__ import absolute_import from plotly import version -from chart_studio.api.v1 import clientresp -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v1 import clientresp +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class Duck(object): @@ -16,11 +16,11 @@ def setUp(self): super(ClientrespTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v1.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v1.utils.requests.request') self.request_mock.return_value = self.get_response(b'{}', 200) # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v1.utils.validate_response') + self.mock('chartstudio.api.v1.utils.validate_response') def test_data_only(self): data = [{'y': [3, 5], 'name': Duck()}] diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py similarity index 93% rename from chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py index 8fb761de550..89f3194b3bf 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py @@ -4,13 +4,13 @@ import json as _json from requests.exceptions import ConnectionError -from chart_studio.api.utils import to_native_utf8_string -from chart_studio.api.v1 import utils -from chart_studio.exceptions import PlotlyRequestError +from chartstudio.api.utils import to_native_utf8_string +from chartstudio.api.v1 import utils +from chartstudio.exceptions import PlotlyRequestError from _plotly_utils.exceptions import PlotlyError -from chart_studio.session import sign_in -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.session import sign_in +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.tests.utils import PlotlyTestCase import sys @@ -142,13 +142,13 @@ def setUp(self): proxy_password='hydrated', plotly_proxy_authorization=False) # Mock the actual api call, we don't want to do network tests here. - patcher = patch('chart_studio.api.v1.utils.requests.request') + patcher = patch('chartstudio.api.v1.utils.requests.request') self.request_mock = patcher.start() self.addCleanup(patcher.stop) self.request_mock.return_value = MagicMock(Response) # Mock the validation function since we test that elsewhere. - patcher = patch('chart_studio.api.v1.utils.validate_response') + patcher = patch('chartstudio.api.v1.utils.validate_response') self.validate_response_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chart_studio/tests/test_plot_ly/test_dashboard/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_dashboard/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py similarity index 93% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py index e911af4cbc9..74c5dbe9670 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chart_studio.api.v2 import files -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import files +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class FilesTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(FilesTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_retrieve(self): files.retrieve('hodor:88') diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py similarity index 93% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py index 0d0780f2b22..ac6c26e11b2 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chart_studio.api.v2 import folders -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import folders +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class FoldersTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(FoldersTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_create(self): path = '/foo/man/bar/' diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py similarity index 96% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py index aa3d06bd6c1..da111b0d236 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py @@ -2,8 +2,8 @@ import json as _json -from chart_studio.api.v2 import grids -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import grids +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class GridsTest(PlotlyApiTestCase): @@ -12,11 +12,11 @@ def setUp(self): super(GridsTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_create(self): filename = 'a grid' diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py similarity index 80% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py index 11f4f90c9e1..05eca116242 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py @@ -2,8 +2,8 @@ import json as _json -from chart_studio.api.v2 import images -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import images +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class ImagesTest(PlotlyApiTestCase): @@ -12,11 +12,11 @@ def setUp(self): super(ImagesTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_create(self): diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py similarity index 75% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py index e79798c504c..6be3c030d39 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chart_studio.api.v2 import plot_schema -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import plot_schema +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class PlotSchemaTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(PlotSchemaTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_retrieve(self): diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py similarity index 93% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py index ed4157226f1..2a2db2f8554 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chart_studio.api.v2 import plots -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import plots +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class PlotsTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(PlotsTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_create(self): filename = 'a plot' diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py similarity index 73% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py index 5e787424437..d51f5aa9f09 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chart_studio.api.v2 import users -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.v2 import users +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class UsersTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(UsersTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chart_studio.api.v2.utils.validate_response') + self.mock('chartstudio.api.v2.utils.validate_response') def test_current(self): users.current() diff --git a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py similarity index 95% rename from chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py index f8bb29ec345..91d10b888a9 100644 --- a/chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py @@ -4,11 +4,11 @@ from requests.exceptions import ConnectionError from plotly import version -from chart_studio.api.utils import to_native_utf8_string -from chart_studio.api.v2 import utils -from chart_studio.exceptions import PlotlyRequestError -from chart_studio.session import sign_in -from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chartstudio.api.utils import to_native_utf8_string +from chartstudio.api.v2 import utils +from chartstudio.exceptions import PlotlyRequestError +from chartstudio.session import sign_in +from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase class MakeParamsTest(PlotlyApiTestCase): @@ -191,12 +191,12 @@ def setUp(self): super(RequestTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') + self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. self.validate_response_mock = self.mock( - 'chart_studio.api.v2.utils.validate_response') + 'chartstudio.api.v2.utils.validate_response') self.method = 'get' self.url = 'https://foo.bar.does.not.exist.anywhere' diff --git a/chart_studio/tests/test_plot_ly/test_file/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_file/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py similarity index 98% rename from chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py index 184f788b1fe..2419aeabe6a 100644 --- a/chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py @@ -9,7 +9,7 @@ from unittest import TestCase from _plotly_utils.exceptions import PlotlyError -import chart_studio.dashboard_objs.dashboard_objs as dashboard +import chartstudio.dashboard_objs.dashboard_objs as dashboard class TestDashboard(TestCase): diff --git a/chart_studio/tests/test_plot_ly/test_get_requests/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_get_requests/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_file/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_file/test_file.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py similarity index 91% rename from chart_studio/tests/test_plot_ly/test_file/test_file.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py index c46383d0119..9cfc1d5b9a5 100644 --- a/chart_studio/tests/test_plot_ly/test_file/test_file.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py @@ -10,9 +10,9 @@ from nose.plugins.attrib import attr -from chart_studio import plotly as py -from chart_studio.exceptions import PlotlyRequestError -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio import plotly as py +from chartstudio.exceptions import PlotlyRequestError +from chartstudio.tests.utils import PlotlyTestCase @attr('slow') diff --git a/chart_studio/tests/test_plot_ly/test_get_figure/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_get_figure/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py similarity index 95% rename from chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py index b23288b8b4d..c69dfbdd0b1 100644 --- a/chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py @@ -13,9 +13,9 @@ from nose.plugins.attrib import attr import _plotly_utils.exceptions -from chart_studio import exceptions -from chart_studio.plotly import plotly as py -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio import exceptions +from chartstudio.plotly import plotly as py +from chartstudio.tests.utils import PlotlyTestCase def is_trivial(obj): diff --git a/chart_studio/tests/test_plot_ly/test_grid/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_grid/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py similarity index 98% rename from chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py index 863afc90a58..aef2a5e30dc 100644 --- a/chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py @@ -12,7 +12,7 @@ from nose.plugins.attrib import attr import json as _json -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.tests.utils import PlotlyTestCase default_headers = {'plotly-username': '', 'plotly-apikey': '', diff --git a/chart_studio/tests/test_plot_ly/test_image/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_image/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_grid/test_grid.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py similarity index 95% rename from chart_studio/tests/test_plot_ly/test_grid/test_grid.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py index 601c02ed2e2..e093192cc56 100644 --- a/chart_studio/tests/test_plot_ly/test_grid/test_grid.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py @@ -13,13 +13,13 @@ from nose.plugins.attrib import attr -from chart_studio import plotly as py -from chart_studio.exceptions import InputError, PlotlyRequestError +from chartstudio import plotly as py +from chartstudio.exceptions import InputError, PlotlyRequestError from _plotly_utils.exceptions import PlotlyError from plotly.graph_objs import Scatter -from chart_studio.grid_objs import Column, Grid -from chart_studio.plotly import parse_grid_id_args -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.grid_objs import Column, Grid +from chartstudio.plotly import parse_grid_id_args +from chartstudio.tests.utils import PlotlyTestCase def random_filename(): diff --git a/chart_studio/tests/test_plot_ly/test_meta/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_meta/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_image/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_image/test_image.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py similarity index 96% rename from chart_studio/tests/test_plot_ly/test_image/test_image.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py index 4c74bc753a3..09c43b329ac 100644 --- a/chart_studio/tests/test_plot_ly/test_image/test_image.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py @@ -9,8 +9,8 @@ from nose.plugins.attrib import attr import _plotly_utils.exceptions -from chart_studio.plotly import plotly as py -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.plotly import plotly as py +from chartstudio.tests.utils import PlotlyTestCase @attr('slow') diff --git a/chart_studio/tests/test_plot_ly/test_session/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_session/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_meta/test_meta.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py similarity index 89% rename from chart_studio/tests/test_plot_ly/test_meta/test_meta.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py index 3c8010dded2..b65bf23f1d5 100644 --- a/chart_studio/tests/test_plot_ly/test_meta/test_meta.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py @@ -13,10 +13,10 @@ from nose.plugins.attrib import attr from unittest import skip -from chart_studio import plotly as py -from chart_studio.exceptions import PlotlyRequestError -from chart_studio.grid_objs import Column, Grid -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio import plotly as py +from chartstudio.exceptions import PlotlyRequestError +from chartstudio.grid_objs import Column, Grid +from chartstudio.tests.utils import PlotlyTestCase class MetaTest(PlotlyTestCase): diff --git a/chart_studio/tests/test_plot_ly/test_plotly/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_plotly/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py similarity index 92% rename from chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py index 628b047d373..53a24d15cde 100644 --- a/chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py @@ -1,10 +1,10 @@ from __future__ import absolute_import import _plotly_utils.exceptions -from chart_studio import plotly as py, exceptions -import chart_studio.session as session -import chart_studio.tools as tls -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio import plotly as py, exceptions +import chartstudio.session as session +import chartstudio.tools as tls +from chartstudio.tests.utils import PlotlyTestCase import sys @@ -19,7 +19,7 @@ class TestSignIn(PlotlyTestCase): def setUp(self): super(TestSignIn, self).setUp() - patcher = patch('chart_studio.api.v2.users.current') + patcher = patch('chartstudio.api.v2.users.current') self.users_current_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chart_studio/tests/test_plot_ly/test_plotly/test_plot.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py similarity index 98% rename from chart_studio/tests/test_plot_ly/test_plotly/test_plot.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py index 6c0bd8934c3..9c590d80f9f 100644 --- a/chart_studio/tests/test_plot_ly/test_plotly/test_plot.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py @@ -15,13 +15,13 @@ from nose.plugins.attrib import attr -import chart_studio.tools as tls +import chartstudio.tools as tls import plotly.tools -from chart_studio import session -from chart_studio.tests.utils import PlotlyTestCase -from chart_studio.plotly import plotly as py +from chartstudio import session +from chartstudio.tests.utils import PlotlyTestCase +from chartstudio.plotly import plotly as py from _plotly_utils.exceptions import PlotlyError, PlotlyEmptyDataError -from chart_studio.files import CONFIG_FILE +from chartstudio.files import CONFIG_FILE # import from mock @@ -285,7 +285,7 @@ def setUp(self): super(TestPlotOptionLogic, self).setUp() # Make sure we don't hit sign-in validation failures. - patcher = patch('chart_studio.api.v2.users.current') + patcher = patch('chartstudio.api.v2.users.current') self.users_current_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chart_studio/tests/test_plot_ly/test_spectacle_presentation/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_spectacle_presentation/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_session/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_session/test_session.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py similarity index 82% rename from chart_studio/tests/test_plot_ly/test_session/test_session.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py index ae1c6a67c57..36fa66c3899 100644 --- a/chart_studio/tests/test_plot_ly/test_session/test_session.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py @@ -1,9 +1,9 @@ from __future__ import absolute_import -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.tests.utils import PlotlyTestCase -from chart_studio import session -from chart_studio.session import update_session_plot_options, SHARING_OPTIONS +from chartstudio import session +from chartstudio.session import update_session_plot_options, SHARING_OPTIONS from _plotly_utils.exceptions import PlotlyError @@ -26,7 +26,7 @@ def test_update_session_plot_options_valid_sharing_argument(self): # _session['plot_options'] should contain sharing key after # update_session_plot_options is called by correct arguments # 'public, 'private' or 'secret' - from chart_studio.session import _session + from chartstudio.session import _session for key in SHARING_OPTIONS: kwargs = {'sharing': key} update_session_plot_options(**kwargs) diff --git a/chart_studio/tests/test_plot_ly/test_stream/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/__init__.py similarity index 100% rename from chart_studio/tests/test_plot_ly/test_stream/__init__.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/__init__.py diff --git a/chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py similarity index 98% rename from chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py index b1f9431783c..5150b4ec3c8 100644 --- a/chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py @@ -9,8 +9,8 @@ from unittest import TestCase from _plotly_utils.exceptions import PlotlyError -import chart_studio -import chart_studio.presentation_objs as pres +import chartstudio +import chartstudio.presentation_objs as pres class TestPresentation(TestCase): @@ -21,7 +21,7 @@ def test_invalid_style(self): """ self.assertRaisesRegexp( - PlotlyError, chart_studio.presentation_objs.presentation_objs.STYLE_ERROR, + PlotlyError, chartstudio.presentation_objs.presentation_objs.STYLE_ERROR, pres.Presentation, markdown_string, style='foo' ) @@ -35,7 +35,7 @@ def test_open_code_block(self): """ self.assertRaisesRegexp( - PlotlyError, chart_studio.presentation_objs.presentation_objs.CODE_ENV_ERROR, + PlotlyError, chartstudio.presentation_objs.presentation_objs.CODE_ENV_ERROR, pres.Presentation, markdown_string, style='moods' ) @@ -48,7 +48,7 @@ def test_invalid_code_language(self): """ self.assertRaisesRegexp( - PlotlyError, chart_studio.presentation_objs.presentation_objs.LANG_ERROR, pres.Presentation, + PlotlyError, chartstudio.presentation_objs.presentation_objs.LANG_ERROR, pres.Presentation, markdown_string, style='moods' ) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/__init__.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/chart_studio/tests/test_plot_ly/test_stream/test_stream.py b/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py similarity index 98% rename from chart_studio/tests/test_plot_ly/test_stream/test_stream.py rename to chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py index 7d7aac7670a..bdb8617ddf3 100644 --- a/chart_studio/tests/test_plot_ly/test_stream/test_stream.py +++ b/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py @@ -8,9 +8,9 @@ from nose.plugins.attrib import attr -from chart_studio import plotly as py +from chartstudio import plotly as py from plotly.graph_objs import (Layout, Scatter, Stream) -from chart_studio.tests.utils import PlotlyTestCase +from chartstudio.tests.utils import PlotlyTestCase un = 'PythonAPI' ak = 'ubpiol2cve' diff --git a/chart_studio/tests/utils.py b/chartstudio-package/chartstudio/tests/utils.py similarity index 94% rename from chart_studio/tests/utils.py rename to chartstudio-package/chartstudio/tests/utils.py index b840cc3699f..6f8b58739d0 100644 --- a/chart_studio/tests/utils.py +++ b/chartstudio-package/chartstudio/tests/utils.py @@ -1,7 +1,7 @@ import copy from unittest import TestCase -from chart_studio import session, files, utils +from chartstudio import session, files, utils from plotly.files import ensure_writable_plotly_dir class PlotlyTestCase(TestCase): @@ -49,4 +49,4 @@ def stash_session(self): def restore_session(self): session._session.clear() # clear and update to preserve references. - session._session.update(self._session) \ No newline at end of file + session._session.update(self._session) diff --git a/chart_studio/tools.py b/chartstudio-package/chartstudio/tools.py similarity index 99% rename from chart_studio/tools.py rename to chartstudio-package/chartstudio/tools.py index d04a23c3ea1..539609eec42 100644 --- a/chart_studio/tools.py +++ b/chartstudio-package/chartstudio/tools.py @@ -18,8 +18,8 @@ import _plotly_utils.exceptions from _plotly_utils.files import ensure_writable_plotly_dir -from chart_studio import session, utils -from chart_studio.files import CONFIG_FILE, CREDENTIALS_FILE, FILE_CONTENT +from chartstudio import session, utils +from chartstudio.files import CONFIG_FILE, CREDENTIALS_FILE, FILE_CONTENT ipython_core_display = optional_imports.get_module('IPython.core.display') sage_salvus = optional_imports.get_module('sage_salvus') @@ -396,4 +396,4 @@ def __init__(self, url, width, height): super(PlotlyDisplay, self).__init__(data=self.embed_code) def _repr_html_(self): - return self.embed_code \ No newline at end of file + return self.embed_code diff --git a/chart_studio/utils.py b/chartstudio-package/chartstudio/utils.py similarity index 100% rename from chart_studio/utils.py rename to chartstudio-package/chartstudio/utils.py diff --git a/chartstudio-package/chartstudio/widgets/__init__.py b/chartstudio-package/chartstudio/widgets/__init__.py new file mode 100644 index 00000000000..09bcb6da533 --- /dev/null +++ b/chartstudio-package/chartstudio/widgets/__init__.py @@ -0,0 +1,3 @@ +from __future__ import absolute_import + +from chartstudio.widgets.graph_widget import GraphWidget diff --git a/chart_studio/widgets/graph_widget.py b/chartstudio-package/chartstudio/widgets/graph_widget.py similarity index 99% rename from chart_studio/widgets/graph_widget.py rename to chartstudio-package/chartstudio/widgets/graph_widget.py index e1b08087319..2cb6dec34b3 100644 --- a/chart_studio/widgets/graph_widget.py +++ b/chartstudio-package/chartstudio/widgets/graph_widget.py @@ -14,7 +14,7 @@ from IPython.display import Javascript, display import plotly.tools -from chart_studio import plotly as py, tools, utils +from chartstudio import plotly as py, tools, utils from plotly.graph_objs import Figure # Load JS widget code diff --git a/chartstudio-package/setup.py b/chartstudio-package/setup.py new file mode 100644 index 00000000000..c73c6064d63 --- /dev/null +++ b/chartstudio-package/setup.py @@ -0,0 +1,48 @@ +from setuptools import setup + + +def readme(): + with open("README.md") as f: + return f.read() + + +setup( + name="chartstudio", + version="4.0.0a1", + author="Chris P", + author_email="chris@plot.ly", + maintainer="Jon Mease", + maintainer_email="jon@plot.ly", + url="https://plot.ly/python/", + project_urls={"Github": "https://github.com/plotly/plotly.py"}, + description="An open-source, interactive graphing library for Python", + long_description=readme(), + long_description_content_type="text/markdown", + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Topic :: Scientific/Engineering :: Visualization", + ], + license="MIT", + packages=[ + "chartstudio", + "chartstudio.api", + "chartstudio.api.v1", + "chartstudio.api.v2", + "chartstudio.dashboard_objs", + "chartstudio.grid_objs", + "chartstudio.plotly", + "chartstudio.plotly.chunked_requests", + "chartstudio.presentation_objs", + "chartstudio.widgets", + ], + install_requires=["plotly", "requests", "retrying>=1.3.3", "six"], + zip_safe=False, +) diff --git a/specs/GraphWidgetSpec.md b/chartstudio-package/specs/GraphWidgetSpec.md similarity index 100% rename from specs/GraphWidgetSpec.md rename to chartstudio-package/specs/GraphWidgetSpec.md diff --git a/specs/gridspec.md b/chartstudio-package/specs/gridspec.md similarity index 100% rename from specs/gridspec.md rename to chartstudio-package/specs/gridspec.md From 3afb898754b0a6ac8e55f9d760825e402b6a51ce Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 14:26:05 -0400 Subject: [PATCH 02/34] Move plotly package under plotly-package directory --- MANIFEST.in => plotly-package/MANIFEST.in | 0 README.md => plotly-package/README.md | 0 .../_plotly_future_}/__init__.py | 10 +- .../_plotly_future_}/extract_chart_studio.py | 0 .../_plotly_future_}/orca_defaults.py | 0 .../_plotly_future_}/remove_deprecations.py | 0 .../_plotly_future_}/renderer_defaults.py | 0 .../_plotly_future_}/template_defaults.py | 0 .../_plotly_future_}/timezones.py | 0 .../_plotly_future_}/trace_uids.py | 0 .../_plotly_future_}/v4.py | 0 .../_plotly_future_}/v4_subplots.py | 0 .../_plotly_utils}/README.md | 0 .../_plotly_utils}/__init__.py | 0 .../_plotly_utils}/basevalidators.py | 2 +- .../_plotly_utils}/exceptions.py | 0 .../_plotly_utils}/files.py | 0 .../_plotly_utils}/optional_imports.py | 0 .../_plotly_utils}/tests/__init__.py | 0 .../tests/resources/1x1-black.png | Bin .../tests/validators/__init__.py | 0 .../tests/validators/test_angle_validator.py | 0 .../tests/validators/test_any_validator.py | 0 .../validators/test_basetraces_validator.py | 0 .../validators/test_boolean_validator.py | 0 .../tests/validators/test_color_validator.py | 0 .../validators/test_colorlist_validator.py | 0 .../validators/test_colorscale_validator.py | 0 .../validators/test_compound_validator.py | 0 .../test_compoundarray_validator.py | 0 .../tests/validators/test_dash_validator.py | 0 .../validators/test_dataarray_validator.py | 0 .../validators/test_enumerated_validator.py | 0 .../validators/test_flaglist_validator.py | 0 .../validators/test_imageuri_validator.py | 0 .../validators/test_infoarray_validator.py | 0 .../validators/test_integer_validator.py | 0 .../validators/test_literal_validator.py | 0 .../tests/validators/test_number_validator.py | 0 .../validators/test_pandas_series_input.py | 0 .../tests/validators/test_string_validator.py | 0 .../validators/test_subplotid_validator.py | 0 .../validators/test_validators_common.py | 0 .../tests/validators/test_xarray_input.py | 0 .../_plotly_utils}/utils.py | 0 .../optional-requirements.txt | 0 {plotly => plotly-package/plotly}/__init__.py | 0 .../plotly}/_docstring_gen.py | 0 {plotly => plotly-package/plotly}/_version.py | 0 .../plotly}/_widget_version.py | 0 .../plotly}/animation.py | 0 .../plotly}/api/__init__.py | 0 .../plotly}/api/utils.py | 0 {plotly => plotly-package/plotly}/api/v1.py | 0 {plotly => plotly-package/plotly}/api/v2.py | 0 .../plotly}/basedatatypes.py | 0 .../plotly}/basewidget.py | 0 .../plotly}/callbacks.py | 0 {plotly => plotly-package/plotly}/colors.py | 0 {plotly => plotly-package/plotly}/config.py | 0 .../plotly}/dashboard_objs.py | 0 .../plotly}/exceptions.py | 0 .../plotly}/figure_factory/README.md | 0 .../plotly}/figure_factory/_2d_density.py | 0 .../plotly}/figure_factory/__init__.py | 0 .../figure_factory/_annotated_heatmap.py | 0 .../plotly}/figure_factory/_bullet.py | 0 .../plotly}/figure_factory/_candlestick.py | 0 .../figure_factory/_county_choropleth.py | 0 .../plotly}/figure_factory/_dendrogram.py | 0 .../plotly}/figure_factory/_distplot.py | 0 .../plotly}/figure_factory/_facet_grid.py | 0 .../plotly}/figure_factory/_gantt.py | 0 .../plotly}/figure_factory/_ohlc.py | 0 .../plotly}/figure_factory/_quiver.py | 0 .../plotly}/figure_factory/_scatterplot.py | 0 .../plotly}/figure_factory/_streamline.py | 0 .../plotly}/figure_factory/_table.py | 0 .../figure_factory/_ternary_contour.py | 0 .../plotly}/figure_factory/_trisurf.py | 0 .../plotly}/figure_factory/_violin.py | 0 .../plotly}/figure_factory/utils.py | 0 {plotly => plotly-package/plotly}/files.py | 0 .../plotly}/graph_objs/__init__.py | 0 .../plotly}/graph_objs/_deprecations.py | 0 .../plotly}/graph_objs/_figure.py | 0 .../plotly}/graph_objs/_figurewidget.py | 0 .../plotly}/graph_objs/area/__init__.py | 0 .../graph_objs/area/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/bar/__init__.py | 0 .../graph_objs/bar/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/bar/marker/__init__.py | 0 .../bar/marker/colorbar/__init__.py | 0 .../bar/marker/colorbar/title/__init__.py | 0 .../graph_objs/bar/selected/__init__.py | 0 .../graph_objs/bar/unselected/__init__.py | 0 .../plotly}/graph_objs/barpolar/__init__.py | 0 .../barpolar/hoverlabel/__init__.py | 0 .../graph_objs/barpolar/marker/__init__.py | 0 .../barpolar/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../graph_objs/barpolar/selected/__init__.py | 0 .../barpolar/unselected/__init__.py | 0 .../plotly}/graph_objs/box/__init__.py | 0 .../graph_objs/box/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/box/marker/__init__.py | 0 .../graph_objs/box/selected/__init__.py | 0 .../graph_objs/box/unselected/__init__.py | 0 .../graph_objs/candlestick/__init__.py | 0 .../candlestick/decreasing/__init__.py | 0 .../candlestick/hoverlabel/__init__.py | 0 .../candlestick/increasing/__init__.py | 0 .../plotly}/graph_objs/carpet/__init__.py | 0 .../graph_objs/carpet/aaxis/__init__.py | 0 .../graph_objs/carpet/aaxis/title/__init__.py | 0 .../graph_objs/carpet/baxis/__init__.py | 0 .../graph_objs/carpet/baxis/title/__init__.py | 0 .../graph_objs/carpet/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/choropleth/__init__.py | 0 .../choropleth/colorbar/__init__.py | 0 .../choropleth/colorbar/title/__init__.py | 0 .../choropleth/hoverlabel/__init__.py | 0 .../graph_objs/choropleth/marker/__init__.py | 0 .../choropleth/selected/__init__.py | 0 .../choropleth/unselected/__init__.py | 0 .../plotly}/graph_objs/cone/__init__.py | 0 .../graph_objs/cone/colorbar/__init__.py | 0 .../cone/colorbar/title/__init__.py | 0 .../graph_objs/cone/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/contour/__init__.py | 0 .../graph_objs/contour/colorbar/__init__.py | 0 .../contour/colorbar/title/__init__.py | 0 .../graph_objs/contour/contours/__init__.py | 0 .../graph_objs/contour/hoverlabel/__init__.py | 0 .../graph_objs/contourcarpet/__init__.py | 0 .../contourcarpet/colorbar/__init__.py | 0 .../contourcarpet/colorbar/title/__init__.py | 0 .../contourcarpet/contours/__init__.py | 0 .../contourcarpet/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/funnel/__init__.py | 0 .../graph_objs/funnel/connector/__init__.py | 0 .../graph_objs/funnel/hoverlabel/__init__.py | 0 .../graph_objs/funnel/marker/__init__.py | 0 .../funnel/marker/colorbar/__init__.py | 0 .../funnel/marker/colorbar/title/__init__.py | 0 .../plotly}/graph_objs/funnelarea/__init__.py | 0 .../funnelarea/hoverlabel/__init__.py | 0 .../graph_objs/funnelarea/marker/__init__.py | 0 .../graph_objs/funnelarea/title/__init__.py | 0 .../plotly}/graph_objs/graph_objs.py | 0 .../plotly}/graph_objs/heatmap/__init__.py | 0 .../graph_objs/heatmap/colorbar/__init__.py | 0 .../heatmap/colorbar/title/__init__.py | 0 .../graph_objs/heatmap/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/heatmapgl/__init__.py | 0 .../graph_objs/heatmapgl/colorbar/__init__.py | 0 .../heatmapgl/colorbar/title/__init__.py | 0 .../heatmapgl/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/histogram/__init__.py | 0 .../histogram/hoverlabel/__init__.py | 0 .../graph_objs/histogram/marker/__init__.py | 0 .../histogram/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../graph_objs/histogram/selected/__init__.py | 0 .../histogram/unselected/__init__.py | 0 .../graph_objs/histogram2d/__init__.py | 0 .../histogram2d/colorbar/__init__.py | 0 .../histogram2d/colorbar/title/__init__.py | 0 .../histogram2d/hoverlabel/__init__.py | 0 .../graph_objs/histogram2dcontour/__init__.py | 0 .../histogram2dcontour/colorbar/__init__.py | 0 .../colorbar/title/__init__.py | 0 .../histogram2dcontour/contours/__init__.py | 0 .../histogram2dcontour/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/isosurface/__init__.py | 0 .../graph_objs/isosurface/caps/__init__.py | 0 .../isosurface/colorbar/__init__.py | 0 .../isosurface/colorbar/title/__init__.py | 0 .../isosurface/hoverlabel/__init__.py | 0 .../graph_objs/isosurface/slices/__init__.py | 0 .../plotly}/graph_objs/layout/__init__.py | 0 .../graph_objs/layout/annotation/__init__.py | 0 .../layout/annotation/hoverlabel/__init__.py | 0 .../graph_objs/layout/coloraxis/__init__.py | 0 .../layout/coloraxis/colorbar/__init__.py | 0 .../coloraxis/colorbar/title/__init__.py | 0 .../plotly}/graph_objs/layout/geo/__init__.py | 0 .../layout/geo/projection/__init__.py | 0 .../graph_objs/layout/grid/__init__.py | 0 .../graph_objs/layout/hoverlabel/__init__.py | 0 .../graph_objs/layout/legend/__init__.py | 0 .../graph_objs/layout/mapbox/__init__.py | 0 .../layout/mapbox/layer/__init__.py | 0 .../layout/mapbox/layer/symbol/__init__.py | 0 .../graph_objs/layout/polar/__init__.py | 0 .../layout/polar/angularaxis/__init__.py | 0 .../layout/polar/radialaxis/__init__.py | 0 .../layout/polar/radialaxis/title/__init__.py | 0 .../graph_objs/layout/scene/__init__.py | 0 .../layout/scene/annotation/__init__.py | 0 .../scene/annotation/hoverlabel/__init__.py | 0 .../layout/scene/camera/__init__.py | 0 .../graph_objs/layout/scene/xaxis/__init__.py | 0 .../layout/scene/xaxis/title/__init__.py | 0 .../graph_objs/layout/scene/yaxis/__init__.py | 0 .../layout/scene/yaxis/title/__init__.py | 0 .../graph_objs/layout/scene/zaxis/__init__.py | 0 .../layout/scene/zaxis/title/__init__.py | 0 .../graph_objs/layout/shape/__init__.py | 0 .../graph_objs/layout/slider/__init__.py | 0 .../layout/slider/currentvalue/__init__.py | 0 .../graph_objs/layout/template/__init__.py | 0 .../layout/template/data/__init__.py | 0 .../graph_objs/layout/ternary/__init__.py | 0 .../layout/ternary/aaxis/__init__.py | 0 .../layout/ternary/aaxis/title/__init__.py | 0 .../layout/ternary/baxis/__init__.py | 0 .../layout/ternary/baxis/title/__init__.py | 0 .../layout/ternary/caxis/__init__.py | 0 .../layout/ternary/caxis/title/__init__.py | 0 .../graph_objs/layout/title/__init__.py | 0 .../graph_objs/layout/updatemenu/__init__.py | 0 .../graph_objs/layout/xaxis/__init__.py | 0 .../layout/xaxis/rangeselector/__init__.py | 0 .../layout/xaxis/rangeslider/__init__.py | 0 .../graph_objs/layout/xaxis/title/__init__.py | 0 .../graph_objs/layout/yaxis/__init__.py | 0 .../graph_objs/layout/yaxis/title/__init__.py | 0 .../plotly}/graph_objs/mesh3d/__init__.py | 0 .../graph_objs/mesh3d/colorbar/__init__.py | 0 .../mesh3d/colorbar/title/__init__.py | 0 .../graph_objs/mesh3d/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/ohlc/__init__.py | 0 .../graph_objs/ohlc/decreasing/__init__.py | 0 .../graph_objs/ohlc/hoverlabel/__init__.py | 0 .../graph_objs/ohlc/increasing/__init__.py | 0 .../plotly}/graph_objs/parcats/__init__.py | 0 .../graph_objs/parcats/line/__init__.py | 0 .../parcats/line/colorbar/__init__.py | 0 .../parcats/line/colorbar/title/__init__.py | 0 .../plotly}/graph_objs/parcoords/__init__.py | 0 .../graph_objs/parcoords/line/__init__.py | 0 .../parcoords/line/colorbar/__init__.py | 0 .../parcoords/line/colorbar/title/__init__.py | 0 .../plotly}/graph_objs/pie/__init__.py | 0 .../graph_objs/pie/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/pie/marker/__init__.py | 0 .../plotly}/graph_objs/pie/title/__init__.py | 0 .../plotly}/graph_objs/pointcloud/__init__.py | 0 .../pointcloud/hoverlabel/__init__.py | 0 .../graph_objs/pointcloud/marker/__init__.py | 0 .../plotly}/graph_objs/sankey/__init__.py | 0 .../graph_objs/sankey/hoverlabel/__init__.py | 0 .../graph_objs/sankey/link/__init__.py | 0 .../sankey/link/hoverlabel/__init__.py | 0 .../graph_objs/sankey/node/__init__.py | 0 .../sankey/node/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/scatter/__init__.py | 0 .../graph_objs/scatter/hoverlabel/__init__.py | 0 .../graph_objs/scatter/marker/__init__.py | 0 .../scatter/marker/colorbar/__init__.py | 0 .../scatter/marker/colorbar/title/__init__.py | 0 .../graph_objs/scatter/selected/__init__.py | 0 .../graph_objs/scatter/unselected/__init__.py | 0 .../plotly}/graph_objs/scatter3d/__init__.py | 0 .../scatter3d/hoverlabel/__init__.py | 0 .../graph_objs/scatter3d/line/__init__.py | 0 .../scatter3d/line/colorbar/__init__.py | 0 .../scatter3d/line/colorbar/title/__init__.py | 0 .../graph_objs/scatter3d/marker/__init__.py | 0 .../scatter3d/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scatter3d/projection/__init__.py | 0 .../graph_objs/scattercarpet/__init__.py | 0 .../scattercarpet/hoverlabel/__init__.py | 0 .../scattercarpet/marker/__init__.py | 0 .../scattercarpet/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scattercarpet/selected/__init__.py | 0 .../scattercarpet/unselected/__init__.py | 0 .../plotly}/graph_objs/scattergeo/__init__.py | 0 .../scattergeo/hoverlabel/__init__.py | 0 .../graph_objs/scattergeo/marker/__init__.py | 0 .../scattergeo/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scattergeo/selected/__init__.py | 0 .../scattergeo/unselected/__init__.py | 0 .../plotly}/graph_objs/scattergl/__init__.py | 0 .../scattergl/hoverlabel/__init__.py | 0 .../graph_objs/scattergl/marker/__init__.py | 0 .../scattergl/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../graph_objs/scattergl/selected/__init__.py | 0 .../scattergl/unselected/__init__.py | 0 .../graph_objs/scattermapbox/__init__.py | 0 .../scattermapbox/hoverlabel/__init__.py | 0 .../scattermapbox/marker/__init__.py | 0 .../scattermapbox/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scattermapbox/selected/__init__.py | 0 .../scattermapbox/unselected/__init__.py | 0 .../graph_objs/scatterpolar/__init__.py | 0 .../scatterpolar/hoverlabel/__init__.py | 0 .../scatterpolar/marker/__init__.py | 0 .../scatterpolar/marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scatterpolar/selected/__init__.py | 0 .../scatterpolar/unselected/__init__.py | 0 .../graph_objs/scatterpolargl/__init__.py | 0 .../scatterpolargl/hoverlabel/__init__.py | 0 .../scatterpolargl/marker/__init__.py | 0 .../marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scatterpolargl/selected/__init__.py | 0 .../scatterpolargl/unselected/__init__.py | 0 .../graph_objs/scatterternary/__init__.py | 0 .../scatterternary/hoverlabel/__init__.py | 0 .../scatterternary/marker/__init__.py | 0 .../marker/colorbar/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../scatterternary/selected/__init__.py | 0 .../scatterternary/unselected/__init__.py | 0 .../plotly}/graph_objs/splom/__init__.py | 0 .../graph_objs/splom/dimension/__init__.py | 0 .../graph_objs/splom/hoverlabel/__init__.py | 0 .../graph_objs/splom/marker/__init__.py | 0 .../splom/marker/colorbar/__init__.py | 0 .../splom/marker/colorbar/title/__init__.py | 0 .../graph_objs/splom/selected/__init__.py | 0 .../graph_objs/splom/unselected/__init__.py | 0 .../plotly}/graph_objs/streamtube/__init__.py | 0 .../streamtube/colorbar/__init__.py | 0 .../streamtube/colorbar/title/__init__.py | 0 .../streamtube/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/sunburst/__init__.py | 0 .../sunburst/hoverlabel/__init__.py | 0 .../graph_objs/sunburst/marker/__init__.py | 0 .../plotly}/graph_objs/surface/__init__.py | 0 .../graph_objs/surface/colorbar/__init__.py | 0 .../surface/colorbar/title/__init__.py | 0 .../graph_objs/surface/contours/__init__.py | 0 .../graph_objs/surface/contours/x/__init__.py | 0 .../graph_objs/surface/contours/y/__init__.py | 0 .../graph_objs/surface/contours/z/__init__.py | 0 .../graph_objs/surface/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/table/__init__.py | 0 .../graph_objs/table/cells/__init__.py | 0 .../graph_objs/table/header/__init__.py | 0 .../graph_objs/table/hoverlabel/__init__.py | 0 .../plotly}/graph_objs/violin/__init__.py | 0 .../plotly}/graph_objs/violin/box/__init__.py | 0 .../graph_objs/violin/hoverlabel/__init__.py | 0 .../graph_objs/violin/marker/__init__.py | 0 .../graph_objs/violin/selected/__init__.py | 0 .../graph_objs/violin/unselected/__init__.py | 0 .../plotly}/graph_objs/volume/__init__.py | 0 .../graph_objs/volume/caps/__init__.py | 0 .../graph_objs/volume/colorbar/__init__.py | 0 .../volume/colorbar/title/__init__.py | 0 .../graph_objs/volume/hoverlabel/__init__.py | 0 .../graph_objs/volume/slices/__init__.py | 0 .../plotly}/graph_objs/waterfall/__init__.py | 0 .../waterfall/connector/__init__.py | 0 .../waterfall/decreasing/__init__.py | 0 .../waterfall/decreasing/marker/__init__.py | 0 .../waterfall/hoverlabel/__init__.py | 0 .../waterfall/increasing/__init__.py | 0 .../waterfall/increasing/marker/__init__.py | 0 .../graph_objs/waterfall/totals/__init__.py | 0 .../waterfall/totals/marker/__init__.py | 0 .../plotly}/graph_reference.py | 0 .../plotly}/grid_objs.py | 0 .../plotly}/io/__init__.py | 0 .../plotly}/io/_base_renderers.py | 0 {plotly => plotly-package/plotly}/io/_html.py | 0 {plotly => plotly-package/plotly}/io/_json.py | 0 {plotly => plotly-package/plotly}/io/_orca.py | 0 .../plotly}/io/_renderers.py | 0 .../plotly}/io/_templates.py | 0 .../plotly}/io/_utils.py | 0 .../plotly}/io/base_renderers.py | 0 {plotly => plotly-package/plotly}/io/orca.py | 0 .../plotly}/matplotlylib/__init__.py | 0 .../matplotlylib/mplexporter/__init__.py | 0 .../matplotlylib/mplexporter/_py3k_compat.py | 0 .../matplotlylib/mplexporter/exporter.py | 0 .../mplexporter/renderers/__init__.py | 0 .../mplexporter/renderers/base.py | 0 .../mplexporter/renderers/fake_renderer.py | 0 .../mplexporter/renderers/vega_renderer.py | 0 .../mplexporter/renderers/vincent_renderer.py | 0 .../mplexporter/tests/__init__.py | 0 .../mplexporter/tests/test_basic.py | 0 .../mplexporter/tests/test_utils.py | 0 .../plotly}/matplotlylib/mplexporter/tools.py | 0 .../plotly}/matplotlylib/mplexporter/utils.py | 0 .../plotly}/matplotlylib/mpltools.py | 0 .../plotly}/matplotlylib/renderer.py | 0 .../plotly}/offline/__init__.py | 0 .../plotly}/offline/_plotlyjs_version.py | 0 .../plotly}/offline/offline.py | 0 .../plotly}/optional_imports.py | 0 .../package_data/cb_2016_us_county_500k.dbf | Bin .../package_data/cb_2016_us_county_500k.shp | Bin .../package_data/cb_2016_us_county_500k.shx | Bin .../package_data/cb_2016_us_state_500k.dbf | Bin .../package_data/cb_2016_us_state_500k.shp | Bin .../package_data/cb_2016_us_state_500k.shx | Bin .../plotly}/package_data/graphWidget.js | 0 .../package_data/gz_2010_us_050_00_500k.dbf | Bin .../package_data/gz_2010_us_050_00_500k.shp | Bin .../package_data/gz_2010_us_050_00_500k.shx | Bin .../plotly}/package_data/plot-schema.json | 0 .../plotly}/package_data/plotly.min.js | 0 .../package_data/templates/ggplot2.json | 0 .../package_data/templates/plotly.json | 0 .../package_data/templates/plotly_dark.json | 0 .../package_data/templates/plotly_white.json | 0 .../package_data/templates/presentation.json | 0 .../package_data/templates/seaborn.json | 0 .../package_data/templates/xgridoff.json | 0 .../plotly}/plotly/__init__.py | 0 .../plotly}/plotly/chunked_requests.py | 0 .../plotly}/presentation_objs.py | 0 .../plotly}/serializers.py | 0 {plotly => plotly-package/plotly}/session.py | 0 {plotly => plotly-package/plotly}/subplots.py | 0 .../plotly}/tests/__init__.py | 0 .../plotly}/tests/test_core/__init__.py | 0 .../tests/test_core/test_colors/__init__.py | 0 .../test_core/test_colors/test_colors.py | 0 .../test_figure_messages/__init__.py | 0 .../test_figure_messages/test_add_traces.py | 0 .../test_batch_animate.py | 0 .../test_move_delete_traces.py | 0 .../test_figure_messages/test_on_change.py | 0 .../test_plotly_relayout.py | 0 .../test_plotly_restyle.py | 0 .../test_plotly_update.py | 0 .../test_figure_widget_backend/__init__.py | 0 .../test_validate_no_frames.py | 0 .../test_core/test_graph_objs/__init__.py | 0 .../test_graph_objs/test_annotations.py | 0 .../test_graph_objs/test_append_trace.py | 0 .../test_graph_objs/test_constructor.py | 0 .../test_core/test_graph_objs/test_data.py | 0 .../test_graph_objs/test_error_bars.py | 0 .../test_core/test_graph_objs/test_figure.py | 0 .../test_graph_objs/test_figure_properties.py | 0 .../test_core/test_graph_objs/test_frames.py | 0 .../test_graph_objs/test_graph_objs.py | 0 .../test_instantiate_hierarchy.py | 0 .../test_graph_objs/test_layout_subplots.py | 0 .../test_properties_validated.py | 0 .../test_property_assignment.py | 0 .../test_core/test_graph_objs/test_repr.py | 0 .../test_core/test_graph_objs/test_scatter.py | 0 .../test_graph_objs/test_template.py | 0 .../test_graph_objs/test_to_ordered_dict.py | 0 .../test_core/test_graph_objs/test_update.py | 0 .../test_graph_reference/__init__.py | 0 .../test_graph_reference.py | 0 .../test_core/test_offline/test_offline.py | 0 .../test_optional_imports/__init__.py | 0 .../test_optional_imports/exploding_module.py | 0 .../test_optional_imports.py | 0 .../test_subplots/test_get_subplot.py | 0 .../test_subplots/test_make_subplots.py | 0 .../tests/test_core/test_tools/__init__.py | 0 .../test_core/test_tools/test_validate.py | 0 .../test_core/test_update_objects/__init__.py | 0 .../test_update_subplots.py | 0 .../test_update_objects/test_update_traces.py | 0 .../tests/test_core/test_utils/__init__.py | 0 .../tests/test_core/test_utils/test_utils.py | 0 .../tests/test_io/test_deepcopy_pickle.py | 0 .../plotly}/tests/test_io/test_renderers.py | 0 .../tests/test_io/test_to_from_json.py | 0 .../plotly}/tests/test_optional/__init__.py | 0 .../tests/test_optional/optional_utils.py | 0 .../plotly/tests/test_optional/temp-plot.html | 32 + .../test_figure_factory/__init__.py | 0 .../test_figure_factory.py | 0 .../test_optional/test_graph_objs/__init__.py | 0 .../test_optional/test_jupyter/.gitignore | 0 .../test_optional/test_jupyter/README.md | 0 .../fixtures/connected_false.ipynb | 0 .../fixtures/connected_true.ipynb | 0 .../test_jupyter/js_tests/connected_false.js | 0 .../test_jupyter/js_tests/connected_true.js | 0 .../test_optional/test_jupyter/lib/server.js | 0 .../test_jupyter/lib/tape-wrapper.js | 0 .../test_jupyter/package-lock.json | 0 .../test_optional/test_jupyter/package.json | 0 .../test_jupyter/test_jupyter.py | 0 .../test_matplotlylib/__init__.py | 0 .../test_matplotlylib/data/__init__.py | 0 .../test_matplotlylib/data/annotations.py | 0 .../test_matplotlylib/data/axis_scales.py | 0 .../test_matplotlylib/data/bars.py | 0 .../test_matplotlylib/data/data.py | 0 .../test_matplotlylib/data/lines.py | 0 .../test_matplotlylib/data/scatter.py | 0 .../test_matplotlylib/data/subplots.py | 0 .../test_matplotlylib/test_annotations.py | 0 .../test_matplotlylib/test_axis_scales.py | 0 .../test_matplotlylib/test_bars.py | 0 .../test_matplotlylib/test_data.py | 0 .../test_matplotlylib/test_date_times.py | 0 .../test_matplotlylib/test_lines.py | 0 .../test_matplotlylib/test_scatter.py | 0 .../test_matplotlylib/test_subplots.py | 0 .../test_optional/test_offline/__init__.py | 0 .../test_optional/test_offline/temp-plot.html | 0 .../test_offline/test_offline.py | 0 .../test_optional/test_tools/__init__.py | 0 .../test_tools/test_figure_factory.py | 0 .../test_optional/test_utils/__init__.py | 0 .../test_optional/test_utils/test_utils.py | 0 .../plotly}/tests/test_orca/__init__.py | 0 .../tests/test_orca/images/darwin/fig1.eps | 0 .../test_orca/images/darwin/latexfig.eps | 0 .../tests/test_orca/images/darwin/topofig.eps | 0 .../test_orca/images/linux/failed/fig1.eps | 2007 +++++++++++++++++ .../tests/test_orca/images/linux/fig1.eps | 0 .../tests/test_orca/images/linux/latexfig.eps | 0 .../tests/test_orca/images/linux/topofig.eps | 0 .../resources/2011_us_ag_exports.csv | 0 .../tests/test_orca/test_image_renderers.py | 0 .../tests/test_orca/test_orca_server.py | 0 .../plotly}/tests/test_orca/test_to_image.py | 0 .../plotly}/tests/utils.py | 0 {plotly => plotly-package/plotly}/tools.py | 4 +- {plotly => plotly-package/plotly}/utils.py | 0 .../plotly}/validators/__init__.py | 0 .../plotly}/validators/area/__init__.py | 0 .../validators/area/hoverlabel/__init__.py | 0 .../area/hoverlabel/font/__init__.py | 0 .../validators/area/marker/__init__.py | 0 .../validators/area/stream/__init__.py | 0 .../plotly}/validators/bar/__init__.py | 0 .../validators/bar/error_x/__init__.py | 0 .../validators/bar/error_y/__init__.py | 0 .../validators/bar/hoverlabel/__init__.py | 0 .../bar/hoverlabel/font/__init__.py | 0 .../validators/bar/insidetextfont/__init__.py | 0 .../plotly}/validators/bar/marker/__init__.py | 0 .../bar/marker/colorbar/__init__.py | 0 .../bar/marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../bar/marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../validators/bar/marker/line/__init__.py | 0 .../bar/outsidetextfont/__init__.py | 0 .../validators/bar/selected/__init__.py | 0 .../bar/selected/marker/__init__.py | 0 .../bar/selected/textfont/__init__.py | 0 .../plotly}/validators/bar/stream/__init__.py | 0 .../validators/bar/textfont/__init__.py | 0 .../validators/bar/unselected/__init__.py | 0 .../bar/unselected/marker/__init__.py | 0 .../bar/unselected/textfont/__init__.py | 0 .../plotly}/validators/barpolar/__init__.py | 0 .../barpolar/hoverlabel/__init__.py | 0 .../barpolar/hoverlabel/font/__init__.py | 0 .../validators/barpolar/marker/__init__.py | 0 .../barpolar/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../barpolar/marker/line/__init__.py | 0 .../validators/barpolar/selected/__init__.py | 0 .../barpolar/selected/marker/__init__.py | 0 .../barpolar/selected/textfont/__init__.py | 0 .../validators/barpolar/stream/__init__.py | 0 .../barpolar/unselected/__init__.py | 0 .../barpolar/unselected/marker/__init__.py | 0 .../barpolar/unselected/textfont/__init__.py | 0 .../plotly}/validators/box/__init__.py | 0 .../validators/box/hoverlabel/__init__.py | 0 .../box/hoverlabel/font/__init__.py | 0 .../plotly}/validators/box/line/__init__.py | 0 .../plotly}/validators/box/marker/__init__.py | 0 .../validators/box/marker/line/__init__.py | 0 .../validators/box/selected/__init__.py | 0 .../box/selected/marker/__init__.py | 0 .../plotly}/validators/box/stream/__init__.py | 0 .../validators/box/unselected/__init__.py | 0 .../box/unselected/marker/__init__.py | 0 .../validators/candlestick/__init__.py | 0 .../candlestick/decreasing/__init__.py | 0 .../candlestick/decreasing/line/__init__.py | 0 .../candlestick/hoverlabel/__init__.py | 0 .../candlestick/hoverlabel/font/__init__.py | 0 .../candlestick/increasing/__init__.py | 0 .../candlestick/increasing/line/__init__.py | 0 .../validators/candlestick/line/__init__.py | 0 .../validators/candlestick/stream/__init__.py | 0 .../plotly}/validators/carpet/__init__.py | 0 .../validators/carpet/aaxis/__init__.py | 0 .../carpet/aaxis/tickfont/__init__.py | 0 .../carpet/aaxis/tickformatstop/__init__.py | 0 .../validators/carpet/aaxis/title/__init__.py | 0 .../carpet/aaxis/title/font/__init__.py | 0 .../validators/carpet/baxis/__init__.py | 0 .../carpet/baxis/tickfont/__init__.py | 0 .../carpet/baxis/tickformatstop/__init__.py | 0 .../validators/carpet/baxis/title/__init__.py | 0 .../carpet/baxis/title/font/__init__.py | 0 .../validators/carpet/font/__init__.py | 0 .../validators/carpet/hoverlabel/__init__.py | 0 .../carpet/hoverlabel/font/__init__.py | 0 .../validators/carpet/stream/__init__.py | 0 .../plotly}/validators/choropleth/__init__.py | 0 .../choropleth/colorbar/__init__.py | 0 .../choropleth/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../choropleth/colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../choropleth/hoverlabel/__init__.py | 0 .../choropleth/hoverlabel/font/__init__.py | 0 .../validators/choropleth/marker/__init__.py | 0 .../choropleth/marker/line/__init__.py | 0 .../choropleth/selected/__init__.py | 0 .../choropleth/selected/marker/__init__.py | 0 .../validators/choropleth/stream/__init__.py | 0 .../choropleth/unselected/__init__.py | 0 .../choropleth/unselected/marker/__init__.py | 0 .../plotly}/validators/cone/__init__.py | 0 .../validators/cone/colorbar/__init__.py | 0 .../cone/colorbar/tickfont/__init__.py | 0 .../cone/colorbar/tickformatstop/__init__.py | 0 .../cone/colorbar/title/__init__.py | 0 .../cone/colorbar/title/font/__init__.py | 0 .../validators/cone/hoverlabel/__init__.py | 0 .../cone/hoverlabel/font/__init__.py | 0 .../validators/cone/lighting/__init__.py | 0 .../validators/cone/lightposition/__init__.py | 0 .../validators/cone/stream/__init__.py | 0 .../plotly}/validators/contour/__init__.py | 0 .../validators/contour/colorbar/__init__.py | 0 .../contour/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../contour/colorbar/title/__init__.py | 0 .../contour/colorbar/title/font/__init__.py | 0 .../validators/contour/contours/__init__.py | 0 .../contour/contours/labelfont/__init__.py | 0 .../validators/contour/hoverlabel/__init__.py | 0 .../contour/hoverlabel/font/__init__.py | 0 .../validators/contour/line/__init__.py | 0 .../validators/contour/stream/__init__.py | 0 .../validators/contourcarpet/__init__.py | 0 .../contourcarpet/colorbar/__init__.py | 0 .../colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../contourcarpet/colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../contourcarpet/contours/__init__.py | 0 .../contours/labelfont/__init__.py | 0 .../contourcarpet/hoverlabel/__init__.py | 0 .../contourcarpet/hoverlabel/font/__init__.py | 0 .../validators/contourcarpet/line/__init__.py | 0 .../contourcarpet/stream/__init__.py | 0 .../plotly}/validators/frame/__init__.py | 0 .../plotly}/validators/funnel/__init__.py | 0 .../validators/funnel/connector/__init__.py | 0 .../funnel/connector/line/__init__.py | 0 .../validators/funnel/hoverlabel/__init__.py | 0 .../funnel/hoverlabel/font/__init__.py | 0 .../funnel/insidetextfont/__init__.py | 0 .../validators/funnel/marker/__init__.py | 0 .../funnel/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../funnel/marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../validators/funnel/marker/line/__init__.py | 0 .../funnel/outsidetextfont/__init__.py | 0 .../validators/funnel/stream/__init__.py | 0 .../validators/funnel/textfont/__init__.py | 0 .../plotly}/validators/funnelarea/__init__.py | 0 .../validators/funnelarea/domain/__init__.py | 0 .../funnelarea/hoverlabel/__init__.py | 0 .../funnelarea/hoverlabel/font/__init__.py | 0 .../funnelarea/insidetextfont/__init__.py | 0 .../validators/funnelarea/marker/__init__.py | 0 .../funnelarea/marker/line/__init__.py | 0 .../validators/funnelarea/stream/__init__.py | 0 .../funnelarea/textfont/__init__.py | 0 .../validators/funnelarea/title/__init__.py | 0 .../funnelarea/title/font/__init__.py | 0 .../plotly}/validators/heatmap/__init__.py | 0 .../validators/heatmap/colorbar/__init__.py | 0 .../heatmap/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../heatmap/colorbar/title/__init__.py | 0 .../heatmap/colorbar/title/font/__init__.py | 0 .../validators/heatmap/hoverlabel/__init__.py | 0 .../heatmap/hoverlabel/font/__init__.py | 0 .../validators/heatmap/stream/__init__.py | 0 .../plotly}/validators/heatmapgl/__init__.py | 0 .../validators/heatmapgl/colorbar/__init__.py | 0 .../heatmapgl/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../heatmapgl/colorbar/title/__init__.py | 0 .../heatmapgl/colorbar/title/font/__init__.py | 0 .../heatmapgl/hoverlabel/__init__.py | 0 .../heatmapgl/hoverlabel/font/__init__.py | 0 .../validators/heatmapgl/stream/__init__.py | 0 .../plotly}/validators/histogram/__init__.py | 0 .../histogram/cumulative/__init__.py | 0 .../validators/histogram/error_x/__init__.py | 0 .../validators/histogram/error_y/__init__.py | 0 .../histogram/hoverlabel/__init__.py | 0 .../histogram/hoverlabel/font/__init__.py | 0 .../validators/histogram/marker/__init__.py | 0 .../histogram/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../histogram/marker/line/__init__.py | 0 .../validators/histogram/selected/__init__.py | 0 .../histogram/selected/marker/__init__.py | 0 .../histogram/selected/textfont/__init__.py | 0 .../validators/histogram/stream/__init__.py | 0 .../histogram/unselected/__init__.py | 0 .../histogram/unselected/marker/__init__.py | 0 .../histogram/unselected/textfont/__init__.py | 0 .../validators/histogram/xbins/__init__.py | 0 .../validators/histogram/ybins/__init__.py | 0 .../validators/histogram2d/__init__.py | 0 .../histogram2d/colorbar/__init__.py | 0 .../histogram2d/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../histogram2d/colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../histogram2d/hoverlabel/__init__.py | 0 .../histogram2d/hoverlabel/font/__init__.py | 0 .../validators/histogram2d/marker/__init__.py | 0 .../validators/histogram2d/stream/__init__.py | 0 .../validators/histogram2d/xbins/__init__.py | 0 .../validators/histogram2d/ybins/__init__.py | 0 .../validators/histogram2dcontour/__init__.py | 0 .../histogram2dcontour/colorbar/__init__.py | 0 .../colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../histogram2dcontour/contours/__init__.py | 0 .../contours/labelfont/__init__.py | 0 .../histogram2dcontour/hoverlabel/__init__.py | 0 .../hoverlabel/font/__init__.py | 0 .../histogram2dcontour/line/__init__.py | 0 .../histogram2dcontour/marker/__init__.py | 0 .../histogram2dcontour/stream/__init__.py | 0 .../histogram2dcontour/xbins/__init__.py | 0 .../histogram2dcontour/ybins/__init__.py | 0 .../plotly}/validators/isosurface/__init__.py | 0 .../validators/isosurface/caps/__init__.py | 0 .../validators/isosurface/caps/x/__init__.py | 0 .../validators/isosurface/caps/y/__init__.py | 0 .../validators/isosurface/caps/z/__init__.py | 0 .../isosurface/colorbar/__init__.py | 0 .../isosurface/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../isosurface/colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../validators/isosurface/contour/__init__.py | 0 .../isosurface/hoverlabel/__init__.py | 0 .../isosurface/hoverlabel/font/__init__.py | 0 .../isosurface/lighting/__init__.py | 0 .../isosurface/lightposition/__init__.py | 0 .../validators/isosurface/slices/__init__.py | 0 .../isosurface/slices/x/__init__.py | 0 .../isosurface/slices/y/__init__.py | 0 .../isosurface/slices/z/__init__.py | 0 .../isosurface/spaceframe/__init__.py | 0 .../validators/isosurface/stream/__init__.py | 0 .../validators/isosurface/surface/__init__.py | 0 .../plotly}/validators/layout/__init__.py | 0 .../validators/layout/angularaxis/__init__.py | 0 .../validators/layout/annotation/__init__.py | 0 .../layout/annotation/font/__init__.py | 0 .../layout/annotation/hoverlabel/__init__.py | 0 .../annotation/hoverlabel/font/__init__.py | 0 .../validators/layout/coloraxis/__init__.py | 0 .../layout/coloraxis/colorbar/__init__.py | 0 .../coloraxis/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../coloraxis/colorbar/title/__init__.py | 0 .../coloraxis/colorbar/title/font/__init__.py | 0 .../validators/layout/colorscale/__init__.py | 0 .../validators/layout/font/__init__.py | 0 .../plotly}/validators/layout/geo/__init__.py | 0 .../validators/layout/geo/center/__init__.py | 0 .../validators/layout/geo/domain/__init__.py | 0 .../validators/layout/geo/lataxis/__init__.py | 0 .../validators/layout/geo/lonaxis/__init__.py | 0 .../layout/geo/projection/__init__.py | 0 .../geo/projection/rotation/__init__.py | 0 .../validators/layout/grid/__init__.py | 0 .../validators/layout/grid/domain/__init__.py | 0 .../validators/layout/hoverlabel/__init__.py | 0 .../layout/hoverlabel/font/__init__.py | 0 .../validators/layout/image/__init__.py | 0 .../validators/layout/legend/__init__.py | 0 .../validators/layout/legend/font/__init__.py | 0 .../validators/layout/mapbox/__init__.py | 0 .../layout/mapbox/center/__init__.py | 0 .../layout/mapbox/domain/__init__.py | 0 .../layout/mapbox/layer/__init__.py | 0 .../layout/mapbox/layer/circle/__init__.py | 0 .../layout/mapbox/layer/fill/__init__.py | 0 .../layout/mapbox/layer/line/__init__.py | 0 .../layout/mapbox/layer/symbol/__init__.py | 0 .../mapbox/layer/symbol/textfont/__init__.py | 0 .../validators/layout/margin/__init__.py | 0 .../validators/layout/modebar/__init__.py | 0 .../validators/layout/polar/__init__.py | 0 .../layout/polar/angularaxis/__init__.py | 0 .../polar/angularaxis/tickfont/__init__.py | 0 .../angularaxis/tickformatstop/__init__.py | 0 .../layout/polar/domain/__init__.py | 0 .../layout/polar/radialaxis/__init__.py | 0 .../polar/radialaxis/tickfont/__init__.py | 0 .../radialaxis/tickformatstop/__init__.py | 0 .../layout/polar/radialaxis/title/__init__.py | 0 .../polar/radialaxis/title/font/__init__.py | 0 .../validators/layout/radialaxis/__init__.py | 0 .../validators/layout/scene/__init__.py | 0 .../layout/scene/annotation/__init__.py | 0 .../layout/scene/annotation/font/__init__.py | 0 .../scene/annotation/hoverlabel/__init__.py | 0 .../annotation/hoverlabel/font/__init__.py | 0 .../layout/scene/aspectratio/__init__.py | 0 .../layout/scene/camera/__init__.py | 0 .../layout/scene/camera/center/__init__.py | 0 .../layout/scene/camera/eye/__init__.py | 0 .../scene/camera/projection/__init__.py | 0 .../layout/scene/camera/up/__init__.py | 0 .../layout/scene/domain/__init__.py | 0 .../validators/layout/scene/xaxis/__init__.py | 0 .../layout/scene/xaxis/tickfont/__init__.py | 0 .../scene/xaxis/tickformatstop/__init__.py | 0 .../layout/scene/xaxis/title/__init__.py | 0 .../layout/scene/xaxis/title/font/__init__.py | 0 .../validators/layout/scene/yaxis/__init__.py | 0 .../layout/scene/yaxis/tickfont/__init__.py | 0 .../scene/yaxis/tickformatstop/__init__.py | 0 .../layout/scene/yaxis/title/__init__.py | 0 .../layout/scene/yaxis/title/font/__init__.py | 0 .../validators/layout/scene/zaxis/__init__.py | 0 .../layout/scene/zaxis/tickfont/__init__.py | 0 .../scene/zaxis/tickformatstop/__init__.py | 0 .../layout/scene/zaxis/title/__init__.py | 0 .../layout/scene/zaxis/title/font/__init__.py | 0 .../validators/layout/shape/__init__.py | 0 .../validators/layout/shape/line/__init__.py | 0 .../validators/layout/slider/__init__.py | 0 .../layout/slider/currentvalue/__init__.py | 0 .../slider/currentvalue/font/__init__.py | 0 .../validators/layout/slider/font/__init__.py | 0 .../validators/layout/slider/pad/__init__.py | 0 .../validators/layout/slider/step/__init__.py | 0 .../layout/slider/transition/__init__.py | 0 .../validators/layout/template/__init__.py | 0 .../layout/template/data/__init__.py | 0 .../validators/layout/ternary/__init__.py | 0 .../layout/ternary/aaxis/__init__.py | 0 .../layout/ternary/aaxis/tickfont/__init__.py | 0 .../ternary/aaxis/tickformatstop/__init__.py | 0 .../layout/ternary/aaxis/title/__init__.py | 0 .../ternary/aaxis/title/font/__init__.py | 0 .../layout/ternary/baxis/__init__.py | 0 .../layout/ternary/baxis/tickfont/__init__.py | 0 .../ternary/baxis/tickformatstop/__init__.py | 0 .../layout/ternary/baxis/title/__init__.py | 0 .../ternary/baxis/title/font/__init__.py | 0 .../layout/ternary/caxis/__init__.py | 0 .../layout/ternary/caxis/tickfont/__init__.py | 0 .../ternary/caxis/tickformatstop/__init__.py | 0 .../layout/ternary/caxis/title/__init__.py | 0 .../ternary/caxis/title/font/__init__.py | 0 .../layout/ternary/domain/__init__.py | 0 .../validators/layout/title/__init__.py | 0 .../validators/layout/title/font/__init__.py | 0 .../validators/layout/title/pad/__init__.py | 0 .../validators/layout/transition/__init__.py | 0 .../validators/layout/updatemenu/__init__.py | 0 .../layout/updatemenu/button/__init__.py | 0 .../layout/updatemenu/font/__init__.py | 0 .../layout/updatemenu/pad/__init__.py | 0 .../validators/layout/xaxis/__init__.py | 0 .../layout/xaxis/rangeselector/__init__.py | 0 .../xaxis/rangeselector/button/__init__.py | 0 .../xaxis/rangeselector/font/__init__.py | 0 .../layout/xaxis/rangeslider/__init__.py | 0 .../xaxis/rangeslider/yaxis/__init__.py | 0 .../layout/xaxis/tickfont/__init__.py | 0 .../layout/xaxis/tickformatstop/__init__.py | 0 .../validators/layout/xaxis/title/__init__.py | 0 .../layout/xaxis/title/font/__init__.py | 0 .../validators/layout/yaxis/__init__.py | 0 .../layout/yaxis/tickfont/__init__.py | 0 .../layout/yaxis/tickformatstop/__init__.py | 0 .../validators/layout/yaxis/title/__init__.py | 0 .../layout/yaxis/title/font/__init__.py | 0 .../plotly}/validators/mesh3d/__init__.py | 0 .../validators/mesh3d/colorbar/__init__.py | 0 .../mesh3d/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../mesh3d/colorbar/title/__init__.py | 0 .../mesh3d/colorbar/title/font/__init__.py | 0 .../validators/mesh3d/contour/__init__.py | 0 .../validators/mesh3d/hoverlabel/__init__.py | 0 .../mesh3d/hoverlabel/font/__init__.py | 0 .../validators/mesh3d/lighting/__init__.py | 0 .../mesh3d/lightposition/__init__.py | 0 .../validators/mesh3d/stream/__init__.py | 0 .../plotly}/validators/ohlc/__init__.py | 0 .../validators/ohlc/decreasing/__init__.py | 0 .../ohlc/decreasing/line/__init__.py | 0 .../validators/ohlc/hoverlabel/__init__.py | 0 .../ohlc/hoverlabel/font/__init__.py | 0 .../validators/ohlc/increasing/__init__.py | 0 .../ohlc/increasing/line/__init__.py | 0 .../plotly}/validators/ohlc/line/__init__.py | 0 .../validators/ohlc/stream/__init__.py | 0 .../plotly}/validators/parcats/__init__.py | 0 .../validators/parcats/dimension/__init__.py | 0 .../validators/parcats/domain/__init__.py | 0 .../validators/parcats/labelfont/__init__.py | 0 .../validators/parcats/line/__init__.py | 0 .../parcats/line/colorbar/__init__.py | 0 .../line/colorbar/tickfont/__init__.py | 0 .../line/colorbar/tickformatstop/__init__.py | 0 .../parcats/line/colorbar/title/__init__.py | 0 .../line/colorbar/title/font/__init__.py | 0 .../validators/parcats/stream/__init__.py | 0 .../validators/parcats/tickfont/__init__.py | 0 .../plotly}/validators/parcoords/__init__.py | 0 .../parcoords/dimension/__init__.py | 0 .../validators/parcoords/domain/__init__.py | 0 .../parcoords/labelfont/__init__.py | 0 .../validators/parcoords/line/__init__.py | 0 .../parcoords/line/colorbar/__init__.py | 0 .../line/colorbar/tickfont/__init__.py | 0 .../line/colorbar/tickformatstop/__init__.py | 0 .../parcoords/line/colorbar/title/__init__.py | 0 .../line/colorbar/title/font/__init__.py | 0 .../parcoords/rangefont/__init__.py | 0 .../validators/parcoords/stream/__init__.py | 0 .../validators/parcoords/tickfont/__init__.py | 0 .../plotly}/validators/pie/__init__.py | 0 .../plotly}/validators/pie/domain/__init__.py | 0 .../validators/pie/hoverlabel/__init__.py | 0 .../pie/hoverlabel/font/__init__.py | 0 .../validators/pie/insidetextfont/__init__.py | 0 .../plotly}/validators/pie/marker/__init__.py | 0 .../validators/pie/marker/line/__init__.py | 0 .../pie/outsidetextfont/__init__.py | 0 .../plotly}/validators/pie/stream/__init__.py | 0 .../validators/pie/textfont/__init__.py | 0 .../plotly}/validators/pie/title/__init__.py | 0 .../validators/pie/title/font/__init__.py | 0 .../plotly}/validators/pointcloud/__init__.py | 0 .../pointcloud/hoverlabel/__init__.py | 0 .../pointcloud/hoverlabel/font/__init__.py | 0 .../validators/pointcloud/marker/__init__.py | 0 .../pointcloud/marker/border/__init__.py | 0 .../validators/pointcloud/stream/__init__.py | 0 .../plotly}/validators/sankey/__init__.py | 0 .../validators/sankey/domain/__init__.py | 0 .../validators/sankey/hoverlabel/__init__.py | 0 .../sankey/hoverlabel/font/__init__.py | 0 .../validators/sankey/link/__init__.py | 0 .../sankey/link/colorscale/__init__.py | 0 .../sankey/link/hoverlabel/__init__.py | 0 .../sankey/link/hoverlabel/font/__init__.py | 0 .../validators/sankey/link/line/__init__.py | 0 .../validators/sankey/node/__init__.py | 0 .../sankey/node/hoverlabel/__init__.py | 0 .../sankey/node/hoverlabel/font/__init__.py | 0 .../validators/sankey/node/line/__init__.py | 0 .../validators/sankey/stream/__init__.py | 0 .../validators/sankey/textfont/__init__.py | 0 .../plotly}/validators/scatter/__init__.py | 0 .../validators/scatter/error_x/__init__.py | 0 .../validators/scatter/error_y/__init__.py | 0 .../validators/scatter/hoverlabel/__init__.py | 0 .../scatter/hoverlabel/font/__init__.py | 0 .../validators/scatter/line/__init__.py | 0 .../validators/scatter/marker/__init__.py | 0 .../scatter/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../scatter/marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scatter/marker/gradient/__init__.py | 0 .../scatter/marker/line/__init__.py | 0 .../validators/scatter/selected/__init__.py | 0 .../scatter/selected/marker/__init__.py | 0 .../scatter/selected/textfont/__init__.py | 0 .../validators/scatter/stream/__init__.py | 0 .../validators/scatter/textfont/__init__.py | 0 .../validators/scatter/unselected/__init__.py | 0 .../scatter/unselected/marker/__init__.py | 0 .../scatter/unselected/textfont/__init__.py | 0 .../plotly}/validators/scatter3d/__init__.py | 0 .../validators/scatter3d/error_x/__init__.py | 0 .../validators/scatter3d/error_y/__init__.py | 0 .../validators/scatter3d/error_z/__init__.py | 0 .../scatter3d/hoverlabel/__init__.py | 0 .../scatter3d/hoverlabel/font/__init__.py | 0 .../validators/scatter3d/line/__init__.py | 0 .../scatter3d/line/colorbar/__init__.py | 0 .../line/colorbar/tickfont/__init__.py | 0 .../line/colorbar/tickformatstop/__init__.py | 0 .../scatter3d/line/colorbar/title/__init__.py | 0 .../line/colorbar/title/font/__init__.py | 0 .../validators/scatter3d/marker/__init__.py | 0 .../scatter3d/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scatter3d/marker/line/__init__.py | 0 .../scatter3d/projection/__init__.py | 0 .../scatter3d/projection/x/__init__.py | 0 .../scatter3d/projection/y/__init__.py | 0 .../scatter3d/projection/z/__init__.py | 0 .../validators/scatter3d/stream/__init__.py | 0 .../validators/scatter3d/textfont/__init__.py | 0 .../validators/scattercarpet/__init__.py | 0 .../scattercarpet/hoverlabel/__init__.py | 0 .../scattercarpet/hoverlabel/font/__init__.py | 0 .../validators/scattercarpet/line/__init__.py | 0 .../scattercarpet/marker/__init__.py | 0 .../scattercarpet/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scattercarpet/marker/gradient/__init__.py | 0 .../scattercarpet/marker/line/__init__.py | 0 .../scattercarpet/selected/__init__.py | 0 .../scattercarpet/selected/marker/__init__.py | 0 .../selected/textfont/__init__.py | 0 .../scattercarpet/stream/__init__.py | 0 .../scattercarpet/textfont/__init__.py | 0 .../scattercarpet/unselected/__init__.py | 0 .../unselected/marker/__init__.py | 0 .../unselected/textfont/__init__.py | 0 .../plotly}/validators/scattergeo/__init__.py | 0 .../scattergeo/hoverlabel/__init__.py | 0 .../scattergeo/hoverlabel/font/__init__.py | 0 .../validators/scattergeo/line/__init__.py | 0 .../validators/scattergeo/marker/__init__.py | 0 .../scattergeo/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scattergeo/marker/gradient/__init__.py | 0 .../scattergeo/marker/line/__init__.py | 0 .../scattergeo/selected/__init__.py | 0 .../scattergeo/selected/marker/__init__.py | 0 .../scattergeo/selected/textfont/__init__.py | 0 .../validators/scattergeo/stream/__init__.py | 0 .../scattergeo/textfont/__init__.py | 0 .../scattergeo/unselected/__init__.py | 0 .../scattergeo/unselected/marker/__init__.py | 0 .../unselected/textfont/__init__.py | 0 .../plotly}/validators/scattergl/__init__.py | 0 .../validators/scattergl/error_x/__init__.py | 0 .../validators/scattergl/error_y/__init__.py | 0 .../scattergl/hoverlabel/__init__.py | 0 .../scattergl/hoverlabel/font/__init__.py | 0 .../validators/scattergl/line/__init__.py | 0 .../validators/scattergl/marker/__init__.py | 0 .../scattergl/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scattergl/marker/line/__init__.py | 0 .../validators/scattergl/selected/__init__.py | 0 .../scattergl/selected/marker/__init__.py | 0 .../scattergl/selected/textfont/__init__.py | 0 .../validators/scattergl/stream/__init__.py | 0 .../validators/scattergl/textfont/__init__.py | 0 .../scattergl/unselected/__init__.py | 0 .../scattergl/unselected/marker/__init__.py | 0 .../scattergl/unselected/textfont/__init__.py | 0 .../validators/scattermapbox/__init__.py | 0 .../scattermapbox/hoverlabel/__init__.py | 0 .../scattermapbox/hoverlabel/font/__init__.py | 0 .../validators/scattermapbox/line/__init__.py | 0 .../scattermapbox/marker/__init__.py | 0 .../scattermapbox/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scattermapbox/selected/__init__.py | 0 .../scattermapbox/selected/marker/__init__.py | 0 .../scattermapbox/stream/__init__.py | 0 .../scattermapbox/textfont/__init__.py | 0 .../scattermapbox/unselected/__init__.py | 0 .../unselected/marker/__init__.py | 0 .../validators/scatterpolar/__init__.py | 0 .../scatterpolar/hoverlabel/__init__.py | 0 .../scatterpolar/hoverlabel/font/__init__.py | 0 .../validators/scatterpolar/line/__init__.py | 0 .../scatterpolar/marker/__init__.py | 0 .../scatterpolar/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scatterpolar/marker/gradient/__init__.py | 0 .../scatterpolar/marker/line/__init__.py | 0 .../scatterpolar/selected/__init__.py | 0 .../scatterpolar/selected/marker/__init__.py | 0 .../selected/textfont/__init__.py | 0 .../scatterpolar/stream/__init__.py | 0 .../scatterpolar/textfont/__init__.py | 0 .../scatterpolar/unselected/__init__.py | 0 .../unselected/marker/__init__.py | 0 .../unselected/textfont/__init__.py | 0 .../validators/scatterpolargl/__init__.py | 0 .../scatterpolargl/hoverlabel/__init__.py | 0 .../hoverlabel/font/__init__.py | 0 .../scatterpolargl/line/__init__.py | 0 .../scatterpolargl/marker/__init__.py | 0 .../marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../scatterpolargl/marker/line/__init__.py | 0 .../scatterpolargl/selected/__init__.py | 0 .../selected/marker/__init__.py | 0 .../selected/textfont/__init__.py | 0 .../scatterpolargl/stream/__init__.py | 0 .../scatterpolargl/textfont/__init__.py | 0 .../scatterpolargl/unselected/__init__.py | 0 .../unselected/marker/__init__.py | 0 .../unselected/textfont/__init__.py | 0 .../validators/scatterternary/__init__.py | 0 .../scatterternary/hoverlabel/__init__.py | 0 .../hoverlabel/font/__init__.py | 0 .../scatterternary/line/__init__.py | 0 .../scatterternary/marker/__init__.py | 0 .../marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../marker/gradient/__init__.py | 0 .../scatterternary/marker/line/__init__.py | 0 .../scatterternary/selected/__init__.py | 0 .../selected/marker/__init__.py | 0 .../selected/textfont/__init__.py | 0 .../scatterternary/stream/__init__.py | 0 .../scatterternary/textfont/__init__.py | 0 .../scatterternary/unselected/__init__.py | 0 .../unselected/marker/__init__.py | 0 .../unselected/textfont/__init__.py | 0 .../plotly}/validators/splom/__init__.py | 0 .../validators/splom/diagonal/__init__.py | 0 .../validators/splom/dimension/__init__.py | 0 .../splom/dimension/axis/__init__.py | 0 .../validators/splom/hoverlabel/__init__.py | 0 .../splom/hoverlabel/font/__init__.py | 0 .../validators/splom/marker/__init__.py | 0 .../splom/marker/colorbar/__init__.py | 0 .../marker/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../splom/marker/colorbar/title/__init__.py | 0 .../marker/colorbar/title/font/__init__.py | 0 .../validators/splom/marker/line/__init__.py | 0 .../validators/splom/selected/__init__.py | 0 .../splom/selected/marker/__init__.py | 0 .../validators/splom/stream/__init__.py | 0 .../validators/splom/unselected/__init__.py | 0 .../splom/unselected/marker/__init__.py | 0 .../plotly}/validators/streamtube/__init__.py | 0 .../streamtube/colorbar/__init__.py | 0 .../streamtube/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../streamtube/colorbar/title/__init__.py | 0 .../colorbar/title/font/__init__.py | 0 .../streamtube/hoverlabel/__init__.py | 0 .../streamtube/hoverlabel/font/__init__.py | 0 .../streamtube/lighting/__init__.py | 0 .../streamtube/lightposition/__init__.py | 0 .../validators/streamtube/starts/__init__.py | 0 .../validators/streamtube/stream/__init__.py | 0 .../plotly}/validators/sunburst/__init__.py | 0 .../validators/sunburst/domain/__init__.py | 0 .../sunburst/hoverlabel/__init__.py | 0 .../sunburst/hoverlabel/font/__init__.py | 0 .../sunburst/insidetextfont/__init__.py | 0 .../validators/sunburst/leaf/__init__.py | 0 .../validators/sunburst/marker/__init__.py | 0 .../sunburst/marker/line/__init__.py | 0 .../sunburst/outsidetextfont/__init__.py | 0 .../validators/sunburst/stream/__init__.py | 0 .../validators/sunburst/textfont/__init__.py | 0 .../plotly}/validators/surface/__init__.py | 0 .../validators/surface/colorbar/__init__.py | 0 .../surface/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../surface/colorbar/title/__init__.py | 0 .../surface/colorbar/title/font/__init__.py | 0 .../validators/surface/contours/__init__.py | 0 .../validators/surface/contours/x/__init__.py | 0 .../surface/contours/x/project/__init__.py | 0 .../validators/surface/contours/y/__init__.py | 0 .../surface/contours/y/project/__init__.py | 0 .../validators/surface/contours/z/__init__.py | 0 .../surface/contours/z/project/__init__.py | 0 .../validators/surface/hoverlabel/__init__.py | 0 .../surface/hoverlabel/font/__init__.py | 0 .../validators/surface/lighting/__init__.py | 0 .../surface/lightposition/__init__.py | 0 .../validators/surface/stream/__init__.py | 0 .../plotly}/validators/table/__init__.py | 0 .../validators/table/cells/__init__.py | 0 .../validators/table/cells/fill/__init__.py | 0 .../validators/table/cells/font/__init__.py | 0 .../validators/table/cells/line/__init__.py | 0 .../validators/table/domain/__init__.py | 0 .../validators/table/header/__init__.py | 0 .../validators/table/header/fill/__init__.py | 0 .../validators/table/header/font/__init__.py | 0 .../validators/table/header/line/__init__.py | 0 .../validators/table/hoverlabel/__init__.py | 0 .../table/hoverlabel/font/__init__.py | 0 .../validators/table/stream/__init__.py | 0 .../plotly}/validators/violin/__init__.py | 0 .../plotly}/validators/violin/box/__init__.py | 0 .../validators/violin/box/line/__init__.py | 0 .../validators/violin/hoverlabel/__init__.py | 0 .../violin/hoverlabel/font/__init__.py | 0 .../validators/violin/line/__init__.py | 0 .../validators/violin/marker/__init__.py | 0 .../validators/violin/marker/line/__init__.py | 0 .../validators/violin/meanline/__init__.py | 0 .../validators/violin/selected/__init__.py | 0 .../violin/selected/marker/__init__.py | 0 .../validators/violin/stream/__init__.py | 0 .../validators/violin/unselected/__init__.py | 0 .../violin/unselected/marker/__init__.py | 0 .../plotly}/validators/volume/__init__.py | 0 .../validators/volume/caps/__init__.py | 0 .../validators/volume/caps/x/__init__.py | 0 .../validators/volume/caps/y/__init__.py | 0 .../validators/volume/caps/z/__init__.py | 0 .../validators/volume/colorbar/__init__.py | 0 .../volume/colorbar/tickfont/__init__.py | 0 .../colorbar/tickformatstop/__init__.py | 0 .../volume/colorbar/title/__init__.py | 0 .../volume/colorbar/title/font/__init__.py | 0 .../validators/volume/contour/__init__.py | 0 .../validators/volume/hoverlabel/__init__.py | 0 .../volume/hoverlabel/font/__init__.py | 0 .../validators/volume/lighting/__init__.py | 0 .../volume/lightposition/__init__.py | 0 .../validators/volume/slices/__init__.py | 0 .../validators/volume/slices/x/__init__.py | 0 .../validators/volume/slices/y/__init__.py | 0 .../validators/volume/slices/z/__init__.py | 0 .../validators/volume/spaceframe/__init__.py | 0 .../validators/volume/stream/__init__.py | 0 .../validators/volume/surface/__init__.py | 0 .../plotly}/validators/waterfall/__init__.py | 0 .../waterfall/connector/__init__.py | 0 .../waterfall/connector/line/__init__.py | 0 .../waterfall/decreasing/__init__.py | 0 .../waterfall/decreasing/marker/__init__.py | 0 .../decreasing/marker/line/__init__.py | 0 .../waterfall/hoverlabel/__init__.py | 0 .../waterfall/hoverlabel/font/__init__.py | 0 .../waterfall/increasing/__init__.py | 0 .../waterfall/increasing/marker/__init__.py | 0 .../increasing/marker/line/__init__.py | 0 .../waterfall/insidetextfont/__init__.py | 0 .../waterfall/outsidetextfont/__init__.py | 0 .../validators/waterfall/stream/__init__.py | 0 .../validators/waterfall/textfont/__init__.py | 0 .../validators/waterfall/totals/__init__.py | 0 .../waterfall/totals/marker/__init__.py | 0 .../waterfall/totals/marker/line/__init__.py | 0 {plotly => plotly-package/plotly}/version.py | 0 {plotly => plotly-package/plotly}/widgets.py | 0 .../plotlywidget}/__init__.py | 0 .../plotlywidget}/static/extension.js | 0 .../plotlywidget}/static/index.js | 0 {recipe => plotly-package/recipe}/LICENSE.txt | 0 {recipe => plotly-package/recipe}/meta.yaml | 0 .../requirements.txt | 0 setup.cfg => plotly-package/setup.cfg | 0 setup.py => plotly-package/setup.py | 20 +- versioneer.py => plotly-package/versioneer.py | 0 1308 files changed, 2057 insertions(+), 18 deletions(-) rename MANIFEST.in => plotly-package/MANIFEST.in (100%) rename README.md => plotly-package/README.md (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/__init__.py (85%) rename {_plotly_future_ => plotly-package/_plotly_future_}/extract_chart_studio.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/orca_defaults.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/remove_deprecations.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/renderer_defaults.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/template_defaults.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/timezones.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/trace_uids.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/v4.py (100%) rename {_plotly_future_ => plotly-package/_plotly_future_}/v4_subplots.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/README.md (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/__init__.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/basevalidators.py (99%) rename {_plotly_utils => plotly-package/_plotly_utils}/exceptions.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/files.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/optional_imports.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/__init__.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/resources/1x1-black.png (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/__init__.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_angle_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_any_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_basetraces_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_boolean_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_color_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_colorlist_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_colorscale_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_compound_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_compoundarray_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_dash_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_dataarray_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_enumerated_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_flaglist_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_imageuri_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_infoarray_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_integer_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_literal_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_number_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_pandas_series_input.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_string_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_subplotid_validator.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_validators_common.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/tests/validators/test_xarray_input.py (100%) rename {_plotly_utils => plotly-package/_plotly_utils}/utils.py (100%) rename optional-requirements.txt => plotly-package/optional-requirements.txt (100%) rename {plotly => plotly-package/plotly}/__init__.py (100%) rename {plotly => plotly-package/plotly}/_docstring_gen.py (100%) rename {plotly => plotly-package/plotly}/_version.py (100%) rename {plotly => plotly-package/plotly}/_widget_version.py (100%) rename {plotly => plotly-package/plotly}/animation.py (100%) rename {plotly => plotly-package/plotly}/api/__init__.py (100%) rename {plotly => plotly-package/plotly}/api/utils.py (100%) rename {plotly => plotly-package/plotly}/api/v1.py (100%) rename {plotly => plotly-package/plotly}/api/v2.py (100%) rename {plotly => plotly-package/plotly}/basedatatypes.py (100%) rename {plotly => plotly-package/plotly}/basewidget.py (100%) rename {plotly => plotly-package/plotly}/callbacks.py (100%) rename {plotly => plotly-package/plotly}/colors.py (100%) rename {plotly => plotly-package/plotly}/config.py (100%) rename {plotly => plotly-package/plotly}/dashboard_objs.py (100%) rename {plotly => plotly-package/plotly}/exceptions.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/README.md (100%) rename {plotly => plotly-package/plotly}/figure_factory/_2d_density.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/__init__.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_annotated_heatmap.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_bullet.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_candlestick.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_county_choropleth.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_dendrogram.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_distplot.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_facet_grid.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_gantt.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_ohlc.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_quiver.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_scatterplot.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_streamline.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_table.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_ternary_contour.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_trisurf.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/_violin.py (100%) rename {plotly => plotly-package/plotly}/figure_factory/utils.py (100%) rename {plotly => plotly-package/plotly}/files.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/_deprecations.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/_figure.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/_figurewidget.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/area/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/area/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/bar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/barpolar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/box/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/box/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/box/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/box/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/box/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/candlestick/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/candlestick/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/candlestick/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/candlestick/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/aaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/aaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/baxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/baxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/carpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/choropleth/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/cone/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/cone/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/cone/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/cone/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contour/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contour/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contour/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contour/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contour/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contourcarpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contourcarpet/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contourcarpet/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contourcarpet/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/contourcarpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/connector/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnel/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnelarea/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnelarea/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnelarea/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/funnelarea/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/graph_objs.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmap/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmap/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmap/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmap/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmapgl/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmapgl/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmapgl/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/heatmapgl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2d/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2d/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2d/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2dcontour/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2dcontour/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2dcontour/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2dcontour/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/histogram2dcontour/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/caps/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/isosurface/slices/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/annotation/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/annotation/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/coloraxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/coloraxis/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/coloraxis/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/geo/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/geo/projection/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/grid/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/legend/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/mapbox/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/mapbox/layer/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/mapbox/layer/symbol/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/polar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/polar/angularaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/polar/radialaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/polar/radialaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/annotation/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/annotation/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/camera/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/xaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/xaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/yaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/yaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/zaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/scene/zaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/shape/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/slider/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/slider/currentvalue/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/template/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/template/data/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/aaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/aaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/baxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/baxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/caxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/ternary/caxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/updatemenu/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/xaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/xaxis/rangeselector/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/xaxis/rangeslider/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/xaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/yaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/layout/yaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/mesh3d/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/mesh3d/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/mesh3d/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/mesh3d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/ohlc/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/ohlc/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/ohlc/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/ohlc/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcats/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcats/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcats/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcats/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcoords/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcoords/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcoords/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/parcoords/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pie/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pie/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pie/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pie/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pointcloud/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pointcloud/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/pointcloud/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/link/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/link/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/node/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sankey/node/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatter3d/projection/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattercarpet/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergeo/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattergl/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scattermapbox/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterpolargl/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/scatterternary/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/dimension/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/splom/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/streamtube/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/streamtube/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/streamtube/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/streamtube/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sunburst/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sunburst/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/sunburst/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/contours/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/contours/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/contours/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/surface/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/table/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/table/cells/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/table/header/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/table/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/box/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/violin/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/caps/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/volume/slices/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/connector/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/decreasing/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/increasing/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/totals/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_objs/waterfall/totals/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/graph_reference.py (100%) rename {plotly => plotly-package/plotly}/grid_objs.py (100%) rename {plotly => plotly-package/plotly}/io/__init__.py (100%) rename {plotly => plotly-package/plotly}/io/_base_renderers.py (100%) rename {plotly => plotly-package/plotly}/io/_html.py (100%) rename {plotly => plotly-package/plotly}/io/_json.py (100%) rename {plotly => plotly-package/plotly}/io/_orca.py (100%) rename {plotly => plotly-package/plotly}/io/_renderers.py (100%) rename {plotly => plotly-package/plotly}/io/_templates.py (100%) rename {plotly => plotly-package/plotly}/io/_utils.py (100%) rename {plotly => plotly-package/plotly}/io/base_renderers.py (100%) rename {plotly => plotly-package/plotly}/io/orca.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/__init__.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/__init__.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/_py3k_compat.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/exporter.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/renderers/__init__.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/renderers/base.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/renderers/fake_renderer.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/renderers/vega_renderer.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/renderers/vincent_renderer.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/tests/__init__.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/tests/test_basic.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/tests/test_utils.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/tools.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mplexporter/utils.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/mpltools.py (100%) rename {plotly => plotly-package/plotly}/matplotlylib/renderer.py (100%) rename {plotly => plotly-package/plotly}/offline/__init__.py (100%) rename {plotly => plotly-package/plotly}/offline/_plotlyjs_version.py (100%) rename {plotly => plotly-package/plotly}/offline/offline.py (100%) rename {plotly => plotly-package/plotly}/optional_imports.py (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_county_500k.dbf (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_county_500k.shp (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_county_500k.shx (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_state_500k.dbf (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_state_500k.shp (100%) rename {plotly => plotly-package/plotly}/package_data/cb_2016_us_state_500k.shx (100%) rename {plotly => plotly-package/plotly}/package_data/graphWidget.js (100%) rename {plotly => plotly-package/plotly}/package_data/gz_2010_us_050_00_500k.dbf (100%) rename {plotly => plotly-package/plotly}/package_data/gz_2010_us_050_00_500k.shp (100%) rename {plotly => plotly-package/plotly}/package_data/gz_2010_us_050_00_500k.shx (100%) rename {plotly => plotly-package/plotly}/package_data/plot-schema.json (100%) rename {plotly => plotly-package/plotly}/package_data/plotly.min.js (100%) rename {plotly => plotly-package/plotly}/package_data/templates/ggplot2.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/plotly.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/plotly_dark.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/plotly_white.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/presentation.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/seaborn.json (100%) rename {plotly => plotly-package/plotly}/package_data/templates/xgridoff.json (100%) rename {plotly => plotly-package/plotly}/plotly/__init__.py (100%) rename {plotly => plotly-package/plotly}/plotly/chunked_requests.py (100%) rename {plotly => plotly-package/plotly}/presentation_objs.py (100%) rename {plotly => plotly-package/plotly}/serializers.py (100%) rename {plotly => plotly-package/plotly}/session.py (100%) rename {plotly => plotly-package/plotly}/subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_colors/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_colors/test_colors.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_add_traces.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_batch_animate.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_move_delete_traces.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_on_change.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_plotly_relayout.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_plotly_restyle.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_messages/test_plotly_update.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_widget_backend/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_figure_widget_backend/test_validate_no_frames.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_annotations.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_append_trace.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_constructor.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_data.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_error_bars.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_figure.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_figure_properties.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_frames.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_graph_objs.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_instantiate_hierarchy.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_layout_subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_properties_validated.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_property_assignment.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_repr.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_scatter.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_template.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_to_ordered_dict.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_objs/test_update.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_reference/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_graph_reference/test_graph_reference.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_offline/test_offline.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_optional_imports/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_optional_imports/exploding_module.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_optional_imports/test_optional_imports.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_subplots/test_get_subplot.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_subplots/test_make_subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_tools/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_tools/test_validate.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_update_objects/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_update_objects/test_update_subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_update_objects/test_update_traces.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_utils/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_core/test_utils/test_utils.py (100%) rename {plotly => plotly-package/plotly}/tests/test_io/test_deepcopy_pickle.py (100%) rename {plotly => plotly-package/plotly}/tests/test_io/test_renderers.py (100%) rename {plotly => plotly-package/plotly}/tests/test_io/test_to_from_json.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/optional_utils.py (100%) create mode 100644 plotly-package/plotly/tests/test_optional/temp-plot.html rename {plotly => plotly-package/plotly}/tests/test_optional/test_figure_factory/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_figure_factory/test_figure_factory.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_graph_objs/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/.gitignore (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/README.md (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/fixtures/connected_false.ipynb (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/fixtures/connected_true.ipynb (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/js_tests/connected_false.js (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/js_tests/connected_true.js (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/lib/server.js (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/lib/tape-wrapper.js (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/package-lock.json (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/package.json (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_jupyter/test_jupyter.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/annotations.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/axis_scales.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/bars.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/data.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/lines.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/scatter.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/data/subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_annotations.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_axis_scales.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_bars.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_data.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_date_times.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_lines.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_scatter.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_matplotlylib/test_subplots.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_offline/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_offline/temp-plot.html (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_offline/test_offline.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_tools/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_tools/test_figure_factory.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_utils/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_optional/test_utils/test_utils.py (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/__init__.py (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/images/darwin/fig1.eps (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/images/darwin/latexfig.eps (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/images/darwin/topofig.eps (100%) create mode 100644 plotly-package/plotly/tests/test_orca/images/linux/failed/fig1.eps rename {plotly => plotly-package/plotly}/tests/test_orca/images/linux/fig1.eps (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/images/linux/latexfig.eps (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/images/linux/topofig.eps (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/resources/2011_us_ag_exports.csv (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/test_image_renderers.py (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/test_orca_server.py (100%) rename {plotly => plotly-package/plotly}/tests/test_orca/test_to_image.py (100%) rename {plotly => plotly-package/plotly}/tests/utils.py (100%) rename {plotly => plotly-package/plotly}/tools.py (99%) rename {plotly => plotly-package/plotly}/utils.py (100%) rename {plotly => plotly-package/plotly}/validators/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/area/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/area/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/area/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/area/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/area/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/error_x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/error_y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/outsidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/bar/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/barpolar/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/box/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/decreasing/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/increasing/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/candlestick/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/aaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/aaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/aaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/aaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/aaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/baxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/baxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/baxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/baxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/baxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/carpet/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/choropleth/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/cone/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/contours/labelfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contour/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/contours/labelfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/contourcarpet/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/frame/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/connector/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/connector/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/outsidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnel/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/funnelarea/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmap/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/heatmapgl/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/cumulative/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/error_x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/error_y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/xbins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram/ybins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/xbins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2d/ybins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/contours/labelfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/xbins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/histogram2dcontour/ybins/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/caps/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/caps/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/caps/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/caps/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/contour/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/slices/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/slices/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/slices/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/slices/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/spaceframe/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/isosurface/surface/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/angularaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/annotation/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/annotation/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/annotation/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/annotation/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/coloraxis/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/colorscale/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/center/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/lataxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/lonaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/projection/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/geo/projection/rotation/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/grid/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/grid/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/image/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/legend/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/legend/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/center/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/circle/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/fill/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/symbol/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/mapbox/layer/symbol/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/margin/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/modebar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/angularaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/angularaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/angularaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/radialaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/radialaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/radialaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/radialaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/polar/radialaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/radialaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/annotation/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/annotation/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/annotation/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/annotation/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/aspectratio/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/camera/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/camera/center/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/camera/eye/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/camera/projection/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/camera/up/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/xaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/xaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/xaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/xaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/xaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/yaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/yaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/yaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/yaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/yaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/zaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/zaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/zaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/zaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/scene/zaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/shape/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/shape/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/currentvalue/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/currentvalue/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/pad/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/step/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/slider/transition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/template/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/template/data/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/aaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/aaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/aaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/aaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/aaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/baxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/baxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/baxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/baxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/baxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/caxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/caxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/caxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/caxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/caxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/ternary/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/title/pad/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/transition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/updatemenu/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/updatemenu/button/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/updatemenu/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/updatemenu/pad/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/rangeselector/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/rangeselector/button/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/rangeselector/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/rangeslider/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/rangeslider/yaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/xaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/yaxis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/yaxis/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/yaxis/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/yaxis/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/layout/yaxis/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/contour/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/mesh3d/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/decreasing/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/increasing/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/ohlc/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/dimension/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/labelfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/line/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcats/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/dimension/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/labelfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/line/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/rangefont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/parcoords/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/outsidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pie/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/marker/border/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/pointcloud/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/link/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/link/colorscale/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/link/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/link/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/link/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/node/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/node/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/node/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/node/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sankey/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/error_x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/error_y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/gradient/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/error_x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/error_y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/error_z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/line/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/projection/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/projection/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/projection/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/projection/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatter3d/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/gradient/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattercarpet/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/gradient/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergeo/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/error_x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/error_y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattergl/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scattermapbox/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/gradient/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolar/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterpolargl/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/gradient/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/selected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/scatterternary/unselected/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/diagonal/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/dimension/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/dimension/axis/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/splom/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/starts/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/streamtube/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/leaf/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/outsidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/sunburst/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/x/project/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/y/project/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/contours/z/project/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/surface/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/cells/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/cells/fill/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/cells/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/cells/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/domain/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/header/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/header/fill/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/header/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/header/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/table/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/box/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/box/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/meanline/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/selected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/selected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/unselected/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/violin/unselected/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/caps/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/caps/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/caps/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/caps/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/colorbar/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/colorbar/tickfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/colorbar/tickformatstop/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/colorbar/title/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/colorbar/title/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/contour/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/lighting/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/lightposition/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/slices/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/slices/x/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/slices/y/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/slices/z/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/spaceframe/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/volume/surface/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/connector/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/connector/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/decreasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/decreasing/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/decreasing/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/hoverlabel/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/hoverlabel/font/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/increasing/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/increasing/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/increasing/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/insidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/outsidetextfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/stream/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/textfont/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/totals/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/totals/marker/__init__.py (100%) rename {plotly => plotly-package/plotly}/validators/waterfall/totals/marker/line/__init__.py (100%) rename {plotly => plotly-package/plotly}/version.py (100%) rename {plotly => plotly-package/plotly}/widgets.py (100%) rename {plotlywidget => plotly-package/plotlywidget}/__init__.py (100%) rename {plotlywidget => plotly-package/plotlywidget}/static/extension.js (100%) rename {plotlywidget => plotly-package/plotlywidget}/static/index.js (100%) rename {recipe => plotly-package/recipe}/LICENSE.txt (100%) rename {recipe => plotly-package/recipe}/meta.yaml (100%) rename requirements.txt => plotly-package/requirements.txt (100%) rename setup.cfg => plotly-package/setup.cfg (100%) rename setup.py => plotly-package/setup.py (97%) rename versioneer.py => plotly-package/versioneer.py (100%) diff --git a/MANIFEST.in b/plotly-package/MANIFEST.in similarity index 100% rename from MANIFEST.in rename to plotly-package/MANIFEST.in diff --git a/README.md b/plotly-package/README.md similarity index 100% rename from README.md rename to plotly-package/README.md diff --git a/_plotly_future_/__init__.py b/plotly-package/_plotly_future_/__init__.py similarity index 85% rename from _plotly_future_/__init__.py rename to plotly-package/_plotly_future_/__init__.py index 64b17e6c194..15e666194af 100644 --- a/_plotly_future_/__init__.py +++ b/plotly-package/_plotly_future_/__init__.py @@ -24,7 +24,7 @@ def _assert_plotly_not_imported(): warnings.filterwarnings( 'default', - '.*?is deprecated, please use chart_studio*', + '.*?is deprecated, please use chartstudio*', DeprecationWarning ) @@ -32,7 +32,7 @@ def _assert_plotly_not_imported(): def _chart_studio_warning(submodule): warnings.warn( 'The plotly.{submodule} module is deprecated, ' - 'please use chart_studio.{submodule} instead' + 'please use chartstudio.{submodule} instead' .format(submodule=submodule), DeprecationWarning, stacklevel=2) @@ -41,8 +41,8 @@ def _chart_studio_warning(submodule): def _chart_studio_error(submodule): raise ImportError(""" The plotly.{submodule} module is deprecated, -please install the chart_studio package and use the -chart_studio.{submodule} module instead. +please install the chartstudio package and use the +chartstudio.{submodule} module instead. """.format(submodule=submodule)) @@ -53,7 +53,7 @@ def _chart_studio_deprecation(fn): plotly_name = '.'.join( ['plotly'] + fn_module.split('.')[1:] + [fn_name]) chart_studio_name = '.'.join( - ['chart_studio'] + fn_module.split('.')[1:] + [fn_name]) + ['chartstudio'] + fn_module.split('.')[1:] + [fn_name]) msg = """\ {plotly_name} is deprecated, please use {chart_studio_name}\ diff --git a/_plotly_future_/extract_chart_studio.py b/plotly-package/_plotly_future_/extract_chart_studio.py similarity index 100% rename from _plotly_future_/extract_chart_studio.py rename to plotly-package/_plotly_future_/extract_chart_studio.py diff --git a/_plotly_future_/orca_defaults.py b/plotly-package/_plotly_future_/orca_defaults.py similarity index 100% rename from _plotly_future_/orca_defaults.py rename to plotly-package/_plotly_future_/orca_defaults.py diff --git a/_plotly_future_/remove_deprecations.py b/plotly-package/_plotly_future_/remove_deprecations.py similarity index 100% rename from _plotly_future_/remove_deprecations.py rename to plotly-package/_plotly_future_/remove_deprecations.py diff --git a/_plotly_future_/renderer_defaults.py b/plotly-package/_plotly_future_/renderer_defaults.py similarity index 100% rename from _plotly_future_/renderer_defaults.py rename to plotly-package/_plotly_future_/renderer_defaults.py diff --git a/_plotly_future_/template_defaults.py b/plotly-package/_plotly_future_/template_defaults.py similarity index 100% rename from _plotly_future_/template_defaults.py rename to plotly-package/_plotly_future_/template_defaults.py diff --git a/_plotly_future_/timezones.py b/plotly-package/_plotly_future_/timezones.py similarity index 100% rename from _plotly_future_/timezones.py rename to plotly-package/_plotly_future_/timezones.py diff --git a/_plotly_future_/trace_uids.py b/plotly-package/_plotly_future_/trace_uids.py similarity index 100% rename from _plotly_future_/trace_uids.py rename to plotly-package/_plotly_future_/trace_uids.py diff --git a/_plotly_future_/v4.py b/plotly-package/_plotly_future_/v4.py similarity index 100% rename from _plotly_future_/v4.py rename to plotly-package/_plotly_future_/v4.py diff --git a/_plotly_future_/v4_subplots.py b/plotly-package/_plotly_future_/v4_subplots.py similarity index 100% rename from _plotly_future_/v4_subplots.py rename to plotly-package/_plotly_future_/v4_subplots.py diff --git a/_plotly_utils/README.md b/plotly-package/_plotly_utils/README.md similarity index 100% rename from _plotly_utils/README.md rename to plotly-package/_plotly_utils/README.md diff --git a/_plotly_utils/__init__.py b/plotly-package/_plotly_utils/__init__.py similarity index 100% rename from _plotly_utils/__init__.py rename to plotly-package/_plotly_utils/__init__.py diff --git a/_plotly_utils/basevalidators.py b/plotly-package/_plotly_utils/basevalidators.py similarity index 99% rename from _plotly_utils/basevalidators.py rename to plotly-package/_plotly_utils/basevalidators.py index b28f7d6330e..70ddd822a0e 100644 --- a/_plotly_utils/basevalidators.py +++ b/plotly-package/_plotly_utils/basevalidators.py @@ -606,7 +606,7 @@ def description(self): as a plotly.grid_objs.Column object""".format(plotly_name=self.plotly_name)) def validate_coerce(self, v): - from chart_studio.grid_objs import Column + from chartstudio.grid_objs import Column if v is None: # Pass None through pass diff --git a/_plotly_utils/exceptions.py b/plotly-package/_plotly_utils/exceptions.py similarity index 100% rename from _plotly_utils/exceptions.py rename to plotly-package/_plotly_utils/exceptions.py diff --git a/_plotly_utils/files.py b/plotly-package/_plotly_utils/files.py similarity index 100% rename from _plotly_utils/files.py rename to plotly-package/_plotly_utils/files.py diff --git a/_plotly_utils/optional_imports.py b/plotly-package/_plotly_utils/optional_imports.py similarity index 100% rename from _plotly_utils/optional_imports.py rename to plotly-package/_plotly_utils/optional_imports.py diff --git a/_plotly_utils/tests/__init__.py b/plotly-package/_plotly_utils/tests/__init__.py similarity index 100% rename from _plotly_utils/tests/__init__.py rename to plotly-package/_plotly_utils/tests/__init__.py diff --git a/_plotly_utils/tests/resources/1x1-black.png b/plotly-package/_plotly_utils/tests/resources/1x1-black.png similarity index 100% rename from _plotly_utils/tests/resources/1x1-black.png rename to plotly-package/_plotly_utils/tests/resources/1x1-black.png diff --git a/_plotly_utils/tests/validators/__init__.py b/plotly-package/_plotly_utils/tests/validators/__init__.py similarity index 100% rename from _plotly_utils/tests/validators/__init__.py rename to plotly-package/_plotly_utils/tests/validators/__init__.py diff --git a/_plotly_utils/tests/validators/test_angle_validator.py b/plotly-package/_plotly_utils/tests/validators/test_angle_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_angle_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_angle_validator.py diff --git a/_plotly_utils/tests/validators/test_any_validator.py b/plotly-package/_plotly_utils/tests/validators/test_any_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_any_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_any_validator.py diff --git a/_plotly_utils/tests/validators/test_basetraces_validator.py b/plotly-package/_plotly_utils/tests/validators/test_basetraces_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_basetraces_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_basetraces_validator.py diff --git a/_plotly_utils/tests/validators/test_boolean_validator.py b/plotly-package/_plotly_utils/tests/validators/test_boolean_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_boolean_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_boolean_validator.py diff --git a/_plotly_utils/tests/validators/test_color_validator.py b/plotly-package/_plotly_utils/tests/validators/test_color_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_color_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_color_validator.py diff --git a/_plotly_utils/tests/validators/test_colorlist_validator.py b/plotly-package/_plotly_utils/tests/validators/test_colorlist_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_colorlist_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_colorlist_validator.py diff --git a/_plotly_utils/tests/validators/test_colorscale_validator.py b/plotly-package/_plotly_utils/tests/validators/test_colorscale_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_colorscale_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_colorscale_validator.py diff --git a/_plotly_utils/tests/validators/test_compound_validator.py b/plotly-package/_plotly_utils/tests/validators/test_compound_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_compound_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_compound_validator.py diff --git a/_plotly_utils/tests/validators/test_compoundarray_validator.py b/plotly-package/_plotly_utils/tests/validators/test_compoundarray_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_compoundarray_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_compoundarray_validator.py diff --git a/_plotly_utils/tests/validators/test_dash_validator.py b/plotly-package/_plotly_utils/tests/validators/test_dash_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_dash_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_dash_validator.py diff --git a/_plotly_utils/tests/validators/test_dataarray_validator.py b/plotly-package/_plotly_utils/tests/validators/test_dataarray_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_dataarray_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_dataarray_validator.py diff --git a/_plotly_utils/tests/validators/test_enumerated_validator.py b/plotly-package/_plotly_utils/tests/validators/test_enumerated_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_enumerated_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_enumerated_validator.py diff --git a/_plotly_utils/tests/validators/test_flaglist_validator.py b/plotly-package/_plotly_utils/tests/validators/test_flaglist_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_flaglist_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_flaglist_validator.py diff --git a/_plotly_utils/tests/validators/test_imageuri_validator.py b/plotly-package/_plotly_utils/tests/validators/test_imageuri_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_imageuri_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_imageuri_validator.py diff --git a/_plotly_utils/tests/validators/test_infoarray_validator.py b/plotly-package/_plotly_utils/tests/validators/test_infoarray_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_infoarray_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_infoarray_validator.py diff --git a/_plotly_utils/tests/validators/test_integer_validator.py b/plotly-package/_plotly_utils/tests/validators/test_integer_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_integer_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_integer_validator.py diff --git a/_plotly_utils/tests/validators/test_literal_validator.py b/plotly-package/_plotly_utils/tests/validators/test_literal_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_literal_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_literal_validator.py diff --git a/_plotly_utils/tests/validators/test_number_validator.py b/plotly-package/_plotly_utils/tests/validators/test_number_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_number_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_number_validator.py diff --git a/_plotly_utils/tests/validators/test_pandas_series_input.py b/plotly-package/_plotly_utils/tests/validators/test_pandas_series_input.py similarity index 100% rename from _plotly_utils/tests/validators/test_pandas_series_input.py rename to plotly-package/_plotly_utils/tests/validators/test_pandas_series_input.py diff --git a/_plotly_utils/tests/validators/test_string_validator.py b/plotly-package/_plotly_utils/tests/validators/test_string_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_string_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_string_validator.py diff --git a/_plotly_utils/tests/validators/test_subplotid_validator.py b/plotly-package/_plotly_utils/tests/validators/test_subplotid_validator.py similarity index 100% rename from _plotly_utils/tests/validators/test_subplotid_validator.py rename to plotly-package/_plotly_utils/tests/validators/test_subplotid_validator.py diff --git a/_plotly_utils/tests/validators/test_validators_common.py b/plotly-package/_plotly_utils/tests/validators/test_validators_common.py similarity index 100% rename from _plotly_utils/tests/validators/test_validators_common.py rename to plotly-package/_plotly_utils/tests/validators/test_validators_common.py diff --git a/_plotly_utils/tests/validators/test_xarray_input.py b/plotly-package/_plotly_utils/tests/validators/test_xarray_input.py similarity index 100% rename from _plotly_utils/tests/validators/test_xarray_input.py rename to plotly-package/_plotly_utils/tests/validators/test_xarray_input.py diff --git a/_plotly_utils/utils.py b/plotly-package/_plotly_utils/utils.py similarity index 100% rename from _plotly_utils/utils.py rename to plotly-package/_plotly_utils/utils.py diff --git a/optional-requirements.txt b/plotly-package/optional-requirements.txt similarity index 100% rename from optional-requirements.txt rename to plotly-package/optional-requirements.txt diff --git a/plotly/__init__.py b/plotly-package/plotly/__init__.py similarity index 100% rename from plotly/__init__.py rename to plotly-package/plotly/__init__.py diff --git a/plotly/_docstring_gen.py b/plotly-package/plotly/_docstring_gen.py similarity index 100% rename from plotly/_docstring_gen.py rename to plotly-package/plotly/_docstring_gen.py diff --git a/plotly/_version.py b/plotly-package/plotly/_version.py similarity index 100% rename from plotly/_version.py rename to plotly-package/plotly/_version.py diff --git a/plotly/_widget_version.py b/plotly-package/plotly/_widget_version.py similarity index 100% rename from plotly/_widget_version.py rename to plotly-package/plotly/_widget_version.py diff --git a/plotly/animation.py b/plotly-package/plotly/animation.py similarity index 100% rename from plotly/animation.py rename to plotly-package/plotly/animation.py diff --git a/plotly/api/__init__.py b/plotly-package/plotly/api/__init__.py similarity index 100% rename from plotly/api/__init__.py rename to plotly-package/plotly/api/__init__.py diff --git a/plotly/api/utils.py b/plotly-package/plotly/api/utils.py similarity index 100% rename from plotly/api/utils.py rename to plotly-package/plotly/api/utils.py diff --git a/plotly/api/v1.py b/plotly-package/plotly/api/v1.py similarity index 100% rename from plotly/api/v1.py rename to plotly-package/plotly/api/v1.py diff --git a/plotly/api/v2.py b/plotly-package/plotly/api/v2.py similarity index 100% rename from plotly/api/v2.py rename to plotly-package/plotly/api/v2.py diff --git a/plotly/basedatatypes.py b/plotly-package/plotly/basedatatypes.py similarity index 100% rename from plotly/basedatatypes.py rename to plotly-package/plotly/basedatatypes.py diff --git a/plotly/basewidget.py b/plotly-package/plotly/basewidget.py similarity index 100% rename from plotly/basewidget.py rename to plotly-package/plotly/basewidget.py diff --git a/plotly/callbacks.py b/plotly-package/plotly/callbacks.py similarity index 100% rename from plotly/callbacks.py rename to plotly-package/plotly/callbacks.py diff --git a/plotly/colors.py b/plotly-package/plotly/colors.py similarity index 100% rename from plotly/colors.py rename to plotly-package/plotly/colors.py diff --git a/plotly/config.py b/plotly-package/plotly/config.py similarity index 100% rename from plotly/config.py rename to plotly-package/plotly/config.py diff --git a/plotly/dashboard_objs.py b/plotly-package/plotly/dashboard_objs.py similarity index 100% rename from plotly/dashboard_objs.py rename to plotly-package/plotly/dashboard_objs.py diff --git a/plotly/exceptions.py b/plotly-package/plotly/exceptions.py similarity index 100% rename from plotly/exceptions.py rename to plotly-package/plotly/exceptions.py diff --git a/plotly/figure_factory/README.md b/plotly-package/plotly/figure_factory/README.md similarity index 100% rename from plotly/figure_factory/README.md rename to plotly-package/plotly/figure_factory/README.md diff --git a/plotly/figure_factory/_2d_density.py b/plotly-package/plotly/figure_factory/_2d_density.py similarity index 100% rename from plotly/figure_factory/_2d_density.py rename to plotly-package/plotly/figure_factory/_2d_density.py diff --git a/plotly/figure_factory/__init__.py b/plotly-package/plotly/figure_factory/__init__.py similarity index 100% rename from plotly/figure_factory/__init__.py rename to plotly-package/plotly/figure_factory/__init__.py diff --git a/plotly/figure_factory/_annotated_heatmap.py b/plotly-package/plotly/figure_factory/_annotated_heatmap.py similarity index 100% rename from plotly/figure_factory/_annotated_heatmap.py rename to plotly-package/plotly/figure_factory/_annotated_heatmap.py diff --git a/plotly/figure_factory/_bullet.py b/plotly-package/plotly/figure_factory/_bullet.py similarity index 100% rename from plotly/figure_factory/_bullet.py rename to plotly-package/plotly/figure_factory/_bullet.py diff --git a/plotly/figure_factory/_candlestick.py b/plotly-package/plotly/figure_factory/_candlestick.py similarity index 100% rename from plotly/figure_factory/_candlestick.py rename to plotly-package/plotly/figure_factory/_candlestick.py diff --git a/plotly/figure_factory/_county_choropleth.py b/plotly-package/plotly/figure_factory/_county_choropleth.py similarity index 100% rename from plotly/figure_factory/_county_choropleth.py rename to plotly-package/plotly/figure_factory/_county_choropleth.py diff --git a/plotly/figure_factory/_dendrogram.py b/plotly-package/plotly/figure_factory/_dendrogram.py similarity index 100% rename from plotly/figure_factory/_dendrogram.py rename to plotly-package/plotly/figure_factory/_dendrogram.py diff --git a/plotly/figure_factory/_distplot.py b/plotly-package/plotly/figure_factory/_distplot.py similarity index 100% rename from plotly/figure_factory/_distplot.py rename to plotly-package/plotly/figure_factory/_distplot.py diff --git a/plotly/figure_factory/_facet_grid.py b/plotly-package/plotly/figure_factory/_facet_grid.py similarity index 100% rename from plotly/figure_factory/_facet_grid.py rename to plotly-package/plotly/figure_factory/_facet_grid.py diff --git a/plotly/figure_factory/_gantt.py b/plotly-package/plotly/figure_factory/_gantt.py similarity index 100% rename from plotly/figure_factory/_gantt.py rename to plotly-package/plotly/figure_factory/_gantt.py diff --git a/plotly/figure_factory/_ohlc.py b/plotly-package/plotly/figure_factory/_ohlc.py similarity index 100% rename from plotly/figure_factory/_ohlc.py rename to plotly-package/plotly/figure_factory/_ohlc.py diff --git a/plotly/figure_factory/_quiver.py b/plotly-package/plotly/figure_factory/_quiver.py similarity index 100% rename from plotly/figure_factory/_quiver.py rename to plotly-package/plotly/figure_factory/_quiver.py diff --git a/plotly/figure_factory/_scatterplot.py b/plotly-package/plotly/figure_factory/_scatterplot.py similarity index 100% rename from plotly/figure_factory/_scatterplot.py rename to plotly-package/plotly/figure_factory/_scatterplot.py diff --git a/plotly/figure_factory/_streamline.py b/plotly-package/plotly/figure_factory/_streamline.py similarity index 100% rename from plotly/figure_factory/_streamline.py rename to plotly-package/plotly/figure_factory/_streamline.py diff --git a/plotly/figure_factory/_table.py b/plotly-package/plotly/figure_factory/_table.py similarity index 100% rename from plotly/figure_factory/_table.py rename to plotly-package/plotly/figure_factory/_table.py diff --git a/plotly/figure_factory/_ternary_contour.py b/plotly-package/plotly/figure_factory/_ternary_contour.py similarity index 100% rename from plotly/figure_factory/_ternary_contour.py rename to plotly-package/plotly/figure_factory/_ternary_contour.py diff --git a/plotly/figure_factory/_trisurf.py b/plotly-package/plotly/figure_factory/_trisurf.py similarity index 100% rename from plotly/figure_factory/_trisurf.py rename to plotly-package/plotly/figure_factory/_trisurf.py diff --git a/plotly/figure_factory/_violin.py b/plotly-package/plotly/figure_factory/_violin.py similarity index 100% rename from plotly/figure_factory/_violin.py rename to plotly-package/plotly/figure_factory/_violin.py diff --git a/plotly/figure_factory/utils.py b/plotly-package/plotly/figure_factory/utils.py similarity index 100% rename from plotly/figure_factory/utils.py rename to plotly-package/plotly/figure_factory/utils.py diff --git a/plotly/files.py b/plotly-package/plotly/files.py similarity index 100% rename from plotly/files.py rename to plotly-package/plotly/files.py diff --git a/plotly/graph_objs/__init__.py b/plotly-package/plotly/graph_objs/__init__.py similarity index 100% rename from plotly/graph_objs/__init__.py rename to plotly-package/plotly/graph_objs/__init__.py diff --git a/plotly/graph_objs/_deprecations.py b/plotly-package/plotly/graph_objs/_deprecations.py similarity index 100% rename from plotly/graph_objs/_deprecations.py rename to plotly-package/plotly/graph_objs/_deprecations.py diff --git a/plotly/graph_objs/_figure.py b/plotly-package/plotly/graph_objs/_figure.py similarity index 100% rename from plotly/graph_objs/_figure.py rename to plotly-package/plotly/graph_objs/_figure.py diff --git a/plotly/graph_objs/_figurewidget.py b/plotly-package/plotly/graph_objs/_figurewidget.py similarity index 100% rename from plotly/graph_objs/_figurewidget.py rename to plotly-package/plotly/graph_objs/_figurewidget.py diff --git a/plotly/graph_objs/area/__init__.py b/plotly-package/plotly/graph_objs/area/__init__.py similarity index 100% rename from plotly/graph_objs/area/__init__.py rename to plotly-package/plotly/graph_objs/area/__init__.py diff --git a/plotly/graph_objs/area/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/area/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/area/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/area/hoverlabel/__init__.py diff --git a/plotly/graph_objs/bar/__init__.py b/plotly-package/plotly/graph_objs/bar/__init__.py similarity index 100% rename from plotly/graph_objs/bar/__init__.py rename to plotly-package/plotly/graph_objs/bar/__init__.py diff --git a/plotly/graph_objs/bar/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/bar/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/bar/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/bar/hoverlabel/__init__.py diff --git a/plotly/graph_objs/bar/marker/__init__.py b/plotly-package/plotly/graph_objs/bar/marker/__init__.py similarity index 100% rename from plotly/graph_objs/bar/marker/__init__.py rename to plotly-package/plotly/graph_objs/bar/marker/__init__.py diff --git a/plotly/graph_objs/bar/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/bar/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/bar/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/bar/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/bar/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/bar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/bar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/bar/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/bar/selected/__init__.py b/plotly-package/plotly/graph_objs/bar/selected/__init__.py similarity index 100% rename from plotly/graph_objs/bar/selected/__init__.py rename to plotly-package/plotly/graph_objs/bar/selected/__init__.py diff --git a/plotly/graph_objs/bar/unselected/__init__.py b/plotly-package/plotly/graph_objs/bar/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/bar/unselected/__init__.py rename to plotly-package/plotly/graph_objs/bar/unselected/__init__.py diff --git a/plotly/graph_objs/barpolar/__init__.py b/plotly-package/plotly/graph_objs/barpolar/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/__init__.py diff --git a/plotly/graph_objs/barpolar/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/barpolar/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/hoverlabel/__init__.py diff --git a/plotly/graph_objs/barpolar/marker/__init__.py b/plotly-package/plotly/graph_objs/barpolar/marker/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/marker/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/marker/__init__.py diff --git a/plotly/graph_objs/barpolar/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/barpolar/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/barpolar/selected/__init__.py b/plotly-package/plotly/graph_objs/barpolar/selected/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/selected/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/selected/__init__.py diff --git a/plotly/graph_objs/barpolar/unselected/__init__.py b/plotly-package/plotly/graph_objs/barpolar/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/barpolar/unselected/__init__.py rename to plotly-package/plotly/graph_objs/barpolar/unselected/__init__.py diff --git a/plotly/graph_objs/box/__init__.py b/plotly-package/plotly/graph_objs/box/__init__.py similarity index 100% rename from plotly/graph_objs/box/__init__.py rename to plotly-package/plotly/graph_objs/box/__init__.py diff --git a/plotly/graph_objs/box/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/box/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/box/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/box/hoverlabel/__init__.py diff --git a/plotly/graph_objs/box/marker/__init__.py b/plotly-package/plotly/graph_objs/box/marker/__init__.py similarity index 100% rename from plotly/graph_objs/box/marker/__init__.py rename to plotly-package/plotly/graph_objs/box/marker/__init__.py diff --git a/plotly/graph_objs/box/selected/__init__.py b/plotly-package/plotly/graph_objs/box/selected/__init__.py similarity index 100% rename from plotly/graph_objs/box/selected/__init__.py rename to plotly-package/plotly/graph_objs/box/selected/__init__.py diff --git a/plotly/graph_objs/box/unselected/__init__.py b/plotly-package/plotly/graph_objs/box/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/box/unselected/__init__.py rename to plotly-package/plotly/graph_objs/box/unselected/__init__.py diff --git a/plotly/graph_objs/candlestick/__init__.py b/plotly-package/plotly/graph_objs/candlestick/__init__.py similarity index 100% rename from plotly/graph_objs/candlestick/__init__.py rename to plotly-package/plotly/graph_objs/candlestick/__init__.py diff --git a/plotly/graph_objs/candlestick/decreasing/__init__.py b/plotly-package/plotly/graph_objs/candlestick/decreasing/__init__.py similarity index 100% rename from plotly/graph_objs/candlestick/decreasing/__init__.py rename to plotly-package/plotly/graph_objs/candlestick/decreasing/__init__.py diff --git a/plotly/graph_objs/candlestick/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/candlestick/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/candlestick/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/candlestick/hoverlabel/__init__.py diff --git a/plotly/graph_objs/candlestick/increasing/__init__.py b/plotly-package/plotly/graph_objs/candlestick/increasing/__init__.py similarity index 100% rename from plotly/graph_objs/candlestick/increasing/__init__.py rename to plotly-package/plotly/graph_objs/candlestick/increasing/__init__.py diff --git a/plotly/graph_objs/carpet/__init__.py b/plotly-package/plotly/graph_objs/carpet/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/__init__.py rename to plotly-package/plotly/graph_objs/carpet/__init__.py diff --git a/plotly/graph_objs/carpet/aaxis/__init__.py b/plotly-package/plotly/graph_objs/carpet/aaxis/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/aaxis/__init__.py rename to plotly-package/plotly/graph_objs/carpet/aaxis/__init__.py diff --git a/plotly/graph_objs/carpet/aaxis/title/__init__.py b/plotly-package/plotly/graph_objs/carpet/aaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/aaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/carpet/aaxis/title/__init__.py diff --git a/plotly/graph_objs/carpet/baxis/__init__.py b/plotly-package/plotly/graph_objs/carpet/baxis/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/baxis/__init__.py rename to plotly-package/plotly/graph_objs/carpet/baxis/__init__.py diff --git a/plotly/graph_objs/carpet/baxis/title/__init__.py b/plotly-package/plotly/graph_objs/carpet/baxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/baxis/title/__init__.py rename to plotly-package/plotly/graph_objs/carpet/baxis/title/__init__.py diff --git a/plotly/graph_objs/carpet/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/carpet/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/carpet/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/carpet/hoverlabel/__init__.py diff --git a/plotly/graph_objs/choropleth/__init__.py b/plotly-package/plotly/graph_objs/choropleth/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/__init__.py diff --git a/plotly/graph_objs/choropleth/colorbar/__init__.py b/plotly-package/plotly/graph_objs/choropleth/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/colorbar/__init__.py diff --git a/plotly/graph_objs/choropleth/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/choropleth/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/colorbar/title/__init__.py diff --git a/plotly/graph_objs/choropleth/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/choropleth/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/hoverlabel/__init__.py diff --git a/plotly/graph_objs/choropleth/marker/__init__.py b/plotly-package/plotly/graph_objs/choropleth/marker/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/marker/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/marker/__init__.py diff --git a/plotly/graph_objs/choropleth/selected/__init__.py b/plotly-package/plotly/graph_objs/choropleth/selected/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/selected/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/selected/__init__.py diff --git a/plotly/graph_objs/choropleth/unselected/__init__.py b/plotly-package/plotly/graph_objs/choropleth/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/choropleth/unselected/__init__.py rename to plotly-package/plotly/graph_objs/choropleth/unselected/__init__.py diff --git a/plotly/graph_objs/cone/__init__.py b/plotly-package/plotly/graph_objs/cone/__init__.py similarity index 100% rename from plotly/graph_objs/cone/__init__.py rename to plotly-package/plotly/graph_objs/cone/__init__.py diff --git a/plotly/graph_objs/cone/colorbar/__init__.py b/plotly-package/plotly/graph_objs/cone/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/cone/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/cone/colorbar/__init__.py diff --git a/plotly/graph_objs/cone/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/cone/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/cone/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/cone/colorbar/title/__init__.py diff --git a/plotly/graph_objs/cone/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/cone/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/cone/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/cone/hoverlabel/__init__.py diff --git a/plotly/graph_objs/contour/__init__.py b/plotly-package/plotly/graph_objs/contour/__init__.py similarity index 100% rename from plotly/graph_objs/contour/__init__.py rename to plotly-package/plotly/graph_objs/contour/__init__.py diff --git a/plotly/graph_objs/contour/colorbar/__init__.py b/plotly-package/plotly/graph_objs/contour/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/contour/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/contour/colorbar/__init__.py diff --git a/plotly/graph_objs/contour/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/contour/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/contour/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/contour/colorbar/title/__init__.py diff --git a/plotly/graph_objs/contour/contours/__init__.py b/plotly-package/plotly/graph_objs/contour/contours/__init__.py similarity index 100% rename from plotly/graph_objs/contour/contours/__init__.py rename to plotly-package/plotly/graph_objs/contour/contours/__init__.py diff --git a/plotly/graph_objs/contour/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/contour/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/contour/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/contour/hoverlabel/__init__.py diff --git a/plotly/graph_objs/contourcarpet/__init__.py b/plotly-package/plotly/graph_objs/contourcarpet/__init__.py similarity index 100% rename from plotly/graph_objs/contourcarpet/__init__.py rename to plotly-package/plotly/graph_objs/contourcarpet/__init__.py diff --git a/plotly/graph_objs/contourcarpet/colorbar/__init__.py b/plotly-package/plotly/graph_objs/contourcarpet/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/contourcarpet/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/contourcarpet/colorbar/__init__.py diff --git a/plotly/graph_objs/contourcarpet/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/contourcarpet/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/contourcarpet/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/contourcarpet/colorbar/title/__init__.py diff --git a/plotly/graph_objs/contourcarpet/contours/__init__.py b/plotly-package/plotly/graph_objs/contourcarpet/contours/__init__.py similarity index 100% rename from plotly/graph_objs/contourcarpet/contours/__init__.py rename to plotly-package/plotly/graph_objs/contourcarpet/contours/__init__.py diff --git a/plotly/graph_objs/contourcarpet/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/contourcarpet/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/contourcarpet/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/contourcarpet/hoverlabel/__init__.py diff --git a/plotly/graph_objs/funnel/__init__.py b/plotly-package/plotly/graph_objs/funnel/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/__init__.py rename to plotly-package/plotly/graph_objs/funnel/__init__.py diff --git a/plotly/graph_objs/funnel/connector/__init__.py b/plotly-package/plotly/graph_objs/funnel/connector/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/connector/__init__.py rename to plotly-package/plotly/graph_objs/funnel/connector/__init__.py diff --git a/plotly/graph_objs/funnel/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/funnel/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/funnel/hoverlabel/__init__.py diff --git a/plotly/graph_objs/funnel/marker/__init__.py b/plotly-package/plotly/graph_objs/funnel/marker/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/marker/__init__.py rename to plotly-package/plotly/graph_objs/funnel/marker/__init__.py diff --git a/plotly/graph_objs/funnel/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/funnel/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/funnel/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/funnel/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/funnel/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/funnel/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/funnel/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/funnelarea/__init__.py b/plotly-package/plotly/graph_objs/funnelarea/__init__.py similarity index 100% rename from plotly/graph_objs/funnelarea/__init__.py rename to plotly-package/plotly/graph_objs/funnelarea/__init__.py diff --git a/plotly/graph_objs/funnelarea/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/funnelarea/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/funnelarea/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/funnelarea/hoverlabel/__init__.py diff --git a/plotly/graph_objs/funnelarea/marker/__init__.py b/plotly-package/plotly/graph_objs/funnelarea/marker/__init__.py similarity index 100% rename from plotly/graph_objs/funnelarea/marker/__init__.py rename to plotly-package/plotly/graph_objs/funnelarea/marker/__init__.py diff --git a/plotly/graph_objs/funnelarea/title/__init__.py b/plotly-package/plotly/graph_objs/funnelarea/title/__init__.py similarity index 100% rename from plotly/graph_objs/funnelarea/title/__init__.py rename to plotly-package/plotly/graph_objs/funnelarea/title/__init__.py diff --git a/plotly/graph_objs/graph_objs.py b/plotly-package/plotly/graph_objs/graph_objs.py similarity index 100% rename from plotly/graph_objs/graph_objs.py rename to plotly-package/plotly/graph_objs/graph_objs.py diff --git a/plotly/graph_objs/heatmap/__init__.py b/plotly-package/plotly/graph_objs/heatmap/__init__.py similarity index 100% rename from plotly/graph_objs/heatmap/__init__.py rename to plotly-package/plotly/graph_objs/heatmap/__init__.py diff --git a/plotly/graph_objs/heatmap/colorbar/__init__.py b/plotly-package/plotly/graph_objs/heatmap/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/heatmap/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/heatmap/colorbar/__init__.py diff --git a/plotly/graph_objs/heatmap/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/heatmap/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/heatmap/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/heatmap/colorbar/title/__init__.py diff --git a/plotly/graph_objs/heatmap/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/heatmap/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/heatmap/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/heatmap/hoverlabel/__init__.py diff --git a/plotly/graph_objs/heatmapgl/__init__.py b/plotly-package/plotly/graph_objs/heatmapgl/__init__.py similarity index 100% rename from plotly/graph_objs/heatmapgl/__init__.py rename to plotly-package/plotly/graph_objs/heatmapgl/__init__.py diff --git a/plotly/graph_objs/heatmapgl/colorbar/__init__.py b/plotly-package/plotly/graph_objs/heatmapgl/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/heatmapgl/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/heatmapgl/colorbar/__init__.py diff --git a/plotly/graph_objs/heatmapgl/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/heatmapgl/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/heatmapgl/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/heatmapgl/colorbar/title/__init__.py diff --git a/plotly/graph_objs/heatmapgl/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/heatmapgl/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/heatmapgl/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/heatmapgl/hoverlabel/__init__.py diff --git a/plotly/graph_objs/histogram/__init__.py b/plotly-package/plotly/graph_objs/histogram/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/__init__.py rename to plotly-package/plotly/graph_objs/histogram/__init__.py diff --git a/plotly/graph_objs/histogram/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/histogram/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/histogram/hoverlabel/__init__.py diff --git a/plotly/graph_objs/histogram/marker/__init__.py b/plotly-package/plotly/graph_objs/histogram/marker/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/marker/__init__.py rename to plotly-package/plotly/graph_objs/histogram/marker/__init__.py diff --git a/plotly/graph_objs/histogram/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/histogram/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/histogram/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/histogram/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/histogram/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/histogram/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/histogram/selected/__init__.py b/plotly-package/plotly/graph_objs/histogram/selected/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/selected/__init__.py rename to plotly-package/plotly/graph_objs/histogram/selected/__init__.py diff --git a/plotly/graph_objs/histogram/unselected/__init__.py b/plotly-package/plotly/graph_objs/histogram/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/histogram/unselected/__init__.py rename to plotly-package/plotly/graph_objs/histogram/unselected/__init__.py diff --git a/plotly/graph_objs/histogram2d/__init__.py b/plotly-package/plotly/graph_objs/histogram2d/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2d/__init__.py rename to plotly-package/plotly/graph_objs/histogram2d/__init__.py diff --git a/plotly/graph_objs/histogram2d/colorbar/__init__.py b/plotly-package/plotly/graph_objs/histogram2d/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2d/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/histogram2d/colorbar/__init__.py diff --git a/plotly/graph_objs/histogram2d/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/histogram2d/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2d/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/histogram2d/colorbar/title/__init__.py diff --git a/plotly/graph_objs/histogram2d/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/histogram2d/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2d/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/histogram2d/hoverlabel/__init__.py diff --git a/plotly/graph_objs/histogram2dcontour/__init__.py b/plotly-package/plotly/graph_objs/histogram2dcontour/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2dcontour/__init__.py rename to plotly-package/plotly/graph_objs/histogram2dcontour/__init__.py diff --git a/plotly/graph_objs/histogram2dcontour/colorbar/__init__.py b/plotly-package/plotly/graph_objs/histogram2dcontour/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2dcontour/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/histogram2dcontour/colorbar/__init__.py diff --git a/plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/histogram2dcontour/colorbar/title/__init__.py diff --git a/plotly/graph_objs/histogram2dcontour/contours/__init__.py b/plotly-package/plotly/graph_objs/histogram2dcontour/contours/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2dcontour/contours/__init__.py rename to plotly-package/plotly/graph_objs/histogram2dcontour/contours/__init__.py diff --git a/plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/histogram2dcontour/hoverlabel/__init__.py diff --git a/plotly/graph_objs/isosurface/__init__.py b/plotly-package/plotly/graph_objs/isosurface/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/__init__.py diff --git a/plotly/graph_objs/isosurface/caps/__init__.py b/plotly-package/plotly/graph_objs/isosurface/caps/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/caps/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/caps/__init__.py diff --git a/plotly/graph_objs/isosurface/colorbar/__init__.py b/plotly-package/plotly/graph_objs/isosurface/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/colorbar/__init__.py diff --git a/plotly/graph_objs/isosurface/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/isosurface/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/colorbar/title/__init__.py diff --git a/plotly/graph_objs/isosurface/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/isosurface/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/hoverlabel/__init__.py diff --git a/plotly/graph_objs/isosurface/slices/__init__.py b/plotly-package/plotly/graph_objs/isosurface/slices/__init__.py similarity index 100% rename from plotly/graph_objs/isosurface/slices/__init__.py rename to plotly-package/plotly/graph_objs/isosurface/slices/__init__.py diff --git a/plotly/graph_objs/layout/__init__.py b/plotly-package/plotly/graph_objs/layout/__init__.py similarity index 100% rename from plotly/graph_objs/layout/__init__.py rename to plotly-package/plotly/graph_objs/layout/__init__.py diff --git a/plotly/graph_objs/layout/annotation/__init__.py b/plotly-package/plotly/graph_objs/layout/annotation/__init__.py similarity index 100% rename from plotly/graph_objs/layout/annotation/__init__.py rename to plotly-package/plotly/graph_objs/layout/annotation/__init__.py diff --git a/plotly/graph_objs/layout/annotation/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/layout/annotation/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/layout/annotation/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/layout/annotation/hoverlabel/__init__.py diff --git a/plotly/graph_objs/layout/coloraxis/__init__.py b/plotly-package/plotly/graph_objs/layout/coloraxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/coloraxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/coloraxis/__init__.py diff --git a/plotly/graph_objs/layout/coloraxis/colorbar/__init__.py b/plotly-package/plotly/graph_objs/layout/coloraxis/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/layout/coloraxis/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/layout/coloraxis/colorbar/__init__.py diff --git a/plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/coloraxis/colorbar/title/__init__.py diff --git a/plotly/graph_objs/layout/geo/__init__.py b/plotly-package/plotly/graph_objs/layout/geo/__init__.py similarity index 100% rename from plotly/graph_objs/layout/geo/__init__.py rename to plotly-package/plotly/graph_objs/layout/geo/__init__.py diff --git a/plotly/graph_objs/layout/geo/projection/__init__.py b/plotly-package/plotly/graph_objs/layout/geo/projection/__init__.py similarity index 100% rename from plotly/graph_objs/layout/geo/projection/__init__.py rename to plotly-package/plotly/graph_objs/layout/geo/projection/__init__.py diff --git a/plotly/graph_objs/layout/grid/__init__.py b/plotly-package/plotly/graph_objs/layout/grid/__init__.py similarity index 100% rename from plotly/graph_objs/layout/grid/__init__.py rename to plotly-package/plotly/graph_objs/layout/grid/__init__.py diff --git a/plotly/graph_objs/layout/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/layout/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/layout/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/layout/hoverlabel/__init__.py diff --git a/plotly/graph_objs/layout/legend/__init__.py b/plotly-package/plotly/graph_objs/layout/legend/__init__.py similarity index 100% rename from plotly/graph_objs/layout/legend/__init__.py rename to plotly-package/plotly/graph_objs/layout/legend/__init__.py diff --git a/plotly/graph_objs/layout/mapbox/__init__.py b/plotly-package/plotly/graph_objs/layout/mapbox/__init__.py similarity index 100% rename from plotly/graph_objs/layout/mapbox/__init__.py rename to plotly-package/plotly/graph_objs/layout/mapbox/__init__.py diff --git a/plotly/graph_objs/layout/mapbox/layer/__init__.py b/plotly-package/plotly/graph_objs/layout/mapbox/layer/__init__.py similarity index 100% rename from plotly/graph_objs/layout/mapbox/layer/__init__.py rename to plotly-package/plotly/graph_objs/layout/mapbox/layer/__init__.py diff --git a/plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py b/plotly-package/plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py similarity index 100% rename from plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py rename to plotly-package/plotly/graph_objs/layout/mapbox/layer/symbol/__init__.py diff --git a/plotly/graph_objs/layout/polar/__init__.py b/plotly-package/plotly/graph_objs/layout/polar/__init__.py similarity index 100% rename from plotly/graph_objs/layout/polar/__init__.py rename to plotly-package/plotly/graph_objs/layout/polar/__init__.py diff --git a/plotly/graph_objs/layout/polar/angularaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/polar/angularaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/polar/angularaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/polar/angularaxis/__init__.py diff --git a/plotly/graph_objs/layout/polar/radialaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/polar/radialaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/polar/radialaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/polar/radialaxis/__init__.py diff --git a/plotly/graph_objs/layout/polar/radialaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/polar/radialaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/polar/radialaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/polar/radialaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/scene/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/__init__.py diff --git a/plotly/graph_objs/layout/scene/annotation/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/annotation/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/annotation/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/annotation/__init__.py diff --git a/plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/annotation/hoverlabel/__init__.py diff --git a/plotly/graph_objs/layout/scene/camera/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/camera/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/camera/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/camera/__init__.py diff --git a/plotly/graph_objs/layout/scene/xaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/xaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/xaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/xaxis/__init__.py diff --git a/plotly/graph_objs/layout/scene/xaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/xaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/xaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/xaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/scene/yaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/yaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/yaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/yaxis/__init__.py diff --git a/plotly/graph_objs/layout/scene/yaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/yaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/yaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/yaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/scene/zaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/zaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/zaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/zaxis/__init__.py diff --git a/plotly/graph_objs/layout/scene/zaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/scene/zaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/scene/zaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/scene/zaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/shape/__init__.py b/plotly-package/plotly/graph_objs/layout/shape/__init__.py similarity index 100% rename from plotly/graph_objs/layout/shape/__init__.py rename to plotly-package/plotly/graph_objs/layout/shape/__init__.py diff --git a/plotly/graph_objs/layout/slider/__init__.py b/plotly-package/plotly/graph_objs/layout/slider/__init__.py similarity index 100% rename from plotly/graph_objs/layout/slider/__init__.py rename to plotly-package/plotly/graph_objs/layout/slider/__init__.py diff --git a/plotly/graph_objs/layout/slider/currentvalue/__init__.py b/plotly-package/plotly/graph_objs/layout/slider/currentvalue/__init__.py similarity index 100% rename from plotly/graph_objs/layout/slider/currentvalue/__init__.py rename to plotly-package/plotly/graph_objs/layout/slider/currentvalue/__init__.py diff --git a/plotly/graph_objs/layout/template/__init__.py b/plotly-package/plotly/graph_objs/layout/template/__init__.py similarity index 100% rename from plotly/graph_objs/layout/template/__init__.py rename to plotly-package/plotly/graph_objs/layout/template/__init__.py diff --git a/plotly/graph_objs/layout/template/data/__init__.py b/plotly-package/plotly/graph_objs/layout/template/data/__init__.py similarity index 100% rename from plotly/graph_objs/layout/template/data/__init__.py rename to plotly-package/plotly/graph_objs/layout/template/data/__init__.py diff --git a/plotly/graph_objs/layout/ternary/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/__init__.py diff --git a/plotly/graph_objs/layout/ternary/aaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/aaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/aaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/aaxis/__init__.py diff --git a/plotly/graph_objs/layout/ternary/aaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/aaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/aaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/aaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/ternary/baxis/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/baxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/baxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/baxis/__init__.py diff --git a/plotly/graph_objs/layout/ternary/baxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/baxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/baxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/baxis/title/__init__.py diff --git a/plotly/graph_objs/layout/ternary/caxis/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/caxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/caxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/caxis/__init__.py diff --git a/plotly/graph_objs/layout/ternary/caxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/ternary/caxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/ternary/caxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/ternary/caxis/title/__init__.py diff --git a/plotly/graph_objs/layout/title/__init__.py b/plotly-package/plotly/graph_objs/layout/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/title/__init__.py diff --git a/plotly/graph_objs/layout/updatemenu/__init__.py b/plotly-package/plotly/graph_objs/layout/updatemenu/__init__.py similarity index 100% rename from plotly/graph_objs/layout/updatemenu/__init__.py rename to plotly-package/plotly/graph_objs/layout/updatemenu/__init__.py diff --git a/plotly/graph_objs/layout/xaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/xaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/xaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/xaxis/__init__.py diff --git a/plotly/graph_objs/layout/xaxis/rangeselector/__init__.py b/plotly-package/plotly/graph_objs/layout/xaxis/rangeselector/__init__.py similarity index 100% rename from plotly/graph_objs/layout/xaxis/rangeselector/__init__.py rename to plotly-package/plotly/graph_objs/layout/xaxis/rangeselector/__init__.py diff --git a/plotly/graph_objs/layout/xaxis/rangeslider/__init__.py b/plotly-package/plotly/graph_objs/layout/xaxis/rangeslider/__init__.py similarity index 100% rename from plotly/graph_objs/layout/xaxis/rangeslider/__init__.py rename to plotly-package/plotly/graph_objs/layout/xaxis/rangeslider/__init__.py diff --git a/plotly/graph_objs/layout/xaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/xaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/xaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/xaxis/title/__init__.py diff --git a/plotly/graph_objs/layout/yaxis/__init__.py b/plotly-package/plotly/graph_objs/layout/yaxis/__init__.py similarity index 100% rename from plotly/graph_objs/layout/yaxis/__init__.py rename to plotly-package/plotly/graph_objs/layout/yaxis/__init__.py diff --git a/plotly/graph_objs/layout/yaxis/title/__init__.py b/plotly-package/plotly/graph_objs/layout/yaxis/title/__init__.py similarity index 100% rename from plotly/graph_objs/layout/yaxis/title/__init__.py rename to plotly-package/plotly/graph_objs/layout/yaxis/title/__init__.py diff --git a/plotly/graph_objs/mesh3d/__init__.py b/plotly-package/plotly/graph_objs/mesh3d/__init__.py similarity index 100% rename from plotly/graph_objs/mesh3d/__init__.py rename to plotly-package/plotly/graph_objs/mesh3d/__init__.py diff --git a/plotly/graph_objs/mesh3d/colorbar/__init__.py b/plotly-package/plotly/graph_objs/mesh3d/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/mesh3d/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/mesh3d/colorbar/__init__.py diff --git a/plotly/graph_objs/mesh3d/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/mesh3d/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/mesh3d/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/mesh3d/colorbar/title/__init__.py diff --git a/plotly/graph_objs/mesh3d/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/mesh3d/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/mesh3d/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/mesh3d/hoverlabel/__init__.py diff --git a/plotly/graph_objs/ohlc/__init__.py b/plotly-package/plotly/graph_objs/ohlc/__init__.py similarity index 100% rename from plotly/graph_objs/ohlc/__init__.py rename to plotly-package/plotly/graph_objs/ohlc/__init__.py diff --git a/plotly/graph_objs/ohlc/decreasing/__init__.py b/plotly-package/plotly/graph_objs/ohlc/decreasing/__init__.py similarity index 100% rename from plotly/graph_objs/ohlc/decreasing/__init__.py rename to plotly-package/plotly/graph_objs/ohlc/decreasing/__init__.py diff --git a/plotly/graph_objs/ohlc/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/ohlc/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/ohlc/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/ohlc/hoverlabel/__init__.py diff --git a/plotly/graph_objs/ohlc/increasing/__init__.py b/plotly-package/plotly/graph_objs/ohlc/increasing/__init__.py similarity index 100% rename from plotly/graph_objs/ohlc/increasing/__init__.py rename to plotly-package/plotly/graph_objs/ohlc/increasing/__init__.py diff --git a/plotly/graph_objs/parcats/__init__.py b/plotly-package/plotly/graph_objs/parcats/__init__.py similarity index 100% rename from plotly/graph_objs/parcats/__init__.py rename to plotly-package/plotly/graph_objs/parcats/__init__.py diff --git a/plotly/graph_objs/parcats/line/__init__.py b/plotly-package/plotly/graph_objs/parcats/line/__init__.py similarity index 100% rename from plotly/graph_objs/parcats/line/__init__.py rename to plotly-package/plotly/graph_objs/parcats/line/__init__.py diff --git a/plotly/graph_objs/parcats/line/colorbar/__init__.py b/plotly-package/plotly/graph_objs/parcats/line/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/parcats/line/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/parcats/line/colorbar/__init__.py diff --git a/plotly/graph_objs/parcats/line/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/parcats/line/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/parcats/line/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/parcats/line/colorbar/title/__init__.py diff --git a/plotly/graph_objs/parcoords/__init__.py b/plotly-package/plotly/graph_objs/parcoords/__init__.py similarity index 100% rename from plotly/graph_objs/parcoords/__init__.py rename to plotly-package/plotly/graph_objs/parcoords/__init__.py diff --git a/plotly/graph_objs/parcoords/line/__init__.py b/plotly-package/plotly/graph_objs/parcoords/line/__init__.py similarity index 100% rename from plotly/graph_objs/parcoords/line/__init__.py rename to plotly-package/plotly/graph_objs/parcoords/line/__init__.py diff --git a/plotly/graph_objs/parcoords/line/colorbar/__init__.py b/plotly-package/plotly/graph_objs/parcoords/line/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/parcoords/line/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/parcoords/line/colorbar/__init__.py diff --git a/plotly/graph_objs/parcoords/line/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/parcoords/line/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/parcoords/line/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/parcoords/line/colorbar/title/__init__.py diff --git a/plotly/graph_objs/pie/__init__.py b/plotly-package/plotly/graph_objs/pie/__init__.py similarity index 100% rename from plotly/graph_objs/pie/__init__.py rename to plotly-package/plotly/graph_objs/pie/__init__.py diff --git a/plotly/graph_objs/pie/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/pie/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/pie/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/pie/hoverlabel/__init__.py diff --git a/plotly/graph_objs/pie/marker/__init__.py b/plotly-package/plotly/graph_objs/pie/marker/__init__.py similarity index 100% rename from plotly/graph_objs/pie/marker/__init__.py rename to plotly-package/plotly/graph_objs/pie/marker/__init__.py diff --git a/plotly/graph_objs/pie/title/__init__.py b/plotly-package/plotly/graph_objs/pie/title/__init__.py similarity index 100% rename from plotly/graph_objs/pie/title/__init__.py rename to plotly-package/plotly/graph_objs/pie/title/__init__.py diff --git a/plotly/graph_objs/pointcloud/__init__.py b/plotly-package/plotly/graph_objs/pointcloud/__init__.py similarity index 100% rename from plotly/graph_objs/pointcloud/__init__.py rename to plotly-package/plotly/graph_objs/pointcloud/__init__.py diff --git a/plotly/graph_objs/pointcloud/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/pointcloud/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/pointcloud/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/pointcloud/hoverlabel/__init__.py diff --git a/plotly/graph_objs/pointcloud/marker/__init__.py b/plotly-package/plotly/graph_objs/pointcloud/marker/__init__.py similarity index 100% rename from plotly/graph_objs/pointcloud/marker/__init__.py rename to plotly-package/plotly/graph_objs/pointcloud/marker/__init__.py diff --git a/plotly/graph_objs/sankey/__init__.py b/plotly-package/plotly/graph_objs/sankey/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/__init__.py rename to plotly-package/plotly/graph_objs/sankey/__init__.py diff --git a/plotly/graph_objs/sankey/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/sankey/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/sankey/hoverlabel/__init__.py diff --git a/plotly/graph_objs/sankey/link/__init__.py b/plotly-package/plotly/graph_objs/sankey/link/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/link/__init__.py rename to plotly-package/plotly/graph_objs/sankey/link/__init__.py diff --git a/plotly/graph_objs/sankey/link/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/sankey/link/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/link/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/sankey/link/hoverlabel/__init__.py diff --git a/plotly/graph_objs/sankey/node/__init__.py b/plotly-package/plotly/graph_objs/sankey/node/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/node/__init__.py rename to plotly-package/plotly/graph_objs/sankey/node/__init__.py diff --git a/plotly/graph_objs/sankey/node/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/sankey/node/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/sankey/node/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/sankey/node/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatter/__init__.py b/plotly-package/plotly/graph_objs/scatter/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/__init__.py rename to plotly-package/plotly/graph_objs/scatter/__init__.py diff --git a/plotly/graph_objs/scatter/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scatter/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scatter/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatter/marker/__init__.py b/plotly-package/plotly/graph_objs/scatter/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/marker/__init__.py rename to plotly-package/plotly/graph_objs/scatter/marker/__init__.py diff --git a/plotly/graph_objs/scatter/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatter/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatter/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scatter/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatter/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatter/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatter/selected/__init__.py b/plotly-package/plotly/graph_objs/scatter/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/selected/__init__.py rename to plotly-package/plotly/graph_objs/scatter/selected/__init__.py diff --git a/plotly/graph_objs/scatter/unselected/__init__.py b/plotly-package/plotly/graph_objs/scatter/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scatter/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scatter/unselected/__init__.py diff --git a/plotly/graph_objs/scatter3d/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/__init__.py diff --git a/plotly/graph_objs/scatter3d/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatter3d/line/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/line/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/line/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/line/__init__.py diff --git a/plotly/graph_objs/scatter3d/line/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/line/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/line/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/line/colorbar/__init__.py diff --git a/plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/line/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatter3d/marker/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/marker/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/marker/__init__.py diff --git a/plotly/graph_objs/scatter3d/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatter3d/projection/__init__.py b/plotly-package/plotly/graph_objs/scatter3d/projection/__init__.py similarity index 100% rename from plotly/graph_objs/scatter3d/projection/__init__.py rename to plotly-package/plotly/graph_objs/scatter3d/projection/__init__.py diff --git a/plotly/graph_objs/scattercarpet/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/__init__.py diff --git a/plotly/graph_objs/scattercarpet/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scattercarpet/marker/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/marker/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/marker/__init__.py diff --git a/plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scattercarpet/selected/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/selected/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/selected/__init__.py diff --git a/plotly/graph_objs/scattercarpet/unselected/__init__.py b/plotly-package/plotly/graph_objs/scattercarpet/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scattercarpet/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scattercarpet/unselected/__init__.py diff --git a/plotly/graph_objs/scattergeo/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/__init__.py diff --git a/plotly/graph_objs/scattergeo/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scattergeo/marker/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/marker/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/marker/__init__.py diff --git a/plotly/graph_objs/scattergeo/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scattergeo/selected/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/selected/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/selected/__init__.py diff --git a/plotly/graph_objs/scattergeo/unselected/__init__.py b/plotly-package/plotly/graph_objs/scattergeo/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scattergeo/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scattergeo/unselected/__init__.py diff --git a/plotly/graph_objs/scattergl/__init__.py b/plotly-package/plotly/graph_objs/scattergl/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/__init__.py diff --git a/plotly/graph_objs/scattergl/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scattergl/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scattergl/marker/__init__.py b/plotly-package/plotly/graph_objs/scattergl/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/marker/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/marker/__init__.py diff --git a/plotly/graph_objs/scattergl/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scattergl/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scattergl/selected/__init__.py b/plotly-package/plotly/graph_objs/scattergl/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/selected/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/selected/__init__.py diff --git a/plotly/graph_objs/scattergl/unselected/__init__.py b/plotly-package/plotly/graph_objs/scattergl/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scattergl/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scattergl/unselected/__init__.py diff --git a/plotly/graph_objs/scattermapbox/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/__init__.py diff --git a/plotly/graph_objs/scattermapbox/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scattermapbox/marker/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/marker/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/marker/__init__.py diff --git a/plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scattermapbox/selected/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/selected/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/selected/__init__.py diff --git a/plotly/graph_objs/scattermapbox/unselected/__init__.py b/plotly-package/plotly/graph_objs/scattermapbox/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scattermapbox/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scattermapbox/unselected/__init__.py diff --git a/plotly/graph_objs/scatterpolar/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/__init__.py diff --git a/plotly/graph_objs/scatterpolar/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatterpolar/marker/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/marker/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/marker/__init__.py diff --git a/plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatterpolar/selected/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/selected/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/selected/__init__.py diff --git a/plotly/graph_objs/scatterpolar/unselected/__init__.py b/plotly-package/plotly/graph_objs/scatterpolar/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolar/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolar/unselected/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/marker/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/marker/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/marker/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/selected/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/selected/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/selected/__init__.py diff --git a/plotly/graph_objs/scatterpolargl/unselected/__init__.py b/plotly-package/plotly/graph_objs/scatterpolargl/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterpolargl/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scatterpolargl/unselected/__init__.py diff --git a/plotly/graph_objs/scatterternary/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/__init__.py diff --git a/plotly/graph_objs/scatterternary/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/hoverlabel/__init__.py diff --git a/plotly/graph_objs/scatterternary/marker/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/marker/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/marker/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/marker/__init__.py diff --git a/plotly/graph_objs/scatterternary/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/scatterternary/selected/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/selected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/selected/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/selected/__init__.py diff --git a/plotly/graph_objs/scatterternary/unselected/__init__.py b/plotly-package/plotly/graph_objs/scatterternary/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/scatterternary/unselected/__init__.py rename to plotly-package/plotly/graph_objs/scatterternary/unselected/__init__.py diff --git a/plotly/graph_objs/splom/__init__.py b/plotly-package/plotly/graph_objs/splom/__init__.py similarity index 100% rename from plotly/graph_objs/splom/__init__.py rename to plotly-package/plotly/graph_objs/splom/__init__.py diff --git a/plotly/graph_objs/splom/dimension/__init__.py b/plotly-package/plotly/graph_objs/splom/dimension/__init__.py similarity index 100% rename from plotly/graph_objs/splom/dimension/__init__.py rename to plotly-package/plotly/graph_objs/splom/dimension/__init__.py diff --git a/plotly/graph_objs/splom/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/splom/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/splom/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/splom/hoverlabel/__init__.py diff --git a/plotly/graph_objs/splom/marker/__init__.py b/plotly-package/plotly/graph_objs/splom/marker/__init__.py similarity index 100% rename from plotly/graph_objs/splom/marker/__init__.py rename to plotly-package/plotly/graph_objs/splom/marker/__init__.py diff --git a/plotly/graph_objs/splom/marker/colorbar/__init__.py b/plotly-package/plotly/graph_objs/splom/marker/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/splom/marker/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/splom/marker/colorbar/__init__.py diff --git a/plotly/graph_objs/splom/marker/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/splom/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/splom/marker/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/splom/marker/colorbar/title/__init__.py diff --git a/plotly/graph_objs/splom/selected/__init__.py b/plotly-package/plotly/graph_objs/splom/selected/__init__.py similarity index 100% rename from plotly/graph_objs/splom/selected/__init__.py rename to plotly-package/plotly/graph_objs/splom/selected/__init__.py diff --git a/plotly/graph_objs/splom/unselected/__init__.py b/plotly-package/plotly/graph_objs/splom/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/splom/unselected/__init__.py rename to plotly-package/plotly/graph_objs/splom/unselected/__init__.py diff --git a/plotly/graph_objs/streamtube/__init__.py b/plotly-package/plotly/graph_objs/streamtube/__init__.py similarity index 100% rename from plotly/graph_objs/streamtube/__init__.py rename to plotly-package/plotly/graph_objs/streamtube/__init__.py diff --git a/plotly/graph_objs/streamtube/colorbar/__init__.py b/plotly-package/plotly/graph_objs/streamtube/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/streamtube/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/streamtube/colorbar/__init__.py diff --git a/plotly/graph_objs/streamtube/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/streamtube/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/streamtube/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/streamtube/colorbar/title/__init__.py diff --git a/plotly/graph_objs/streamtube/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/streamtube/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/streamtube/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/streamtube/hoverlabel/__init__.py diff --git a/plotly/graph_objs/sunburst/__init__.py b/plotly-package/plotly/graph_objs/sunburst/__init__.py similarity index 100% rename from plotly/graph_objs/sunburst/__init__.py rename to plotly-package/plotly/graph_objs/sunburst/__init__.py diff --git a/plotly/graph_objs/sunburst/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/sunburst/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/sunburst/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/sunburst/hoverlabel/__init__.py diff --git a/plotly/graph_objs/sunburst/marker/__init__.py b/plotly-package/plotly/graph_objs/sunburst/marker/__init__.py similarity index 100% rename from plotly/graph_objs/sunburst/marker/__init__.py rename to plotly-package/plotly/graph_objs/sunburst/marker/__init__.py diff --git a/plotly/graph_objs/surface/__init__.py b/plotly-package/plotly/graph_objs/surface/__init__.py similarity index 100% rename from plotly/graph_objs/surface/__init__.py rename to plotly-package/plotly/graph_objs/surface/__init__.py diff --git a/plotly/graph_objs/surface/colorbar/__init__.py b/plotly-package/plotly/graph_objs/surface/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/surface/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/surface/colorbar/__init__.py diff --git a/plotly/graph_objs/surface/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/surface/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/surface/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/surface/colorbar/title/__init__.py diff --git a/plotly/graph_objs/surface/contours/__init__.py b/plotly-package/plotly/graph_objs/surface/contours/__init__.py similarity index 100% rename from plotly/graph_objs/surface/contours/__init__.py rename to plotly-package/plotly/graph_objs/surface/contours/__init__.py diff --git a/plotly/graph_objs/surface/contours/x/__init__.py b/plotly-package/plotly/graph_objs/surface/contours/x/__init__.py similarity index 100% rename from plotly/graph_objs/surface/contours/x/__init__.py rename to plotly-package/plotly/graph_objs/surface/contours/x/__init__.py diff --git a/plotly/graph_objs/surface/contours/y/__init__.py b/plotly-package/plotly/graph_objs/surface/contours/y/__init__.py similarity index 100% rename from plotly/graph_objs/surface/contours/y/__init__.py rename to plotly-package/plotly/graph_objs/surface/contours/y/__init__.py diff --git a/plotly/graph_objs/surface/contours/z/__init__.py b/plotly-package/plotly/graph_objs/surface/contours/z/__init__.py similarity index 100% rename from plotly/graph_objs/surface/contours/z/__init__.py rename to plotly-package/plotly/graph_objs/surface/contours/z/__init__.py diff --git a/plotly/graph_objs/surface/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/surface/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/surface/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/surface/hoverlabel/__init__.py diff --git a/plotly/graph_objs/table/__init__.py b/plotly-package/plotly/graph_objs/table/__init__.py similarity index 100% rename from plotly/graph_objs/table/__init__.py rename to plotly-package/plotly/graph_objs/table/__init__.py diff --git a/plotly/graph_objs/table/cells/__init__.py b/plotly-package/plotly/graph_objs/table/cells/__init__.py similarity index 100% rename from plotly/graph_objs/table/cells/__init__.py rename to plotly-package/plotly/graph_objs/table/cells/__init__.py diff --git a/plotly/graph_objs/table/header/__init__.py b/plotly-package/plotly/graph_objs/table/header/__init__.py similarity index 100% rename from plotly/graph_objs/table/header/__init__.py rename to plotly-package/plotly/graph_objs/table/header/__init__.py diff --git a/plotly/graph_objs/table/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/table/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/table/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/table/hoverlabel/__init__.py diff --git a/plotly/graph_objs/violin/__init__.py b/plotly-package/plotly/graph_objs/violin/__init__.py similarity index 100% rename from plotly/graph_objs/violin/__init__.py rename to plotly-package/plotly/graph_objs/violin/__init__.py diff --git a/plotly/graph_objs/violin/box/__init__.py b/plotly-package/plotly/graph_objs/violin/box/__init__.py similarity index 100% rename from plotly/graph_objs/violin/box/__init__.py rename to plotly-package/plotly/graph_objs/violin/box/__init__.py diff --git a/plotly/graph_objs/violin/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/violin/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/violin/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/violin/hoverlabel/__init__.py diff --git a/plotly/graph_objs/violin/marker/__init__.py b/plotly-package/plotly/graph_objs/violin/marker/__init__.py similarity index 100% rename from plotly/graph_objs/violin/marker/__init__.py rename to plotly-package/plotly/graph_objs/violin/marker/__init__.py diff --git a/plotly/graph_objs/violin/selected/__init__.py b/plotly-package/plotly/graph_objs/violin/selected/__init__.py similarity index 100% rename from plotly/graph_objs/violin/selected/__init__.py rename to plotly-package/plotly/graph_objs/violin/selected/__init__.py diff --git a/plotly/graph_objs/violin/unselected/__init__.py b/plotly-package/plotly/graph_objs/violin/unselected/__init__.py similarity index 100% rename from plotly/graph_objs/violin/unselected/__init__.py rename to plotly-package/plotly/graph_objs/violin/unselected/__init__.py diff --git a/plotly/graph_objs/volume/__init__.py b/plotly-package/plotly/graph_objs/volume/__init__.py similarity index 100% rename from plotly/graph_objs/volume/__init__.py rename to plotly-package/plotly/graph_objs/volume/__init__.py diff --git a/plotly/graph_objs/volume/caps/__init__.py b/plotly-package/plotly/graph_objs/volume/caps/__init__.py similarity index 100% rename from plotly/graph_objs/volume/caps/__init__.py rename to plotly-package/plotly/graph_objs/volume/caps/__init__.py diff --git a/plotly/graph_objs/volume/colorbar/__init__.py b/plotly-package/plotly/graph_objs/volume/colorbar/__init__.py similarity index 100% rename from plotly/graph_objs/volume/colorbar/__init__.py rename to plotly-package/plotly/graph_objs/volume/colorbar/__init__.py diff --git a/plotly/graph_objs/volume/colorbar/title/__init__.py b/plotly-package/plotly/graph_objs/volume/colorbar/title/__init__.py similarity index 100% rename from plotly/graph_objs/volume/colorbar/title/__init__.py rename to plotly-package/plotly/graph_objs/volume/colorbar/title/__init__.py diff --git a/plotly/graph_objs/volume/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/volume/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/volume/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/volume/hoverlabel/__init__.py diff --git a/plotly/graph_objs/volume/slices/__init__.py b/plotly-package/plotly/graph_objs/volume/slices/__init__.py similarity index 100% rename from plotly/graph_objs/volume/slices/__init__.py rename to plotly-package/plotly/graph_objs/volume/slices/__init__.py diff --git a/plotly/graph_objs/waterfall/__init__.py b/plotly-package/plotly/graph_objs/waterfall/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/__init__.py diff --git a/plotly/graph_objs/waterfall/connector/__init__.py b/plotly-package/plotly/graph_objs/waterfall/connector/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/connector/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/connector/__init__.py diff --git a/plotly/graph_objs/waterfall/decreasing/__init__.py b/plotly-package/plotly/graph_objs/waterfall/decreasing/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/decreasing/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/decreasing/__init__.py diff --git a/plotly/graph_objs/waterfall/decreasing/marker/__init__.py b/plotly-package/plotly/graph_objs/waterfall/decreasing/marker/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/decreasing/marker/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/decreasing/marker/__init__.py diff --git a/plotly/graph_objs/waterfall/hoverlabel/__init__.py b/plotly-package/plotly/graph_objs/waterfall/hoverlabel/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/hoverlabel/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/hoverlabel/__init__.py diff --git a/plotly/graph_objs/waterfall/increasing/__init__.py b/plotly-package/plotly/graph_objs/waterfall/increasing/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/increasing/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/increasing/__init__.py diff --git a/plotly/graph_objs/waterfall/increasing/marker/__init__.py b/plotly-package/plotly/graph_objs/waterfall/increasing/marker/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/increasing/marker/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/increasing/marker/__init__.py diff --git a/plotly/graph_objs/waterfall/totals/__init__.py b/plotly-package/plotly/graph_objs/waterfall/totals/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/totals/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/totals/__init__.py diff --git a/plotly/graph_objs/waterfall/totals/marker/__init__.py b/plotly-package/plotly/graph_objs/waterfall/totals/marker/__init__.py similarity index 100% rename from plotly/graph_objs/waterfall/totals/marker/__init__.py rename to plotly-package/plotly/graph_objs/waterfall/totals/marker/__init__.py diff --git a/plotly/graph_reference.py b/plotly-package/plotly/graph_reference.py similarity index 100% rename from plotly/graph_reference.py rename to plotly-package/plotly/graph_reference.py diff --git a/plotly/grid_objs.py b/plotly-package/plotly/grid_objs.py similarity index 100% rename from plotly/grid_objs.py rename to plotly-package/plotly/grid_objs.py diff --git a/plotly/io/__init__.py b/plotly-package/plotly/io/__init__.py similarity index 100% rename from plotly/io/__init__.py rename to plotly-package/plotly/io/__init__.py diff --git a/plotly/io/_base_renderers.py b/plotly-package/plotly/io/_base_renderers.py similarity index 100% rename from plotly/io/_base_renderers.py rename to plotly-package/plotly/io/_base_renderers.py diff --git a/plotly/io/_html.py b/plotly-package/plotly/io/_html.py similarity index 100% rename from plotly/io/_html.py rename to plotly-package/plotly/io/_html.py diff --git a/plotly/io/_json.py b/plotly-package/plotly/io/_json.py similarity index 100% rename from plotly/io/_json.py rename to plotly-package/plotly/io/_json.py diff --git a/plotly/io/_orca.py b/plotly-package/plotly/io/_orca.py similarity index 100% rename from plotly/io/_orca.py rename to plotly-package/plotly/io/_orca.py diff --git a/plotly/io/_renderers.py b/plotly-package/plotly/io/_renderers.py similarity index 100% rename from plotly/io/_renderers.py rename to plotly-package/plotly/io/_renderers.py diff --git a/plotly/io/_templates.py b/plotly-package/plotly/io/_templates.py similarity index 100% rename from plotly/io/_templates.py rename to plotly-package/plotly/io/_templates.py diff --git a/plotly/io/_utils.py b/plotly-package/plotly/io/_utils.py similarity index 100% rename from plotly/io/_utils.py rename to plotly-package/plotly/io/_utils.py diff --git a/plotly/io/base_renderers.py b/plotly-package/plotly/io/base_renderers.py similarity index 100% rename from plotly/io/base_renderers.py rename to plotly-package/plotly/io/base_renderers.py diff --git a/plotly/io/orca.py b/plotly-package/plotly/io/orca.py similarity index 100% rename from plotly/io/orca.py rename to plotly-package/plotly/io/orca.py diff --git a/plotly/matplotlylib/__init__.py b/plotly-package/plotly/matplotlylib/__init__.py similarity index 100% rename from plotly/matplotlylib/__init__.py rename to plotly-package/plotly/matplotlylib/__init__.py diff --git a/plotly/matplotlylib/mplexporter/__init__.py b/plotly-package/plotly/matplotlylib/mplexporter/__init__.py similarity index 100% rename from plotly/matplotlylib/mplexporter/__init__.py rename to plotly-package/plotly/matplotlylib/mplexporter/__init__.py diff --git a/plotly/matplotlylib/mplexporter/_py3k_compat.py b/plotly-package/plotly/matplotlylib/mplexporter/_py3k_compat.py similarity index 100% rename from plotly/matplotlylib/mplexporter/_py3k_compat.py rename to plotly-package/plotly/matplotlylib/mplexporter/_py3k_compat.py diff --git a/plotly/matplotlylib/mplexporter/exporter.py b/plotly-package/plotly/matplotlylib/mplexporter/exporter.py similarity index 100% rename from plotly/matplotlylib/mplexporter/exporter.py rename to plotly-package/plotly/matplotlylib/mplexporter/exporter.py diff --git a/plotly/matplotlylib/mplexporter/renderers/__init__.py b/plotly-package/plotly/matplotlylib/mplexporter/renderers/__init__.py similarity index 100% rename from plotly/matplotlylib/mplexporter/renderers/__init__.py rename to plotly-package/plotly/matplotlylib/mplexporter/renderers/__init__.py diff --git a/plotly/matplotlylib/mplexporter/renderers/base.py b/plotly-package/plotly/matplotlylib/mplexporter/renderers/base.py similarity index 100% rename from plotly/matplotlylib/mplexporter/renderers/base.py rename to plotly-package/plotly/matplotlylib/mplexporter/renderers/base.py diff --git a/plotly/matplotlylib/mplexporter/renderers/fake_renderer.py b/plotly-package/plotly/matplotlylib/mplexporter/renderers/fake_renderer.py similarity index 100% rename from plotly/matplotlylib/mplexporter/renderers/fake_renderer.py rename to plotly-package/plotly/matplotlylib/mplexporter/renderers/fake_renderer.py diff --git a/plotly/matplotlylib/mplexporter/renderers/vega_renderer.py b/plotly-package/plotly/matplotlylib/mplexporter/renderers/vega_renderer.py similarity index 100% rename from plotly/matplotlylib/mplexporter/renderers/vega_renderer.py rename to plotly-package/plotly/matplotlylib/mplexporter/renderers/vega_renderer.py diff --git a/plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py b/plotly-package/plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py similarity index 100% rename from plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py rename to plotly-package/plotly/matplotlylib/mplexporter/renderers/vincent_renderer.py diff --git a/plotly/matplotlylib/mplexporter/tests/__init__.py b/plotly-package/plotly/matplotlylib/mplexporter/tests/__init__.py similarity index 100% rename from plotly/matplotlylib/mplexporter/tests/__init__.py rename to plotly-package/plotly/matplotlylib/mplexporter/tests/__init__.py diff --git a/plotly/matplotlylib/mplexporter/tests/test_basic.py b/plotly-package/plotly/matplotlylib/mplexporter/tests/test_basic.py similarity index 100% rename from plotly/matplotlylib/mplexporter/tests/test_basic.py rename to plotly-package/plotly/matplotlylib/mplexporter/tests/test_basic.py diff --git a/plotly/matplotlylib/mplexporter/tests/test_utils.py b/plotly-package/plotly/matplotlylib/mplexporter/tests/test_utils.py similarity index 100% rename from plotly/matplotlylib/mplexporter/tests/test_utils.py rename to plotly-package/plotly/matplotlylib/mplexporter/tests/test_utils.py diff --git a/plotly/matplotlylib/mplexporter/tools.py b/plotly-package/plotly/matplotlylib/mplexporter/tools.py similarity index 100% rename from plotly/matplotlylib/mplexporter/tools.py rename to plotly-package/plotly/matplotlylib/mplexporter/tools.py diff --git a/plotly/matplotlylib/mplexporter/utils.py b/plotly-package/plotly/matplotlylib/mplexporter/utils.py similarity index 100% rename from plotly/matplotlylib/mplexporter/utils.py rename to plotly-package/plotly/matplotlylib/mplexporter/utils.py diff --git a/plotly/matplotlylib/mpltools.py b/plotly-package/plotly/matplotlylib/mpltools.py similarity index 100% rename from plotly/matplotlylib/mpltools.py rename to plotly-package/plotly/matplotlylib/mpltools.py diff --git a/plotly/matplotlylib/renderer.py b/plotly-package/plotly/matplotlylib/renderer.py similarity index 100% rename from plotly/matplotlylib/renderer.py rename to plotly-package/plotly/matplotlylib/renderer.py diff --git a/plotly/offline/__init__.py b/plotly-package/plotly/offline/__init__.py similarity index 100% rename from plotly/offline/__init__.py rename to plotly-package/plotly/offline/__init__.py diff --git a/plotly/offline/_plotlyjs_version.py b/plotly-package/plotly/offline/_plotlyjs_version.py similarity index 100% rename from plotly/offline/_plotlyjs_version.py rename to plotly-package/plotly/offline/_plotlyjs_version.py diff --git a/plotly/offline/offline.py b/plotly-package/plotly/offline/offline.py similarity index 100% rename from plotly/offline/offline.py rename to plotly-package/plotly/offline/offline.py diff --git a/plotly/optional_imports.py b/plotly-package/plotly/optional_imports.py similarity index 100% rename from plotly/optional_imports.py rename to plotly-package/plotly/optional_imports.py diff --git a/plotly/package_data/cb_2016_us_county_500k.dbf b/plotly-package/plotly/package_data/cb_2016_us_county_500k.dbf similarity index 100% rename from plotly/package_data/cb_2016_us_county_500k.dbf rename to plotly-package/plotly/package_data/cb_2016_us_county_500k.dbf diff --git a/plotly/package_data/cb_2016_us_county_500k.shp b/plotly-package/plotly/package_data/cb_2016_us_county_500k.shp similarity index 100% rename from plotly/package_data/cb_2016_us_county_500k.shp rename to plotly-package/plotly/package_data/cb_2016_us_county_500k.shp diff --git a/plotly/package_data/cb_2016_us_county_500k.shx b/plotly-package/plotly/package_data/cb_2016_us_county_500k.shx similarity index 100% rename from plotly/package_data/cb_2016_us_county_500k.shx rename to plotly-package/plotly/package_data/cb_2016_us_county_500k.shx diff --git a/plotly/package_data/cb_2016_us_state_500k.dbf b/plotly-package/plotly/package_data/cb_2016_us_state_500k.dbf similarity index 100% rename from plotly/package_data/cb_2016_us_state_500k.dbf rename to plotly-package/plotly/package_data/cb_2016_us_state_500k.dbf diff --git a/plotly/package_data/cb_2016_us_state_500k.shp b/plotly-package/plotly/package_data/cb_2016_us_state_500k.shp similarity index 100% rename from plotly/package_data/cb_2016_us_state_500k.shp rename to plotly-package/plotly/package_data/cb_2016_us_state_500k.shp diff --git a/plotly/package_data/cb_2016_us_state_500k.shx b/plotly-package/plotly/package_data/cb_2016_us_state_500k.shx similarity index 100% rename from plotly/package_data/cb_2016_us_state_500k.shx rename to plotly-package/plotly/package_data/cb_2016_us_state_500k.shx diff --git a/plotly/package_data/graphWidget.js b/plotly-package/plotly/package_data/graphWidget.js similarity index 100% rename from plotly/package_data/graphWidget.js rename to plotly-package/plotly/package_data/graphWidget.js diff --git a/plotly/package_data/gz_2010_us_050_00_500k.dbf b/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.dbf similarity index 100% rename from plotly/package_data/gz_2010_us_050_00_500k.dbf rename to plotly-package/plotly/package_data/gz_2010_us_050_00_500k.dbf diff --git a/plotly/package_data/gz_2010_us_050_00_500k.shp b/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shp similarity index 100% rename from plotly/package_data/gz_2010_us_050_00_500k.shp rename to plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shp diff --git a/plotly/package_data/gz_2010_us_050_00_500k.shx b/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shx similarity index 100% rename from plotly/package_data/gz_2010_us_050_00_500k.shx rename to plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shx diff --git a/plotly/package_data/plot-schema.json b/plotly-package/plotly/package_data/plot-schema.json similarity index 100% rename from plotly/package_data/plot-schema.json rename to plotly-package/plotly/package_data/plot-schema.json diff --git a/plotly/package_data/plotly.min.js b/plotly-package/plotly/package_data/plotly.min.js similarity index 100% rename from plotly/package_data/plotly.min.js rename to plotly-package/plotly/package_data/plotly.min.js diff --git a/plotly/package_data/templates/ggplot2.json b/plotly-package/plotly/package_data/templates/ggplot2.json similarity index 100% rename from plotly/package_data/templates/ggplot2.json rename to plotly-package/plotly/package_data/templates/ggplot2.json diff --git a/plotly/package_data/templates/plotly.json b/plotly-package/plotly/package_data/templates/plotly.json similarity index 100% rename from plotly/package_data/templates/plotly.json rename to plotly-package/plotly/package_data/templates/plotly.json diff --git a/plotly/package_data/templates/plotly_dark.json b/plotly-package/plotly/package_data/templates/plotly_dark.json similarity index 100% rename from plotly/package_data/templates/plotly_dark.json rename to plotly-package/plotly/package_data/templates/plotly_dark.json diff --git a/plotly/package_data/templates/plotly_white.json b/plotly-package/plotly/package_data/templates/plotly_white.json similarity index 100% rename from plotly/package_data/templates/plotly_white.json rename to plotly-package/plotly/package_data/templates/plotly_white.json diff --git a/plotly/package_data/templates/presentation.json b/plotly-package/plotly/package_data/templates/presentation.json similarity index 100% rename from plotly/package_data/templates/presentation.json rename to plotly-package/plotly/package_data/templates/presentation.json diff --git a/plotly/package_data/templates/seaborn.json b/plotly-package/plotly/package_data/templates/seaborn.json similarity index 100% rename from plotly/package_data/templates/seaborn.json rename to plotly-package/plotly/package_data/templates/seaborn.json diff --git a/plotly/package_data/templates/xgridoff.json b/plotly-package/plotly/package_data/templates/xgridoff.json similarity index 100% rename from plotly/package_data/templates/xgridoff.json rename to plotly-package/plotly/package_data/templates/xgridoff.json diff --git a/plotly/plotly/__init__.py b/plotly-package/plotly/plotly/__init__.py similarity index 100% rename from plotly/plotly/__init__.py rename to plotly-package/plotly/plotly/__init__.py diff --git a/plotly/plotly/chunked_requests.py b/plotly-package/plotly/plotly/chunked_requests.py similarity index 100% rename from plotly/plotly/chunked_requests.py rename to plotly-package/plotly/plotly/chunked_requests.py diff --git a/plotly/presentation_objs.py b/plotly-package/plotly/presentation_objs.py similarity index 100% rename from plotly/presentation_objs.py rename to plotly-package/plotly/presentation_objs.py diff --git a/plotly/serializers.py b/plotly-package/plotly/serializers.py similarity index 100% rename from plotly/serializers.py rename to plotly-package/plotly/serializers.py diff --git a/plotly/session.py b/plotly-package/plotly/session.py similarity index 100% rename from plotly/session.py rename to plotly-package/plotly/session.py diff --git a/plotly/subplots.py b/plotly-package/plotly/subplots.py similarity index 100% rename from plotly/subplots.py rename to plotly-package/plotly/subplots.py diff --git a/plotly/tests/__init__.py b/plotly-package/plotly/tests/__init__.py similarity index 100% rename from plotly/tests/__init__.py rename to plotly-package/plotly/tests/__init__.py diff --git a/plotly/tests/test_core/__init__.py b/plotly-package/plotly/tests/test_core/__init__.py similarity index 100% rename from plotly/tests/test_core/__init__.py rename to plotly-package/plotly/tests/test_core/__init__.py diff --git a/plotly/tests/test_core/test_colors/__init__.py b/plotly-package/plotly/tests/test_core/test_colors/__init__.py similarity index 100% rename from plotly/tests/test_core/test_colors/__init__.py rename to plotly-package/plotly/tests/test_core/test_colors/__init__.py diff --git a/plotly/tests/test_core/test_colors/test_colors.py b/plotly-package/plotly/tests/test_core/test_colors/test_colors.py similarity index 100% rename from plotly/tests/test_core/test_colors/test_colors.py rename to plotly-package/plotly/tests/test_core/test_colors/test_colors.py diff --git a/plotly/tests/test_core/test_figure_messages/__init__.py b/plotly-package/plotly/tests/test_core/test_figure_messages/__init__.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/__init__.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/__init__.py diff --git a/plotly/tests/test_core/test_figure_messages/test_add_traces.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_add_traces.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_add_traces.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_add_traces.py diff --git a/plotly/tests/test_core/test_figure_messages/test_batch_animate.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_batch_animate.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_batch_animate.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_batch_animate.py diff --git a/plotly/tests/test_core/test_figure_messages/test_move_delete_traces.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_move_delete_traces.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_move_delete_traces.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_move_delete_traces.py diff --git a/plotly/tests/test_core/test_figure_messages/test_on_change.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_on_change.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_on_change.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_on_change.py diff --git a/plotly/tests/test_core/test_figure_messages/test_plotly_relayout.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_relayout.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_plotly_relayout.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_relayout.py diff --git a/plotly/tests/test_core/test_figure_messages/test_plotly_restyle.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_restyle.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_plotly_restyle.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_restyle.py diff --git a/plotly/tests/test_core/test_figure_messages/test_plotly_update.py b/plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_update.py similarity index 100% rename from plotly/tests/test_core/test_figure_messages/test_plotly_update.py rename to plotly-package/plotly/tests/test_core/test_figure_messages/test_plotly_update.py diff --git a/plotly/tests/test_core/test_figure_widget_backend/__init__.py b/plotly-package/plotly/tests/test_core/test_figure_widget_backend/__init__.py similarity index 100% rename from plotly/tests/test_core/test_figure_widget_backend/__init__.py rename to plotly-package/plotly/tests/test_core/test_figure_widget_backend/__init__.py diff --git a/plotly/tests/test_core/test_figure_widget_backend/test_validate_no_frames.py b/plotly-package/plotly/tests/test_core/test_figure_widget_backend/test_validate_no_frames.py similarity index 100% rename from plotly/tests/test_core/test_figure_widget_backend/test_validate_no_frames.py rename to plotly-package/plotly/tests/test_core/test_figure_widget_backend/test_validate_no_frames.py diff --git a/plotly/tests/test_core/test_graph_objs/__init__.py b/plotly-package/plotly/tests/test_core/test_graph_objs/__init__.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/__init__.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/__init__.py diff --git a/plotly/tests/test_core/test_graph_objs/test_annotations.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_annotations.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_annotations.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_annotations.py diff --git a/plotly/tests/test_core/test_graph_objs/test_append_trace.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_append_trace.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_append_trace.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_append_trace.py diff --git a/plotly/tests/test_core/test_graph_objs/test_constructor.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_constructor.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_constructor.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_constructor.py diff --git a/plotly/tests/test_core/test_graph_objs/test_data.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_data.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_data.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_data.py diff --git a/plotly/tests/test_core/test_graph_objs/test_error_bars.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_error_bars.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_error_bars.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_error_bars.py diff --git a/plotly/tests/test_core/test_graph_objs/test_figure.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_figure.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_figure.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_figure.py diff --git a/plotly/tests/test_core/test_graph_objs/test_figure_properties.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_figure_properties.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_figure_properties.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_figure_properties.py diff --git a/plotly/tests/test_core/test_graph_objs/test_frames.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_frames.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_frames.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_frames.py diff --git a/plotly/tests/test_core/test_graph_objs/test_graph_objs.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_graph_objs.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py diff --git a/plotly/tests/test_core/test_graph_objs/test_instantiate_hierarchy.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_instantiate_hierarchy.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_instantiate_hierarchy.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_instantiate_hierarchy.py diff --git a/plotly/tests/test_core/test_graph_objs/test_layout_subplots.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_layout_subplots.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_layout_subplots.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_layout_subplots.py diff --git a/plotly/tests/test_core/test_graph_objs/test_properties_validated.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_properties_validated.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_properties_validated.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_properties_validated.py diff --git a/plotly/tests/test_core/test_graph_objs/test_property_assignment.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_property_assignment.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_property_assignment.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_property_assignment.py diff --git a/plotly/tests/test_core/test_graph_objs/test_repr.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_repr.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_repr.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_repr.py diff --git a/plotly/tests/test_core/test_graph_objs/test_scatter.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_scatter.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_scatter.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_scatter.py diff --git a/plotly/tests/test_core/test_graph_objs/test_template.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_template.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_template.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_template.py diff --git a/plotly/tests/test_core/test_graph_objs/test_to_ordered_dict.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_to_ordered_dict.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_to_ordered_dict.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_to_ordered_dict.py diff --git a/plotly/tests/test_core/test_graph_objs/test_update.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_update.py similarity index 100% rename from plotly/tests/test_core/test_graph_objs/test_update.py rename to plotly-package/plotly/tests/test_core/test_graph_objs/test_update.py diff --git a/plotly/tests/test_core/test_graph_reference/__init__.py b/plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py similarity index 100% rename from plotly/tests/test_core/test_graph_reference/__init__.py rename to plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py diff --git a/plotly/tests/test_core/test_graph_reference/test_graph_reference.py b/plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py similarity index 100% rename from plotly/tests/test_core/test_graph_reference/test_graph_reference.py rename to plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py diff --git a/plotly/tests/test_core/test_offline/test_offline.py b/plotly-package/plotly/tests/test_core/test_offline/test_offline.py similarity index 100% rename from plotly/tests/test_core/test_offline/test_offline.py rename to plotly-package/plotly/tests/test_core/test_offline/test_offline.py diff --git a/plotly/tests/test_core/test_optional_imports/__init__.py b/plotly-package/plotly/tests/test_core/test_optional_imports/__init__.py similarity index 100% rename from plotly/tests/test_core/test_optional_imports/__init__.py rename to plotly-package/plotly/tests/test_core/test_optional_imports/__init__.py diff --git a/plotly/tests/test_core/test_optional_imports/exploding_module.py b/plotly-package/plotly/tests/test_core/test_optional_imports/exploding_module.py similarity index 100% rename from plotly/tests/test_core/test_optional_imports/exploding_module.py rename to plotly-package/plotly/tests/test_core/test_optional_imports/exploding_module.py diff --git a/plotly/tests/test_core/test_optional_imports/test_optional_imports.py b/plotly-package/plotly/tests/test_core/test_optional_imports/test_optional_imports.py similarity index 100% rename from plotly/tests/test_core/test_optional_imports/test_optional_imports.py rename to plotly-package/plotly/tests/test_core/test_optional_imports/test_optional_imports.py diff --git a/plotly/tests/test_core/test_subplots/test_get_subplot.py b/plotly-package/plotly/tests/test_core/test_subplots/test_get_subplot.py similarity index 100% rename from plotly/tests/test_core/test_subplots/test_get_subplot.py rename to plotly-package/plotly/tests/test_core/test_subplots/test_get_subplot.py diff --git a/plotly/tests/test_core/test_subplots/test_make_subplots.py b/plotly-package/plotly/tests/test_core/test_subplots/test_make_subplots.py similarity index 100% rename from plotly/tests/test_core/test_subplots/test_make_subplots.py rename to plotly-package/plotly/tests/test_core/test_subplots/test_make_subplots.py diff --git a/plotly/tests/test_core/test_tools/__init__.py b/plotly-package/plotly/tests/test_core/test_tools/__init__.py similarity index 100% rename from plotly/tests/test_core/test_tools/__init__.py rename to plotly-package/plotly/tests/test_core/test_tools/__init__.py diff --git a/plotly/tests/test_core/test_tools/test_validate.py b/plotly-package/plotly/tests/test_core/test_tools/test_validate.py similarity index 100% rename from plotly/tests/test_core/test_tools/test_validate.py rename to plotly-package/plotly/tests/test_core/test_tools/test_validate.py diff --git a/plotly/tests/test_core/test_update_objects/__init__.py b/plotly-package/plotly/tests/test_core/test_update_objects/__init__.py similarity index 100% rename from plotly/tests/test_core/test_update_objects/__init__.py rename to plotly-package/plotly/tests/test_core/test_update_objects/__init__.py diff --git a/plotly/tests/test_core/test_update_objects/test_update_subplots.py b/plotly-package/plotly/tests/test_core/test_update_objects/test_update_subplots.py similarity index 100% rename from plotly/tests/test_core/test_update_objects/test_update_subplots.py rename to plotly-package/plotly/tests/test_core/test_update_objects/test_update_subplots.py diff --git a/plotly/tests/test_core/test_update_objects/test_update_traces.py b/plotly-package/plotly/tests/test_core/test_update_objects/test_update_traces.py similarity index 100% rename from plotly/tests/test_core/test_update_objects/test_update_traces.py rename to plotly-package/plotly/tests/test_core/test_update_objects/test_update_traces.py diff --git a/plotly/tests/test_core/test_utils/__init__.py b/plotly-package/plotly/tests/test_core/test_utils/__init__.py similarity index 100% rename from plotly/tests/test_core/test_utils/__init__.py rename to plotly-package/plotly/tests/test_core/test_utils/__init__.py diff --git a/plotly/tests/test_core/test_utils/test_utils.py b/plotly-package/plotly/tests/test_core/test_utils/test_utils.py similarity index 100% rename from plotly/tests/test_core/test_utils/test_utils.py rename to plotly-package/plotly/tests/test_core/test_utils/test_utils.py diff --git a/plotly/tests/test_io/test_deepcopy_pickle.py b/plotly-package/plotly/tests/test_io/test_deepcopy_pickle.py similarity index 100% rename from plotly/tests/test_io/test_deepcopy_pickle.py rename to plotly-package/plotly/tests/test_io/test_deepcopy_pickle.py diff --git a/plotly/tests/test_io/test_renderers.py b/plotly-package/plotly/tests/test_io/test_renderers.py similarity index 100% rename from plotly/tests/test_io/test_renderers.py rename to plotly-package/plotly/tests/test_io/test_renderers.py diff --git a/plotly/tests/test_io/test_to_from_json.py b/plotly-package/plotly/tests/test_io/test_to_from_json.py similarity index 100% rename from plotly/tests/test_io/test_to_from_json.py rename to plotly-package/plotly/tests/test_io/test_to_from_json.py diff --git a/plotly/tests/test_optional/__init__.py b/plotly-package/plotly/tests/test_optional/__init__.py similarity index 100% rename from plotly/tests/test_optional/__init__.py rename to plotly-package/plotly/tests/test_optional/__init__.py diff --git a/plotly/tests/test_optional/optional_utils.py b/plotly-package/plotly/tests/test_optional/optional_utils.py similarity index 100% rename from plotly/tests/test_optional/optional_utils.py rename to plotly-package/plotly/tests/test_optional/optional_utils.py diff --git a/plotly-package/plotly/tests/test_optional/temp-plot.html b/plotly-package/plotly/tests/test_optional/temp-plot.html new file mode 100644 index 00000000000..0a7f4f39654 --- /dev/null +++ b/plotly-package/plotly/tests/test_optional/temp-plot.html @@ -0,0 +1,32 @@ + + + +
+ + + +
+ +
+ + \ No newline at end of file diff --git a/plotly/tests/test_optional/test_figure_factory/__init__.py b/plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_figure_factory/__init__.py rename to plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py diff --git a/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py b/plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py similarity index 100% rename from plotly/tests/test_optional/test_figure_factory/test_figure_factory.py rename to plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py diff --git a/plotly/tests/test_optional/test_graph_objs/__init__.py b/plotly-package/plotly/tests/test_optional/test_graph_objs/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_graph_objs/__init__.py rename to plotly-package/plotly/tests/test_optional/test_graph_objs/__init__.py diff --git a/plotly/tests/test_optional/test_jupyter/.gitignore b/plotly-package/plotly/tests/test_optional/test_jupyter/.gitignore similarity index 100% rename from plotly/tests/test_optional/test_jupyter/.gitignore rename to plotly-package/plotly/tests/test_optional/test_jupyter/.gitignore diff --git a/plotly/tests/test_optional/test_jupyter/README.md b/plotly-package/plotly/tests/test_optional/test_jupyter/README.md similarity index 100% rename from plotly/tests/test_optional/test_jupyter/README.md rename to plotly-package/plotly/tests/test_optional/test_jupyter/README.md diff --git a/plotly/tests/test_optional/test_jupyter/fixtures/connected_false.ipynb b/plotly-package/plotly/tests/test_optional/test_jupyter/fixtures/connected_false.ipynb similarity index 100% rename from plotly/tests/test_optional/test_jupyter/fixtures/connected_false.ipynb rename to plotly-package/plotly/tests/test_optional/test_jupyter/fixtures/connected_false.ipynb diff --git a/plotly/tests/test_optional/test_jupyter/fixtures/connected_true.ipynb b/plotly-package/plotly/tests/test_optional/test_jupyter/fixtures/connected_true.ipynb similarity index 100% rename from plotly/tests/test_optional/test_jupyter/fixtures/connected_true.ipynb rename to plotly-package/plotly/tests/test_optional/test_jupyter/fixtures/connected_true.ipynb diff --git a/plotly/tests/test_optional/test_jupyter/js_tests/connected_false.js b/plotly-package/plotly/tests/test_optional/test_jupyter/js_tests/connected_false.js similarity index 100% rename from plotly/tests/test_optional/test_jupyter/js_tests/connected_false.js rename to plotly-package/plotly/tests/test_optional/test_jupyter/js_tests/connected_false.js diff --git a/plotly/tests/test_optional/test_jupyter/js_tests/connected_true.js b/plotly-package/plotly/tests/test_optional/test_jupyter/js_tests/connected_true.js similarity index 100% rename from plotly/tests/test_optional/test_jupyter/js_tests/connected_true.js rename to plotly-package/plotly/tests/test_optional/test_jupyter/js_tests/connected_true.js diff --git a/plotly/tests/test_optional/test_jupyter/lib/server.js b/plotly-package/plotly/tests/test_optional/test_jupyter/lib/server.js similarity index 100% rename from plotly/tests/test_optional/test_jupyter/lib/server.js rename to plotly-package/plotly/tests/test_optional/test_jupyter/lib/server.js diff --git a/plotly/tests/test_optional/test_jupyter/lib/tape-wrapper.js b/plotly-package/plotly/tests/test_optional/test_jupyter/lib/tape-wrapper.js similarity index 100% rename from plotly/tests/test_optional/test_jupyter/lib/tape-wrapper.js rename to plotly-package/plotly/tests/test_optional/test_jupyter/lib/tape-wrapper.js diff --git a/plotly/tests/test_optional/test_jupyter/package-lock.json b/plotly-package/plotly/tests/test_optional/test_jupyter/package-lock.json similarity index 100% rename from plotly/tests/test_optional/test_jupyter/package-lock.json rename to plotly-package/plotly/tests/test_optional/test_jupyter/package-lock.json diff --git a/plotly/tests/test_optional/test_jupyter/package.json b/plotly-package/plotly/tests/test_optional/test_jupyter/package.json similarity index 100% rename from plotly/tests/test_optional/test_jupyter/package.json rename to plotly-package/plotly/tests/test_optional/test_jupyter/package.json diff --git a/plotly/tests/test_optional/test_jupyter/test_jupyter.py b/plotly-package/plotly/tests/test_optional/test_jupyter/test_jupyter.py similarity index 100% rename from plotly/tests/test_optional/test_jupyter/test_jupyter.py rename to plotly-package/plotly/tests/test_optional/test_jupyter/test_jupyter.py diff --git a/plotly/tests/test_optional/test_matplotlylib/__init__.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/__init__.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/__init__.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/__init__.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/__init__.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/__init__.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/annotations.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/annotations.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/annotations.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/annotations.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/axis_scales.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/axis_scales.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/axis_scales.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/axis_scales.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/bars.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/bars.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/bars.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/bars.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/data.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/data.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/data.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/data.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/lines.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/lines.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/lines.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/lines.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/scatter.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/scatter.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/scatter.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/scatter.py diff --git a/plotly/tests/test_optional/test_matplotlylib/data/subplots.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/data/subplots.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/data/subplots.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/data/subplots.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_annotations.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_annotations.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_annotations.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_annotations.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_axis_scales.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_axis_scales.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_axis_scales.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_axis_scales.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_bars.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_bars.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_bars.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_bars.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_data.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_data.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_data.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_data.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_date_times.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_date_times.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_date_times.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_date_times.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_lines.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_lines.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_lines.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_lines.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_scatter.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_scatter.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_scatter.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_scatter.py diff --git a/plotly/tests/test_optional/test_matplotlylib/test_subplots.py b/plotly-package/plotly/tests/test_optional/test_matplotlylib/test_subplots.py similarity index 100% rename from plotly/tests/test_optional/test_matplotlylib/test_subplots.py rename to plotly-package/plotly/tests/test_optional/test_matplotlylib/test_subplots.py diff --git a/plotly/tests/test_optional/test_offline/__init__.py b/plotly-package/plotly/tests/test_optional/test_offline/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_offline/__init__.py rename to plotly-package/plotly/tests/test_optional/test_offline/__init__.py diff --git a/plotly/tests/test_optional/test_offline/temp-plot.html b/plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html similarity index 100% rename from plotly/tests/test_optional/test_offline/temp-plot.html rename to plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html diff --git a/plotly/tests/test_optional/test_offline/test_offline.py b/plotly-package/plotly/tests/test_optional/test_offline/test_offline.py similarity index 100% rename from plotly/tests/test_optional/test_offline/test_offline.py rename to plotly-package/plotly/tests/test_optional/test_offline/test_offline.py diff --git a/plotly/tests/test_optional/test_tools/__init__.py b/plotly-package/plotly/tests/test_optional/test_tools/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_tools/__init__.py rename to plotly-package/plotly/tests/test_optional/test_tools/__init__.py diff --git a/plotly/tests/test_optional/test_tools/test_figure_factory.py b/plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py similarity index 100% rename from plotly/tests/test_optional/test_tools/test_figure_factory.py rename to plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py diff --git a/plotly/tests/test_optional/test_utils/__init__.py b/plotly-package/plotly/tests/test_optional/test_utils/__init__.py similarity index 100% rename from plotly/tests/test_optional/test_utils/__init__.py rename to plotly-package/plotly/tests/test_optional/test_utils/__init__.py diff --git a/plotly/tests/test_optional/test_utils/test_utils.py b/plotly-package/plotly/tests/test_optional/test_utils/test_utils.py similarity index 100% rename from plotly/tests/test_optional/test_utils/test_utils.py rename to plotly-package/plotly/tests/test_optional/test_utils/test_utils.py diff --git a/plotly/tests/test_orca/__init__.py b/plotly-package/plotly/tests/test_orca/__init__.py similarity index 100% rename from plotly/tests/test_orca/__init__.py rename to plotly-package/plotly/tests/test_orca/__init__.py diff --git a/plotly/tests/test_orca/images/darwin/fig1.eps b/plotly-package/plotly/tests/test_orca/images/darwin/fig1.eps similarity index 100% rename from plotly/tests/test_orca/images/darwin/fig1.eps rename to plotly-package/plotly/tests/test_orca/images/darwin/fig1.eps diff --git a/plotly/tests/test_orca/images/darwin/latexfig.eps b/plotly-package/plotly/tests/test_orca/images/darwin/latexfig.eps similarity index 100% rename from plotly/tests/test_orca/images/darwin/latexfig.eps rename to plotly-package/plotly/tests/test_orca/images/darwin/latexfig.eps diff --git a/plotly/tests/test_orca/images/darwin/topofig.eps b/plotly-package/plotly/tests/test_orca/images/darwin/topofig.eps similarity index 100% rename from plotly/tests/test_orca/images/darwin/topofig.eps rename to plotly-package/plotly/tests/test_orca/images/darwin/topofig.eps diff --git a/plotly-package/plotly/tests/test_orca/images/linux/failed/fig1.eps b/plotly-package/plotly/tests/test_orca/images/linux/failed/fig1.eps new file mode 100644 index 00000000000..99ff8d27f49 --- /dev/null +++ b/plotly-package/plotly/tests/test_orca/images/linux/failed/fig1.eps @@ -0,0 +1,2007 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%Produced by poppler pdftops version: 0.65.0 (http://poppler.freedesktop.org) +%%Creator: Chromium +%%LanguageLevel: 2 +%%DocumentSuppliedResources: (atend) +%%BoundingBox: 0 0 529 379 +%%HiResBoundingBox: 0 0 529 379 +%%DocumentSuppliedResources: (atend) +%%EndComments +%%BeginProlog +%%BeginResource: procset xpdf 3.00 0 +%%Copyright: Copyright 1996-2011 Glyph & Cog, LLC +/xpdf 75 dict def xpdf begin +% PDF special state +/pdfDictSize 15 def +/pdfSetup { + /setpagedevice where { + pop 2 dict begin + /Policies 1 dict dup begin /PageSize 6 def end def + { /Duplex true def } if + currentdict end setpagedevice + } { + pop + } ifelse +} def +/pdfSetupPaper { + % Change paper size, but only if different from previous paper size otherwise + % duplex fails. PLRM specifies a tolerance of 5 pts when matching paper size + % so we use the same when checking if the size changes. + /setpagedevice where { + pop currentpagedevice + /PageSize known { + 2 copy + currentpagedevice /PageSize get aload pop + exch 4 1 roll + sub abs 5 gt + 3 1 roll + sub abs 5 gt + or + } { + true + } ifelse + { + 2 array astore + 2 dict begin + /PageSize exch def + /ImagingBBox null def + currentdict end + setpagedevice + } { + pop pop + } ifelse + } { + pop + } ifelse +} def +/pdfStartPage { + pdfDictSize dict begin + /pdfFillCS [] def + /pdfFillXform {} def + /pdfStrokeCS [] def + /pdfStrokeXform {} def + /pdfFill [0] def + /pdfStroke [0] def + /pdfFillOP false def + /pdfStrokeOP false def + /pdfLastFill false def + /pdfLastStroke false def + /pdfTextMat [1 0 0 1 0 0] def + /pdfFontSize 0 def + /pdfCharSpacing 0 def + /pdfTextRender 0 def + /pdfPatternCS false def + /pdfTextRise 0 def + /pdfWordSpacing 0 def + /pdfHorizScaling 1 def + /pdfTextClipPath [] def +} def +/pdfEndPage { end } def +% PDF color state +/cs { /pdfFillXform exch def dup /pdfFillCS exch def + setcolorspace } def +/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def + setcolorspace } def +/sc { pdfLastFill not { pdfFillCS setcolorspace } if + dup /pdfFill exch def aload pop pdfFillXform setcolor + /pdfLastFill true def /pdfLastStroke false def } def +/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if + dup /pdfStroke exch def aload pop pdfStrokeXform setcolor + /pdfLastStroke true def /pdfLastFill false def } def +/op { /pdfFillOP exch def + pdfLastFill { pdfFillOP setoverprint } if } def +/OP { /pdfStrokeOP exch def + pdfLastStroke { pdfStrokeOP setoverprint } if } def +/fCol { + pdfLastFill not { + pdfFillCS setcolorspace + pdfFill aload pop pdfFillXform setcolor + pdfFillOP setoverprint + /pdfLastFill true def /pdfLastStroke false def + } if +} def +/sCol { + pdfLastStroke not { + pdfStrokeCS setcolorspace + pdfStroke aload pop pdfStrokeXform setcolor + pdfStrokeOP setoverprint + /pdfLastStroke true def /pdfLastFill false def + } if +} def +% build a font +/pdfMakeFont { + 4 3 roll findfont + 4 2 roll matrix scale makefont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /Encoding exch def + currentdict + end + definefont pop +} def +/pdfMakeFont16 { + exch findfont + dup length dict begin + { 1 index /FID ne { def } { pop pop } ifelse } forall + /WMode exch def + currentdict + end + definefont pop +} def +% graphics state operators +/q { gsave pdfDictSize dict begin } def +/Q { + end grestore + /pdfLastFill where { + pop + pdfLastFill { + pdfFillOP setoverprint + } { + pdfStrokeOP setoverprint + } ifelse + } if +} def +/cm { concat } def +/d { setdash } def +/i { setflat } def +/j { setlinejoin } def +/J { setlinecap } def +/M { setmiterlimit } def +/w { setlinewidth } def +% path segment operators +/m { moveto } def +/l { lineto } def +/c { curveto } def +/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } def +/h { closepath } def +% path painting operators +/S { sCol stroke } def +/Sf { fCol stroke } def +/f { fCol fill } def +/f* { fCol eofill } def +% clipping operators +/W { clip newpath } def +/W* { eoclip newpath } def +/Ws { strokepath clip newpath } def +% text state operators +/Tc { /pdfCharSpacing exch def } def +/Tf { dup /pdfFontSize exch def + dup pdfHorizScaling mul exch matrix scale + pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put + exch findfont exch makefont setfont } def +/Tr { /pdfTextRender exch def } def +/Tp { /pdfPatternCS exch def } def +/Ts { /pdfTextRise exch def } def +/Tw { /pdfWordSpacing exch def } def +/Tz { /pdfHorizScaling exch def } def +% text positioning operators +/Td { pdfTextMat transform moveto } def +/Tm { /pdfTextMat exch def } def +% text string operators +/xyshow where { + pop + /xyshow2 { + dup length array + 0 2 2 index length 1 sub { + 2 index 1 index 2 copy get 3 1 roll 1 add get + pdfTextMat dtransform + 4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put + } for + exch pop + xyshow + } def +}{ + /xyshow2 { + currentfont /FontType get 0 eq { + 0 2 3 index length 1 sub { + currentpoint 4 index 3 index 2 getinterval show moveto + 2 copy get 2 index 3 2 roll 1 add get + pdfTextMat dtransform rmoveto + } for + } { + 0 1 3 index length 1 sub { + currentpoint 4 index 3 index 1 getinterval show moveto + 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get + pdfTextMat dtransform rmoveto + } for + } ifelse + pop pop + } def +} ifelse +/cshow where { + pop + /xycp { + 0 3 2 roll + { + pop pop currentpoint 3 2 roll + 1 string dup 0 4 3 roll put false charpath moveto + 2 copy get 2 index 2 index 1 add get + pdfTextMat dtransform rmoveto + 2 add + } exch cshow + pop pop + } def +}{ + /xycp { + currentfont /FontType get 0 eq { + 0 2 3 index length 1 sub { + currentpoint 4 index 3 index 2 getinterval false charpath moveto + 2 copy get 2 index 3 2 roll 1 add get + pdfTextMat dtransform rmoveto + } for + } { + 0 1 3 index length 1 sub { + currentpoint 4 index 3 index 1 getinterval false charpath moveto + 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get + pdfTextMat dtransform rmoveto + } for + } ifelse + pop pop + } def +} ifelse +/Tj { + fCol + 0 pdfTextRise pdfTextMat dtransform rmoveto + currentpoint 4 2 roll + pdfTextRender 1 and 0 eq { + 2 copy xyshow2 + } if + pdfTextRender 3 and dup 1 eq exch 2 eq or { + 3 index 3 index moveto + 2 copy + currentfont /FontType get 3 eq { fCol } { sCol } ifelse + xycp currentpoint stroke moveto + } if + pdfTextRender 4 and 0 ne { + 4 2 roll moveto xycp + /pdfTextClipPath [ pdfTextClipPath aload pop + {/moveto cvx} + {/lineto cvx} + {/curveto cvx} + {/closepath cvx} + pathforall ] def + currentpoint newpath moveto + } { + pop pop pop pop + } ifelse + 0 pdfTextRise neg pdfTextMat dtransform rmoveto +} def +/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0 + pdfTextMat dtransform rmoveto } def +/TJmV { 0.001 mul pdfFontSize mul neg 0 exch + pdfTextMat dtransform rmoveto } def +/Tclip { pdfTextClipPath cvx exec clip newpath + /pdfTextClipPath [] def } def +/Tclip* { pdfTextClipPath cvx exec eoclip newpath + /pdfTextClipPath [] def } def +% Level 2/3 image operators +/pdfImBuf 100 string def +/pdfImStr { + 2 copy exch length lt { + 2 copy get exch 1 add exch + } { + () + } ifelse +} def +/skipEOD { + { currentfile pdfImBuf readline + not { pop exit } if + (%-EOD-) eq { exit } if } loop +} def +/pdfIm { image skipEOD } def +/pdfImM { fCol imagemask skipEOD } def +/pr { 2 index 2 index 3 2 roll putinterval 4 add } def +/pdfImClip { + gsave + 0 2 4 index length 1 sub { + dup 4 index exch 2 copy + get 5 index div put + 1 add 3 index exch 2 copy + get 3 index div put + } for + pop pop rectclip +} def +/pdfImClipEnd { grestore } def +% shading operators +/colordelta { + false 0 1 3 index length 1 sub { + dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { + pop true + } if + } for + exch pop exch pop +} def +/funcCol { func n array astore } def +/funcSH { + dup 0 eq { + true + } { + dup 6 eq { + false + } { + 4 index 4 index funcCol dup + 6 index 4 index funcCol dup + 3 1 roll colordelta 3 1 roll + 5 index 5 index funcCol dup + 3 1 roll colordelta 3 1 roll + 6 index 8 index funcCol dup + 3 1 roll colordelta 3 1 roll + colordelta or or or + } ifelse + } ifelse + { + 1 add + 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch + 6 index 6 index 4 index 4 index 4 index funcSH + 2 index 6 index 6 index 4 index 4 index funcSH + 6 index 2 index 4 index 6 index 4 index funcSH + 5 3 roll 3 2 roll funcSH pop pop + } { + pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul + funcCol sc + dup 4 index exch mat transform m + 3 index 3 index mat transform l + 1 index 3 index mat transform l + mat transform l pop pop h f* + } ifelse +} def +/axialCol { + dup 0 lt { + pop t0 + } { + dup 1 gt { + pop t1 + } { + dt mul t0 add + } ifelse + } ifelse + func n array astore +} def +/axialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index axialCol 2 index axialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index axialSH + exch 3 2 roll axialSH + } { + pop 2 copy add 0.5 mul + axialCol sc + exch dup dx mul x0 add exch dy mul y0 add + 3 2 roll dup dx mul x0 add exch dy mul y0 add + dx abs dy abs ge { + 2 copy yMin sub dy mul dx div add yMin m + yMax sub dy mul dx div add yMax l + 2 copy yMax sub dy mul dx div add yMax l + yMin sub dy mul dx div add yMin l + h f* + } { + exch 2 copy xMin sub dx mul dy div add xMin exch m + xMax sub dx mul dy div add xMax exch l + exch 2 copy xMax sub dx mul dy div add xMax exch l + xMin sub dx mul dy div add xMin exch l + h f* + } ifelse + } ifelse +} def +/radialCol { + dup t0 lt { + pop t0 + } { + dup t1 gt { + pop t1 + } if + } ifelse + func n array astore +} def +/radialSH { + dup 0 eq { + true + } { + dup 8 eq { + false + } { + 2 index dt mul t0 add radialCol + 2 index dt mul t0 add radialCol colordelta + } ifelse + } ifelse + { + 1 add 3 1 roll 2 copy add 0.5 mul + dup 4 3 roll exch 4 index radialSH + exch 3 2 roll radialSH + } { + pop 2 copy add 0.5 mul dt mul t0 add + radialCol sc + encl { + exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 0 360 arc h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + 360 0 arcn h f + } { + 2 copy + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arcn + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arcn h + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a1 a2 arc + dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add + a2 a1 arc h f + } ifelse + } ifelse +} def +end +%%EndResource +%%EndProlog +%%BeginSetup +xpdf begin +%%EndSetup +pdfStartPage +%%EndPageSetup +gsave +[528.96 0 0 378.96 0 0] concat +/DeviceRGB setcolorspace +<< + /ImageType 1 + /Width 2204 + /Height 1579 + /ImageMatrix [2204 0 0 -1579 0 1579] + /BitsPerComponent 8 + /Decode [0 1 0 1 0 1] + /DataSource currentfile + /ASCII85Decode filter + /LZWDecode filter +>> +image +J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H +>q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`C/mioWjnAY&^gM+`4=1jRLW!YA +=M/6)*KS9PE`kN%="Tc_Aoh+fk'&t\ctIN)4XQLiVpoI(>.nOW?*DmsG$@,,f58"P +DKfeXi0S^6MAH=;fBr>1IXb_>kP+oS^^pnX!PjdJ%0OEX9GI`IODGpB_@VYP +$,Ve*/ITH-bV]jIOR,+@`"`Y"/@)9.f?D&^M-b]OrH +OmIKN1*g(o[EC"elTX_ZZ,c*_ECQL2A(g_UF= +ESQm4c#_\W:"=CBQYkQ&hA;15H/=mim3UV:)/KA +Qu3q"iY[\%M;jo*/W8X+c8CUAR-m+uj;AFrOlVo_9p=ZV:0!S@R;Q;sjr'1jRHBp? +D4B]+c?5]@RI5KqkSaqbU$.ptNMG_V:6h[?RVn[ol5G\ZWToqTXfLb+cF'e?RdRkm +ll-GRZ0[r4c*QdV:=Zc>Rr7&kmMh2J\aGrimCVg+cLnm>S*p6in/MrB_=3sJ%E%]U +:DLk=S8TFgnf3]:amtt*/^*`*cS`u=SF8VeoGnH2dI`t_:"/bU:K>sj*caE0; +T'sA]r#ZHgnbf"4c1ClU:Y#.:T5WQ[rZ@3_q>R"imJHo*ch78:TC;^Xhuj(2:_!Ol +=:G;h6j\E@/d=Sn*moVE0nrNM)FIVD%H55cLJ[C[6eHetiWMQ';%=d<=H*pP6qN54/ga!=SJ1"9 +;2S4G.RdIA(#m/7Mc"@E7G,9iirieL;3!D$=Nq`D6tqWXXu8c%h&GC-EK3oA3_*<> +*TP(`O&>=/8(db^j91$q;@Z#a=UcP87#@%(/k/Cb*@'WuOciU;8kE/;-03"4P>Z9n +8_H6SjTM9A;N=XI=\U@,7&cGLY#\0J>q>#iZ'J;5>"`"8/`jp]QW!6X9A+_HjoiMf +;\!81=cG/u7*1iq/nRf1SMTD]d@+!/C/%j52>"qTQ74G'4Y*Mu>>taF90r@pq +RT!C,:$KVWVc<)U;qcXql30JP<=Ya&>)cDE77jIY/uDV%SQ"g-;6!VkW`<6)0U497;8l(Y-qBbh-93!ENWt#)=5*U[ +lihsE7G$-7>\9M0#h#J*FnGiOg8"_b#qq#AaIC(ZW:th=kc)Pm002j>8i!7B*[qY1?e2?#/h]Z*m]Yg07cuD=,MFREmKLG:E*Xj7EN)A +0'6EnSTF4QdCNCSlKqH^7HqKeY4c2Vh0\UE +n\/)MqHmIoIIG/N^K9k&?ebO/n-/p/=:YI@>Rc8R7L?n50*Yh>*JYU(F7Oc;YY81U&?&S6-0ud>A)Im#hNUb"Ka&qdO +A))KnnchD$=Uu]e>`Fm:7S1^)0.(5bSWiW!;9E$;.V2keQ1Dptb?8a9A_atco*/XI +=cY=M>g8].7VU+MY;U"Jh4+"jER%_53bM^bSb'jHcWT^#BAEHXoEKln=qn*M" +7Z#Mr01KX2*M`7]Oj[E/8nhQ_V=_cqdopZbC#(qMo`h,>>)uQr>tq&.D\XnB]Ef37WLCYaEBp'/@c>7Y1Z?&c,_7`j=f04o%VS[8$EdFqf# +C2I7Y[J%VngKST6D;Dn7pBKU3>Eh7NE9n_RKrH>d*V^%]PB +hcoPuDr(B,p]giX>RuF*?4FaG7g\-Z08=H&*Q.Z-&`R%kMK)rS`V@Ikj'6M_ES`k! +q$/)(>`Y%g?;8Q;7k*P)YEj4c?-E&!1$2`eRWDePc2#C?k?RJIF5D>kq?K=M>n>6Gjo!/eo3Q@\H/CdJrSb)i9dJ@3Gl@!$Ap&<"bqd4:0 +IG_a4rs.N\?]Xc,?d8EH8*TtZYP*G&h>@5-nbunAqL;l>rVsq6s'P6oJ)C2(n,WMC +"TWKJ!3cn4n.>[T'`i7k!O*RFn0%ie,m&$7!jF6Xn1b#!2$7eX"0aojn3I1270IR$ +"L(T'n50?C<<[>E"gD89n6lMTAHm*f#-_qKn8S[eFU)l2#I&U]n::j!Ka;XS#dB9o +n<"#2PmMDt$*]s,n=^1CV$_1@$F$W>n?E?T[0pra$a@;PnA,Me`=-_-%'[tbnBh\! +eI?KN%C"XtnDOj2jUQ7o%^>=1nF7#Coac$;&$Z!CnGs1U"V>Y[&?uZUnIZ?f'bPF' +&[<>gnKAN",nb2H'!X#$nM(\32%ssi'BLV'sV$Z +nR31fAJT9"(9q]lnSo@"FVf%C(U8B)nUVN3Kc"fd(pT&;nW=\DPo4S0)6o_MnY$jU +V&F?Q)R6C_nZa#f[2X+r)mR'qn\H2"`>im>*3ma.n^/@3eK&Y_*O4E@n_kNDjW8F+ +*jP)RnaR\UocJ2L+0kbdnc9jg"X%gl+L2G!ne!$#'d7T8+gN+3nf]24,pI@Y,-idE +nhD@E2'[-%,I0HWnj+NV73lnF,dL,inkg\g<@)Zg-*gf&nmNk#AL;G3-F.J8no6$4 +FXM3T-aJ.Jnpr2EKd^tu.'eg\nrY@VPppaA.C,Knnt@NgV(-Mb.^H0+o!']#[4?:. +/$ci=o"ck4`@Q&O/@*MOo$K$EeLbgp/[F1ao&22VjXtT<0!ajso'n@goe1@]0=(O0 +o)UO$"YanI+2RjsiVFY&&0I)P0qnJ!JbU1p'i>)R4rXo3=+5oBie)h6NrYsgW +5[it>+nINHs$h_W+q!QZAA`#3W32BdG[62hSV^)u;X#!r5#+@AMh2+$4F+5m,! +e=B2GT0hH]+5mYri=lD\rXrUY4Hmc%+WqlcX;9do*.a\'iT)!;s$*l)9sWG/'/q]* +`Yh)A)'Lm[iEcu0rY,@.+5nUQ<0'[<$UVZ56QlF1oV58?V@W_M+5mD*Zo^Uj'Ek-/ +'#8f8iC"$HrYAGD)50JU_4r`lfhL!g/6kq*]Pa2kG/0EgO8[T(0 +Pn?W2F\5YZr%U&<4/8J'0mVti#gq9*-6cOU&Gnf +-6M2=$?[@e'mEMTHX&GM>]n:g+V4a^a9uGU)0G9e;huJdbSVp)FXn///)K+5q;PF)*hq`#0;h7lBgH +nuFe0rZ&bI+5rk,egq>rJdXF5#*bNap0hC\AR+1#Y*UKHK/!8APoA'n'iJokQH*&6,]'1q!U19F3N;&Ca_t +G0t:bPTN3Y2F1h9ZbR0G:IsD.6@^^iQMGS[Y@[e;;5"=!'T[/5,=J5B5!cOl&XOg[5i4G`a`UEX +*S6j-pRumlV0[?bHFL#&pT]'([!W!T4n_NZLKX(*W#[T_KTp3!fW`&3q]e_#a[HrDoWjGS`5kfN&%Sr"*6g ++/'/HiV4"X=T:?Mms,QR(\G<`Jf&`N4@,kpsG'\eW"h,NO[f(pu.5mjc4TMNjp>T6-LAN +\/?IN)8TJtTmRHgn.e40+(6W(=C[&X+-BZ0L%ua5i#Rq:45\T*q'FdDiIQT9>X +q0eVjH^K)0R$iYq\WN9TQ'g6mR5pb)H(CBaTpg8!R^o8`fr:G9[@91eRi/o/H,#iZ +_45eiS@QP-q8o0Fc(-lJSU'%^=lGp^j.6#-T"4*Wq<+A1m@RPOT6Zul\**f1"Q;BB +TXkT*q@TD^'qopkTt283] +fIRsbhAd]>O$SpM@@.cql5--2*oU?5Jb0VkRNI)#"h>eSpg%>'=ona$&AU=KJJ\Q! +pJSio(1?PO6)#-@/#mopWk,=4pn+23ql>#g:=9\`N2,BX;]?bHI&\(dB.`F +Xh)u`qUr"ih6&g'Y'TK<>4Jc,o<.r_YIUX5(V+gQ!G"La*]24a!WF+U^M!ZI*44!1 +pCJ7ZAThKI+5qqdeclWu_`V?p70+qE1a3'KJW]e]>W6pr'LWSG5SR2o(c523!KHtcOZb$%A]=YVcqmX4"]t@Rc]R.o9]@"9\e\(e2]fXo\qq\tJgV/$n^745u +]CEW4otK2V^H;>-Hi:`B!Pj'^^q9idg^1dn[BNM(EKnjF*[/dEPis$:?X9?gZG@S(iHPnrl$5Fb+5oB> +_(Z+FrXtlB`,lt&S57J?LYG,pg-K"-Sphd\K0&fm=*mY^>\INjmE'1 +mQTn'rp@JW3=kcB<>5!Hr#J%RrZ)YLj?`b^1k6@J]BJ*u730M_geH.\(K%e?d@PFk +QU,R3?TkaP(dSu\s#our5P-+H&@O,#U&GhY$5FVF'0X>I2_37?+&UNDCO^'ls(D%R +#S<=UpN:-BI1-ZDRr?eBZsD)@e/B-2s*7m'dl*+>F.kBgP;)66mlp(6rpfk-Xnt>n +qgZVlsTM`egF$9UKp +&+m*brf7gZd388\#U]R;KqIS&)uV$:J#5aIoa*YXW%L(Wogs=] +=K9p$"N\+KrfJ$^d:,WB3)aB)^X@a)qP_40@&"h2Q+R"5aa^mjn+Va.rq:P#h_/(. +p%n^/A+CKWQ;8rpb@U8_SCVU=S^1s@)BBTS8YsmMobsB%Y?A!ZC\A\fQHs9QgMN1n +eMcT7]&%B"g`>hoJ]-MeGoV97)k"h1o(h)_LJOPml#jS.Ib/5Cf^F"\rSIj@`T?Ub +r18s.VqLD1HG1HXO2'fLqL/?mT==.Vqu8mb"8Ms^n/MN35k$TD!l8hD)$N=0")eK4 +E24ul6L_oL%7>*q3tF^K"@EbhE?n0j7.EZD'h*+Q>8K`uKOYlhEMR@h7e+E<*Ck,1 +HQPcK"G7jgE[6Pf8Ff04*$9shrcak[q8-X6k*]>$R&$/L>E9-<]RQ/4Jc8B"BDF"r +Xijo%70H-V%M#,l+s9.&'5ZP^.*=h`25Fb;raliLq64'Fk4++SS>L?+Csc3jeO?#[ +$.*E/k;f>fS-Cb>>T`*j6.\QKFPQUjgNHls?/p-8=,#ga?FRoHQVF]iG"eI +ir!TG#+[o_b*;JhJ"27(SL>Ol;>t_XF?L7R(K.oOOK!gtr^hjC5XV:j4:rnXTB,L% +OABI;,>B9C0r(c6kLoBjo)-Nac#[m%'8(B(pHsT*I0W?kFM11?eTBV[;qCViG@T9K +I=H%cG29"fc?F^"Hf'&H#D:u[IOC'6GlC3sj`u;fS*,(rLSO*6fSW7o?Wr +ct_npq6jU%Kk^Nr&sZAW\s%^q$A4E_MACr.TZRh"&V2Uk^BR4(0X;#CP!?o6: +2%T5'+Vg3%;QEoCR^)]R#Q*%+,Q)hIOo@D]dq`fqKhT>DU8CmWEZ:'B\@'``4GPor +*M[bu%0Zeb8,14?C:.-#YeiiG$\9Dc&Msea!%:JOXpi\0IuMnX2b!kt>,0_oR"H+V +?CXrOO]EtV2ffa?`*7ETFtH/H\JO9?@>p>#1Ia@M).Q'MND[,@`q.Xoj-4VFOk)Ta +Gjuhbe9d7=p-2(C!?bneK9262i"(D##%6*?(aQas8Eh7p>Kc7GJW-U_6C?bcZSs#K +Zk!];!!C:=oH3P[MEep4=W1D>$KQ`"&k+uK`i-+V6MQ%j0pa)X9Ik^lW.,?<(BfNO +qB+bUH+dY;jP+e"8`g;!X_"_#8"fl(6f):nOm<+n)1NS_`5q#_Z^(8nh0WHKdjIN8[2b`*G-q +K()&5X>E?E6b)/TTi.n6kH(B5K)JJJ5?j\'@?O`iMbQKo."Lk2_?`7 +b"XUCra2-e^K4m0@tI^>`mreWA*X#$0ro&k%rpVh-P3m$%ImiOiYPFTTRpfE0X7II +m4ciUU6>Q +doq)qC2HtO[?e8Q>5M`EV5;rf<$3*QVbr[Wj@_RLlt<2JP2%`Da% +W.Y"8!P(jE$ScTQ6G_3d,H=pmQJD"\OZ(fL`L +>VUs%eeZ/jB+En3)2#10,K,t9'4Q>dMK)ZI`L++N@f0VK-I(ea'iOd`KlHlt+TI^e ++hiepIRWf;5Tj-57fp;nF;`:c/[m)K9$p`XL\S.a[sjbS_GE+cHW*i&((NWq(Bs;3 +goI3iB>QRV1'GIl%n0n]"=NkDrO6)\oAUXY#`GZ\a)1=ZH-'Y"E? +5Kr>\V&1+G!+T3uH?MX?!._7q!(r>=:_rMboGEJ*,SKWWQY,=UOV8L?_,i-flL_kr +okFiNL=r1A75n@:r(D[UDOede'tN&F8\`JrI,[,Z;X.mLC0ff2;9kH`RS.tk:$oZ= +`r"WipO-uIq7kaoo&-#SK5c8O_K],iiLDi^E;gtj2R/-n"4C_sWsbQ?1bbOIaX`2k +r[gL69kMMt_6erZP4!aC&cfHtVK+@iM\T#(iZ*H,nOQ

`;i?Y]!=IUr[LEmFt7u +S7c$qb3Bh#=RZ$Fln-^C\]Ed"o5)GCa]S_:Q:0?gM'bZ?C];g2*Zk +m@C_qG5gIUH^AgAS_(JtFCeP91asFVZ55dZo9TZA3#K;Y>u_U2:s-u^9V`4h?_SXa +g,haT,!Q&6]\k5rn?L-L(h>KG#@+.t05aM5;pW"N[+Q6sKt2T"^kHr%Y/EDc^.)!q +c+UV0*lGXcr,7Nfs4."e_r4mj[<@UjnpX*Pq#<;7I.*KprdVl_T3(?,J$J]rfA$1p +GOJD_]>^VoI<#"sJ,/X6/Z]5RP8_.VXAU@7aA@TAJe)m;cQqGe2>l^_f:tBjU,j6P +.;BPYg'XjkXZ?cNR`V\4K:]c'UD^,15MH+9lWK,oZb>+9#&ABFqI`"i&2Y'b5)^+< +KG-Wk'>Z466!P-jC_WW1&Aa;C6(AiZX;aI<*'qdh6.jR/PLPo._$hQ^LMNN;;Jq6l +0*\anZGBA8.8lUB3"s-C$^:HFdf#V,kebL(Mct;(8kk16W[`?YL4^H[`"/GrX#_A: +"Yc'q.k%\;/jGKo,kGpTj/8o.56UdK,\tu#Jg`qG5V-F]6$tu://L]26:8nEJ$+)#`&t+H`40P_IME;n?GdJR9 +-*sB@$A_NE"Bq)f-_MnO_Kd[m\5JiC>Tk6,U3YssFC>CmDhb:.L+t6]po_SVmL9"j>3(h)(oWA0pY4Ct9\p4F*,Qql\$VA3%]?$fVpVgo13=Ct['T,E] +B>sco+N_21U0Y!%]rKKDWmeYdRLKtCi&L45PNs:,g7bpq6_sLc0#3FNkZS(PhNX7P +8_PW6A=l@sTLVDCao%i)/>>a!7EOVe8mJ5cCo9mQW(N#J2j%r"XCF%"dt_BF`X+,Q +ZC-E.2[c$bLt]VSCQfZ(3B:<@6HdOu3/n4%=XUF^Q&&t(a]clp\sl&?WG4c3gXDg3 +Y(a\E.U4OJ>Esk&r^iJLQ4QiM&Q]`pN5P9t2M%2[<2n*PO%Mg88fZ,Mgs8[DcqNfQ +bkh]?`7%FCe4iWe9jH7DCtB_$]u]aVT+k/;3N/TE-os=`TF1%s7"e*H>adoGS12@5 +Ln[>eh?G.D#(/Las_rlMlcn +@4jQ(']DhCj,K4C"MYQVX%_-kWG]s#r(Rn(9dK^6bl5rDs%j!qcauO%Z"u`F)?VYXsb;[`E!e[?=ESWhILa8.0Z=('2+'$CSR5E/$W-ajdF> +;iFS"'u(DoQI8*oPA%X&Tr6,;L)P)dS1)H00;j@Y_j(S%&m!,d*6(je]CQ1Um0;!a +)c.7Kd[_gbXT284.T4599_Bf3m4VB90N/E8;]RVTX9L"$\A35E.uP:O'/ME=Ba%Eu +"A7UH/Ab:%5T2.m/)tW5Jt=85=\]r&CiA_D(Sb9/Cf_]ZK$S3,GTdss!%:^^-/d@a7L/:VMqjN<=,RW2%^r%Fc_)_]T=p.^= +4i;?\JbD)Ha=P\uR)R%6T +;E!$``V#Bq.Ai!u0bY[&0"U;sb?6@d^JYuGc0V`:Pd!dLRPD_k#9[W^8AM*>)(%KB +/NU&CMe9^;Tu&NN'K"o!1*"^J\"tl`6JC\@pfK>r]Z*=23W]UimB6qXM:dNe>7Il? +NO)h0ZeHnngASHaD7<_t\6Fs'>BLl&ENM-?5T[1H;,*3IG[5sl;HsC?V_]b_F8@0a +]ngIF[E(\B[;64:2GY=KMU8LRWZt%*d628@634JfHtt$"1t2(I.N,$E`Gr$>I%-P, +.uS),eY1`g?/&B4>>)2lf/0+*/ +F.6;pj0A"9-#ISD1YX"O*tu?::C/\<%;?!>VZlVp>f7+(jQ@Y$GI6\Lc[B@P(q`g( +h9mj_abdj:Qr48ZB07[##8ItF4?jmhiR9C6?le'2/_o8J!anJ"4uNE!D?jQu#[iZ! +@%2p$]b[a+ObO$#=hIcAnpo3!hR[G_54**MpU>h`%cjPE3-g/K7= +Z+-Xr:7eL@>#Z"]K5KBiBt_H@"@>o-1Em!"03fOgZJk2a:'smR"QGFFigp<_Xsmhg +.Q^rainc:smOr&K0OkGV.p?=2'!eAH-E>S^TR)!?C7)J/*i_kt4IO%,KD[2>Qmr4g +Vh=\!@Ah0Cd*?]KaRa#Tg8iEu.opt;fj$$l`/#="ZUV3#?>PV#C+3G;0hk\!jPDHK +mOVoJ:1XW**;3(f/lQ=F<+Sg)AQasaWbK(`8`PoZ!Aa\Bk1pI"2TgUjSfdUpnSo&4SWjC1mAU\m?:&2e1o +jIo8\C[kA1<_ABKk?_$KDGb%qG%ZPR,E?m/Y'XfqHtU`QBA!\t]K]81FGBR!Tno2; +NX\IfTo(E6]pZVT4\XWp?Y/n(Z?'Ea$K+u:D<>nN+DoXUBR)]*):^_o]%X=,1XjIr +p>L%5MN#!L>#I]ApI/LB_p.8rXIT5ZD-BVLuY9):-9oW*+5I,ZmGu453f7a7VoW>K^MDuEmN1>)0&Z.ZZu,g(DI2ICDWbnb8i%1Ue;R7B +WFuT$^l+U60=XcLD9u+l/;,6P4H-TRLf=`,oh5H=*NY"Hk9oX;\`. +_b+Opo7:I=+Q,I%SQ/YKLti +fX^nM1?Zq$Vd,rWR.#3dZ/0J4/,)\ALc*Fo#Q42Mdl9"pA2t]`emdJj[.h-Qhb\*% +`\MD7GAgN!_7&YR9/98U_K\fA^>BIq]>ad@F[+^M +-i81@s'_\[lB:3+/j"QY"jcg+IK"m-^X1r[qC"]18IQ^+j"((mRX_jcO8!F4rq1HT +X4@(NL;dZ.=_uZ97AeUN[TdV"qh<$NVC&:FQYW_[om+8X0A!i7pAoo_@;n2R-6itV +`a\JjXG/YYO3(sRR=(T=/Xjmqo@_q(F%)_Kk]E8A2Q'3Ke8$pFh1i[UY1d]8]03Uc +EP'uoG?aIss+S;KE&cW:58THO\T<&OreF"?e*;(%h1!CW[G1+nHen],LW/I%TTT&cPrD0[)Hb.H+-i#qP+68f$UkD86$k8ii +&1J>^+u0($%]B,m;'4rJFFTh#MH4hkkHWlnT1?HkIim*u#t!"g4V:)oDHiAq\MS^P +85[lr.7qt;Pqbn[1qbbAe!0ei:t*r05uH.^/Q#DGP\ +\M$Ub.K3%tBDEaL7>L[?#t0>!r_!JDq*67`(Y/,*g^!Y$6/+)mVH0>Oa_qJ\e&2tc +:_nL'LnZef(FmLH.<7Toj\WU>PCb9O(oYhr":R8ag19f51-b)>@-!kmG!*K\F*Rmk_.om!KEJ2a8(*M+6@74O3?LVHCr-U84UU< +6qWe$bkWst$D6CPC4DJBX>2eW4P=Gn(rVjAC_k(eenh2)J`:`H1YnjSSu;EN](SqL +"4eRWM9@t!#Pk5t8.lM?E5Y9B)AGU08IQ%sgdrfS>\EkM4=WbSk;o/GdR97AIc%^( +d(8DVXo)ASamf5C+3jHV+(*@frEjd%p\nN\l1f_P-b]HX?f1\Ys3LZE5SsY)i$8JV +clN:Zf6"JnGj_M2Hk+6)WOPBJu6!U=2E!W305pe_Bl +8:UaDr'>mI9L%5A8JNE0>_tE0i^cWY,p_QIQ'0R%9M(X0-KO6Y +PL=nV&8:>m8"p2R"MN5E@Ee/[#fh$>NL:=IMBmuP\e!#eQFV#7-@uO'&`BoO6FhdW +@>i'K_H@fb!1=+Jpp1G9=UY^Y/jI@;WupAD?VPgP2C?jD8Roh_])i3cB-A.E"LrE9 +;Q_m2OT-.A/hJ];KZW6E-\^P2'!G8N-pi;q:#d\f%H_Cd7^R)o0f!drRM=tc=B;pIP&IIrts`tIuRlL +3gmB4G4+JIaot)[$51X>`"PE+-.>W1Y_U9oSd>Ms7fo]^;(&E`+6%r$ +:ZnVJCP%"e26+SsPJ9WOoo5`T5/p_5*Fru_PHrb3bZS.+A`OkhZdsTP=rTnDm3SU9 +et1ApRoO4h5p\c`l.=M=-#D5/V'"`F@Du?O1;r9q(Er4G6_J=bdnNMj%SAE%7*O\] +E/+P"ck%Ef.raJ:s'm;OAdS0EJl#aSYnE1VNBpo5VgtlXKDmK&Q^':,NDEiYgaOT& +eg7XUU9f`OSiu)uOG0]g]H,RchSqRBHUH5+t +OiXd:Q-FM[e)4D0'7S[7I(caiL/24W^"oHo:=g)i^r +SJ@mkArY3YGa+9c#b8lTru(s*950A=FtV.Q .Jj19sk6*t2NYiQbPViJFA9'[3X +JK6?T?`]S%dAk`+\IJXt5O#N+K/l:1B_a;c&1he)[EC-]$L/78oYS]eV.T&&5W^NaZ;jh1>bp"nH\Ho:]a +8F:PSXO.L#9@0]B552q(>o9)ld(MjdkL:h;X:i'#&_q_p +9,4Ll2pCC+A"78^O^WMcTUO'M-KE**9%]EqbYU"4)/nn2gaa7g)X] +">'QT:f@No(rbMibOLdWJ\`I=:A_j&IW\P/lJASA<\8$-)&i,@DL-=L0LX!.-9B@m@Fjp +;[hZ5SjkVJTmWcSUre2+>/V=*!`Y2a\IXT7"HZCinH/pA"V;7N&CCjt&I?`[q[nr0 +&^_[5&L.oc-PD3ENiV^l,Spju,bV7ddVQ#!WNrEp#"%Bm7u@"]B.Cq5cqR=J7Y)VZ +n$8r@L3`9e]#HS,kc2:5b0#H]&ud;YkAq;OjT!Bd'M8-KBoLSn+GV5XA&*mIi4=47 +llY2F&r%r(!k,22AIEL-)oB]/0b4jn`>k#X*7;eHn]Mpbeh>Fc*RWac&`Xp0k8ocO +*l?o[,c8_cXr>H+)Qm-`mSnudW#(KF7q)B2^ogrOGeNU(jsE^3%8KBgf(+Ao]^J2A +%fRDUFs$7!dW+nTMt\:V'Zt8;$d;#`EWfU#rl=K6('I1#.e8?h8e[>['l7FuTsW7A +f`K+aXR\k0!Z<"6LE2P7*E%qHdZZ)bQRN4A-o.DE&u-pSV^dk1.a@a@71G'rY:L4(=B)uYKhtk7#A&@kX%W@ +MUO'=$BD#nhhi![%jD_g[+%_;Y=eU"D,q2r?4lJp'sO\U@62Q7*.r%u0QHP1;O]LA +6Ssso1p]\/do/+-+#ELm2:Gnj'4Wq!B/YPMhi^<7ZM#8hR_*"2>60o$Ld6].te:B$NY]RpiH40]_]oCFhS7'oN"`a!GuT$n/W +,r%Y*!N=W2#sjC6XGnLDB\\n+3YfRu'BSm)d8mH4h'TD$QDQJV97&$U.OCJE5%1`5&dIfc_ILSNYKEB7eDAnRRh[I#bJ?UQ2fI!$qMl791C:H6#4;F-l0H-o]6tpWQWLhiW +2OhoX%sDF=[ob&nA5BE!'*VS!K0q5dQt ++^iC?h/*U&+r-@deY-Y.DIE-hf@H"%/K&932ej-hC0*K=(I*"9a`BC6FOs<2(K5HX +<\>pg@["='2e$th=rWadQ7jFi/**+W]3/p.\L;3rf7J7tb^$&M?L3-kkWXYXa_oQ# +b'-sO.VDsc_ZD`;>_H@S2E'R$f)%?m3iQ[e1Vb"^7U`@hE#51apH +fA_pZd=.GJIb4%<(\;%WhU5iHB"#RRp]A\ijq^^8-P%V1o[d63fe(A=]ePQ=anpZ* +6J4YD>N0CqO3[lo`cZ3&In9(1nauX47qW6=4jfeD$]GZf&os(gbAJ(;p;obJI2f[[ +^UMsQ(ZC-.jbHrbLR0e2p&F +;b\]OF:]l'(tc4JGEA2?OLTk'fb9Jc(-.cdOkCh>)'b;I-IGBM387lo-.M&@Z\]rR=?(E1=kSLh&t?j_;Wq-nZ$RY05n#Iu7HN?UqfZ#KgDbf%$E +P$^S^gBhTZo;g>G_423]E3)[h7Z9U+(tY)]'p/6lO]efKRBN)_ZZK?JS(YQH)8htI +`hY3]f[7!t:pBcSJI;1c=HQH@)<.'#H!JIKeP()*p>pn%Ii,5lnaB&B(]@nSG5ZQs +S;AS_nar^/J?WI*QM%(FWr4\,$n3d*Qki$>_3V]/"XC8>nEl1_3'Er!4e!?_RsIeu +RSfnb:89j?V:o:R)IoXJAo4V806Z_B#_:DW2.u8uMM^nr(U0L=Q%_WGa7Z5EDAAee +lp:8T%h\Gd)PU#*:;8`[VMH"#9$X;Yb85`4X)?B/jm<@IN8hDsq]S.k@9c<_4(Q^V +Pp07h3j#FH/#@PjV4-eT)XFS1mfaWmYM0#\)[!I`]"f>**XgS7Fk[4kA&nBV6q]TYBofDS!1B%Qalp^V7VYs)l'uKVn/@t ++gtuTJ^.%'H+T*\n?GH8Zbh"nV3TUbXB8O1=bt94/tSNNHM]3.aOLXMR@in;%hr`h +aZ*p-,C_Q3( +71T&+\c"tGG@AjFU^/K*]M+J:l?92Q@[P>MYUJl^@`Za@&noLmd9RpD?4r#"72!Do +OuWDWN7^7WH[Iikr6`bo4jAB'c%>9*guH[bkK]U`98FQQ9$Yj3.'<2I'QR4j7Q&OL +NsH;N3>KblE2&([PL53'\M2hjZ4`K9DnJSdf8-E@*:0LKFZs^f'euM_%8@8sfNq:D +q_/$GqO(s"/qPHdI/Pncgu$B4B?e,*em3.DK)=+>GLrC4fA1oqm3@S#GF^5E)5QB& +%NJ+e[[19gEreO;5q(6m;I36@q_rfT%)',+(N+ME).>[%o>)6)Hd'0RTk@idg)1\W +IS28$8?]A5(4&Fj65Bu;(^=AC3!1*L_e'q5C]/82*H0kAF5WVlS"9N:*Y[L=(ZCC] +lqp%:mj"%T:GJ1^b/Xc#%WUMQHKPWp+uJJ-[P(.Nl/ZaUA`EHu0"eq7kY^H+gB +WB-':.>^Z5]M:bZo&Qa&eY8Pd6mQaB;6(W,_-:(PjsD>2hNQlHQ/KBCl.&SnrhJab +Vs9kRX]#T4-aPIcqSW`d]G>;Fo!k8BIhd.c%7jg=ZdtMQ+E93mk<`idYfZ;C5d"3L +jrUV#OR]$"56qqDG]Z![XsSjC*-caXnfbRf?_cg!o^&2ecs'k+PdLPhL7DM"u?f>n?[>D>r6p5M4(J +qS_+f:m9f$6*'qm)h4NtYOkA>rf7i0dtCp#Z2V^65MGEoZsi+^W*o+^>W*Z9M8`ro +R+ujL#c8rJZ<9km=#$&dA[@epmVb7^ctN%I>o&o$Vq#O)RZ2Ko?`hssp01g_heBUT +DKhS`p?R:Ci:$GG?7-hMal@EP*56VUU!2bBqL'E_?`i#HpA5lUf6>'gnTVX;+"r]" +\]B*qT&4b,iUQ_krh!Q,hspO@IfH%toD\eU0GF`n5d3'U"@4_@(C!10F<:cT0U*pl +6EmgM"J:Isrck5O3M_.oV>:+)'kd?*9VG!c<%oETY]>5T+HcXfJ^L91)TM/F^J6O23hfXR>ZWf5 +G@"@Yom^@O.Db_*TBDp#J"=UTrcK.qAY!G*k:r_l,">]rKb10XE',Z79Na9V+_5$f +TB%CWJ!#::r^d;e.aGA+kP6eR8?t6J.j3kLra(\Aq3FfO7EPQ?f[`KFKOHi@(KiFM +Oe@LS;[Htn+7gZT8-SPq7('/+3W;U)CCm%b+6ES;&f!q4_IK?rqFJ!S!OraHKGJS_A;*H.k@ApTfIW;AW2\*SI5 +f=UO!rtiB>Hp9:)o6ihnfCSsD(T[=[5F:R0I_WA\r-pr_p\oZWoDa=OnRJl5=u1jD +rtn'T"@/mu5K2Q2Gg@L)"%RS=h;U4%8Bi#)7i%,V#lbU4W_miaZN0pN:/oNsiOWV8Tt`>N/2B8gi-1Ie=j)WPpVNY/QW7el-d:@)AL +&`u5H\G74VoRDr8#!kd?#pEh8A;1L2,/eKL22Cte)/u[,NA4Q,"H1BI@^Im$q)'NF +fVo7`?$*6VJm)_&s+B<9*\h&]5K+I;+QOeTLiNDMKc24T,>)4MOg\<28CnsNY!^Dn +M&qGPaBE0E^C5da/VC;-'S0,u&+LVH="kMDjgd8U!*hb,bJd%'r(jmO8L%[miaqEu +Hk/2IZ!n-\Se:r_:H7`)A$#ErPN$pbRJB&0o_P3op41Kc"Ec)O#GDhYKi#>u6YLTQ +U(g(R;*$+T=b-OBaG>>*!DrA/E4?E6E&,96o#94UO/2n[*DK$7.>/&i&[PX"&+N=. +a7urs6MQ9eGpY%3ptHUKOMB:#/k>59oQ0*YL](',XeU=Y: +rkV\%$".R$K8k$-`E9_i@r-:KZ5,pO=Z\'DCp?PQ"-Q5Sb!?:V'($e*XL&#MY!;4U +VQ;\G6%N]!O[oWgdt*K"Noq"l(38C`O'A9%B7@jsGZss,/-">mK,)-qF'j(lL.W +B$/q*IqFrL<]MtpfMp%uMupAeS`"bCV&#JcumE3V?X +0"cK?\^-%$I-AK7\8sA/=?jfuY*-^#>.hF]MlBplK;&h4#[+AU*)MN&Ji".GM7[T# +&>3t$_0sK]r\MMAs/i9N42ZG!PB([AOX&)MNj:o/*=?d$_48(>7HKQ3$]5OhTlr'I +0e2$>rtaSLg,[Pg7>>j&0M]>"cMX<*:i6Tc(`PTqN:ifak't^'#pDkus5?7!9$Z?HdJfPM$m#SWCjK0UR#_P!_K5^k!?E +FfZYt"jBI"M +]2`_FC7F0Ac4lVX@jMhdl*`0`+8%r=n;_4X@Lc(dF[19`k?u+1SaE<9L7-a(E*De' +29,!%;U$A:asbX%^1CB6o3S@lGK0RI'k)hj +3L0N07ZAG,^!F05]p))ZR2$RUa7sRkh>G$Uo6to0qB&5lI5h*K;O24LgIej-CN7J" +8=llSK!##7I1tPnM;mN<_AJ +7PWZf0%1O;UaJK^!sXmQ#9[WhA"K'.Mk,3o_6bhpC?VR!UPoktL=(R,44+5)3BS1& +!K%?i,1\=ZOM=YUL)DX>.3*@73UNG5d^_d1W!&\)$,j'$'HaQ +J&A47L/JaTXBHcDBot-tUf9n(o#7<'BL=:U[HLcrS-6W07B5u)\EP-H$WFi+@>&Z4 +#fs)3lDQkq?a+W>`oKKVoKgLpDT;m"`tWR16u>F^FN7@'a(0A6FEa2KIB$MBX+S!= +4.h9>A@1sO\=6bO$ZHrf1;#*a&`GR/e00L6$:C1ZK$.$qcp'6UB<&:G#4`O#X!Air +E[6KQ-44odKTDu\-96$e#,0C5+Fh:&A2Q^,^G-V.'$s"8/B*ifL:d=4.hJ8!O=[JS +7jN&qoUa2.Sk9]harI(Te=B3"UrlZ5b%.BlFJk1)0W`I08LjL"WiF11^Bbr1#PqFh +C+CKT(c^l6U4FDRacW+3:`Id]V4m=Y"X.(dZ$-F +PX[]8b574<1aA`@RE:\-6b%0CHAftp]1OWras>-P1s=+=bY5Cfbi%PUN6f`Od*39P +bp:`MjLdmZP=3&GbulZpH7k-ATEZl=TQkt"F"OoG#K8J;*'rDcK\r?U+hVJYQPcuj +6F6qH[7uO"8!MItE^6?-1()gP`\`rM;UWN=+O7NU^d)q<^C`g*2&h`AMOH!$3M?4I +3:"ShoEbd$#Z-17Z##g3\SfW$PT?3e][XSibn$H#+KqSfP&VmFUbtD6ZA9Ld`A8>_ +"7ZP&0d(KB#%DS\"Hkcn&0q\Z;<7K!o_25e*mtK>dLs:AeK`L2,go[=dUabnOs$JS +pTKMB#'sM%X!4CNPKgEc"QM*;W.D&QCo'3120)VQ8n]Q5=<$Wb#W]Wo>(O +O3Q)\0-&h83mf)IM^EJ*<[$V?P+RWd]%&BDT7K'ESJ/bbOJ8K#Opu-&XKI--iuFlU +c$J>/M:Bge]J=%\emYo7j\48pF4XDd=(QL*D0:h\En?S%f;3fF[GJe8(\=2g2gl%^*+ +:7UEL#P_:#q7n:BNE2Md.hpu>M_5jA?'.aP2@5^'Ut*b-NuJOQ=ljk\oljRCT%XXG +at9/f25AkoUtShF]6"%]+E!l_,8i1'',3(gfe:"Q4g,5FH/l84/QL&7QXem8Jn1d2k34_"EAG$J\IZ' +TNS"18t'0mTrZl^aP%r^g)\>kQ-3F-X5&-JguZi:p!;FqKno4>11\%'1*RmA)9ust +LBEgDe-e,Q(>?kK0)G#L!?2XX+Kl+^204e])@tJN>_C[`LjIoF(!tf'X\E)67-to. +3piU=Q6=Gf/OOE/]kiBH=>NNuK]5R#_1sY&EaD=C>eT^`c1B`0o\VP!?UK;"*V\HF +ptqA4hk@-S9.:p@WaF9r;kg8rYZ\*N"4G[?Kelr'&l[VoQ39:g)!,P+r@cF6_HAb% +]AegYS#;QncX3gaQ0l159=h(M'YKuhZJ\9@cpfMS8";`qKZ.c=>G.B>>"@WNQugSV +c41SKp#4HpiT9cAp)W,k*gs_^@O<;Y2C%3N,`lJndDK?H4b)IC>8u"[U/ceB85+U< +YJjdQ&[G=q$$_-U+]MUfZ!:F![!jn:f%AA\Qd.pjC*d>9u;PW +63+R/C+$+`9UD\T$Qr_4*%@i'7nT?^@u4.D#"RYg8E(+NjG$9;On[pS9]Xc!jQ94u +n=6ko&@L_0-)ORKNJU#*_]\@%Oo2Ksko0b%\/1(n8-?XDj)Ne;:;$-?h\K#LnPeQ- +Ph'ed\O]hY:,(?q_;1u"KE3"p.^4UHY!i>J09\A,q(6-[Cui87P5W+q*!SaFdNG92EkNg.O_XYf0MmGUD +SjCQ8^-%sXC-TjOeoTTmp7#g5$:>88>Kb[M,&k'!Y<6+H]P`]4(kW!dZrT"(>K[T( +-EN9jQg&CQCSnZ.[^g1kI;=SNlfPqIp:n4D\q\=XU.K\UEj'4=ejVL9SbC$q[BN]2 +FC7(/,i)R9-Hh,.'1_.F6OH6,C)PV9\nhSuO=DC'3i0B.,_f=ehV>t7%GP1C=&tnY +=H$'cI1g%=dLW4flb9stk25S"i9fgCmFL:b2WO3pjK)<7)e53>C]2X,]X"hH\P",, +0MtI&_S&p$&^40@MJG=(PJ7k7i1OO)]RFccNht8d,[)@/eupCsT"O]3msr@E#3#&9"R['0E(:(lf)kGs#k4/en=fhS`2UVQLu'I- +cE1XW@>5H0h0^4mV)iUK2hs)G>C6?0k$IP\*06O+YFp"E +#'Q@4qPJYWB[S8jb0`jGab(W`lLqZ\5)&ORVsn=Jn95*-[jlF5.\ja,o&hXrpFl+= +?VY?W)ms/rZW"MR^TiEO/Rf0P%h_2O]''u=TMTA,H"e%i]#USl*Ig81RlMs*!cnl< +N-V%D<:s(Z@+SchM&]f[- +-^0RoE6PodB4nN%)"I0hWX>>9[&uh<^Z`KR`>OT0mDR',][h6b(,'>-Y>TR7;"ma` +pLeWe5BD%(Gk[PMpRmgeg\pQ&-s-(k#`G?SL$d-sMbo#P>PTDQ.j$MJV#"/hqIc]%GGk:mW;;j[ +qPU@i\#]AGXSUPNqWG$XpTOH!Yko6Aq^8]H2m`BO[/3q4qe*A7GIRI)\GMW##C(9D +k]hid?AG1`K^a;An4*.?!,745EJDNF +L?Ngd3,jXlFU'UE#@M]OTB#o@jSi6Brb(BmGN\s\kl-q5rho&\\*NkZG)'aT#?Z'Q +E-)=%GD@;X#EWX'Y^-KZ8VafWK6VeIpa:jT8-+Nr"98`*cj9sH6%HIoKI@<8i.*&+ +Dm[=antIVIQA;B-/Q2%W[GB4iUfK&`N(.;S\E%fr+-9$(;E6"g9dc/tAQ$'L[TtPR +9P..u#ouAjS'@iE\^^=o5Ft\!e/BVCNC'Fmq>](?>IFdM'\m=c+S)rZ.Hb\HW(d&QM",Fa&0\DiT +cQ/(f9&KG,VH5@9b[tp!]]OE$T?q7n>!44!9rHKUF]uIj[p?2iCj'#GVUo[oghq=? +^#o';^Yj'U>WsMONQ:*lE]h'K2kA:YFF%4VVcU"Plum_]^?9^Rhsbl,XKP06^'d&*ZA:9VL_=CE[LUgePSu(ruH5Iot@2VN_BhioB-6q/_4V@%/ ++35''Kd"O#/<(mr&knQ:U1[oaGT3MgjCabjS5_J?,ljVML(JT!Ih8:#r'3T%+>A6V +JOE$J+!i&:HC&/6jCsqcJ\YtD#/T/;)s;4hEh1NRgif6OAIV#S'MT:00oTBX`DRCe +,=g0]XXQokFNlC3;\\%N:=L!>78MEU%7sLJeP/\:eJ2Xq(!Ul, +f9P`O?e?,'KjiW"/WF8n(/:'*fo3%GBA+,\V.nYLXfZBn(:T#JeWH^5nH'*XTZH1Xf:\%VB\+(Vm3IM(O\0Ff2C#UK_/P?INQ#m\RE +/Y;'Cg3XUqqN>MVE+-IMWSDV9f(N+/jdC!lQf]0GASFtsJ[0M> +Ak"t1(o5jO>S%.V<&1(6k`pZ%kOAZ^BgABg6\D<$()(&L$1LoQPCX=*@uo[>A"Dcp +XZ`0,3R=,\)c"p.<],'V[dFlZjgXZ)Np41DgWo,umi1E^^@3*A"i##H%h$5'>?e"; +nXOM_JY:[rh*7$Leo:584ch&4g7FCau029pg*D]\c[jR$TJ"-]lrb%In +q0YOOj_2edPCb7_8VW#r*YtC/?qu365p)6NGpiD#&0LKMr]pTuq$%1ujIg7;P_,V. +>)oNVN(T`)\S?Vb#,2$>)i+F0J"C:Erd#T7TBl=qkHWflT-pW;5=b%@J5?^W5ZeHr +i'[m&7ehHDiVl#r\GmW1_>"M6r].ucru5G;ft1+!*QRrH#nKE4&+ms8hPc)/_u)uU +Oo?\Z)#kdR31I&>s=%n49m,/*fquu6s,DN"Y`Xbd3^0XW0n=YFA[n" +:+/P%V%mIX=,TpZ/k)/>(?4spN"M('``U1tUEjK3;5Q6@Lts!0Hu4lUc8eBsiuR0U +G`L265"E-]*i&peO>6`#86H6Bj;a#` +-Y%g"PZ!N>8m+k;j[?)5;Qa%mfj-,iKX$h@c<7",ZE +rr?^q3N#LK:eCM3-`R>5W&4LI<*G,Ul5`HpeLI@o\t)c7KhSLH5,m'NWE&5k=fSlI +XB!EN=).q^Vfe$*Ni-!!KlO7qcFQ"*qEH+$ruFI7IuY,%?YfUh +YQOf>$Xs#jKcpC4U.BclT_q$nG\MMcGYJ;WKF8%[KECb*c;%=j$NWNmUgs=!"P@6$ +L\S1c,Q(l(1&`p2\GmI6XFH5WJGKJPH(Xc\hHS`_Dsdc0+#+1M6"/P-a8"O/RIpqGABra3;9I]s"S^c28o?sF"hn/_nOfII))/)c-ML(V:):C:N8/VW]6 +)8fQp%Un+B50(bE*Fio8NPTp*`b;'b(onA1]3$3sbI\F]*mmkO,RgWb)%f,jk^fH, ++@(pWS/nNhOQd"ss+*>e8 +bRrnrnIXCrj-40enY.Ksrt,rm7KR#t,XHf$KOWk%O7B(t+n5LQ +"-55"%35N>DNVc(:Bfug-)IuGQd],N:2,\NVY'kYe/FBFC0a3+j3E_9>-CtAh-I)S +L9]<5cWY*iD6;%;!10(,rkTc<1*;J_Toa.3$*<.r`QlQX;pQ]q9^^@!r^!mZ84*E_ +s0[$aee$bcFcZ&.#tOcU]@54!9d)\bk(\bL3obC$h;,^)M!5iP15Q5*r[^j,@O[n_?)Mq")^tMg05ALT*.#VW/Y7NH*f2a8"g? +j4oEQE^!4=\ORt-4J#/bDI(H]LG@prc^Jo]D9_ms3Na681QVLr@)g!kG%-m05"co, +"%1iNI4M0%:6m4mrLh3h95B+!K^f2\4b`T5b4W%=-c0!c'`i9'M\+Q!B"R*3n#u;D +ru30CIuL']2+.W,%"3LL&+MCd*mSu#s"35*pR:`J42rB%DA\8(_9tN_YN\(]-03c^ +lio0D*5b-#m\u>7]s$]!?a!NAN[7B4aP.MMiZ/DGnZsS">0h/^N=YP)"sNsZVgK5p +c6)"qi?=p1.gFC>f_05[o^F!qcm8_^-NYtN!q7cD0Im6E0a!Loj=hMU0LZ+`8Hc7l +"Ro7l0N@1kG2eG8+$o8Q/UZ2A2#_8uHf4,Ei1Qh1ZCJ.HaD&luMa$WiYab'd+5p85 +@=#ooL_8VG$*^$._4InT_S&8!*KX>10XV:(GaV3fmjY-Z/EV;[[X,uu@)u"BmJO=` +/I"0h:tnFZn1q%#1V%rhIY0`_i)rt)F<^p*2<0bk:?)%j+o +&b."W0dKidL8HN)kMa>s.!CB>U_QO/[NThh0=9ToU7M\P&LlB.nkS&t/6^=l-M]9iUQE^bkBI8j +:CZW%r'@(9c6/f2G8RGf&FmRJOi%aX`>l/)*:_&i1!L_9d2d$<)q!Uc1$'HrkoR+s +*qAa;OKTT2#dD..f[3$0+NY=QG^$tThdIYS/dAXUKb\=I&aM-jDhQoL(@eNT*.aK\ +9)*gkSKjidRAl4b&b@8g8L1-M]ts"B"6?YdeA\A&+5om$&+XuSGfU3("0SF4TQ$A, +[!(rsYYnO4Z:r0@fdO,]*O:eUdZZ*MPps#,.IrfT00(G$W@G3U.e9hp1:8WQ\2C7/ ++34N8;T11:nD]=@#)IN#.O5JJ"X]@5%8I!21?0uBD(_uj+cq^!O+nJP&CA6sd5'#u +ZNW%(#W=F2YYn_\m[Y7ok7(#*HBCmj&$GA_i#L.Mb=_2pa;lt8I4l7dGS!ZT +'J8m&:9&VJ.,2$?gag%m;kT]kpEEGU021@9O1HFlW"nXG'1^q91MJsmaXY\i*C7!> +Tmju/?SPt9]'lG@;J[IQVOIri(Mb'0C*FUJI"LQ;kH66rWmN\&;a@Zd5kG@K'Fd>b +)*r?b5trjp<$akQ.71Bn6M*!"-T]jU(u^&G3&EiZ<'`nas#>Q2+7KQoNXQT:P9s]^ +"qo^;mg=:Ls$"qK'h_@3UD'L=ED#]K-lOg&r+I/V1m4MR)aY7^9_9E$'[9?/fhHSE9i9S;FQH8> +kt\VQ:A"'C;_n)(5StXYi9h6:'`bfQV##q\gQ9f0di/`H3-jup#gUSeP:9CFSesa3 +V."!]62rL[a"o;i)mo392+6l<^4FCe$FAB>iCXHYs$dT"K]*!&i>-])/LOsllnSV] +:O*d77[>mi9soIFomp4fKika8=S7MR$g1U!R9?qg=nSIl25K67.2_Nu4UN,Q/^bR( +Sqeg7Z1N/_F0Re-5eIX,SI73ZD?^^]\F:Y%)M('9pS/nYfjf0(:h4`": +Ntq0;B_EM_%]k;.s"7@IqMfqC[=208+@gg4;tQ= +)!AsV&+1.0]j17VHIJ;om]BN.V](>4+5qY[l(jc5FWZcJ,V2ud91DuVHPC$H&o=): +>-s2](5br1QE+NADMV9/Q\g+'f6!@qqbsM7Eqb-0.b?I3cPSL.'/Vp8cad?G_.$gQ +S5iuu9u.tkjl1"F5 +E7$I[I[DjB.bQU,O%HW2`QXTJmgWQgQk>=ncjAZFc1:5O"r[u.(T6%./K6J]8V9Ha +I@&E<3,s^teVCYWLY-ll(i>(RM28[$M"m))8eYU5P.>V^MS<"agg*M_.cWQFED):E.Ja)*Y`?_(<=<:["2`3Jsc:If7CFf\ViN!W<8-\ds'[gkb`rt5j#75?pp$'4?MLuCI"'=B!KGSka"5#=(OH[!:5duZnhYL9;s*IS;l+\C1%`ca^L11+K)e+1V +AG_Ta8.mn1mWt8jK"]]#Z^ZNU,C?$&pQOROr#qTCoQdkQ7X@?'lA`&dJM,i%E4(mh +$>Tk/]7_ro-bHu@]DF%i42&:2_)'iT]_g*i44V#b8saA%2XQ*Eni<=>qa\4bYAKh9 +1)c[ed2EPhqH-U)@m!^tAqdiL64$%cPTn]pp7_,D-#WnD9:A-85;t&,,LU +D#\CH)R^>%iLnI'*.Dk3\$lIG>K=^0bJh*8`V`lY**k%A--!T7`r'hs04+'u8%JXU5n2)/jF3\QG?E3nWiipW$OPbMu9` +qC]!sa_3dk_t3*]NsUB-52;Yq`,!`5>7ess3Q=2K`dIkQD?pWkAObT-`24U'2\ +#g:H">7Yp;EaBJ"7qgB/)GRt\Or5l7QJcYm%FP:qNR)+(kp)9,fKDKK98\SU).0d0R,DnYSb3G0npSe" +O0KLg:5*IqE +WSsGLiZ>Airj?bFII"V\li+`e,@6c32#I05]\_$?n%$i,VkQ,L>k_I?CGq]m(_c@r +'ObG[DThKTo/Mqnj@i8;g=sHcP*pN0XrbRP44PTVXQR9#kac%7S3L^l>'Y6pWnOBe +m0hN)\ZS-*lTVHC5=+pk5P27TnR#/d5?7B)"ki-ff=,L^rS9]pSetlUZ*UeR?ZS:p +ADYkZn5U>8%Aq2!?W#If,!fZ+?Ylu?(pSRXd*3+ATq9ZH=o,f4p1jiiEG-'nlT&#, +ZRAm%gRd0?PrV]O`$)I=WY640JAa&hQruNChb!HIjo3$Zrr;-_?`j?Xq>\5-+:n5] +%LE;k6/`BB<%]$tLI:&5(mIcE'oPN@&X_'c3?=$khCnVML&U4J^Y?s[qcRJ0AuM?g +1irV5GCQX:0D-bpFZc50e-+D":i-/"#N+_VPPl1>J#%fpo[*jAUFAp]:\CF'rkLod +fnoJ#@;Ps\/o9*s48m1AJ%M3]pX@t^Fh:rJ(RrtCq0g"bn/*,\%gds-@IY2)<\G>M +a(+ZX*0sALFc\iDD5[8ZM#V.g?gJJ2rF0PlW/:!8W8n'm4_8uY&]3k#nX8Vnnb4GHM*g]Y,VC&:Rh2]6_\_HRr]H,l?J&UO?H2N,` +2lk?lpNq?1c^2E0nbR\5hk.+@nbi>MYQOn+5L:YX!l/b3'*LU?4<"Gict"4)6852Y +$USgF.h"dae2n)VnDlkG6norW'1>\c9,,>7;u5cJnUtBi7WG5>)b0A9EudbjjEht= +ncXRg89,u6,=qAnP9ie@A=Fr^r-:RJpD#a8&I^+6;pQJ!0p' +r^hiWq&gKuZ[CPXOhk3"7"bg@"q+3_g7Wq[/P0>-+6E;,J!n7nrb`Omq8?g9k;fDh +SYkd$Dc5*'W.1E%Jc:*?Eg9!h<-9K[;cNEY;cQh?AO:g;-i*+Q3,U;lZPQ2Q6@Y>T +$3!j1o4V8CLa?/'L-f4Eib?8n_>HX:p0l[3&`ebaaOpZ;L+?oTJmhju\W6q$'3KA9fLo`jr6`6!']S?<^MaDG-:C*d!)^/?>R< +r`4uXP,La#Vtg:$kZSFQ5QU.@,@ajZ(b1#sJA%.XO^TNV,bO1[h(=d_)/aqpL?;48 +CjRMPZY]M.e$VdQdHt*_WB$t\>(arr9o++]T0:j'=oYKM@B'6$Ls7/<@M0I*H?'m[ +&]D44R6gb#D1&3*LLGSN0?mpqk;1ETI.p"TFF=*]d<+1l:XsSNB2R9'I=GINo"Cr: +gNNP9F5;%gkBl*1rWe)7G^^tiEa27c/p!I\LRI9"XP5eA+6J,NJ!bnHBKRBu:r+n\ +`/%j"K,QDdU1pW87]379SGq$l>/ms:X:#WFY?T'G2<+XckPP9Dp]1A#o.)f^]XWtY +Xu$;9rthC8S!/t"'+If-DrN_k&+Lj5doepBD!3U7nT5iXpra>'r,.Gf%'3HsauP5< +!CHB-m%KWJL5s+i6TAun@Dk6_;"bmHpj!DooKe:q%O4@iOFa*Y98Sch-Uda''Om;* +MNLpi7 ++]SUeE2ZH><2.3mBF5EYGS/l)sbF'#!APCdN1ZjqIRZg3UbqqdAVUX@iPBLk=q8#%'']Y^IQ?*p6,X:Hb +.$9.DB"^K*TbKJW4lIq%A"2Uoborj`3W23V!lHo*r(i!>r[bsCrtu2TD2Z;d +39NF_5Pm"f2PCOCMf'7[T:u5>C1"#D7-sa'/nCqqgi^('uRPJ(?8YHO`Eu8p`;n4 +bmi'NocC@nX>A]rb:.*NAW>D$=)M-<6Xg;!)h5$`l1eS-V]TFFL)FHFIuR<8$)'_E +\^0>Y1E2U.Dq4a"Qh7tP_=TtQbA\Q`CgG4t8hONcnQJQ(u8W#5\.E.[X(LjISMd9@,`gG?s@si9VERm4lR.SF$ +;8P'0EA53slH^j@cldk6I48+`-KNPSCa]*JZ\86]X^QMui+?091>5u=$j8Rn@/+;j +_,$T?b/uI4CX&9V2bl8.RE*D@OS*fLelhS$$b7VM`@Ui^L&SS:+oHOgPGcdFnB*7eCR)RUK;$o.h%egtE8)@e2 +Wfp(or@t/D(BEB@#D-oD%Dm?C$`@5'LN*59`-@U^iga(e5[@#n@Wk&`2Yf2[/FF^4Vl@o4hQZ8!rPbHs<4ardiEnr976_T:ALZ +)7cAlG9?C`@q;hP>D-j\]7Q?pA6nIm8,2Aeb&a7%NY0/g=(1HdO0a!^dFikBBC0!* +YP.tSgj>B/m[_tA4/7W=Y)(77XjEZ(rIl6#@`hK7kh'[IMVekFrtPQNIuCQ1U!ue? ++61Rf.hUZomVJ3\NOhc$\UQZ1T6Kq!Qd^8$)Y)KcQKJI%UtomDpuirN:JbKiF_a1D +:%mT0I\@bThV%CF?c2X\'B+=GOn&EP`eN@IkC!<'oR<.UqO^N)k;uL$aUodDIrFdu +bj4?pR&t]&+BjOq6(V6VIJn<+VTS=te!$'PIA2BB=0kS%Yf7UIq;o6,( +gEi#j"X'k_E.>`T;`S!^]m+&j_`J(M>Tc>9RgK4p9H(eW0gclu\gf>1F#u/CV5&!" +Q4^&7apTM?*=XtV*%=34?tVB=atOej$ksIC9L$?u5XZSX6nCUA4@2G%bX:_d6u5@] +Hq6Ya8Jo>F3nk/niG4+J9Z5Rn`6g6TLajKN?]&6h"?Q'8+nROIE/2aepmn#7[*9\oJ7nLf$O<=T`nuL(HhU!3iO)BV)OsLPmlW>`;4t +N?Z#n%J$WUJpI3`oGdW9Ka^"riWfqOYD1`>LSO5^@@/i5NQ2`P +7dQa=m%?r2Th50UapQbAgn[P9V+P!i8o&mDJ9WK)r'JhV,`E<4P?Z[L7)c#P_d3TUHMr +=uI3@*fhWik8ZK(IU5R'jh!mY@R\Tk'_:,g8k;bt9P49[(f+gs8\'7E`?l +9e=af4Od(tM8gBr$!e.83CYbKU1d9`4c^'`64Xr(l,H:[%/jXT20,!Djd<:apK]]/i]-e0X\& +X=/?I]E4m&/il8F/(m4e3B>;/%C' +A>kotm_!k,^U,<%F7kNT3P(lXYaWXc5d%P+M59d3YJ\^Or,U-.,u%cdK!i1'Jp&/9>^SR`Vi_8,uI`lGuouO=+u!&R/'dBI956R=7(K! +SEl2;bFgElWImNlH3M)VQ'S-2fN;2W3p]9[fu@4);9>J.b4-o3,Yb7'9o:aKPDm0Y +J(Yj*=X]#he&C0@IAebr!mm&[b+mQT]@YF]_6ue8$G:I3X +,/%&.^K%AV'uBf=m-*/_\QbUibK9YdTNAlVJ%n.4(3+"$Pd([F;+?)<-sGms5]EaX +n3"&(`-nB8IAC,%V-K#&>b0%t-+[@+c!9)M>j>_2k\m3nO;Z!<;6fi-=ZJ,=eJ#&) +)?IQ=;lY]8+^LL%d4BW#ZcXB-n4]>=7mI4AonD=-6.E17Q4nN)Uoj:j_1HWr,A7<&$ +9XH?5Q.]K9J4i8!g=??iRUJ@l,P@gpc:?f]$+3/6g$IWXL8s5che!+$I-RM9r$*`j +"^%kVaetSdJN5`b2@I:=MY=hC9YCNag&r;N-59f.'jiR-iFWh`C2Dg_).B*T@BLO] +]/-N<7'EAR;4\>kQs$t9_4PK3)s%OA+@`2+`QKL]);C2%XjP),.2q\mQ,%Ht45Sr1 +/RmLX)1npp&7eY-AW";[Ja#)?'X8Q%YQVs%?m(oKHijf#b.P=96)GK-IQV%^4_)2h +j3Bh#FtR;86"D$'A13BSJjcpKqS1BZK50_q,M:rGpI7fnRN>*rhDS!N^,Y5E1B]'W[Qe@6 +537I"5VK-,%2HMZrHBji1nUH"WX<)2-SU*'9g@3AP$>17;V!$n00[>Fs[_N8r'k +j@Z"-'0lb3k\amDIUm,PLM2prkGF/N^5QaLeKhAEYIs6Jg.nI+O;@-11B;2+i0W7D +Kba,c"Nu$SEM?cr3j.L*l)K.cCLfmr=UBnPh&6sYWG&`B5$u)8M<`rRC?CCgri^)EASNj'CG)r/4@^MBF;0t>#,Ca) +E@a=!HG@rZ_O-u=O_:_Z;8Q4\_i(BcBUbU_@f!c=VeA\I`OPN +PY977 +4-K^0pgf'&+RRtQi%80[bEC=pI\V2`5Y?>MR6t(DD]\Lg'&RSUol"11DeeAZAV-^Lr*9W3^!ZZDkhPXJ +S;I4R5`6taP42["2d#?&,=>R'VRZ+j\-D_n,Yd[pG6i/G:`2Y&Zn?_sFK>WI%]lqM +ZhAM\q*,$&Ib@^=_W@>XI@dd@SNF:PD_Dmp58S=#(ibten6Oni`s49'g'JH]BY&l0'kbQ+&7XPqO1K(%Km.EpEZc,L!qU +OUG9'06Q@B#rB"@2t6<(.s)'"k.;D/L-i[jgWhJeR7c7G54N8'EIU2omm(lj5kFd? +Eq_qC5=BTc(Sj[>9D$"s/0^SU#4b^0a:Z..\R[IEI[WYNBlJRY=K[P\HldY$4Spm% +Y>d1cKTuWsFB;OdHJb,Vj2@u!Spha3e5/gm5CdV6W#.l?!(`!+Y2tZuRC`5r;es&o +6?Z^%p2<6?IqEHq=E^Zr7TG9O9m0$E'Y5o^[9-l'HK,pX,@V,SV%(KY3F6nT +FSA>M*hCQ1HrYi[p:kru])<&Ob)R('Ye;nJBM(ej^P#b_3c^AEQVWIZ?)[U(MbC2* +j3430/\21#poe=T[qL$$NET9?i'[HYPLC1PK5c.]:icdRD&e#H0i'#olQ.s,Eqf> +5s;N)Ueod.X%a\WCjVS]_BnfJ`YoU1?"Wt8`I(j,Vce&m$;8`L6O"a=,p^?,Fg//V +2u0HC"`Q7@)nu#+9$`j,qZkSs+4L*7eGWZMr+FW0J(SqG8rUH8Wl'e55t0sX4,kdQ +IH&@pVLV*72tpM"6]^7M]$<+XQg&(pWtd_>lniQr;@ +>P4s&lFYuZKr^XiHb?3=\JoUHrE%KuJ+nGRepitVI]rWu^\hta7Wq4&I`;qT!s&u5 +>+K$c_^#+L;LbSMOP"q@rgP(GdR,DY,XDAp"5i=9'E'C?J#E[XU5YgGW\?^]bQLT; +QCWN5(!lU=rVkqm^YS<*qr-];U/>URH:90G9;YX%eG=kgV,OBoC=RXLB!kjG=)6@` +"bt!+Z<;"pHUXg^CURGaf)(0@j`A"=DV'6Sk4O)8?Z4Qo"Yo+HnWL+i0QEW1V!AY85X;uKm2J$2[ep1f>%3cm5$ml*uHA[C)r<5d]:IaYH8Kc%?8s"::^\p`+dH!I=ZA$4$B?3?R@mmk;m@!WHMikP;,[ +-Y_i'EM)EVd!qXbC4^^QkL&^IT;Ua[50q^V!C5"2*=5'Ze3+C3d8XBh6D'%_l@5C\ +>7/9:KmEZ*O_=Jr1`tfBN.6su+ukVpJ@YYI"6]T4PnqFqP"_M1flhk9L?0@Z_N8jY +?GVp*H!j_)%>eNGeeO('Q(_pGeuc2l>?8GHCtk9Qa^&.Q*Q`?W +f0.N'h,dn8G2:buiHX3\S`tI>VqLWjT')(Z8kl_$E7VF66W@A'9SgWDLe.;2.E\rn +*E'4d79(L%KQp[MP$t'`98A;u:+[RL_")uC"Mt(L'A6,^Poo/!B1h&_jmAN!ftMHr +k?6YeT'+f+JIO;Gq9!=s[)%Db8#Q/<+/A',$k:>ZU&I?0\CNW;$>:RGJ!hS1E*uE' +3W=@Go==4;T?$YXRp6`siOA5Up?B*T]:SE&mi1-P^@,;"q7lE(%gg$jg`I'Dg,j3j +`pqi6+is4ZT..qRgqPSfo3C#BZX=%6_IR6>VG^54qG'PDQ,>?VXWQWNK.@,L`heK7 +d]!9S@`S9q*@.UE<\UAjq?4d$BrZ&h(ao-n@X4PhR_m=),k!keT"hPsqd/0jmebl@ +^pY=4U3pqDRPCmHFS\p*L5;r'RG?:X.R]FFg?-)QGt7\WCA +5Ze[#i)C/:O?Nia(``aPKG/sa0$_dP\j.'kD#au.;\2,C@Um$ti8k_fZ1F;,3SWf4c +:!+>:.&?tHOn,)C8sr[/j^bKYd_8gV).Z]N=T9IQiCKk'jIIUH\kWD'TLCTHfS3e+ +0u6`D@XUsu!#;OUTXl")H3:^#E@&[:I'4Z'%R +L74*QCd5pYU`\V.8<<:_+&q6k'Tk!".`?q+8N,m:EE,bMksMZ2Q[00[4^jf[O,L9J:/PmAd>_Iuj+>$Dtmu"&TPB0j3uq6KnFb +6+Z5b$_E`@pr=#mNk,YHr]3NQs.JEMG`HIog+@I/][rbI?CTIN,]Q//&^!.)AsFDB +pmqdN$K +I9^qF80-?MW`mBD+G/VBsC6PU[OM^5fg)27HjIB$_u_DWo<^ +b+_,e,fuHu:F.c?OK@M>gXi_[rJmmj0!rpCf\7KYCn+"eM>7*?[pnZ/5u&19GX.`q +oKX^"$BrD4%2'/p;8f_[+#BIo(U'GIi +X@N8`F=%]93Utla#QH=9]WcXo60t-uf*1d&<#jeI9VebTE7XqachYnhh$S:NlX +MG7U#7H"X5$B<"oc:6Y0]m:bhkkum*??F!8NibK(L(]md::,`]G,8+?)cWHH,uodH +/gf4QWgR>mY72R72uRQOCos9/pWLt>H\]l5s$,Xo&"W?AVpkM"8d'HY[J'U_h>?)Z +n03l'b\l27*5b%4rf>@g*>$o_6V(3WnTH$2(nr<7#pQVkMpn&rhpu4"$"cG5766h& +$J/_%lbV9oW7[*U_ZA++!Y?RX6Lae>p:LZ7]8h^2_0Gs18d_:8,X?2"l\*g)+CcTJ ++egG$!4F#']GQ2BY3ljZ:(GU.>l(Y/#4Q[0n9"sIG6cKA#S;7.YU9^5B@>%A)@'*^Z)$\fneN"N#b&n3O..@_,GRWT$H +*H&ZZkdnF2Ka7-"#VdtG;)8lJ0b_qn'B\6`O[g+J9,,cL'a``_YE\i.plWZ=&hZe6 +"O)UX]_E(R\h!%P"rLf%SI>i'(^[#U#B\36#YFDc+Udb5C)A/__;5W6E +k_eb\Ku]^NWPjWbR$kc/e];*c7c4!(Zi +*msR$&bcP#W?9Of+;+c!;?gILC@K4B""E@SiP]h7d]m>)L=+M]M3>ET-57So+7:PG +Oi.hWN(W:!,Q^GFTQ_2()\QOcY1oQP%Q,)CF720!m"K(/NtO6 +b&m_o%B?KA`.AR(P,X!6YO/nWnTG[UhP]jO$:2IQd:1R\fR/hA*qHWZ;RIU0[k#n= +//#KE9JImbb:M)f/J?Ma6M?_ArZ"gC-)$hC9<,S_?qZBe'Ypm&@4;=Wq'.R^,OC5$ +b^s=qG1NaW0ab5ob(MM_7T:;jTM-!;TGI-)#q`jN.gK)%\Jma0%Kc:r*sb4CSLE<"&oFO#2TP2a!&9]*mPZ +c][as)]fZ^4qls?;s%BMCDCpEY);Q_TdCl?9UmoA&^=T8EQoJ8,S.lc$36Bj2kd_.i/4%%L^6khu9.3*EUgD^^rQtrqX6$+joP9f*L +19R#R-7YY1R)k?d\-R$s65^Xn)TF8BkeX/f/rU^b@m;<\6r]@A<0p11%09,,4VF5K +ZLl5b_OC#5o!1+Ob-^IdUG<4j!GZ);C=>OlbS8lcV#Ed8T5c*o'a^==S:-K!JjG.?k$kJaGue],c&MH>r<<5 +OU`);okdd]$WjbI=;DKVee;JX(-iVh@MU1t<[V@.rj!#G]EbE3%hE0$f!\8e:JF0; +oN:\r5au@2T6499elHs4r@c&(8Beg0a#p0K'l);=CA&Z`2RdH;])*7iC_jp)hNm"$90PeV@BDW0_FC9SmQLA;m19:.hF+o`HtLlupQl +d\1X60[<((cI^60t8#Bp;Y^T +H+)OGFInB6=TZb,[M(B=\$p^N]*U-T`N7Nj=HuJ +Q-j^*>BP-sIb41@(\`CQqP0CjJ/AB==9elNoZkXq]MtK(Yk/jtTeXPY4BNhUl'0I" +ZCfE%aHQ`ucqYed/0p(@(mEjJ='8h=B>OU%fL@MPCQh?2;Ru*N)M0Pb3pfWKAX,>Q4dg3>` +-haVk^N^DgaTq9)=N5dV=B2L`a9nMQNNSj7J0k!+kk^;X>[h,Tn82Raj`53B>O!UL:ldD_JO=Z=S;i0/' +MA\XC=[SFA6'TGNO;Uu^=]^lGgq2OT(W']0Q_J">]aQFg,H:6CVCQQ4Ng`^&o("+D +$-,)+Io5^aO#RZ<8E#*XngJ8sM&BNd=f7^Hc@@J=!moY7UC].SFWF@;5aZU0Un/2D +03,hh@5i_7Z*L6/oZq(kQ!$VAq+I;^l^jO5Sp0pt\bD_aqk(p3q,&SkpT'sCY,3e? +A'pa%osbdQm3KmX0@7:=qBjbXR[X]]s2^?I;\p5.Qupb\-aFIsGRpGC9;L9:]^$[] +AE/_-^)/&''[-VY[0WBRpSO&cBni0&D+Y[U)`HhhBPd?tpI^Bim@QG!W>Y6*3fg7; +qkY4'WZ%Y47F8IUF])8hWt'l6EL;jKG(1;jeuO>9XO@R+#ib-4Fj'$:B26ZPFU[J= +L)II]1`hP^jf3XqY8Zu&aW1H2WaJ,i't$OdGhU_[>Hl%t7!#mJ4G`iE9-&C +K_ULpQa5>7WLG]Lq_b\r@BWm"Zl;B>6p./Xar:RV-@'11:._R5C(g)/IDoA%BBVpE +R1("WQR\2?_0?M=8mlTnMK%F'pkC<0Bd2ndtt^$7\iS*.MTlb:6$V&_'%"rPg)1/5_1Eg:^O_!")&M_AnS-iW)(,iHbLJL +]tAp:gk*Fk7EF8FaVq'sjP7rAU;db:G>W9!:Dq<.\#_$nh@5U*e6`$ik):<.mc+P@M>pk>\LESsa8BD?a%EEL`(1X7jB`19JekT\c,n)\A +!12$^9F/aD4P\3/<#.Bh0J/?V.G!,h-c +qIp*BCGcoS^,'i+SIa-HX3ob,dClm?h6].)F5,Ncg_!/@h0No"L5SZ5Qi5?-.Un<* +L3(KRetT*n.j1O(%$t%r;Gp^^'t88#73`B\$nj)>#NYGkN_,X[[W5#If]@=+)ql.@ ++]'cG4t#?].U@i4:K."*<+3C1W2Ya(l-&s92WJI\'&>LO>fmt;]t*6q\)lGNjo/JK +hC[l]CZ`q254-m@1r!n:"rV-7P,>m:rdl#"=)`/ID/\#UZ/;L3T*!a1bNJWK"pqDi +WN6I8$R//"F:L*:3dsbZ"V5mp=jTfp]Qg]ie2:gWhUENd-KWW(k5OE/?KO]FPnlR6 +1#4fE:dKN[=Nr+YM)>=m@>Y[m';8\>.d.&u?Phih)s/4anX9(uOg^XC#dqM_76f>"=8HT^s$MQKkQ#u.!YKpTJonMS$D.kqKj^Tuq@kdd7>W,Ni_05Z +D1Afg:\MZ]rp+F9m?ZLL^>X(B>jdq_[GLG!]jC/og\(RIJ\ba`Qs;Nk&W+J9nX/*T +59Z02AFc-n[U1bWc"?R8h"H4`U![QGRU%hD;5r)\opX][!SZ@iXrm"@U]"_@J#>j+ +oLOS#9r,Y`kb0#=O^PFK&f,&brRfnk9:q9Cqt9iim:6pLeMh]ehXGdf?=+58alr>B +I@e2tX5WI@qu0r0Vr-\5qgQ:%^[q=&5EHQY!PgB7%g,*O//JFTOAm/)61C*Z$:6GJ +-OW9q`&A(AYgbfG6h(jX&k! ++rZ2t5`u%69dF[WJ!/dLr_n`Qq/AQjk#"C5(,E.HJ"4N8rbn0:q6!mCk'9XMR"Tba +>E9$b="oi`8KnuoTYd^YOb#7d8VWG-G>m$A!WGoPkP8"/2\"/`6QbGn4L6UE.@u$\ +7m*VU=>gnL@T^&rO(;BO;>7W@M+1DIAiZ/h`h17T,t[8pR5=XY2];`s'8:&BJm*?XAcW.1(b(A#6.9*!XhP\djk2O-nMYEds'KVLa/VC#%(]kli6)ZP'`^#k4j)A<8n_cCaHmaUZVA2G-=USY[ +08:%X)'e\,3!]64(Ilp/M^$(eNTn2+YX!pCf3U_k&pG&kEG^d,ato'gfk//$.))Uo +'jgN6Ha.057B!I,iq-N8&TTTppr=4],\N(`VD?/u)[tbKDiPFL3Cc'n*FlI#NtLHm +P!T(/7gT,78fV4FA^D1u-l[Za-3-TGs!(oRN_JGPX?]o6gPS9h&>3T2W\Gh/e#RUk +E;4p?V.)'pnlZXdr+_,b<@]A#2]!a`BbCJ9*i66QQP/Fd9=]=$Ab<`bK?SHd<=\Jj +nn`>DD[alZ1@[b6u7i]Somer +ffCL&l^dXUGY^?]4_K`JSs//\,)Lk8BCu4s'F'+b3XJ)c1ZoeJQu7X+! +9pP5R-DY10Ojm]qL^'.gho^!^i`$kY,j@gn$!Jj2@G;,cXLc;'rt^f-;a[9q:'V?O ++60#/e!bJUMb)PDj3>RSOm>6m!).RK*O0TNja]U\S$0gs-'k@/IL_X6fKW,^uA0-_-Rn6'lA.WHf +%ZXG-)C,?1G&IHALl>1TUP0l:O96gnNU#jp?_+o[<#4'G/\dNKOFi724]kIu@.cUeYV_+6/GphU``>B.Qu%GQ0C)m)a`u +2Iju,QS`M*9THKSTD5`cPbn/,LO/t"mcIQMNUa@WkKTSIM^BIQAo=a +^f&X+RKs,UYmd6:4hD:]h,2G2Q,(DVc?)?X'LLV_l(CT +5q+9l2?cH]'4D7qh1oVTTTp[r@WWg+H]udg/2Wrm8Vfbg5Zp>k+(>"F.R[&3V@m]>mI'F5)Cp_G=Um< +-`(q!RF?J+:[/rjWHCD(eU"]+lQ'W?FhYEiITHe6)ITH$1P8H-uRqU"u02Ei#Jo,/a2G7L=k +gO-Jso,_PhH+uB&I.s9**f&-h5=t*f2lHqtm_ML^//0Fe?O7"Gns"\:A'Qt6FOah4]/6o79L6q"sm7Dr_+`,nMf +KLj%G8]7Ds`3`1U`(\,!9u>h3#?1@%&9imPD$PT0L3Rrt\6k#QB8(SV"s?VF\6&j& +kWY/#6eDs*o!(Q_]7DYaKWlMQaAE#7=G)EUL%%PnLfB.cCBaKX#68JNQug4+Y!QqO +7^OJ]`+m<9CW=kA`oM'Xgi1:*ECU.Oa#%hW6ukdsF2qO-a(0D7FEkiBH,kSa8!J>? +`"C"Yd!u7J_R+g6"G""@IE3[ca>AOj6mok`B*E7$Km5PjQl*`n&VokW6]8duOoIeM +>_'>5KKp)98/2BF8>ltgn.1<,9EGUjK*Zf- +a?i">;?r"oL*1[F89.;?I)iV&b@J*&]XZ.,\P%UdbI"k(`4AUk]?B!BbN-F]oYAZ: +_9<&!9GDV@gTX3_`QVl4b]LnLJX%lj@(BbY'hCe"RK5stc(o=;KNeriW#QU=-&;8& +"=Yi)q_(X%e]hXUc#hR^JmX;CP*_Tc0bW+P'-bZ:3"nr1#\lm;kc]\cqh>`l'Op;5 +$-&K^;4052\bhuDFQh#'l-=\AcBRWiV!H==fZrRGcLgSO"Rr8'ROYn(L!oSs3OBo, +d)aGV+:+j6@G@6t>Q`&sL2^"a@9toUnPA6Fch.7a"TXiZI0[:G$Wq;ILhEj#GDGrq +"&X.V<7%U2PFI2dK\.HN]]-1`/@*oPP,fUk4RGng&^J?.d1m9!Q5'oJ_M/8PLTQYfK_Qi#\?+#!+c&soL\OV&)@J'0Gna.p\5aJGKdbB7 +.FP%BMkTpOk^"T^fVO3)U``hrW)8/1,8U^;TFocpJ5!>+="/P,#,kW>_giUn("%.b +;mdCi]fOW]4k%qFe&u].[6W4V6.@2Ie1e@eW0%5L\_+;tXbRKkJu%B3(jBeu@ZZD/@eRD:[fd +[mAA$I4d(g.A41E1l@AD1IFrScAGM`"DEAiWOfQ`B<-cYfq=SG/d(KnK[SXO+F=?=C"BtXf!URiSWHtH +OP(qBfekrq"dI\?Q.]`7W$M>g,.fR-[BCcA1*DC/,kb3R2Mu>,S"\?\* +\2/e@Fem_kV:oLXSAH\ZgP])f\6(mt;ZMa))0=4\E`LcP#P^n+2-ZQk0sMk-"f`1? +-&u+C[Fm.?=Zs4JKt#g%[p,Udg3($^`OssU]q"+WX(o,kkZ!bm:7;QPPnL8\&\)(C +1k\FWZm-'bSKjTAoWjiF-u0LI/\YK?c.qF+h!la9M8_4EA0sQFgp,BC-l*JIr3qfd +Urt(f\Pr`00[6p-Z#GiXg!DI,rR,s>gRYk/Xl%tMi8,d'4$/hEYpof@.f?u@.\It!%6#NoIg]n1@(TC`+rJ_+SQ'MU7 +@(#"P^#\,&%,g7V@.b=C[LhC5&`G&LMk[/8rC,&UQA3Abcqq!-C73LN)5+Y6ZF'K` +4r/qN5,)L61$tso/e_\0+lXgmfi&p@8eN:$EZ*BeL0I9UTWX:=W>\XcKJ9LMJDH5V +Sqm2Q'sV!Jg(E*/G[!fni3!UKmLA2G2<.^qj%_Pn@r('^3THttj0b2\D5+RcFZ*?> +bt)Of$!ZEg6*"uU?f6%*gR#@%eRQ<_jE=&SKdbZ?/dE5)POM<(4'i0k/!U/:)N[JF +:eVP7Pa%lJ#$$SP,%=r6UTP2uP#aPPFu\TL=QQD^A[Yb'\`[L`?013Tjn/O)"dn@T +J)ikEhOOdQVIV>^FBC.N2LB,Bh#6@6C$):-k-L`4!Gg-AD'b!HWn:A,-*_"s9f;oH +#Ph+?pkuB_=9D7FTKY\t'&?Y2#r.09ji2Z/Y'ag+IHT11kK\RE%Vt8DJ`nG4[jifP +gOdkrE4#CaU]-$UH9^P7/M"/ZceX"_2N6kNNTfB`[;)FA^jk,.ClP9E"kAL_RpfLr +;eIdQN]kFca@f5=:mY4HL\PS;As"q4B4;/mkN7;-p7LUcT^!ksC,Oo4m\K,KVm.;3.jAj6ThR];QPXp0gs +k+V'(U?e,Vl__;[T"N?lWU&]\lh8*[#/KR@_<`IuB`j]l:b"gk\[OJ-"\md9k82+eo2]5n1PRILDTKI(N!LcEOQnW`uOX$*V&;6n`eCI +rS%OU5qSj8c+uIX'7%j]17b$_E>f;V1>M)QA;!-ao7l5ZNNZW5VrouN0Sj'Y4r<(I+7Q%+NCQ;- +7mclM6?Qp?okOJJIouB1=nS[ros\/u_c8ZL$=WbJFJ+,Q00&MfXc=R7"G7%1<;@to +Y3,=K<[lC<5?7B#C%dm.om^cNUH*JCD>*.1p@iM"#B9DM>\HKX=cSA^pG[3$gh/m, +NYuk:Te_fn81u)8ip2Wh+a]R%B_KJ^G0b[4pON#,JaVuHpc!j#7tgY=L%o;8R73M% +r`%qko97'@=ClRm3q%!>->lpcS(M2'SbHPnhI9,1Z%j'SkCIj_JpCF`q.H&i=V(:O +RJEbLq6ujha.2tPc-P60Qa6:a_6GM%oS"15\IL+;19rZ1"GM7/Ri8`6IJrJ<,mbNK +\1#OGO-b1=R!RAeqWG&C#G(`.Z25oSq_tkY7rG&ZJt3)kj5qAH-9uX#aZ1G($<@7. +OkL-J;_j\IL.,9#r:4HCOF"sNHJcX<2oPRu`FXh3r--3ZLWKC[ao&%*T8Mj\jsF91 +It`/kgB/d-IuWkS!L62R;]YLjB'6/5hJ!(Dq*;iF8&bFnf_q_fIC;'3YMB*.h>QNn +rV,40ROF^/=/PO-1&^ed5Z=I68q`=%k;VRf4bd;G+YPU,S/OY@?*pbq4q(fPrL_jD +p[J1fn]n>rIlI!!8+cg_p&AT(F&8.d"r1S,NU#]PfT!)(C*OXZW=m]7*AZ"3t[npQN4/LNqGJ%7#=1dSfrI;UjE*,4L(Cc/<@W>M_AiC`k +aCKJ91n +ID=]ZG[*E[(QHJrEd:p(B/cC-c97`EpM5'RjCZ6%$m]We@VgOmMGNlCjo1#G^X-CZ +q?/#B5QdYBd6%;%=F[PP0D;EZrc"7MTt5`b89uJ/+&"0D\3Z%#*>bekBN+EmHOfWC=`t?O<*QOA6CQ7\)+fbR;IA_EAdSCaBgg&?C@kP=UmbGSM\LE2-*&m:jgf`6Md!ce32 +L3'0Woq1:V-@_.28KJWhjOf-8Q(oN%?]aIHU/XA>3W=8neK#YjLBA_Ob"t\6A$pf.ej&U3')PQ+o2+;N$nFK6D*D&<.CFXNN@D/ +G-.LQ@p;\i[:@s'h6lYiDWA4o>H[5&mX*7H]l+9"FhdDc%gBf=S1b>hnJk=>`UTI: +*QR^jO!Vp=S?"/l+6NZ_T3l+`r`BV*#bHO/_:.N\TB%+Le:QlZ*Z!V,)?*Tng=EcJ +'kd?bB0)'Xm7=F-mtJK#S)94aq#2q/jnW5$PNVb5LRmY0S@>Wdq]=(kmJELD^$kk@ +&&n):T.eI\r?"fK/flAhrcFUlq6jTOk".ErO"[mD9F%Kk&:-_M&l.A)3]*N[%GdM] +CMW]E\Wd._>=6kk:J(sW81+S6X;?LcAe%+_4U0jB*H+`R&jf\p$/n9$Ki"of6J,QO +iIiq?:sKtH=DVUTOQ[eHHt!WVROC]DHQV7/.M)%l$^u)&J3j:8[)DnB>/OMTO>5QQ +_=6+nT`8ihAe7D`72Onk@>iNj0Le%H).Q'FNDZ6G_g'uVj+ME4;9h3m=R@-h`-ID@ +mQO.nr8`XCn/p\hCle,!0OaIFLbTA`^iSWF)I#oID*?L3nMh+$RW'&dn:-Cj2F#4. +\SM@6JZr#J5=i.sNA7_>9"A4WV1bt:1;6ma=_TJ?N.70lmTrQ>I4s^c_3e.2@SBpa +1$1mGB-Zbj&+SpH#Pda-,Q)NiR1gd`3*B%mpj\*m7%Tj3O%phIIu4f+5K.SS>Ts(r +%WS<\QB;oJF3[uc8T?n+`:om&g3uhcq``kYb+M]DJl#V[60L`DTi:SAanh9kgtOMmNpU#Pe6>KP46qTh@W7 +`;ZZ6!hN>ZHVWhu6)YM.T8IA.;(C.,>^Br+Dn# +I2(;SrtD(DF+Yk:jFQ`L4&5DU)D>4_O-cTfE5AI&5Mh4,3R_ +4!S$M%$<>8+tQ5J#K_-:L#Fu/e$?,$r*G16r\DFUru2$l>6SFJ/4,_e'nJVEMK#"4 +m$3[;f1,%240\7]m&oKiOi6Pnm5PFH1+2d]ha0.&*9ZOQJ>J)K"uko +E9u+%i-td&rr$3Ip)hVBM4=1PP`P?F)i+4.&q^$5#HN_+7m6< +RI`m^buq5.B&)43o7h7417X,\=e%QP"fWGmp.ia#$![QFjJ>MDNR?,n$CX=S&jXF9 +"7aST6*T#O5qli(!7EJd\:bUu9M+$ORM0YKA'?rs;0gAf?#?_:`jn!O[[>3gom@D[N)@Jp=V(%Z?!RVCXFa>j-WSm4`"W89A*cC11"I?G +B\!Un877.el\"\_Per$-L.V6?1#?"`qeLl17;WG +o6dtjL(_W;Ju8@P]E&G'g#Mil!9)u[!>+6"i:(H8@'>ar=M>//lro*?'neuWIhR'* +;!u%l]=C,lj]n^LEfOF#pYR^f>gJj[?>[s_a#W%@Jid>*mnaRi49aRb&W)6G/G#o1W6ejg*Z1K+L%nkXQ!It,*0+4'b4?fRK%8,<0ln,@gor;Z6e!&+P'U#6oI +W1(Q$5J`3i+oW7ml5X3g#B.0WU$*!e5h^`8qVWhE@.4:Bg('cVi]qnh0?3pn=qFHY +&aK?/O7*"/>5llS"u'HiE*eiL#6s[;#;C9*E-V\mI0]7l8;OQqiVjlacm^o1c5,+SZ#SiXXm>!W[QMO&Ye&YRjU\#-_YI:h^>Wbm^i(%#3F@0\Ho> +h$rl4%PZuSE9Rk,k^j(c$a<21:p'r(X91/N&&9=Q^bGrL=SqTR$DER'XI]t3Usl!0 +'2&J4OO"A5.h_@#'+lf00fVNSm1]"U'JW#jECgkL9bcsD5c)'bTa(FFgCI]K#Ht]B +O=LCjp]?L7!g.76@E8oYFOEFC);rRDiJ7l7imRo4($bZ0EL@J;SJ/9#)6okRED[XZ +XW$`7)_n`>EOd$ep@1\V\R@>mi=,X7h#rh0%\Qqq^bG?k2%T19"9I'`?s_hXH5b_g +$3?(n^t]]UWY(Ai+>KW6EMjpW$QtF!)q#HEEZ$%+*?jts+u1ET69;t,/F;4M_*[4@ +S>NS(-o);]EXaG&Kdb$W,'&qtEg\A^SLO-'.PdeZ,!,sI;Zu'8$c(d>5eJ%$e-TR+ +%KLPpcE%*90_<(2*h`'+Z90)afEb6h$\=$?T]?o^Z4G3q$:-0^9*>q!OY?9d0J\J= +;ZSRa.k5TP0f'P!Eu?^=*AR,V,HaT9O4<3`(`/jP&!:,VTW\CsFrl2)"7@!,dSBCA +-6Btnqgdl6J]HlE(4$/q<]5f=L6]GBG,&IX[5:.1u.$TIY`3&;"''8JP8+Yj^n +3AZp\F.#%pSN6-G-NR*OiBGCM.)GG2%RI6,+J.:d!9!tVO9P10T;63RD:%R=Rj +^l^.2C_!.Zp!\*>CRhs9Rj\r.5;S-\F,`DjofpcL3YV`_F9t4>%7'Ot5qC#(%EBG_ +2A0t()'Hd)iN`n8Rk,\'*ai=cZTnW?iqbt!%_tY!+D)Sng'BG&$3?A"+O)\Bq%<2m +$.Ac9oD(WCD+:mP5SS>ZPSH]qI7Np\82Q#kFGPs/E@:.o-W>31i;XP.U(!^%)h?KG +%3>`%4@PZ./MJF]h_P>ugQ+<]+DXJu7Ug4[J[Y&JYB[ +@+6)[apTB*%=j9V?sP#X2_>Y<;NS$aJ]J;YFPB'T)3\_N5e7Gdc4H[[$@s??;sREu +9iX'c>W'3"Bl-mnc!9qh>rC/B")iXh<"$*%oRQ8N.F +NG,b_BS@mG[[Cj5ih3PK5`Y/r"\[0(!qp7Q0kUkpG0,9f +BCsRa0AU>CO)*(/,Ze`(m;DXfD`79,G513176\"o?W/aI5g]mGVYg!C(9uZl +'%@$563Pk\B6JW2:=Km+5AleGF#N3&=#"c*UMmV-F>lX1G=cnc9Y&Hqr3+q5<4afnP\=$(W83Ht3\GLaTQpPF.(NHk2[GrLtSV*QL#G6I?T +%MrF\^k#lp)f.17qQUJ;<)OTA`!iq`_97g!e#,ZZK6S2dI5fQ%Et*D=h0o%VIQ-A; +GNa(D8//3q2g8JP9U,GI/-ZYF">WLL:c37!c5bd%#,/U;J;l@9O:1!u"SM)/=3lK. +.>%gu3O#Zfe$K;B-h5r!uX:@+#kl[LVu62fE(;1Ad(+jcfL' +PW7ZU3;8ZJ9pGHNPrVisAi57iGuO@@:i:6snhWn/Q)h?I% +Y/N<7k=k3*"aNP$)+U+*R@3@WQ$K3pH)[7CXd\qp-"!,ZrL`oeTK37LF-^aH`oKl\ +"SI%=2Aui\&-e0#"S`'?1#l\!23tT%2IOJ`5kgI"PM96(jZDV)hVQ +HZn;ggE9eWFJ2%?mE=!pE63Oa-E.Mp*(seUR +9r[tZWZ"O1/R,(*XfD6&X#dYhF/";4[L,s9$GdHR+dNNZb=+3j#M0S!!'LDs:Js!h +7$LUbeb>QD2^_>?Wd=?<>5>1dQ`HSVYWE#mHO6pXjF\?\\W/tFTm89^Z5M3kCQp\= +ZHFNa:K_e?9OXS&TXPog)]um5p&Qkj3rQ7npU%P0[,Q)0gKCqr?+'Q<[OX1eiCN$m +qW(H&8RSb6)^#PG9F)Pf9@LpZ2@DXV*s)Ff;`>"iFg;VSfsNn9\iZUsHW2?(A\.cD +]0!F4HaoF,s!HCJ%Y^rP/72^cVaIWW*-EF"Uk`Z2hZZ'=eKH\cpj4%rp;6^`P\CT$cJ9]tHrsu0roBJ+LGRs*YKL]]Jd@Vm"uO#*EH:qu]u(gH +$m=#+G:TjZ8]4k,aZP\.gfqn5S]Uf'aulJ#$Pub7F"8BnMA@*9DR'FCF+AIFiO,#< +Z1&)WQTm4+upZ4$TQRnEM@M:C&37?l&L16P6.ar/i>onr/Bcj5*T?u@ +i]\Zb$pkZ!9eT^:?ZJ$1@(0R;Kr>qB,eAiL;EPq,g]s'B:ib\.:et:=+gbL6iLUkJ +IMM"CTAk<>k<=%OIX-a/bS7THZk48;PcEGf,uU=sg,?j=Fr-jZSdSk+P:Mi;rb^eh +Aa7"6Jt@>TI_"dY^$GCfkONaVgHfTi1=>#q$2,#Y1Wt;.\XXdNTsZ[[5fo2)n[&`g +I(g-VrqYj9rTbldllQE#IgPVZ%9:['T^8ef>\@gih*$mH#;A=F2A7,g[iRS]S02rdpPBOOJ=\[t;ccT>O,/38:;[(SnBn0S7/u<@#\6ZU_5G*n,H8Whj+#3U%SGZqELhQJ#OBIo-[`Y+8S!!R)A],N#_oX +#%?X(i'CbbND]/RAYW76UY.WM+.<,CQi@#T6/SaCJ,0,Zr#cOF'FkEQ +K0eH-QrG[U%>R=1&K$a-.2@b0it7[.DE/_u8)t:#'TPa2P=ajKR8g=l/XK,m',a]8 +R\lNJVR(Qtk'8qY:?V6&"V-5TT[DtfMDZ`K7T:%c.^FA?>Z".qb)#0$>mS.r*nb-= +.r<^-Fe$G>1VeS2HORY"Tbl,G..THUh'Xq8I+go%)9U0U!NNe[>8<8mdY_Y+9#kF^ +'YK_r-]uP_o%BP9D_[d,B65$i(4/WHdcg>WSOTeYXjq3pRf/PmBs??.pA8.8mrc>! +n+W=]pBQPmj)?>MSl[S5c0'0E*?LPCWR^^sXS],:a+'MI_qd ++[NCR(F)JV7#<3\nm%A*8b-tu-H^@^W@:HF`31abdc@_ebB!1p"AEk^b;2i`7+4"f +F(F#a:%O%u3DOXklT7l5`:H,fF6*3_:\4em5u;YL$U[b_6c1TTEr0bsP"#_e3uT=l +Zu1kT1i+,%j02@+O!*u`4bF,m,e8N6i(e_`<@,5 +f@C*E?eABgLLXGp7>YSXp0Eko=n[!5B%hE]WC5J6`NsDcG3->S>PA<=EEm]6bB$q_ +7FQBbG@fNQ?2''5H!Y]iR;#j6`GeNe_Pn5VMdt.t0T?J8WkJa3aCKOUi@RG*e>KPC +%TOl9iYn:2:n(Q'URKF\E98Mb/ +on\6UnGEO@[66\`ijc[.Z!ZP=A1A31VXp;GHEQqTn!j%R^i4Z#$c-f;-P%Ed>\>"r +EVtS:a`;d,/'Du2a"tt]I-3T;F8Z>2G]?t^)grM(\IG^%ApDBM)q;^V3X*$L2LLR9 +[7Yk.TUF_""P$d]1l8);`%g00b-4C9UqX(%'YPk+l$>Ok9Bl<0YHR>?53K3>HZl;U +nU,g6bO^,]8(7-ZIqRO1IK,)_q0mgklY_'a"$maA'SppK!Hm#tB$(Na +=?7UJ5q:(2HBs&"*L;_ +Z&Xq,%$^N.D'2!tJN%HMRlVi!.V]?M^qprmcr^im<[:$LP8kg3DiTt"3la5I*b3-8 +9(33O-9'>9A+kLjqPOsM.0!! +H''jo<6L\n2J5_ZTepAGe!cJ$CH=J6)rbZ3&oO@0$imdX``Q[YUKB>V+i51M!:(,F +\[OJY**g:S&HbJ#&<9$4%Yh3#$=b&/L:<8"@/uB=U1(,k\VDkNbmU4E2MBHR)+5lq +&TEq?Mc"dT7VLNRLBb_kgN]r:Yka'd9dQ\@!X?d7A]JDnl@Vb@FN=8cUJZVB4*>3 +!ONucOKCa"@iQ#e`(!/b2M;5K#aY.lb>kSrL[*E`)qA5jNqME>BoD$At+pQk>UCWUk\IB^DO[eF,*iI#R/o=gRB +qd4^>j=aHg'X]t"R%Z;pWIT)f6%p;3qk=T+BQXJT0'#Udc9-`p,(`ah+%9*8nu+*W +]f:3-@JfeT0_Q[.R#X/`S5G/`<\).V[hiNO@>o2l1WG)D'&,5f>QUj`(L^i=QlsjA +_N*h$[I7^Fe:3G*U[o[>C@B=U; +ZdtSs>AJ7hWLQEU.MSjeX&16SSNqnOJY6iaTU%YAQn=oXOpB;`PR$4op]k;61kc7U +)+FU1%gF"Ab:RkHF]RPQ4-sr)D91VB`p;HM[s)`giOjB#oA5tfBC9u<j#$t4c4 +"4q&k$W]kgO?P;C#1%8iVT0!VHngoEp8p`ZPSBO4FRae,`coH?j*YX&2pLa2Go%^d +SqPl^`-PFVn5pU6R@X6+oko\1ZPf$E&gTkRG[J +Z)'?K6ec&4DdX'ke,.aBn!uh\GIk36]GH4iSeo:hIhC[f=,WlFp(ki&9*bZ]Fl.b% +9SA_S$m9F_7IbSmpE"t6pk7GmhNu"RDZT-O7um,2\(>s+@I/E/ZhC!BgGH*8$RdF4 +$K<*-q,oHc1-Wr7c*?%ci(q]PXAp*gF?()@$UF'6\b0:$l[<-FofgespA]@*IK..Y +Ii%/CT9o-jJ%#'>`d=uFCcm(Fee0*u2=5;?L^0S3!o#+V*##8dK0Ugrpb<__aZiH$ +5.h!3bQL19"Y/R(^jHD5.!IqH$:([#5eILjbRHhm%RB@k5l;0Z$kYcF&j\&^5s,iI +9GKiu(-uaQ6$sM8N#=pO)F:GD6+e1'bT0")*^T-762Vil$m@qW,!mh*69HM[9I3#1 +-:2Mr6@:1JN%%)`.RL3e6G+j9bUl0:/jenX6MrN)$o(*h1.#YNJiHTE4>arD2+)1< +6[Uc/N&O+g3('2t6``C;Uch)X4i>K-6i9/:$pMTL5XZk`6nCS,!)WeW:PB?*"RoHD +E(1#h.tad3K)dP]3$X2D3.Z^QVh,/akWOHqKn0R^!H;rZ=7GM7hlsN:&@7DeU`]R^"6t8\[Ak$$<7T=%jChUh9Bh#1= +7_EHTb\K\tCe!2u7dP(`jDdZeEPrPH_^l)69Q^mDF2r*@7soPON-Rp`H:P&`8%a4> +b^E":IRiaS8,Rm.%"UqhJk.GF83DPr9SH#BL.H--7jNm\%#DqTMFa7(Kg6r;TNQl& +6&"eZ"-@'qpb.B31P/MP!O38g1?AN"\U^'W!.qlabYj3e3.Z$aK.nU++>&46NJ&-M +Jp9]f==0^Q,m:_UJk/T>(aK7NMb')18?A`3CoBsrWCj7jb.O`H`2cMSY"IKQ9%:(; +m'+Y1YtHXR90BJsKSMl*!)%-NbC$f1S@-P1\kB-:9>%o1be6[)^.[h-9DlS!%)GUW +_FuMu9K^6e9Z9\1IS3)892*CMN*o7;9hGsf"c+Q00O4aa49co\"$gLO&1[t;1kHuJ +!I7Ikg/1FV]`>in"1!9+E#T"c1BM)f!si99a>X:4.Keb(KMYYM@3C.u9LCd99Q]>h +K]L@Aj\BXS:420KN9%s-m,Sd.]cOEMT`XDN:oMJ"i+sZ +d!Z*6>kLpa$;di4:q[96bmdM')c2,H,&-0H^dan_Z`]*)Z@d_+TXKB^j=C[hYd/p +,.gZ5!?/]\Mh;-$#1FM?&`Ni")djtT-I[rVepUHIND`fJ#1\-;B4g=$_9nc\TL0/;J.i!V70IDJc$FT@sZe;IYn27^e0!Ld?.DmIBgOZk2 +Z3!sR!t#(TPpogpQ<5H!fI`Gbm>'AcRTZb^=hU>.c(,r1R&2>[eZ_:q/UJFf<2Ca: +Pq"DKUP1hBb.F^r;O(k@Xg9%Fc7@i/gY$14r>5b[0%C$^$X.IJ3,*Rfe +:b[M^JuP]]JW&S0WX#@DhZ5J`!Lr$$BJ$j#.g/M%2%?Tk%BS>"ZJ6a?>91Xe9uU@C +`a!B$>^5tt.UKI'%ChP&^&*8]THt<#^m-?HTP:kj4hS8k)P@K&gblq(:!$[He/uZN +?%(@2NS.U.g0Li8#W:0]Qr5qu]tb;S]8O-Bq&#jk/_dt9!uN\a)CZr&W36BUhL3p\ +L"tOQQ9ELL'a-gSroG&.DdDKdj#1K"tlK!&^ie +mG0qhhnAL9c08Tg@p\R&?iC%5%KTrY!^1u1-3F4+=\#uSTt1OL!QDY,&3bW-;A#`[ +da0!s\gk=mM-rLX?fhmV`B%BZ&n*C+@6PB6:),R^&>;2-*^cX2@c@EVZf$oN-\H(b +>6TR`1F#.?,cr%AilToQV,s-lVN8h1&m?-"=SLj1YWTY!$:O5%F"F +A,\_:r]2.;rMV6g.8X2,4XM)&.;D+\1/=@W\?$+;@c]94e?gYA0+P. +%Qn;6UuW"aANj():/tk3<^"H#<>sS\YXf>n/f6Y2!;8pZ&pQ0;0a"?hda/u]M@MB, +:9iP*;;P,\*bAqYAg>l-k'guUNbN*sC1aG.Ann;B_<*%hj>=LJis<",8K(R7JY6:' +d5,9a@nWr^349bX;O0?)IV%].ChKfak-fYMc@'?^IV8(u%fUf'D((!]XHgra+<(Bd +4to4T^o+HH)fmDY*afg;7*ucFkU(iDc?a0\H)PV1kl-ZX%ZtHHP%c=uB[Wo7.S8`c +Z8dtb["(@@J[[TK$otBi<_+`o.u>R\ +[d/[kCp(u[I_9LRc>;ppD#VdZDS72j#nW!9&?Qon;T0"d,ci">Am]X^`K-l!c& +/u9]&!?p,b5tiCRaD?uCD;OjPLBVWl;/^X`E.8.4NsTcp'Q@7J,%4dbOA;\2_X;K6 +X2CIlVQ_*!\U^tb+?D!C>AmaNo5S[VEIS0!pBko4)KDr"EPEJB%i@)8-IZQYK*X7J +E$lTV/YsXEVhXJ@\Zrb1G!4bNeljJ].qfDBW;KXWkF[&iJ +8Tf.h%hP0YEVM=D5=fTHr$RY),7B't+E)m?+ms=[ZeGI3Xf/7K[WQ4ZG!BIk%omd[ +Ap/**G(40=B4S1i-1`"9F"LYG88b6O$3?tV8U=3@W>*\_P/%^s"/VYIo%YL_"Em:3 +pO@C2M3mpsH?ZQ>GJANLa[LE+m=d#:Un'FiWT7EB23Gs,TMFgB;&HTC7Y(P^"-ikf +2+E1e.K_bg)V[Ed:O[QGH$JIfGLqq%&!;,ZP'JI8G+4GeQ4(O`:OB"[HXFi0J%9s!b'^D9I(lA'H]5%X +J[QN[K8rVSYJ]Y`Hiq_'TRL/YH*`8;2hC6DSk#BS_BuSOT_skqID=MG^W_,`hL4kM +IJuJ0a/>$=6QlaGP__BmDi'Sf*f"u$JN\71i!Q-+8N7!i!Y;NpiT)oe8+>-hIfJ3u +kqN)Anp`=aIm9duB#jjL,][UUtY +9kKT7SE=ZLS5/7rg'$u#5G?G;P^526MbBjE.9,#T5,D#S<,/g%[:Z[J;a9TuqZV_n +A$T6RepBi_eSDTtD:\T<`oV9Q?#J8@`THi?^0bg1r!!B0K>M&9fR-.9'oU(AES12D +7jXAAATHIO`b./uc=_4Or*Vrr31<^["WAde3\GLakWobb'aDK.Hl32Ud#9C[_U+N% +$H"R12%INcr&0eLE?%O_`6g\E'ZEpS=Vf!(Hsml3;4M>=`mMG=*61q3Gok#Rr.-!3 +;B1N;aO325,frqg:CtFlF?q:s;N.S'.A_!X9:(7Ora^ri6)l_uVXW4^+@2L2'-U%U[%B9;Tp*@$q^q?V#Oo)6>!=^WZkKijpAU4k/#.FBoQ'h6T8I2>H%eh)2@,&INaO, +=Ipt!in1t"N8n$s3KD/SmQlA63#4qQ'r$O??&Ks/Ot_k"\C)cF_h`;Q"7K>4S7`?\ +-$.lq`Rd>iGohg*jI/8jUhJIWRAK0%9:nl +m+X_O[-^SrV7,XcG,(tfjQU>-ObN;35%UKa@@:__M!bls_pCC;!j=!rH-WDGesoXu>@eFahf(U`qlIpq"'?(Yibp>*K' +h"P+3H/A;Os+0,'94(KSoj0R["r.2Z6^*];OJk]]6k3FfjsM;0*F.d;oF8J6Hc->4 +5mc=-Kg*:oD2gk]pk=_sYcL7gAIjq"q#A*mr;PU*nbrL6o]J=r"T[I+"b=r@"@/=h +!oRSuJ^?Rd5o:mNi1Zrrn+$lQGVhno,G&H4Ub'2E_VZ5ejUM:Pn[#"C\.9u!9ji,7 +JsL!X`gC$OX^d4Ml6B`S?4A?:.Lm$F&'p%_:4S1@!HZfoPjIML_IS`WS +74?u>P*FBa<%3Tg.%YG-&`W"*#U,!?K8@e]@=`0HkY)HkOEUh)brC8&io%W1l4-(t +DMGBU1]nk*3l/)6#I/([6rM/B@6dP[!C\HuK\`,]IT4T!]f9XJ*gDk[FAA7S3p1&@ +S^Y;t:Dr7VkG7d%Z\j-*=n58*.Kb-@>Y[Eg?5\X9o#B=TpN&/jd($).A=V%FE`>@>ql&E5"_rkMVT"^oUj +Eio$V_\'.F%YXdM'/BhaMt".rL1"I!@q7G"aOC`a\1hk%N]4J@5g>(/Fp-)E(lgJZ +28_[UEhTM1#Y!W.`8%Du2:C73MfEY%e\-dI'&["6KlHH+`OOM@jBS1>EpdGM[l6M- +6$GIMXCVGLF:s38"7]?B.uXZJPr0o+g]]>NEI34NcAc5Y'S[0)%Ysb>OWdU9U#j\9 +f)#:"$h8]7df$_crr?FH"b?(h"i/b4"CR`7K$7O!^GnF5$;-:U.T4J%l`OFqn['3$ +@b:oq\2j\Rn/d,&E<:*eS6@)S)hI>BXH$]QM!(ZC<(QoE[fT1Bio"(W1:\9*/H_kfjjD +Ff)Lrb%!hTSTV+.k.TC#s'TX`Ks9g%[FSP'DEe.71(M#;_lmZ1Y!>+ZJArp@$[DGu +f,bKXQt?^D?"OA"N$dn'2;&o*@r@jb](\6$fUKX#D]RrPpSRW?gY[BsQ4:F7DZ"3! +^9\5U]Gn$#>^\mf?*8?fM4?B^Tg61H":_uPlQo49\\`l8mFfLgmi1[q"]/s06eYrF*;;L%*q@`-@mhir!GKn]d]Aq&]fn/Z(8h +c;Z[pT%D<`>&V@73'%-=K_Z/bXVX>#S8gg8VAPSFT:iZkJR2S$h,\H +J,'$kjo"#.oR +(k-2+F2\Xfcl2lp*rYRP?uO^"O=LCZ0*;bA"&LoYMjjao,m"3-TF>:N%9VOW+n[*te`i +&CC^q@Q`'M^'_[fIE?NRk7Cl/pcQn#%_tm`5\/g3RLETA#E14uNquTb.2EL'(,7;2 +E?c7HD\j",(K#AmOa@n^58KAo(d_"+TV/RS#*o8l%cGJK@+GW0c[&?u#dD9X-M0-:f_*pG$n +Oujo:59pk/,Z7,XNSbrn2^ISKl&`^i9JR``N_\MAe#0\X.N/i5)^`?@%KKc2&Aeqe +Pb_(O,n`'\nr"oLV^/R3.8lK]P+*oKT.13:.+3l#JukG8-P*:0d],88W6l)`fFD:l +-B?kDaQE>:GR'!L$HK1pc'/tDV@mo!5Vf5iP)h)ulm]6802hNtP5?o\s"G)fJMQOD +o*Ql2(;>dJl&^@nJHmREQj\Zj#Rrhq%)uomBY4mY#)SKKjS7slbb.ME0U#!['2($r +9e]LE2,dR6P?Ton?T&(71m:]nJm/uR3XN-3'MjT"EdZ*pm& +kC@n%6`^`ng>$a^3`Aa6Do"=fY<*E(4&`UMPIiooGri:Kn&\Vc1S!VroM"R7R"O2< +K@lQDio0sn#SFWTcqNm/%-`[a-r\)CZ`-1 +*Y_O@o'DWW(q,?43RS&i/q2NlfOolm!f$aYZopU:S?0dr7[06(oU(7FAP*Z38lV]\ +PcIF&D+W6_f(.Z1DTr=5kkUI!e)q-E$dRKZ,)llP`W2qLm9^itRnaZ5:/Xk[o]o9% +mnXYh:K7&7PdO8,m+c6HWG_:peA17RiBn(l4nLF5kY)42^'Sj'kqa7N[,Xs402fl@ +:R*k;Prhpp5?&@aY157&o]/8VMP(IK&G6A=i2koacTQut`6R@SaP)%L1(!B3Q.8H- +PquC;pJb.F=B1,YQ&AbpNes$J=7Y]`oXkRig=r:(%W2sk+?]oBO:S!0X%U5JT\]o- +"q*,1&#_]eop8q6Q!G!R=V]OoQ.oTphd.&WCDG<'nV4K0"C7ep%SSW]TUN8^5((H: +KrF:;8gjj/^(#UGIA".]1E-TC/RF_f=4SXee`C8k04PbR@obNuKUH;85-B`CN%?=Z +KXd]#-@H2W%6u&'0\QV$-j=bm[=Fq.5hpE]6!h!@B*B_o[X2ZQlCV&I=V)"qtDi[.)O,7 +U_7Wr+4,$9bdIceMItA[37)&\A^28/jZ\_[+3FaOGJ/^_-&)UoJbWl4QtqH/Dheef +JiIqVLRcekd"Z,WL$!Z,!$5beLs7R#[HV'1F7]dT7=^bNL,`NiG]SbpYDX7(McdF( +(o,O').;R/;rs +rhc'tNt@J'D-h9R0X^O=%Vr^h`c2HC#a_2TI2LfMDJTj*?!OoDP?@2f\H.oI5Em$Q +PZ^J4q)=CVBaCiXb3cbJ/gG,/^--_"4bds>/3T/WOQ/-<#l.8\fm9TB8XLBJQs#33 +R>Q.?I@$?.M=CACekXaU>ngmfNDnVOLtb;MD@6INZ4&+7\W`N9OQ2agS6hL7IdRIfO&OO32YhG%B?9eP%\JU.\a/io1bSU&&EDnhh]&"smT +Tir8+KRKM]fe25UIVk@<^pA^PJqbSeKg6]+khhPAm>59n_Km<"RL;^`)l4HOV-6rs +RT_S[9;2ojF4lqH/$]SV\MKBe9fG[L%6e!(=[U4*WSkr)P2&l,)5\=9Us&_5g7,(q +T;ig)W^?N\>%7Tl9"'iYGgOD>i6NuGe-G2I;*ZY(/rJ+T[LIbH/PBFLB0!!'hl11@ +WdLgOD^-l2Q_-@emS/];oA\e2p,C;aR8jN]DmL7FHO^R5S&ZWKf +TE3*NXR"@C.po6QihT\HI[h"hS0Z5S+3#:1`a!/rP6JfcDKSm&l%_+,i;m^:l<6Hi +4!9Xq!++AL_a?iL8=IjNn50>1!,g;O`Op30`UCgZYKIolb?VLmr2Il[5rV,L)i5IYN7pA^8MT&9uX+m44AD"W`m; +TX;T^]F=oX%QXFtJSGO#(/TQ@em2.VI:(ab^YBjIgeERYIEH9ug0O=*]mL+^?>j13=;*I-"M/WHd+J=l]J;F#Z]R4=9+5m,! +hIkubBT=@eXPpSri0"t.[#a.@&#!A;i?T.gSeESFi]O.'Ou_PDTB[Jml<^?kIQ-M3 +2[HYail0O1"SFqahV*b!L&HN3+Ds8kB?7Z6Ot4g_*c:<$BZ.tukb6?4i+hE$jidBru^a; +j70m:pg8gOT8JJTIJF*.=Ui66@,t+C\#`!ZLo,1as/Y:SXn?ECj+lg`8t'%.UI3A)L$&pAT*W9j=05M=Q&>6P^Km8B +m$:j5T$_8[>4%X1FhZgS\QnQh>IE>XH+dPQQeV35!J/'pndduoRE]@8RG@Lc6(u\>oU9&DT2DT02+.fa"U2N'[&=,m_dCI +(P9a-B+/8F^c%!=;!&UdK?-7V^ecT\5X:P@%Xa=fZ.M)@W5+4&N2#!Y/e4_FW(5(] +[*q[m<6[?q;mb(<:/gg"5:k@F5822MUkcs$jq9qc3'=2jo^?an;[IUEu_Y@:nL2@kIL3*$iM@CUJ&Lgi?0 +-]2BC[P*SL37^$KA%;0!JE/[27tG3](/9s&q,3MYM?Mmm/rjPre0Q.ZWP-60K^_pca:*mFDoaiMiJ*$]qUuQ/rpMUT.ld[\p1k[2)!0CV'5SY\ZB:a0KNn +2UAaI4''tAD7auK\8FBlH*(tqcL7iQ41=gpDeW'N-kgNTgi*_>";D:-J?F\7BA+,P +F$OC%r!4BSkU/]Ka,o^$^4Lo^/QVfQKEAMKa6W[r:&G +4kFo7GJ3a#i-7F%LZ3Qm2im$F5$+*5H+nKpk^#FZVs8TB\$,.F51d:3HbT6hn9dG: +a7=Vm2p_,E5?HJ1ID:!`pjPGokPBYB\*s6E5M,Z/J%tUTJ.Mnc5WB&N?o.6c+WO=o +QkogsA.O7<7L$[g+U'!Q'n['(%7+Yf#%6d:K@#>a69%19@2(&AOId1RQrsb>F=W(7 +[MV@kAIW(,2hmFR)ag!<%cR%@L_08&_spJ7KWr<$@B=AOY^f/-d.n2[=iNGa,30rQ +"EJBZ4omJS"kg+*)M+,#Miaq[U(h6qnY.2H\CDO.9Q,oQ_Dat%koA`jEfUg`4ND^> ++(OAHJFFT4a>jPMA2K'4EX"s'\JZW&FH;Rt7S-03.4&N3Q]i%o9hDlU-Y2kAPS/^J +8i]HlAMg>(B00'2_NLp7pO#/Rkh_@&@+ +O`ehJ32mYPX$V^qn-UcJ1-QA2S9Yql-W\]]o%T125iS5FS37A:e8o@AgD,"cQ1oh?lXOVX)=)-f< +V(YSkeiLoUCGfaA:9E&I[o6LH2e]N;D<=tB8qYSIGZ=>s_s +/'WjRegA(4]+BdaTYCkCk\:<0XuXCM2BBW`'TZYm#7'aHRJ)AJ<'#C4#@MTV_h9q$ +!LO^V(q9pi*lV79Bl*1EN4/H0Qrm",Df,0^\/,:fgRF%;/iC5N(Dc)eH^/YiA^@o2 +7cu>WKlq:@f=Mi2m3MS,GA`,k\lX@N*J%*%K`JXjiY5o-!7^1e+E%KP`&e#n5A7&c +Tc[-"G)&=bSH9AN%&%6'#=TsaY6G6EGTuY8]G5VZFq;G,7gV*_'npU%(VuJK$XoPc +L@FmT`#*[]@6@,8Ui9A!M)3=0EIA/S2T*QZDYob'AamAh:3So/:1) +)3ZpiI+F[*rbp("a#Rcnc^T!aCsNus4I"mK.*l&`4lZ)c#Ls_.a!bj2,NLugH'ZhX +N6T*#!Qfld(uh(<,9+J'+q12+PD,)s&aZl!kBus%FXF$/g!`r9]ihCYEa$e8a&?b* +;69H![FZ>G?#+gTX7c2$fGb'(0R\#G2E&P-%9QL[9`?UFW/MT;J2G3KN',"f,!W4Y +LB.7*\TDpi!pntY%_GOpK/cb,!S!3f+^,Q_c/fWY-Y)JUjh4]\_quErI;cgo=a.=G +i#D]IDb^VSGV90WfjB3t^)=h5G7R05,DgAg.Df"plCh +Y*%/TB0tl(8#^VpW+.l,=6Z8gV\ED5H3>jj%.rm3NZd*fLHoh`FYjfi+A&tl!;-j& +GEmA+oEQi7*ck_GRfZeh$O8A)#3jJWmU2nH!pFW%C0.N[Njn$GE\-Li8'-$@.*)6u +Qgt&b`qdA,kBtUJ4?cioH9Y!cG]02FSqGO#XtdN,fNAaf(bZ*PQl&15d0tS>CPHf% +:;T5+#M)uqNf`<1^*gqq\f;\!nCS:li(=o]Qn!.W]sL-j"1A7JfA4<)ur\:J11VopB4T( +!l.)*palTh@tOJ5RU@`Pa>AK^D1bq:5dUqb\SQkbAqLXK]J);c!'US'oWTbQKW@s1 +S,U1`(;JU65K"DTPSq<2(dV[K_7Uc(F<*Zc*PqGPh$M&lI +m=`9:KSq3:925R?%g*Lr6F6t">Qoc-HA"rmKUKUYgPnO!1;Z^@R4KQ"<&MR(2N5R1 +60pSKKK6q<3^],mMHi)-e31_15*bIr6j,V>\M1P@2E,;C[.m/tn3`CY56^O."6;tj +N(?3!5`]kQ6Nf+I810)fR`#n*`#MSg,X4^C;T1Ik\+EJ8<)CP=;+5;&`FN)<$rfZk +>/djQOp"iTPZUB$W?X:Uuuk"Y=!!jCuTdXi84o +`l)],*,.mDDFX857f7/E!ImSgElU"Xa$Ws!'QqG)G/kSG7soM2Zuj?aHH3@!8!JDA +N.&a"I`Krf2nXLY'S4=NJrBPVa@(JJ9RoZEKt8O^8;)f?PPiL$MTBUl89Be]e;LCj +M9,=MaTQq2b`577P/uFB8L%N_%$eqFQD?'r8VE;LPa':cR(nTH8]7.@e07JkT#mLp +8Z\Q,'/W;9U<5<2%H>TZVARQ=Qd`Pc;g#WChi@9#RXMbcAn8KZ^C"b65&8 +%'E5KXiiQ(b:L"<,dC!Q[``_Q92)k=4Ln*a]#s*CbJ_':d47kc^<<%]bI#&Xo;Bde +_TXjSXpi.j<5D7=^s$o>M2]AHPf_.C)bbq.b\YKsI*B[=b09M(blQMAeBuM$c-8)n +8Yj_X<7T6$fM+ccbq.LA4P7Jlf$1SVc,#H8PhjT[g!00G6%%J5']I=[aA)luc0XLc +r8bt!im)Z/c@eF-AED+4j\E2I]gV)0eEtQ>\5'^%cG]4u"S'V;ma!`]cTs#*r:SAM +p.lt-SLjEZPkiT=pJ80k:ON)d]Qqi!rm16:bd@:Dh#Yk;!mf>%cijR!<4u*S"42/p +d"MQ82$M@'$IH$2d#A:WPmu*j%_Q?\d01*'eI9hO%T+eg;)6tT'c#,-(;kP7d7"o" +4W2XuHr5#*dDUB/V&<.4*ms'kZR$U>'d;!J^8r6IY#eHJdWAPCW#:/rlA0Z?mh-ULteWjB>eQA9j +>?1?'d2cOo'jT<1?-gc'<^gQ%'k:9U@b,[23\=oDQ"e;[B%DZOlbDQ>(" +f"Gp%'l_Z&Dc\f;`MINTR$He5BI=9X2[ +c$ib@Jt!d3=7q7!%>?a+K338O^EnP8?&@4!J(TI5fYNJJXbKs>MHK6gfZfN2';/I` +O'+?'ehrTCSWnMg@Ym.jg!P`+kmI->=Gc# +9W6\t[bGi;>Qqp=*PG\E_V?Ed>SY34:u'hh +^Kbp!>^3JX?-1lr[+pYagkEu-B]n0QcJ7p9kO?WH`*?2;a1 +pYWC:hj+,sNW$U$qqq)HOmW*SV>aj9KO=udh#7B5-3`QQY!s;f +eXtg/(ZG'/i;ObV(*SXf+CW87@Js0b-7.=T,[tpAidoQfAgu`7X(%):i_D&B[OU:u +Jmu_Qik@+5r\!4X1=A'8@g4Mp6o8C32V.RYj+]GO<[hO%3odHQj,Q.[c2hFh51TWq +j-Dr?edLO36K>47A4AiF:o`S77b&8Bj;pkQJZ.XQ9&h6ijBbMjORQeh:=NTEAHkii +&6!-5;W9$"jPEkt71&'62`4ZA]@j2/mDoK-frWVjp#1TIU;.` +#Nce-Ae&?T2Ibf[)s0=pk([N+G%Tm5qdu.*B#\MbY%m+\2s/D$k14LS\SAsm/^;qq?CM(9G2SX&S?u-%blkV2>0#bk#`,#q(gQ'9iPuVXD +b3Vfim%2G@^<:>IbNNigD$^PgTMfAV_.JJ3c`P"Y/`/8Y;+g& +0QT(4Eu-\(m2L+22Qd!:F!iil2`GfRK6)f0o9/B[Y2FG+IP2b.tco(7u9Ud%HCf1*_$9Q]o)o\W:5jX,*L;OrS>og_l> +a&@+k4`sOtFbGJADcsp8;WueTUZ$DV\*)p6TK:pMn[6E-F6Xh=kr6;2TQ.F7pu( +pOfF=Dfg3"l$&28QsY.5f2[%8I^jlUpTJdYLOXOl@JC([o?W$`;gim\JG=9XG[H8l +hhLp(+S_:]a2`aUIuSGdN-P#gGit1`hNm.[CROX0dYV0VFi +qOak\J#iFTY5%IfHN>47YHdF1Ykp2lHRH"Cip$>)[ZSnCqhD$GGIab-\GK@>n(5-t +ed6\1^AGqkqqo3]cbFh8l?jDcNZZ.9-cMS$`-cRXHrn)\P7@G>b)P<"r5Nu/\':D' +bl"*Q*CnCriio#;Xo1#YI6+S1:Y#D6f)8\%I:q11Qe;87fR:6^rP.(b^ejtWhYm3+ +rWhB\(ZG?@ir1msr^Z%?YMFY?h#;NRrbq"LJ*?m0l2J0VI`LaQcg1S^m\m&F*Zrd< +#OicNmsa0cs#9TLkOnjFp4$0;s+g@KQhQ!-q#@?6s!RaEfDYa4rr;J<4.oD0,Sggo +KL0*D\7@K<%ujeL[X4-BXHQBi8GI?;qGPkbh-\K\(oD*eU],r!J +n+_9Z?U(I?mJ$O-Ip]tRp\b',&.A^C^lU)V"2POB'a:EeA((\!d#6E\_@WLh$H!Ff +2%)d5bW?9Od0r;Q_so9H'1@lI)&8h4'O;Np&WC9=`f[?>)oiQ7FWJMbm!Tts&e'I; +Z8#mKJ]0B<;'j0OCm?A>P'j)Sb*%F[.E_4_Yq=-sm'A@HdQGK'b`aU&1X-S,eMYU8 +Cu%%q'9)$5cBGLo(YD-Y\Xh0iR2 +(%$W\fN'S\A(Ys!NFc6.?(GT](1j=Tg3/ITCYI@aX)6T,jgB!](B)3j>aGoCEST/? +d<47=D:Ni9Q[Rt?hNrr`H/A:tnS2$)mJVOm(_-_#i0Z,+KAdYB'ntV6D@M$O=H2p/ +iY\O=MW5Pf22bt3c9%$Gfa^<1j7t;rP@U(FLDOURl\aK?tn\+Bqmdn3^S-Jr-n=1R0_/U:RiPk>WD]Qmh +*02Dfnsle8_XT`Q1!T;pmk`;]SHh=)oUR'ud<-H_;q'VD[p@VZ*KOdbp78C(g\2=moSE@Sd0]%pmrReiHZItPN2I?2fn0Y*fm/^qOXmmlg`hMRI0g!n$VV2T)Ze! +r1=5=nbiD?.+Dr(0e+-5OZrh$1ioR@rap%89VchdXuoDsIR%KF4G"P-qe$%Yo* +#!gf]"5nfGJFH;85tDFg@)Nk6:g+>pQobN1o6#X=NY4Z\9aTcH.>:Sb&&Qsd#U+jR +L+p=Z6We%3iLDoQ0WlHafR4:i"@7i?.N:aRE=lYJ7u:(]-:F5j'&n"1<3Zo_79HZ, +il"uX;/G"+.%_=8oO3UhN\Epn`>N/RB4UOQ2Fc?T)rlTkN^jF67VM0-A%ZrF&aheP +f^g3F7!"Gf%RN]h%3ae"A<5./5Y/F+,@lIdP#=J8aVLKmAAjn";Jo6$f;g2D"I>9M +<`2O-9.8mYWK7a=<_D%N/*2GhQ:>1\8pP8*A]1O6;Vk^&R<\9KSACRk%Ur+7N/o:W +ad9=d?d,L=1F@4kRLrB:?#cRJ*Ah":!+;so*1g&4._m.d0Z%Y7GZm6Tq^#b]G"J5Fr?6g049H1W_H +:oZ*6BZ1^]1gZ.lRO(Jg"X0[@Ncrh(3D&Gj.AYInPZ#&-8L]?JVGtj00A9])BuMX$ +<8O1pRX#KZX[/mc%\cp):J^6J8Z/sKUf>L%;dWg"W`;foH;=R=`pIM='FuskN-`e2=@tUg@\gRj\;oo%`2=P +%:RYtJ$E#Y``NTh@dJKSYng*W=^*Hnm"Lk4[VEn:gGrp*'pl:.Nm_*895#mLS$c:o +elmu:n#\IP[T:]-4Zd"dD-aW[_GY\fX +/3S\@mN?neCD()]9mAB&.Dtq]&RsNtlZ#*C``UP*.I:E!n]!3%38Y`?Cho+&#!oEE +o-.\WNK8*487&h7-=ko&PKi5]b#of8jK,J,ZA)N*=`0#V>eQCY#$9#/="\)ic'e/h +O3@?W2J0VXR.!4Qc<8IS9&/lC;e"q/bFk<\:E$)-nWJ^IXS7R^Sj +U\%$;d+V6%B\b8:oYn/b>&Qsrh'o8$?CB;HO&A1o3N)O>Vq"t&46g*WX7_0HeU",o +CJAZIl$fnh>45cX/TIn8rjUN!%W?.=NNr1GH.\SkAo,/OYbVcNg07?f1Td.R2SRkt +qe9GT?+m`A"J+;:O)=;jZ+6H,iS@_AFt'Q8\bCjIhHQ[sDVa]npV]DTHcLGNc2GB2 +%f,$f%tZ#)!P`kCs5=qLU[VS1_t\lQiB0njED@7K30+s;>]-W_?9Q:&[isf".unXV +:!)8<,NW0_Q1?P1!]`b*k$2toF'`(qq0kHgI.*YJgSrIY[lNXm&"tW4IF7m\iTNEX +U3+\=7_2Amlk?Zr +Ispd7"&/H=&)p\uKCAcJa8&jkir%])_*25IqHlbX9i%DSrl%e3^JEqhhml@.cf+e+ +:[S-g^%oC/j8E>fOFE8Hq>Z6-CEKnZIpFl-s-N9U*e4':hu'$@pA[qls"F_8ci4"7 +&BsVG!3c\/DV"nC+Ta*(!RMbeYSdN+%g#Qb")MTOO>-g`4QXpM"E6nnYX8O);$6;e +LN#liY["r):Bb]9"te^9n8/BnXTjl"#B45ZY?_AEJI!c_#>fgROGMJ,KaBGtKTM6# +d%(HHTOnb%$?2rLYaYtRT*jrR$F%&KXsFH0_$^gn$Vfppd*3!a`se'M$o$2o:sfaA +i-(4:%?Tf`E9p\'it!j9VD.0CnEUUd#7keX&8)jl&H<=2r=73]&TJZ@;%jMg*t\tr +&[?oT:^=YrnCn1D2E2'J#.VnP'_[',6Qf'i@HKo_(6Mf;Z$Jga)]3R[)/"(/d@D-eT_4G8)KD^0;3)Xc +T,S#b)R6glUg4p:_&G,I_QgcoZ-7ZZ_\t8M*A&c]n_G5G@3(K^*c]^!Z/Hbon96VK +*jPG]VQ1do!?`UO+49m*OpI+H"X,W8f?t*OZ3qiG-R!LV,%DK5nf8q&+SQKt,B>c+ +;D09c1F+QU,I0l_&ht[&5pZ\u,dLQ!VK4%]@3m[>QkE[OZ)]3,74*%oHh)#$Z@$&# +G:-:B-RuYSnr4G`K.)nH-PDIhZCKb!LFI8=.VXA]nuWSRV(#/#@kEkc/lL82P2S%_]e5K@/op_kEq(gS!/n/[066A4 +W>@6E&I:0!0lmRSV/J(E+Yk9>0p<&$djVA?,r7581@m(RZRUT+2)I*W1G_$Io1K9D +7l;t"2"NjfP>&O9fnLHE]5B9sloDLj,CHn$dm.:6A1]]l0NBhS#,#eq9Zk1kH +(IBaN6.??1Z8"[F0cr5$6ZaC>Znk);G=.TH6aT?L1dOP"]0oUu7$+lH'O9[?=%'E* +653crZ'@e#=[t:<7au\@ZuJQ7FUIbf89&-0oSlBnqacs9h6`56'V,ppQV&to8[PHg +%A?BnYhHIb8bB+cFL+X1#>90X9m0l:ph0;$jfd2+O7A6;"Yh.Pp92r2c=cU +;QI!"'g0^J2c>o0:K9VYZWC(j7o^5q<7P*mPs\RE<4-jQ*')OM`r6=`oP"&YQe's,1#V->gGr"ZD>Zd2iu +[9AXs>Lgg.e\bYb^n+QL?#L0X'uaJJ79u2>\lIQm[F6V5k?fjh?Ie"@n<%'Y!4Wd> +@!2C12?R@TVdPee@<;T[(*'])'k0'.g,:$^Y%M3E).I\l@b*NCp+^(N1kui.A8Y%N +(,KLos(%EpY-q&9[R2ke=(X:;AbKD@%N/kZE3,@@B6It,G&qe,X$^`)i1JTVD"d#qQK)lM)/cn9Dejc>(As_hokp)j[eB`?XSm)s&TDdXE7Yqq +pChLI+MP<(Ec1,]=!Mb3.rpt6'GiKF[kB!c2fpUAEVE%G`SYc=:mKX*F8&^upJZ5( +4*9(cFcd8Z(MsphB6C\(UA&SMX>P3'Bm;-gGLqY4GCb#5G9qHkH#+(<(PR,a"aQH1 +NOPI)\"Ha1VgBrOHInd9WkEa\_$;p&He69pGJego]mH*rG'D>^W-s)ErJTml?(`]i+'nS>tJbUXBGU7p- +s'HTnK5?X@UEgViC[==$XTVOQ%$(9pZ`^7@B.'\WN9TTpaT/RJE\J\Z)%nVjf[%R:8iE5QR*J7@Sm%Rb>*<)9JEE +c(-lGUqMUq15Q)J,d,E,$:mV:p3lkR47+H`&oQ/%TMpZ(*N>KuX*UTWg-Md.Z)b#HWk-8[R_u5tafAUaXW#c/g7bSdiN9/c +XLdX23od?,\#ij(Y57o-g>B&:pTP80Y.FsIRffnc6*FJhYo5tjs+Vrf?Z=X3E +3u_(E'sd]QZZ:u)q_b_W/7Q4?ZtaHaRmX6G1UR$FZ^W&DgKh40\[7i;(OKMs;t%+U +CUZB5PhTEOHZcPSB=K6H[bH;.]5b=7OgpSsZeLbU[?%h%TMjO8\NaW-^\r(5#CPC\+@b%#e@*3I?<6-&o2ass/q*4O)accVcr2a"q# +Xj+i?^WemOY^F./I,2l6a3GoDbhV)kgsOE[nU;I1cCF[qI-&]Ej3:j+BRK9qI13t4 +pX!1\cSOb2*?6r-&(-_.d(L7D0KmfH-.::cdJZ$^4Z1\G\'gg5e9<"`*C&'>HdfZ- +1qcc9Pu6%:>Lk;"eD2Y+]j3;I=4\Z_em33-]U.4*Gr6S6fH#h#V8q1nO>FS&fW^4` +*LYUZNN_/ng-(d!h36Ra8_P2cdf"[LS[I5>]@q\Bg_EE8*R$9ea4o-_g"k374j2ZP +h;"-bh#6Fl4lbA)j5(g.Oli+0V]VFhBh]&i=-PO;cE +?9GR]552`Sl0mL58,i&3*qf#L-0[W)nRs`J58iu&$1PWNnc(%K?PW&0+[fZXo,fIK +5:+oG47k`Vo)CN;Ro/Fb:%Z'.oDMb_?WHQVXn=na7\7s"?Z!'_=k-klpA\k#5@=/W +:\MPQpiN#"4ZiCfM7e=0q&buCs#9aqGX8=@;ocL=5]EA"Y*W'3V +qqg<0J'GhP\bogapg:ka+4pGZ7JspXrbnq6?g7P"mJXfUp`K#f5NEpieMohe7L]XO%/1"f`[=(-'670P)2#m=Y#h2V@qR@^1B0j +:$-Mb[-DWmT20,6aqXi16)%6?e=%sAO\DTMC)$N03iPuVeDkKDeS_p'Y?1'+)\nCT +A[>P,(7S=,fkn3&mM?g"?KkM&<\G7nc//,A^0g>R)tjX?K>V,;(edsP(Q$.An_"n" +:EbtEASUrjeo*R>cY)kg*>X]-V:0/O)P'p4=fp:kp)>$,!?f'dmthf&9/ +r5N*#QK)rZr*DlHQ-JC]q4/">8#au'FLrQ"cX4*9lgT9C*u>0qg[f]=*R@fZfBN!U +rSJ]8cf+NlI=E>gf@k`7s$,uTB`5\!j9YoRE't':_!k;B#!q``,6pP3KI7-]0FT`H +6ZD*J%n#ji6P2_+,YJe=nO-:j7<)jA\AFA]0,VR2Uh:W9;8d5i`pqQ**_5bUJuM2e +,`:/D&bLc&8TIe",g#UfTdNGfUo,_8;5B1'95QMd/5+FpY;"/k'[&7*o,Q489iFE; +/ktqjj#KkUV!C*;o>L5`:NPUo5;%"_"#eMIAICe#e0PVo;)Dhr7mYW&,9g"WD&5fB +oX-JIdr`Ph9iJG&01f,_F[Jr(oefZDeTF;`Io=`urtAPs9QU>=LgIB.*dp3!WU>;kTPDcV%H_VJEt-+e3PpGLEA +?$AHdFZC6Qj*=sTV<`J7pVl`P?Zid4G$XkHs++P0-3JkXGVZUS@;Od2LLE/3,DY8\ +L*qmgYV$fQ@CX<+O(.n`4-3uu(/'b"pter7AU.llQY#uIA!ouX-;U)mq)35^B0#*u +O(N[/FeNHZ*dsdHqBhE$=rITtV.giSUSqpRI]KG_cb>mNCO5-TYA=">_m*BKVQ[=B +]10'5D#7PeP3dGEh77C7VV/S!HbSg&mMSdi^Md?]o>,AC*s5:,S4=73EI;C;QU2_2c9r229m8">S%bk(bi6d9_$#>*_sr,( +-d&Rg?Uq["H[f\Wp<*Cm8,%I^?g7=as0qQUIPn%rr'+9`s54RiJ;$Gk5^3kB?rRMb +O>U9.=9eh6KG/r6 +PVY2dXrB]`D[N2V4*j`N/OPnV%jDECLli,M_rTbgU(g7VYqdUnecc[1PZ*I%<\$U_ +`tRI^:5b6$/]Hg?((jMQN0/9=`X's0aUDWIZ)TTLpsU3-FE'RnZ9(R$nK)2iHX?6f +5=[.'*@(K6,a%U/83%8)A5%Z=O1I\&8J`X_<0NHM;B3dR0d^G\S!0"X&]lIP-tNOV +P0[T5+dknMV(AX3P,:`AF>YSF>dBX#c?Jb*,e>Ki'iVO&q-R` +QF>CKpr.!MQ)V3XR?LhV]56lB]=1i5qHJQdDlr-/\5sD(>RQ[7DH4l-(E28fqjhh& +"j4DX6K29tXPg6hs15[_ls8q_9!7"1]U+rU2ClUiDZ/n60o"aqX4r#?L"3eZcLtU\ +jaGEskJ*AWs'PI9IP;N5^GlqI>tbQTn2:ThMJi:Kg_GK]L(bp/!t/Ob0nr]R'#Ag: +%TXP]LTmWt`-@S/grr?GYuW^-fkH7_L.0715+uKqX-Re'>G\k`04k'tQqa_eb1W+:7XV&! +1HoQuR6)s3gt.t#L*k,If/mVmn7OP;Hd6oZC1a"7T/7%+TK0bQk^(r/?Yb(+naY2GfD>e^Z41HO[O02N=S#j8rLpT8I`L-2;eE7^>IF1- +gY5fMAF46M[l4ddg09nbDL1QWpK$;0M^N?/]t:p9Oo<6<[s@E_m8\@"qqmn:S8WiW +^3@R,fR+3[n88Bf2ZF*BS0NeXrVaZZQP6!=+,b*p&%hVW)r^^8#]RL>aEYHDRN,7i +Edgk<\K^ +r@=c0/q;AsQW&X05G[siS5MC,=6lDiY;Yf7eiO[R^E$7ZG(.g?4!.hrS[C9H^=h:g +?WcYX]=IZRnB*ggHgdNuh=lB[hKrUKn/`C^C_#dhHrl'mG5o=%rupH.=,c^A+.2h! +/`h@uRkT:=c$B=FRs^QtoU_>Fq@>UMI8>1&ri=Opr@@'EGI-sk_@1a/EUJ8'r:]"A +g0tO"n%Gp>pl3%XHnUWPEGrJbT/Ypa+-Z3nQIbXL:Z["SXHn<"f_RgUp3cnVpjWtJ +qk'5Ar%G,F^H^lI^MifEs4*N%+7oK(eN&+$g&?A#l2P,Npc&r?5PtOHoCfr+"$esO +&MsPRlioLLr]hG-^fuB*$jf2##cAXF^s!6Qf`8gp#XJ8$^jHYY*"/TR$:-3U5m,cT +j;($t(Ce:s_2K'U]FdH"'g]Is5BIc/`#C87(W$"l63u)Wg`f&LA\kGh6;/T0oFo)@ +,=6K#651k8S16$?-c0+>,bu\PbU>g:fYVGX6G,$)'Iq!O1IF.,6OYTb)Q6!X2FDjL +^YBhsKJc,tI7$Cb6d.#IZoGt_=1rE6_k]R_Hn[r.5=@8]6e"Om>Sk=@5f@uE6Zbje +6qOu^6H#rq7*Cb3A55PZ"%:X47&"D6PYae";&FsZ`ACE1=ujOn=%.K*`Dfu/3pf*> +>"+r^1;#Wdb[*`T7E'pf7LS!?oNT_C+6Kh-c(+MT?6`(8aNEKI&Y8IW_0q)9$FdMUi[7bVM9749@XJX1B]1]fL9?b(BgqHC&\BFf[9FSJU'YmB^ +_b;W"9I.SN4N5N<`_:d#9T7!8SB+C"a\8e[9Y@XRm*8;kcUP9V9aoD\jNl(%dn@'l +bd>np9\)nee]i3ec$\2=N7q!ZgJ+3mc)f\pgtb]kgs,bXbrjr[*9'^Ej%JIj:#t5- +9]f)Tk>#"?:2K.>I-FD-l;#"VcHPTLeEfbsj3ISl:CQbh*,SI+o1nZE:?;(D4S@#o +p.p)1:Q5"nSG5mUq+n)W:F,m6(][@udEhak%Li<_*7E0Oqp7J&:e_$g<f7C +:h9r0I0n8ZmEd-f:sBGGgi(Q9%oBYF:ot=+r=REd&lCe*;,%\N>nfu'%T.Wk;2kJ$ +D&Q8O)UW+8;9^(Xh&Fc/*DuJN;>eO5Pp/gP!7F"U+`q9n>\Bor>=O;n;M(!"D(/Ab +.'$W!d`j@$h(-oj00qHCdd8P_qiA_P0iL4j-I"-k>rFN^1fGDS+rk,lNAT+Z!n*o( +e'0qBbr4&<5;Na3;melTV)d$G4k)M.;`-sB2*i>o5Lb*P1-J*+SOJ]a6I`,,eB98i +SeI>A0[85=):G6bH0/>[#\V/;/kB%H?g +f2[6#g8ihBHrog]f7e_+ +]mpmcES)jofL[gLjb?lQJ(Q''=B$Nt'nf\kGh>08fX6Q"eV@8oO!jmc=Ug2)H*ZFer9@03P]_>0IW4eZE#_Ul3d&>7Ih^jf[>i3nhQVgJ+jp +mBg)'ZWhGP>917YROd-@]39WXgP*=F]9h5_[9M]l>G]/@)lhZk_ctgG>A_/\4:bWW +`a!r1-\]EBS]W't`S?GB>ZJjM]Dl,YbZruN'g9^q*RZ%kch.0V?.4KbcWtD? +4*B!-S_>.`f\L,g>E)qEc.lUhIpIKZ?+]`7Xl`;Yq2CU6hpq`gV>K1'!uY\O?iC49joo-cVVhpbi/S##:'9FW$U*VY +@!/kbAdr.=9]1X9@."9X^(Oj'H!qHsg.i,d:(ZAmg0=7diJjPi2B$#'?f=Hl@,8KS +`ZAH_Bjo:0>CIN#*[2Eg(LfQNR*H`37NU1$&7TN*0tnjkSgkEA.,mt/iEe'E]40cK +-=Zs+Le]G[*\nD+/n5"5@b*?q$om8?2Ig&Gj"7Q+"Q:0(o^;.Y2Y%IR2,S'b`k>%MM)j^)0QgdL7a?Y0$6AG0>.[S19S +@p#L1"V2B.E%Tk#6Wh/n&@ohW<=(As9%QIVrc_Vrl9DAr;OI:2o@FBD.I%1];!Q +Q0E]eA+l)MK?`XURqHo5C!9jo5+1[')!JE!Bk(-,^7o6-T^"Zhkm!bp6q_6[Tk\'3 +C+cJtDQ%;SeS03-C43GRG,jiVS*HTLAWEqZ*"6R_YA5B+lK5266K)\i[q-&XCL,V/ +2Rr'7DJBBdCUI1.I_K?Q]'K8GCSnc2")dGE]keo[lgD`%T#>FaQYOOXlub:(2TG*A +95IqY@iieZg*UWjc>9dqCo5Z_sJ5kD2WXU52'GReErHC +m.T#t]".--ghlr.D6Di+0&CI%]BgYL5B5SdS?p<`@SYbT5kAI%^m=stF +fg0M9mpEfsDS&a4f(!Z/W,?5/D[M0crq9\_ol!UqmRHs>1[jd%qJX!.mr&)1Y5.PQ +:$3l$DhXWtf)]g]=`<1#?)IdD=gd]G#&k$!n$`PkR9"9&$XG+eE.X>DG67:#)t53a +E:`mE^Cjd!%.QC5n!=W+?=Il?(3)[NnLkbaV\jET<,ktNn]PqB#9.[37Icum>7VeG +)0Ko]+*'FHET\//>O:nk-X)9LE^K,52^n7!h/]D?Ej?m0IkFlZ/TUjun]*>(P'h:O +134AOo'\G"s@8G'Yeo+sE/`sD:7:3?:(oWM+m02QbR-hI(,ohRU@ +7oOP.h/sfA2_^M1*r9m0TU+(nl'#B$tgD0J,gG7Sg(^MA$HFk^PI +pO?q%7s[u2H$=:5pMY(rh[T9LI!=VRpTK-;VgJ1?1j@Q'n"4Up:Of`Gb9oZO,/&I:O&4f,VOE;hi_]WN;4!D)`Nh'>Xj!/QZNaPGu'cu%u'g4 +RFEUMH-ABr^RHbROnk?8lVC<&&"XlXSU*CSH7t]]YFp2ZdeY&`H7$3!8#ellV0\;0 +H2jrAM2:u2Y'Sb=qQI.j#I&Np2#33>r]fL0TA]]adJb6L[`@D,LZ:IGb'p5nrcd`lL[9JHT)H^prpDuL +:[nAXf7)WL4%Jga&+G'Uo*T]uIt.955P4uVWdf6`U6"R=TDX&Vl\GR!9W!A,+E1FN +*Yem66=I+.F@IDeLW*_"BV\rl)3.02dCB*t5pML`A28EUU.m)&9'+L#KXPADR8%:W +H(=#63h/t.e(OrqKg29XBU!g#-AtNm;^k]"Kg)>.W`3`@30X?L>HV%Ceb]N)`FH2V +CtA_sgKuW4q\m94*Hc>.?HbNj*fDGgX"bX[#E7fP--P_QZ@r^0!L.5?cV'sp7M-[chmeD^ec!W!l3/F&HopH>T!a^d!QuB_GH_Tr]`*CpC"l8 +bW-)!d+ghq`"_OIqZ=KLSaqC5:.`tYrBd68Kgpo&\depp8bYoM'19c6C6PP$(O;7'=P8^c+2 +.nik5brJMIeC8V3e5[M\;Uj5[;,l(G?!14Ydlfoje.n6_=Ou#nDd(a-h0!&$Fa\f0 +=#M(E@TV,4O^m'F248".XgNdp\2Jc7B3NklYA2f-h6h.T24^R_gfGNGi#p#m:d#p\jc8?PjgfK&AUP$$b@;>4I5R3.;m(i>@k( +M;m0hPD3RLhDpVVf`"0ujB3KrMIbAR:Q/jF?;[$M=`TF`AkLo_Qfcu(EL:BA^3?++ +q4<,=BA+DRU?@t/M54h=9VJ-Dg4#`ol<9dYWp81GRAK4QTp\]'[,Dl+CodVW5DZg]%;in6@%A_QA12&\[^=f,;Ns]NoTr +>hjNPaE$'c1!9)M]R.b+*7mL%FBm]pd.G!jOjA/U?WktQh1&kcdTo@We+VTVESC.M +\o$,#h;G[9Khi:st"I:.`hrXk;ci*o0(^0oi9DO%`*WnZopB%!R +,_1`?#!j(B"Q4)2Jl#RN_"D+>+M8_IOF@U)(W?TP,UJ,jSeOMY<0?,B*e[@u(de"/ +!MN`(L2b-K6^Vj'iObJ3WHoRPfRjaoj@"eqmN9B7PnN(e9o72.,=NH-']M5TMFpbo +Th)@&ihTh:d<72g.'eb?oOWt9RP2[Jcr6\ZD2lrW3(FhH\t`MCNmXjga&qhcURDRO +;>r]!)##-u)(goJ2F9s&"X9`nNIp^B84a[F,ikbd6'a9kV_a[IUh +,b9F*I0*#D7k(9>Xd)\n<(e*?/EN\8QGpF:b/n]TV:<231>QZfl$"iD'ZHE"&muau +M)"-tc'Zs?.*S*U2!1UaR`C4.9prCIk2b?fdsc72)9"Su,itQFSod_8g'%Rpl^bAf +G>B+84Qh+bSl=?h:O2UsBB8i[e*__3g&XJ&'a:6e*eI4G%74`>$_c'"LeueM6g0dM +U6Ju@d@)XVW5T^Ne96pNb!ehb*?h5CSs*'@91nG;/>Z=SQrD>O.PsUD6,.=.8eglfEPuec)N!9*JSe-$HN$ +%`;D<&Rt)iNNlMF``W*aA8J*(ZIVdofip1Cm+#^P(4OV6)7)3f-)J!"STS*dFTDGmDZ`I\R-7-U_T+kb)4NR?HE +880(jV"COLdb8&%Bq7,Yo]D^ng4)q6*CZq"-Df5GT2]Qr_(Xju.?=DJpgXS&Hu +f%T"dCRoUNp#`s>gAbPs*JL`k-H4Wl+(T2YQ*U*qc.Ui9BPecd[.^BIg=otND4S)C +p?(2cgOF0[*Q>P_-KX%;T6+tAe[kKemG6O3G]+Va]_A;rhV6q8Dk6R8pZDG3g])eC +*X0@S-O&G`+,"U)'uK`Y%H6),LiFI^`;$5FinRn"ELo&-pu`[XgjbE+*_"0G-RIj/ +T9OAfb98*sLU#-\_'H+2iDr(#o.(NUbjiaE\jRjSYp@o%m`t +H(QtVr9'XBhLEmu+%>Dl-`-IlT@A1Z4]^H_5HKrTClg +hZ)M]+,04`-cPl<+67gAQ1Foec2$6]k^=PLo_tc=qVPZHI@mq@ro`,7hgb-E+3"$T +-ft9`TCdT)eb];YmJYqWpjXCIr;W\frnlW2J"QE5s6'@\ci3tV!ru.&!0@Qgcjp-g +'*1oG!K\6$clW<#,6C[h!g"o6cn>J41BUH4"->SHcp%XE6Ng4U"HZ7ZcqafV;[$!! +"cuplcsHtg@g5bB#*3d16g$'+n(X&Wn"Ed2ru5,8*j$ +&s4[Wd4Z.F1Do.WP8R5a)3LC+d@V.[$h^d]Y/6ZR\q_/!@Lpd_@=G_^n^+ +/<\1-da'KXdk+JL/X"j?dbcYij"=6m/s>NQddJh%o.O#909Z2cdf2!7"#*XY0Tuku +dgn/H'/O3g6U*e#thHZTD*p4-R9&j$$E)5*P:re*fL7o061J5Ekt/e,MZI"$ffj5a2XAe.4hZ'1#S66'N86UXmD7$L>4e5&LI;ajYe7?h"Fe6bZZ@n'F1 +7[.[Xe8IhkF%92R8!J?je:1"'K1Jss8IUInL`8sHAK +e?;LZZV+9,99d%]eA"Zk_b=%M9U*^oeB^i'dnNfn9pFC,eDF"8j%`S::6b'>eF-0I +o1r?[:R(`PeGi>["&Mu&:mDDbeIPLl'2_aG;3`(teK7[(,>qMh;O&b1eLsi91K.:4 +;jBFCeN["J6W@&U<0^*UePB0[;cQh!l@ocTBIZeXp"[UKUZq>*Z-leZW0lZWgG=>Eug)e\>?( +_d$3^>a5f8k1nPBg5rH'b"Gf:R@*UO$"> +HC([Yf<9N;Z[5c_H^D?kf=u\L_gGP+I$`$(f?\j]dsYDcfM@2<;h\=TKpZ(ufO'@M@tn)uL6ub2fPcN^F,*kA +LR +grestore +showpage +%%PageTrailer +pdfEndPage +%%Trailer +end +%%DocumentSuppliedResources: +%%EOF diff --git a/plotly/tests/test_orca/images/linux/fig1.eps b/plotly-package/plotly/tests/test_orca/images/linux/fig1.eps similarity index 100% rename from plotly/tests/test_orca/images/linux/fig1.eps rename to plotly-package/plotly/tests/test_orca/images/linux/fig1.eps diff --git a/plotly/tests/test_orca/images/linux/latexfig.eps b/plotly-package/plotly/tests/test_orca/images/linux/latexfig.eps similarity index 100% rename from plotly/tests/test_orca/images/linux/latexfig.eps rename to plotly-package/plotly/tests/test_orca/images/linux/latexfig.eps diff --git a/plotly/tests/test_orca/images/linux/topofig.eps b/plotly-package/plotly/tests/test_orca/images/linux/topofig.eps similarity index 100% rename from plotly/tests/test_orca/images/linux/topofig.eps rename to plotly-package/plotly/tests/test_orca/images/linux/topofig.eps diff --git a/plotly/tests/test_orca/resources/2011_us_ag_exports.csv b/plotly-package/plotly/tests/test_orca/resources/2011_us_ag_exports.csv similarity index 100% rename from plotly/tests/test_orca/resources/2011_us_ag_exports.csv rename to plotly-package/plotly/tests/test_orca/resources/2011_us_ag_exports.csv diff --git a/plotly/tests/test_orca/test_image_renderers.py b/plotly-package/plotly/tests/test_orca/test_image_renderers.py similarity index 100% rename from plotly/tests/test_orca/test_image_renderers.py rename to plotly-package/plotly/tests/test_orca/test_image_renderers.py diff --git a/plotly/tests/test_orca/test_orca_server.py b/plotly-package/plotly/tests/test_orca/test_orca_server.py similarity index 100% rename from plotly/tests/test_orca/test_orca_server.py rename to plotly-package/plotly/tests/test_orca/test_orca_server.py diff --git a/plotly/tests/test_orca/test_to_image.py b/plotly-package/plotly/tests/test_orca/test_to_image.py similarity index 100% rename from plotly/tests/test_orca/test_to_image.py rename to plotly-package/plotly/tests/test_orca/test_to_image.py diff --git a/plotly/tests/utils.py b/plotly-package/plotly/tests/utils.py similarity index 100% rename from plotly/tests/utils.py rename to plotly-package/plotly/tests/utils.py diff --git a/plotly/tools.py b/plotly-package/plotly/tools.py similarity index 99% rename from plotly/tools.py rename to plotly-package/plotly/tools.py index a9f0db2901d..2cb72abc047 100644 --- a/plotly/tools.py +++ b/plotly-package/plotly/tools.py @@ -684,9 +684,9 @@ def create_violin(*args, **kwargs): def get_config_plotly_server_url(): """ Function to get the .config file's 'plotly_domain' without importing - the chart_studio package. This property is needed to compute the default + the chartstudio package. This property is needed to compute the default value of the plotly.js config plotlyServerURL, so it is independent of - the chart_studio integration and still needs to live in + the chartstudio integration and still needs to live in Returns ------- diff --git a/plotly/utils.py b/plotly-package/plotly/utils.py similarity index 100% rename from plotly/utils.py rename to plotly-package/plotly/utils.py diff --git a/plotly/validators/__init__.py b/plotly-package/plotly/validators/__init__.py similarity index 100% rename from plotly/validators/__init__.py rename to plotly-package/plotly/validators/__init__.py diff --git a/plotly/validators/area/__init__.py b/plotly-package/plotly/validators/area/__init__.py similarity index 100% rename from plotly/validators/area/__init__.py rename to plotly-package/plotly/validators/area/__init__.py diff --git a/plotly/validators/area/hoverlabel/__init__.py b/plotly-package/plotly/validators/area/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/area/hoverlabel/__init__.py rename to plotly-package/plotly/validators/area/hoverlabel/__init__.py diff --git a/plotly/validators/area/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/area/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/area/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/area/hoverlabel/font/__init__.py diff --git a/plotly/validators/area/marker/__init__.py b/plotly-package/plotly/validators/area/marker/__init__.py similarity index 100% rename from plotly/validators/area/marker/__init__.py rename to plotly-package/plotly/validators/area/marker/__init__.py diff --git a/plotly/validators/area/stream/__init__.py b/plotly-package/plotly/validators/area/stream/__init__.py similarity index 100% rename from plotly/validators/area/stream/__init__.py rename to plotly-package/plotly/validators/area/stream/__init__.py diff --git a/plotly/validators/bar/__init__.py b/plotly-package/plotly/validators/bar/__init__.py similarity index 100% rename from plotly/validators/bar/__init__.py rename to plotly-package/plotly/validators/bar/__init__.py diff --git a/plotly/validators/bar/error_x/__init__.py b/plotly-package/plotly/validators/bar/error_x/__init__.py similarity index 100% rename from plotly/validators/bar/error_x/__init__.py rename to plotly-package/plotly/validators/bar/error_x/__init__.py diff --git a/plotly/validators/bar/error_y/__init__.py b/plotly-package/plotly/validators/bar/error_y/__init__.py similarity index 100% rename from plotly/validators/bar/error_y/__init__.py rename to plotly-package/plotly/validators/bar/error_y/__init__.py diff --git a/plotly/validators/bar/hoverlabel/__init__.py b/plotly-package/plotly/validators/bar/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/bar/hoverlabel/__init__.py rename to plotly-package/plotly/validators/bar/hoverlabel/__init__.py diff --git a/plotly/validators/bar/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/bar/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/bar/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/bar/hoverlabel/font/__init__.py diff --git a/plotly/validators/bar/insidetextfont/__init__.py b/plotly-package/plotly/validators/bar/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/bar/insidetextfont/__init__.py rename to plotly-package/plotly/validators/bar/insidetextfont/__init__.py diff --git a/plotly/validators/bar/marker/__init__.py b/plotly-package/plotly/validators/bar/marker/__init__.py similarity index 100% rename from plotly/validators/bar/marker/__init__.py rename to plotly-package/plotly/validators/bar/marker/__init__.py diff --git a/plotly/validators/bar/marker/colorbar/__init__.py b/plotly-package/plotly/validators/bar/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/bar/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/bar/marker/colorbar/__init__.py diff --git a/plotly/validators/bar/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/bar/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/bar/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/bar/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/bar/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/bar/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/bar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/bar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/bar/marker/colorbar/title/__init__.py diff --git a/plotly/validators/bar/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/bar/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/bar/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/bar/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/bar/marker/line/__init__.py b/plotly-package/plotly/validators/bar/marker/line/__init__.py similarity index 100% rename from plotly/validators/bar/marker/line/__init__.py rename to plotly-package/plotly/validators/bar/marker/line/__init__.py diff --git a/plotly/validators/bar/outsidetextfont/__init__.py b/plotly-package/plotly/validators/bar/outsidetextfont/__init__.py similarity index 100% rename from plotly/validators/bar/outsidetextfont/__init__.py rename to plotly-package/plotly/validators/bar/outsidetextfont/__init__.py diff --git a/plotly/validators/bar/selected/__init__.py b/plotly-package/plotly/validators/bar/selected/__init__.py similarity index 100% rename from plotly/validators/bar/selected/__init__.py rename to plotly-package/plotly/validators/bar/selected/__init__.py diff --git a/plotly/validators/bar/selected/marker/__init__.py b/plotly-package/plotly/validators/bar/selected/marker/__init__.py similarity index 100% rename from plotly/validators/bar/selected/marker/__init__.py rename to plotly-package/plotly/validators/bar/selected/marker/__init__.py diff --git a/plotly/validators/bar/selected/textfont/__init__.py b/plotly-package/plotly/validators/bar/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/bar/selected/textfont/__init__.py rename to plotly-package/plotly/validators/bar/selected/textfont/__init__.py diff --git a/plotly/validators/bar/stream/__init__.py b/plotly-package/plotly/validators/bar/stream/__init__.py similarity index 100% rename from plotly/validators/bar/stream/__init__.py rename to plotly-package/plotly/validators/bar/stream/__init__.py diff --git a/plotly/validators/bar/textfont/__init__.py b/plotly-package/plotly/validators/bar/textfont/__init__.py similarity index 100% rename from plotly/validators/bar/textfont/__init__.py rename to plotly-package/plotly/validators/bar/textfont/__init__.py diff --git a/plotly/validators/bar/unselected/__init__.py b/plotly-package/plotly/validators/bar/unselected/__init__.py similarity index 100% rename from plotly/validators/bar/unselected/__init__.py rename to plotly-package/plotly/validators/bar/unselected/__init__.py diff --git a/plotly/validators/bar/unselected/marker/__init__.py b/plotly-package/plotly/validators/bar/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/bar/unselected/marker/__init__.py rename to plotly-package/plotly/validators/bar/unselected/marker/__init__.py diff --git a/plotly/validators/bar/unselected/textfont/__init__.py b/plotly-package/plotly/validators/bar/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/bar/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/bar/unselected/textfont/__init__.py diff --git a/plotly/validators/barpolar/__init__.py b/plotly-package/plotly/validators/barpolar/__init__.py similarity index 100% rename from plotly/validators/barpolar/__init__.py rename to plotly-package/plotly/validators/barpolar/__init__.py diff --git a/plotly/validators/barpolar/hoverlabel/__init__.py b/plotly-package/plotly/validators/barpolar/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/barpolar/hoverlabel/__init__.py rename to plotly-package/plotly/validators/barpolar/hoverlabel/__init__.py diff --git a/plotly/validators/barpolar/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/barpolar/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/barpolar/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/barpolar/hoverlabel/font/__init__.py diff --git a/plotly/validators/barpolar/marker/__init__.py b/plotly-package/plotly/validators/barpolar/marker/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/__init__.py diff --git a/plotly/validators/barpolar/marker/colorbar/__init__.py b/plotly-package/plotly/validators/barpolar/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/colorbar/__init__.py diff --git a/plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/barpolar/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/barpolar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/colorbar/title/__init__.py diff --git a/plotly/validators/barpolar/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/barpolar/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/barpolar/marker/line/__init__.py b/plotly-package/plotly/validators/barpolar/marker/line/__init__.py similarity index 100% rename from plotly/validators/barpolar/marker/line/__init__.py rename to plotly-package/plotly/validators/barpolar/marker/line/__init__.py diff --git a/plotly/validators/barpolar/selected/__init__.py b/plotly-package/plotly/validators/barpolar/selected/__init__.py similarity index 100% rename from plotly/validators/barpolar/selected/__init__.py rename to plotly-package/plotly/validators/barpolar/selected/__init__.py diff --git a/plotly/validators/barpolar/selected/marker/__init__.py b/plotly-package/plotly/validators/barpolar/selected/marker/__init__.py similarity index 100% rename from plotly/validators/barpolar/selected/marker/__init__.py rename to plotly-package/plotly/validators/barpolar/selected/marker/__init__.py diff --git a/plotly/validators/barpolar/selected/textfont/__init__.py b/plotly-package/plotly/validators/barpolar/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/barpolar/selected/textfont/__init__.py rename to plotly-package/plotly/validators/barpolar/selected/textfont/__init__.py diff --git a/plotly/validators/barpolar/stream/__init__.py b/plotly-package/plotly/validators/barpolar/stream/__init__.py similarity index 100% rename from plotly/validators/barpolar/stream/__init__.py rename to plotly-package/plotly/validators/barpolar/stream/__init__.py diff --git a/plotly/validators/barpolar/unselected/__init__.py b/plotly-package/plotly/validators/barpolar/unselected/__init__.py similarity index 100% rename from plotly/validators/barpolar/unselected/__init__.py rename to plotly-package/plotly/validators/barpolar/unselected/__init__.py diff --git a/plotly/validators/barpolar/unselected/marker/__init__.py b/plotly-package/plotly/validators/barpolar/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/barpolar/unselected/marker/__init__.py rename to plotly-package/plotly/validators/barpolar/unselected/marker/__init__.py diff --git a/plotly/validators/barpolar/unselected/textfont/__init__.py b/plotly-package/plotly/validators/barpolar/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/barpolar/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/barpolar/unselected/textfont/__init__.py diff --git a/plotly/validators/box/__init__.py b/plotly-package/plotly/validators/box/__init__.py similarity index 100% rename from plotly/validators/box/__init__.py rename to plotly-package/plotly/validators/box/__init__.py diff --git a/plotly/validators/box/hoverlabel/__init__.py b/plotly-package/plotly/validators/box/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/box/hoverlabel/__init__.py rename to plotly-package/plotly/validators/box/hoverlabel/__init__.py diff --git a/plotly/validators/box/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/box/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/box/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/box/hoverlabel/font/__init__.py diff --git a/plotly/validators/box/line/__init__.py b/plotly-package/plotly/validators/box/line/__init__.py similarity index 100% rename from plotly/validators/box/line/__init__.py rename to plotly-package/plotly/validators/box/line/__init__.py diff --git a/plotly/validators/box/marker/__init__.py b/plotly-package/plotly/validators/box/marker/__init__.py similarity index 100% rename from plotly/validators/box/marker/__init__.py rename to plotly-package/plotly/validators/box/marker/__init__.py diff --git a/plotly/validators/box/marker/line/__init__.py b/plotly-package/plotly/validators/box/marker/line/__init__.py similarity index 100% rename from plotly/validators/box/marker/line/__init__.py rename to plotly-package/plotly/validators/box/marker/line/__init__.py diff --git a/plotly/validators/box/selected/__init__.py b/plotly-package/plotly/validators/box/selected/__init__.py similarity index 100% rename from plotly/validators/box/selected/__init__.py rename to plotly-package/plotly/validators/box/selected/__init__.py diff --git a/plotly/validators/box/selected/marker/__init__.py b/plotly-package/plotly/validators/box/selected/marker/__init__.py similarity index 100% rename from plotly/validators/box/selected/marker/__init__.py rename to plotly-package/plotly/validators/box/selected/marker/__init__.py diff --git a/plotly/validators/box/stream/__init__.py b/plotly-package/plotly/validators/box/stream/__init__.py similarity index 100% rename from plotly/validators/box/stream/__init__.py rename to plotly-package/plotly/validators/box/stream/__init__.py diff --git a/plotly/validators/box/unselected/__init__.py b/plotly-package/plotly/validators/box/unselected/__init__.py similarity index 100% rename from plotly/validators/box/unselected/__init__.py rename to plotly-package/plotly/validators/box/unselected/__init__.py diff --git a/plotly/validators/box/unselected/marker/__init__.py b/plotly-package/plotly/validators/box/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/box/unselected/marker/__init__.py rename to plotly-package/plotly/validators/box/unselected/marker/__init__.py diff --git a/plotly/validators/candlestick/__init__.py b/plotly-package/plotly/validators/candlestick/__init__.py similarity index 100% rename from plotly/validators/candlestick/__init__.py rename to plotly-package/plotly/validators/candlestick/__init__.py diff --git a/plotly/validators/candlestick/decreasing/__init__.py b/plotly-package/plotly/validators/candlestick/decreasing/__init__.py similarity index 100% rename from plotly/validators/candlestick/decreasing/__init__.py rename to plotly-package/plotly/validators/candlestick/decreasing/__init__.py diff --git a/plotly/validators/candlestick/decreasing/line/__init__.py b/plotly-package/plotly/validators/candlestick/decreasing/line/__init__.py similarity index 100% rename from plotly/validators/candlestick/decreasing/line/__init__.py rename to plotly-package/plotly/validators/candlestick/decreasing/line/__init__.py diff --git a/plotly/validators/candlestick/hoverlabel/__init__.py b/plotly-package/plotly/validators/candlestick/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/candlestick/hoverlabel/__init__.py rename to plotly-package/plotly/validators/candlestick/hoverlabel/__init__.py diff --git a/plotly/validators/candlestick/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/candlestick/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/candlestick/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/candlestick/hoverlabel/font/__init__.py diff --git a/plotly/validators/candlestick/increasing/__init__.py b/plotly-package/plotly/validators/candlestick/increasing/__init__.py similarity index 100% rename from plotly/validators/candlestick/increasing/__init__.py rename to plotly-package/plotly/validators/candlestick/increasing/__init__.py diff --git a/plotly/validators/candlestick/increasing/line/__init__.py b/plotly-package/plotly/validators/candlestick/increasing/line/__init__.py similarity index 100% rename from plotly/validators/candlestick/increasing/line/__init__.py rename to plotly-package/plotly/validators/candlestick/increasing/line/__init__.py diff --git a/plotly/validators/candlestick/line/__init__.py b/plotly-package/plotly/validators/candlestick/line/__init__.py similarity index 100% rename from plotly/validators/candlestick/line/__init__.py rename to plotly-package/plotly/validators/candlestick/line/__init__.py diff --git a/plotly/validators/candlestick/stream/__init__.py b/plotly-package/plotly/validators/candlestick/stream/__init__.py similarity index 100% rename from plotly/validators/candlestick/stream/__init__.py rename to plotly-package/plotly/validators/candlestick/stream/__init__.py diff --git a/plotly/validators/carpet/__init__.py b/plotly-package/plotly/validators/carpet/__init__.py similarity index 100% rename from plotly/validators/carpet/__init__.py rename to plotly-package/plotly/validators/carpet/__init__.py diff --git a/plotly/validators/carpet/aaxis/__init__.py b/plotly-package/plotly/validators/carpet/aaxis/__init__.py similarity index 100% rename from plotly/validators/carpet/aaxis/__init__.py rename to plotly-package/plotly/validators/carpet/aaxis/__init__.py diff --git a/plotly/validators/carpet/aaxis/tickfont/__init__.py b/plotly-package/plotly/validators/carpet/aaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/carpet/aaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/carpet/aaxis/tickfont/__init__.py diff --git a/plotly/validators/carpet/aaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/carpet/aaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/carpet/aaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/carpet/aaxis/tickformatstop/__init__.py diff --git a/plotly/validators/carpet/aaxis/title/__init__.py b/plotly-package/plotly/validators/carpet/aaxis/title/__init__.py similarity index 100% rename from plotly/validators/carpet/aaxis/title/__init__.py rename to plotly-package/plotly/validators/carpet/aaxis/title/__init__.py diff --git a/plotly/validators/carpet/aaxis/title/font/__init__.py b/plotly-package/plotly/validators/carpet/aaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/carpet/aaxis/title/font/__init__.py rename to plotly-package/plotly/validators/carpet/aaxis/title/font/__init__.py diff --git a/plotly/validators/carpet/baxis/__init__.py b/plotly-package/plotly/validators/carpet/baxis/__init__.py similarity index 100% rename from plotly/validators/carpet/baxis/__init__.py rename to plotly-package/plotly/validators/carpet/baxis/__init__.py diff --git a/plotly/validators/carpet/baxis/tickfont/__init__.py b/plotly-package/plotly/validators/carpet/baxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/carpet/baxis/tickfont/__init__.py rename to plotly-package/plotly/validators/carpet/baxis/tickfont/__init__.py diff --git a/plotly/validators/carpet/baxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/carpet/baxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/carpet/baxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/carpet/baxis/tickformatstop/__init__.py diff --git a/plotly/validators/carpet/baxis/title/__init__.py b/plotly-package/plotly/validators/carpet/baxis/title/__init__.py similarity index 100% rename from plotly/validators/carpet/baxis/title/__init__.py rename to plotly-package/plotly/validators/carpet/baxis/title/__init__.py diff --git a/plotly/validators/carpet/baxis/title/font/__init__.py b/plotly-package/plotly/validators/carpet/baxis/title/font/__init__.py similarity index 100% rename from plotly/validators/carpet/baxis/title/font/__init__.py rename to plotly-package/plotly/validators/carpet/baxis/title/font/__init__.py diff --git a/plotly/validators/carpet/font/__init__.py b/plotly-package/plotly/validators/carpet/font/__init__.py similarity index 100% rename from plotly/validators/carpet/font/__init__.py rename to plotly-package/plotly/validators/carpet/font/__init__.py diff --git a/plotly/validators/carpet/hoverlabel/__init__.py b/plotly-package/plotly/validators/carpet/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/carpet/hoverlabel/__init__.py rename to plotly-package/plotly/validators/carpet/hoverlabel/__init__.py diff --git a/plotly/validators/carpet/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/carpet/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/carpet/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/carpet/hoverlabel/font/__init__.py diff --git a/plotly/validators/carpet/stream/__init__.py b/plotly-package/plotly/validators/carpet/stream/__init__.py similarity index 100% rename from plotly/validators/carpet/stream/__init__.py rename to plotly-package/plotly/validators/carpet/stream/__init__.py diff --git a/plotly/validators/choropleth/__init__.py b/plotly-package/plotly/validators/choropleth/__init__.py similarity index 100% rename from plotly/validators/choropleth/__init__.py rename to plotly-package/plotly/validators/choropleth/__init__.py diff --git a/plotly/validators/choropleth/colorbar/__init__.py b/plotly-package/plotly/validators/choropleth/colorbar/__init__.py similarity index 100% rename from plotly/validators/choropleth/colorbar/__init__.py rename to plotly-package/plotly/validators/choropleth/colorbar/__init__.py diff --git a/plotly/validators/choropleth/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/choropleth/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/choropleth/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/choropleth/colorbar/tickfont/__init__.py diff --git a/plotly/validators/choropleth/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/choropleth/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/choropleth/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/choropleth/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/choropleth/colorbar/title/__init__.py b/plotly-package/plotly/validators/choropleth/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/choropleth/colorbar/title/__init__.py rename to plotly-package/plotly/validators/choropleth/colorbar/title/__init__.py diff --git a/plotly/validators/choropleth/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/choropleth/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/choropleth/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/choropleth/colorbar/title/font/__init__.py diff --git a/plotly/validators/choropleth/hoverlabel/__init__.py b/plotly-package/plotly/validators/choropleth/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/choropleth/hoverlabel/__init__.py rename to plotly-package/plotly/validators/choropleth/hoverlabel/__init__.py diff --git a/plotly/validators/choropleth/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/choropleth/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/choropleth/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/choropleth/hoverlabel/font/__init__.py diff --git a/plotly/validators/choropleth/marker/__init__.py b/plotly-package/plotly/validators/choropleth/marker/__init__.py similarity index 100% rename from plotly/validators/choropleth/marker/__init__.py rename to plotly-package/plotly/validators/choropleth/marker/__init__.py diff --git a/plotly/validators/choropleth/marker/line/__init__.py b/plotly-package/plotly/validators/choropleth/marker/line/__init__.py similarity index 100% rename from plotly/validators/choropleth/marker/line/__init__.py rename to plotly-package/plotly/validators/choropleth/marker/line/__init__.py diff --git a/plotly/validators/choropleth/selected/__init__.py b/plotly-package/plotly/validators/choropleth/selected/__init__.py similarity index 100% rename from plotly/validators/choropleth/selected/__init__.py rename to plotly-package/plotly/validators/choropleth/selected/__init__.py diff --git a/plotly/validators/choropleth/selected/marker/__init__.py b/plotly-package/plotly/validators/choropleth/selected/marker/__init__.py similarity index 100% rename from plotly/validators/choropleth/selected/marker/__init__.py rename to plotly-package/plotly/validators/choropleth/selected/marker/__init__.py diff --git a/plotly/validators/choropleth/stream/__init__.py b/plotly-package/plotly/validators/choropleth/stream/__init__.py similarity index 100% rename from plotly/validators/choropleth/stream/__init__.py rename to plotly-package/plotly/validators/choropleth/stream/__init__.py diff --git a/plotly/validators/choropleth/unselected/__init__.py b/plotly-package/plotly/validators/choropleth/unselected/__init__.py similarity index 100% rename from plotly/validators/choropleth/unselected/__init__.py rename to plotly-package/plotly/validators/choropleth/unselected/__init__.py diff --git a/plotly/validators/choropleth/unselected/marker/__init__.py b/plotly-package/plotly/validators/choropleth/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/choropleth/unselected/marker/__init__.py rename to plotly-package/plotly/validators/choropleth/unselected/marker/__init__.py diff --git a/plotly/validators/cone/__init__.py b/plotly-package/plotly/validators/cone/__init__.py similarity index 100% rename from plotly/validators/cone/__init__.py rename to plotly-package/plotly/validators/cone/__init__.py diff --git a/plotly/validators/cone/colorbar/__init__.py b/plotly-package/plotly/validators/cone/colorbar/__init__.py similarity index 100% rename from plotly/validators/cone/colorbar/__init__.py rename to plotly-package/plotly/validators/cone/colorbar/__init__.py diff --git a/plotly/validators/cone/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/cone/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/cone/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/cone/colorbar/tickfont/__init__.py diff --git a/plotly/validators/cone/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/cone/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/cone/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/cone/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/cone/colorbar/title/__init__.py b/plotly-package/plotly/validators/cone/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/cone/colorbar/title/__init__.py rename to plotly-package/plotly/validators/cone/colorbar/title/__init__.py diff --git a/plotly/validators/cone/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/cone/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/cone/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/cone/colorbar/title/font/__init__.py diff --git a/plotly/validators/cone/hoverlabel/__init__.py b/plotly-package/plotly/validators/cone/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/cone/hoverlabel/__init__.py rename to plotly-package/plotly/validators/cone/hoverlabel/__init__.py diff --git a/plotly/validators/cone/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/cone/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/cone/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/cone/hoverlabel/font/__init__.py diff --git a/plotly/validators/cone/lighting/__init__.py b/plotly-package/plotly/validators/cone/lighting/__init__.py similarity index 100% rename from plotly/validators/cone/lighting/__init__.py rename to plotly-package/plotly/validators/cone/lighting/__init__.py diff --git a/plotly/validators/cone/lightposition/__init__.py b/plotly-package/plotly/validators/cone/lightposition/__init__.py similarity index 100% rename from plotly/validators/cone/lightposition/__init__.py rename to plotly-package/plotly/validators/cone/lightposition/__init__.py diff --git a/plotly/validators/cone/stream/__init__.py b/plotly-package/plotly/validators/cone/stream/__init__.py similarity index 100% rename from plotly/validators/cone/stream/__init__.py rename to plotly-package/plotly/validators/cone/stream/__init__.py diff --git a/plotly/validators/contour/__init__.py b/plotly-package/plotly/validators/contour/__init__.py similarity index 100% rename from plotly/validators/contour/__init__.py rename to plotly-package/plotly/validators/contour/__init__.py diff --git a/plotly/validators/contour/colorbar/__init__.py b/plotly-package/plotly/validators/contour/colorbar/__init__.py similarity index 100% rename from plotly/validators/contour/colorbar/__init__.py rename to plotly-package/plotly/validators/contour/colorbar/__init__.py diff --git a/plotly/validators/contour/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/contour/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/contour/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/contour/colorbar/tickfont/__init__.py diff --git a/plotly/validators/contour/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/contour/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/contour/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/contour/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/contour/colorbar/title/__init__.py b/plotly-package/plotly/validators/contour/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/contour/colorbar/title/__init__.py rename to plotly-package/plotly/validators/contour/colorbar/title/__init__.py diff --git a/plotly/validators/contour/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/contour/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/contour/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/contour/colorbar/title/font/__init__.py diff --git a/plotly/validators/contour/contours/__init__.py b/plotly-package/plotly/validators/contour/contours/__init__.py similarity index 100% rename from plotly/validators/contour/contours/__init__.py rename to plotly-package/plotly/validators/contour/contours/__init__.py diff --git a/plotly/validators/contour/contours/labelfont/__init__.py b/plotly-package/plotly/validators/contour/contours/labelfont/__init__.py similarity index 100% rename from plotly/validators/contour/contours/labelfont/__init__.py rename to plotly-package/plotly/validators/contour/contours/labelfont/__init__.py diff --git a/plotly/validators/contour/hoverlabel/__init__.py b/plotly-package/plotly/validators/contour/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/contour/hoverlabel/__init__.py rename to plotly-package/plotly/validators/contour/hoverlabel/__init__.py diff --git a/plotly/validators/contour/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/contour/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/contour/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/contour/hoverlabel/font/__init__.py diff --git a/plotly/validators/contour/line/__init__.py b/plotly-package/plotly/validators/contour/line/__init__.py similarity index 100% rename from plotly/validators/contour/line/__init__.py rename to plotly-package/plotly/validators/contour/line/__init__.py diff --git a/plotly/validators/contour/stream/__init__.py b/plotly-package/plotly/validators/contour/stream/__init__.py similarity index 100% rename from plotly/validators/contour/stream/__init__.py rename to plotly-package/plotly/validators/contour/stream/__init__.py diff --git a/plotly/validators/contourcarpet/__init__.py b/plotly-package/plotly/validators/contourcarpet/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/__init__.py rename to plotly-package/plotly/validators/contourcarpet/__init__.py diff --git a/plotly/validators/contourcarpet/colorbar/__init__.py b/plotly-package/plotly/validators/contourcarpet/colorbar/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/colorbar/__init__.py rename to plotly-package/plotly/validators/contourcarpet/colorbar/__init__.py diff --git a/plotly/validators/contourcarpet/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/contourcarpet/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/contourcarpet/colorbar/tickfont/__init__.py diff --git a/plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/contourcarpet/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/contourcarpet/colorbar/title/__init__.py b/plotly-package/plotly/validators/contourcarpet/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/colorbar/title/__init__.py rename to plotly-package/plotly/validators/contourcarpet/colorbar/title/__init__.py diff --git a/plotly/validators/contourcarpet/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/contourcarpet/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/contourcarpet/colorbar/title/font/__init__.py diff --git a/plotly/validators/contourcarpet/contours/__init__.py b/plotly-package/plotly/validators/contourcarpet/contours/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/contours/__init__.py rename to plotly-package/plotly/validators/contourcarpet/contours/__init__.py diff --git a/plotly/validators/contourcarpet/contours/labelfont/__init__.py b/plotly-package/plotly/validators/contourcarpet/contours/labelfont/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/contours/labelfont/__init__.py rename to plotly-package/plotly/validators/contourcarpet/contours/labelfont/__init__.py diff --git a/plotly/validators/contourcarpet/hoverlabel/__init__.py b/plotly-package/plotly/validators/contourcarpet/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/hoverlabel/__init__.py rename to plotly-package/plotly/validators/contourcarpet/hoverlabel/__init__.py diff --git a/plotly/validators/contourcarpet/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/contourcarpet/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/contourcarpet/hoverlabel/font/__init__.py diff --git a/plotly/validators/contourcarpet/line/__init__.py b/plotly-package/plotly/validators/contourcarpet/line/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/line/__init__.py rename to plotly-package/plotly/validators/contourcarpet/line/__init__.py diff --git a/plotly/validators/contourcarpet/stream/__init__.py b/plotly-package/plotly/validators/contourcarpet/stream/__init__.py similarity index 100% rename from plotly/validators/contourcarpet/stream/__init__.py rename to plotly-package/plotly/validators/contourcarpet/stream/__init__.py diff --git a/plotly/validators/frame/__init__.py b/plotly-package/plotly/validators/frame/__init__.py similarity index 100% rename from plotly/validators/frame/__init__.py rename to plotly-package/plotly/validators/frame/__init__.py diff --git a/plotly/validators/funnel/__init__.py b/plotly-package/plotly/validators/funnel/__init__.py similarity index 100% rename from plotly/validators/funnel/__init__.py rename to plotly-package/plotly/validators/funnel/__init__.py diff --git a/plotly/validators/funnel/connector/__init__.py b/plotly-package/plotly/validators/funnel/connector/__init__.py similarity index 100% rename from plotly/validators/funnel/connector/__init__.py rename to plotly-package/plotly/validators/funnel/connector/__init__.py diff --git a/plotly/validators/funnel/connector/line/__init__.py b/plotly-package/plotly/validators/funnel/connector/line/__init__.py similarity index 100% rename from plotly/validators/funnel/connector/line/__init__.py rename to plotly-package/plotly/validators/funnel/connector/line/__init__.py diff --git a/plotly/validators/funnel/hoverlabel/__init__.py b/plotly-package/plotly/validators/funnel/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/funnel/hoverlabel/__init__.py rename to plotly-package/plotly/validators/funnel/hoverlabel/__init__.py diff --git a/plotly/validators/funnel/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/funnel/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/funnel/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/funnel/hoverlabel/font/__init__.py diff --git a/plotly/validators/funnel/insidetextfont/__init__.py b/plotly-package/plotly/validators/funnel/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/funnel/insidetextfont/__init__.py rename to plotly-package/plotly/validators/funnel/insidetextfont/__init__.py diff --git a/plotly/validators/funnel/marker/__init__.py b/plotly-package/plotly/validators/funnel/marker/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/__init__.py rename to plotly-package/plotly/validators/funnel/marker/__init__.py diff --git a/plotly/validators/funnel/marker/colorbar/__init__.py b/plotly-package/plotly/validators/funnel/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/funnel/marker/colorbar/__init__.py diff --git a/plotly/validators/funnel/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/funnel/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/funnel/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/funnel/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/funnel/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/funnel/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/funnel/marker/colorbar/title/__init__.py diff --git a/plotly/validators/funnel/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/funnel/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/funnel/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/funnel/marker/line/__init__.py b/plotly-package/plotly/validators/funnel/marker/line/__init__.py similarity index 100% rename from plotly/validators/funnel/marker/line/__init__.py rename to plotly-package/plotly/validators/funnel/marker/line/__init__.py diff --git a/plotly/validators/funnel/outsidetextfont/__init__.py b/plotly-package/plotly/validators/funnel/outsidetextfont/__init__.py similarity index 100% rename from plotly/validators/funnel/outsidetextfont/__init__.py rename to plotly-package/plotly/validators/funnel/outsidetextfont/__init__.py diff --git a/plotly/validators/funnel/stream/__init__.py b/plotly-package/plotly/validators/funnel/stream/__init__.py similarity index 100% rename from plotly/validators/funnel/stream/__init__.py rename to plotly-package/plotly/validators/funnel/stream/__init__.py diff --git a/plotly/validators/funnel/textfont/__init__.py b/plotly-package/plotly/validators/funnel/textfont/__init__.py similarity index 100% rename from plotly/validators/funnel/textfont/__init__.py rename to plotly-package/plotly/validators/funnel/textfont/__init__.py diff --git a/plotly/validators/funnelarea/__init__.py b/plotly-package/plotly/validators/funnelarea/__init__.py similarity index 100% rename from plotly/validators/funnelarea/__init__.py rename to plotly-package/plotly/validators/funnelarea/__init__.py diff --git a/plotly/validators/funnelarea/domain/__init__.py b/plotly-package/plotly/validators/funnelarea/domain/__init__.py similarity index 100% rename from plotly/validators/funnelarea/domain/__init__.py rename to plotly-package/plotly/validators/funnelarea/domain/__init__.py diff --git a/plotly/validators/funnelarea/hoverlabel/__init__.py b/plotly-package/plotly/validators/funnelarea/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/funnelarea/hoverlabel/__init__.py rename to plotly-package/plotly/validators/funnelarea/hoverlabel/__init__.py diff --git a/plotly/validators/funnelarea/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/funnelarea/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/funnelarea/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/funnelarea/hoverlabel/font/__init__.py diff --git a/plotly/validators/funnelarea/insidetextfont/__init__.py b/plotly-package/plotly/validators/funnelarea/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/funnelarea/insidetextfont/__init__.py rename to plotly-package/plotly/validators/funnelarea/insidetextfont/__init__.py diff --git a/plotly/validators/funnelarea/marker/__init__.py b/plotly-package/plotly/validators/funnelarea/marker/__init__.py similarity index 100% rename from plotly/validators/funnelarea/marker/__init__.py rename to plotly-package/plotly/validators/funnelarea/marker/__init__.py diff --git a/plotly/validators/funnelarea/marker/line/__init__.py b/plotly-package/plotly/validators/funnelarea/marker/line/__init__.py similarity index 100% rename from plotly/validators/funnelarea/marker/line/__init__.py rename to plotly-package/plotly/validators/funnelarea/marker/line/__init__.py diff --git a/plotly/validators/funnelarea/stream/__init__.py b/plotly-package/plotly/validators/funnelarea/stream/__init__.py similarity index 100% rename from plotly/validators/funnelarea/stream/__init__.py rename to plotly-package/plotly/validators/funnelarea/stream/__init__.py diff --git a/plotly/validators/funnelarea/textfont/__init__.py b/plotly-package/plotly/validators/funnelarea/textfont/__init__.py similarity index 100% rename from plotly/validators/funnelarea/textfont/__init__.py rename to plotly-package/plotly/validators/funnelarea/textfont/__init__.py diff --git a/plotly/validators/funnelarea/title/__init__.py b/plotly-package/plotly/validators/funnelarea/title/__init__.py similarity index 100% rename from plotly/validators/funnelarea/title/__init__.py rename to plotly-package/plotly/validators/funnelarea/title/__init__.py diff --git a/plotly/validators/funnelarea/title/font/__init__.py b/plotly-package/plotly/validators/funnelarea/title/font/__init__.py similarity index 100% rename from plotly/validators/funnelarea/title/font/__init__.py rename to plotly-package/plotly/validators/funnelarea/title/font/__init__.py diff --git a/plotly/validators/heatmap/__init__.py b/plotly-package/plotly/validators/heatmap/__init__.py similarity index 100% rename from plotly/validators/heatmap/__init__.py rename to plotly-package/plotly/validators/heatmap/__init__.py diff --git a/plotly/validators/heatmap/colorbar/__init__.py b/plotly-package/plotly/validators/heatmap/colorbar/__init__.py similarity index 100% rename from plotly/validators/heatmap/colorbar/__init__.py rename to plotly-package/plotly/validators/heatmap/colorbar/__init__.py diff --git a/plotly/validators/heatmap/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/heatmap/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/heatmap/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/heatmap/colorbar/tickfont/__init__.py diff --git a/plotly/validators/heatmap/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/heatmap/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/heatmap/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/heatmap/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/heatmap/colorbar/title/__init__.py b/plotly-package/plotly/validators/heatmap/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/heatmap/colorbar/title/__init__.py rename to plotly-package/plotly/validators/heatmap/colorbar/title/__init__.py diff --git a/plotly/validators/heatmap/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/heatmap/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/heatmap/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/heatmap/colorbar/title/font/__init__.py diff --git a/plotly/validators/heatmap/hoverlabel/__init__.py b/plotly-package/plotly/validators/heatmap/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/heatmap/hoverlabel/__init__.py rename to plotly-package/plotly/validators/heatmap/hoverlabel/__init__.py diff --git a/plotly/validators/heatmap/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/heatmap/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/heatmap/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/heatmap/hoverlabel/font/__init__.py diff --git a/plotly/validators/heatmap/stream/__init__.py b/plotly-package/plotly/validators/heatmap/stream/__init__.py similarity index 100% rename from plotly/validators/heatmap/stream/__init__.py rename to plotly-package/plotly/validators/heatmap/stream/__init__.py diff --git a/plotly/validators/heatmapgl/__init__.py b/plotly-package/plotly/validators/heatmapgl/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/__init__.py rename to plotly-package/plotly/validators/heatmapgl/__init__.py diff --git a/plotly/validators/heatmapgl/colorbar/__init__.py b/plotly-package/plotly/validators/heatmapgl/colorbar/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/colorbar/__init__.py rename to plotly-package/plotly/validators/heatmapgl/colorbar/__init__.py diff --git a/plotly/validators/heatmapgl/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/heatmapgl/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/heatmapgl/colorbar/tickfont/__init__.py diff --git a/plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/heatmapgl/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/heatmapgl/colorbar/title/__init__.py b/plotly-package/plotly/validators/heatmapgl/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/colorbar/title/__init__.py rename to plotly-package/plotly/validators/heatmapgl/colorbar/title/__init__.py diff --git a/plotly/validators/heatmapgl/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/heatmapgl/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/heatmapgl/colorbar/title/font/__init__.py diff --git a/plotly/validators/heatmapgl/hoverlabel/__init__.py b/plotly-package/plotly/validators/heatmapgl/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/hoverlabel/__init__.py rename to plotly-package/plotly/validators/heatmapgl/hoverlabel/__init__.py diff --git a/plotly/validators/heatmapgl/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/heatmapgl/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/heatmapgl/hoverlabel/font/__init__.py diff --git a/plotly/validators/heatmapgl/stream/__init__.py b/plotly-package/plotly/validators/heatmapgl/stream/__init__.py similarity index 100% rename from plotly/validators/heatmapgl/stream/__init__.py rename to plotly-package/plotly/validators/heatmapgl/stream/__init__.py diff --git a/plotly/validators/histogram/__init__.py b/plotly-package/plotly/validators/histogram/__init__.py similarity index 100% rename from plotly/validators/histogram/__init__.py rename to plotly-package/plotly/validators/histogram/__init__.py diff --git a/plotly/validators/histogram/cumulative/__init__.py b/plotly-package/plotly/validators/histogram/cumulative/__init__.py similarity index 100% rename from plotly/validators/histogram/cumulative/__init__.py rename to plotly-package/plotly/validators/histogram/cumulative/__init__.py diff --git a/plotly/validators/histogram/error_x/__init__.py b/plotly-package/plotly/validators/histogram/error_x/__init__.py similarity index 100% rename from plotly/validators/histogram/error_x/__init__.py rename to plotly-package/plotly/validators/histogram/error_x/__init__.py diff --git a/plotly/validators/histogram/error_y/__init__.py b/plotly-package/plotly/validators/histogram/error_y/__init__.py similarity index 100% rename from plotly/validators/histogram/error_y/__init__.py rename to plotly-package/plotly/validators/histogram/error_y/__init__.py diff --git a/plotly/validators/histogram/hoverlabel/__init__.py b/plotly-package/plotly/validators/histogram/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/histogram/hoverlabel/__init__.py rename to plotly-package/plotly/validators/histogram/hoverlabel/__init__.py diff --git a/plotly/validators/histogram/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/histogram/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/histogram/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/histogram/hoverlabel/font/__init__.py diff --git a/plotly/validators/histogram/marker/__init__.py b/plotly-package/plotly/validators/histogram/marker/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/__init__.py rename to plotly-package/plotly/validators/histogram/marker/__init__.py diff --git a/plotly/validators/histogram/marker/colorbar/__init__.py b/plotly-package/plotly/validators/histogram/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/histogram/marker/colorbar/__init__.py diff --git a/plotly/validators/histogram/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/histogram/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/histogram/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/histogram/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/histogram/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/histogram/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/histogram/marker/colorbar/title/__init__.py diff --git a/plotly/validators/histogram/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/histogram/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/histogram/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/histogram/marker/line/__init__.py b/plotly-package/plotly/validators/histogram/marker/line/__init__.py similarity index 100% rename from plotly/validators/histogram/marker/line/__init__.py rename to plotly-package/plotly/validators/histogram/marker/line/__init__.py diff --git a/plotly/validators/histogram/selected/__init__.py b/plotly-package/plotly/validators/histogram/selected/__init__.py similarity index 100% rename from plotly/validators/histogram/selected/__init__.py rename to plotly-package/plotly/validators/histogram/selected/__init__.py diff --git a/plotly/validators/histogram/selected/marker/__init__.py b/plotly-package/plotly/validators/histogram/selected/marker/__init__.py similarity index 100% rename from plotly/validators/histogram/selected/marker/__init__.py rename to plotly-package/plotly/validators/histogram/selected/marker/__init__.py diff --git a/plotly/validators/histogram/selected/textfont/__init__.py b/plotly-package/plotly/validators/histogram/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/histogram/selected/textfont/__init__.py rename to plotly-package/plotly/validators/histogram/selected/textfont/__init__.py diff --git a/plotly/validators/histogram/stream/__init__.py b/plotly-package/plotly/validators/histogram/stream/__init__.py similarity index 100% rename from plotly/validators/histogram/stream/__init__.py rename to plotly-package/plotly/validators/histogram/stream/__init__.py diff --git a/plotly/validators/histogram/unselected/__init__.py b/plotly-package/plotly/validators/histogram/unselected/__init__.py similarity index 100% rename from plotly/validators/histogram/unselected/__init__.py rename to plotly-package/plotly/validators/histogram/unselected/__init__.py diff --git a/plotly/validators/histogram/unselected/marker/__init__.py b/plotly-package/plotly/validators/histogram/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/histogram/unselected/marker/__init__.py rename to plotly-package/plotly/validators/histogram/unselected/marker/__init__.py diff --git a/plotly/validators/histogram/unselected/textfont/__init__.py b/plotly-package/plotly/validators/histogram/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/histogram/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/histogram/unselected/textfont/__init__.py diff --git a/plotly/validators/histogram/xbins/__init__.py b/plotly-package/plotly/validators/histogram/xbins/__init__.py similarity index 100% rename from plotly/validators/histogram/xbins/__init__.py rename to plotly-package/plotly/validators/histogram/xbins/__init__.py diff --git a/plotly/validators/histogram/ybins/__init__.py b/plotly-package/plotly/validators/histogram/ybins/__init__.py similarity index 100% rename from plotly/validators/histogram/ybins/__init__.py rename to plotly-package/plotly/validators/histogram/ybins/__init__.py diff --git a/plotly/validators/histogram2d/__init__.py b/plotly-package/plotly/validators/histogram2d/__init__.py similarity index 100% rename from plotly/validators/histogram2d/__init__.py rename to plotly-package/plotly/validators/histogram2d/__init__.py diff --git a/plotly/validators/histogram2d/colorbar/__init__.py b/plotly-package/plotly/validators/histogram2d/colorbar/__init__.py similarity index 100% rename from plotly/validators/histogram2d/colorbar/__init__.py rename to plotly-package/plotly/validators/histogram2d/colorbar/__init__.py diff --git a/plotly/validators/histogram2d/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/histogram2d/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/histogram2d/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/histogram2d/colorbar/tickfont/__init__.py diff --git a/plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/histogram2d/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/histogram2d/colorbar/title/__init__.py b/plotly-package/plotly/validators/histogram2d/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/histogram2d/colorbar/title/__init__.py rename to plotly-package/plotly/validators/histogram2d/colorbar/title/__init__.py diff --git a/plotly/validators/histogram2d/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/histogram2d/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/histogram2d/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/histogram2d/colorbar/title/font/__init__.py diff --git a/plotly/validators/histogram2d/hoverlabel/__init__.py b/plotly-package/plotly/validators/histogram2d/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/histogram2d/hoverlabel/__init__.py rename to plotly-package/plotly/validators/histogram2d/hoverlabel/__init__.py diff --git a/plotly/validators/histogram2d/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/histogram2d/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/histogram2d/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/histogram2d/hoverlabel/font/__init__.py diff --git a/plotly/validators/histogram2d/marker/__init__.py b/plotly-package/plotly/validators/histogram2d/marker/__init__.py similarity index 100% rename from plotly/validators/histogram2d/marker/__init__.py rename to plotly-package/plotly/validators/histogram2d/marker/__init__.py diff --git a/plotly/validators/histogram2d/stream/__init__.py b/plotly-package/plotly/validators/histogram2d/stream/__init__.py similarity index 100% rename from plotly/validators/histogram2d/stream/__init__.py rename to plotly-package/plotly/validators/histogram2d/stream/__init__.py diff --git a/plotly/validators/histogram2d/xbins/__init__.py b/plotly-package/plotly/validators/histogram2d/xbins/__init__.py similarity index 100% rename from plotly/validators/histogram2d/xbins/__init__.py rename to plotly-package/plotly/validators/histogram2d/xbins/__init__.py diff --git a/plotly/validators/histogram2d/ybins/__init__.py b/plotly-package/plotly/validators/histogram2d/ybins/__init__.py similarity index 100% rename from plotly/validators/histogram2d/ybins/__init__.py rename to plotly-package/plotly/validators/histogram2d/ybins/__init__.py diff --git a/plotly/validators/histogram2dcontour/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/__init__.py diff --git a/plotly/validators/histogram2dcontour/colorbar/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/colorbar/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/colorbar/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/colorbar/__init__.py diff --git a/plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/colorbar/tickfont/__init__.py diff --git a/plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/histogram2dcontour/colorbar/title/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/colorbar/title/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/colorbar/title/__init__.py diff --git a/plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/colorbar/title/font/__init__.py diff --git a/plotly/validators/histogram2dcontour/contours/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/contours/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/contours/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/contours/__init__.py diff --git a/plotly/validators/histogram2dcontour/contours/labelfont/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/contours/labelfont/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/contours/labelfont/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/contours/labelfont/__init__.py diff --git a/plotly/validators/histogram2dcontour/hoverlabel/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/hoverlabel/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/hoverlabel/__init__.py diff --git a/plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/hoverlabel/font/__init__.py diff --git a/plotly/validators/histogram2dcontour/line/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/line/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/line/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/line/__init__.py diff --git a/plotly/validators/histogram2dcontour/marker/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/marker/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/marker/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/marker/__init__.py diff --git a/plotly/validators/histogram2dcontour/stream/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/stream/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/stream/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/stream/__init__.py diff --git a/plotly/validators/histogram2dcontour/xbins/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/xbins/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/xbins/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/xbins/__init__.py diff --git a/plotly/validators/histogram2dcontour/ybins/__init__.py b/plotly-package/plotly/validators/histogram2dcontour/ybins/__init__.py similarity index 100% rename from plotly/validators/histogram2dcontour/ybins/__init__.py rename to plotly-package/plotly/validators/histogram2dcontour/ybins/__init__.py diff --git a/plotly/validators/isosurface/__init__.py b/plotly-package/plotly/validators/isosurface/__init__.py similarity index 100% rename from plotly/validators/isosurface/__init__.py rename to plotly-package/plotly/validators/isosurface/__init__.py diff --git a/plotly/validators/isosurface/caps/__init__.py b/plotly-package/plotly/validators/isosurface/caps/__init__.py similarity index 100% rename from plotly/validators/isosurface/caps/__init__.py rename to plotly-package/plotly/validators/isosurface/caps/__init__.py diff --git a/plotly/validators/isosurface/caps/x/__init__.py b/plotly-package/plotly/validators/isosurface/caps/x/__init__.py similarity index 100% rename from plotly/validators/isosurface/caps/x/__init__.py rename to plotly-package/plotly/validators/isosurface/caps/x/__init__.py diff --git a/plotly/validators/isosurface/caps/y/__init__.py b/plotly-package/plotly/validators/isosurface/caps/y/__init__.py similarity index 100% rename from plotly/validators/isosurface/caps/y/__init__.py rename to plotly-package/plotly/validators/isosurface/caps/y/__init__.py diff --git a/plotly/validators/isosurface/caps/z/__init__.py b/plotly-package/plotly/validators/isosurface/caps/z/__init__.py similarity index 100% rename from plotly/validators/isosurface/caps/z/__init__.py rename to plotly-package/plotly/validators/isosurface/caps/z/__init__.py diff --git a/plotly/validators/isosurface/colorbar/__init__.py b/plotly-package/plotly/validators/isosurface/colorbar/__init__.py similarity index 100% rename from plotly/validators/isosurface/colorbar/__init__.py rename to plotly-package/plotly/validators/isosurface/colorbar/__init__.py diff --git a/plotly/validators/isosurface/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/isosurface/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/isosurface/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/isosurface/colorbar/tickfont/__init__.py diff --git a/plotly/validators/isosurface/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/isosurface/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/isosurface/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/isosurface/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/isosurface/colorbar/title/__init__.py b/plotly-package/plotly/validators/isosurface/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/isosurface/colorbar/title/__init__.py rename to plotly-package/plotly/validators/isosurface/colorbar/title/__init__.py diff --git a/plotly/validators/isosurface/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/isosurface/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/isosurface/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/isosurface/colorbar/title/font/__init__.py diff --git a/plotly/validators/isosurface/contour/__init__.py b/plotly-package/plotly/validators/isosurface/contour/__init__.py similarity index 100% rename from plotly/validators/isosurface/contour/__init__.py rename to plotly-package/plotly/validators/isosurface/contour/__init__.py diff --git a/plotly/validators/isosurface/hoverlabel/__init__.py b/plotly-package/plotly/validators/isosurface/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/isosurface/hoverlabel/__init__.py rename to plotly-package/plotly/validators/isosurface/hoverlabel/__init__.py diff --git a/plotly/validators/isosurface/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/isosurface/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/isosurface/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/isosurface/hoverlabel/font/__init__.py diff --git a/plotly/validators/isosurface/lighting/__init__.py b/plotly-package/plotly/validators/isosurface/lighting/__init__.py similarity index 100% rename from plotly/validators/isosurface/lighting/__init__.py rename to plotly-package/plotly/validators/isosurface/lighting/__init__.py diff --git a/plotly/validators/isosurface/lightposition/__init__.py b/plotly-package/plotly/validators/isosurface/lightposition/__init__.py similarity index 100% rename from plotly/validators/isosurface/lightposition/__init__.py rename to plotly-package/plotly/validators/isosurface/lightposition/__init__.py diff --git a/plotly/validators/isosurface/slices/__init__.py b/plotly-package/plotly/validators/isosurface/slices/__init__.py similarity index 100% rename from plotly/validators/isosurface/slices/__init__.py rename to plotly-package/plotly/validators/isosurface/slices/__init__.py diff --git a/plotly/validators/isosurface/slices/x/__init__.py b/plotly-package/plotly/validators/isosurface/slices/x/__init__.py similarity index 100% rename from plotly/validators/isosurface/slices/x/__init__.py rename to plotly-package/plotly/validators/isosurface/slices/x/__init__.py diff --git a/plotly/validators/isosurface/slices/y/__init__.py b/plotly-package/plotly/validators/isosurface/slices/y/__init__.py similarity index 100% rename from plotly/validators/isosurface/slices/y/__init__.py rename to plotly-package/plotly/validators/isosurface/slices/y/__init__.py diff --git a/plotly/validators/isosurface/slices/z/__init__.py b/plotly-package/plotly/validators/isosurface/slices/z/__init__.py similarity index 100% rename from plotly/validators/isosurface/slices/z/__init__.py rename to plotly-package/plotly/validators/isosurface/slices/z/__init__.py diff --git a/plotly/validators/isosurface/spaceframe/__init__.py b/plotly-package/plotly/validators/isosurface/spaceframe/__init__.py similarity index 100% rename from plotly/validators/isosurface/spaceframe/__init__.py rename to plotly-package/plotly/validators/isosurface/spaceframe/__init__.py diff --git a/plotly/validators/isosurface/stream/__init__.py b/plotly-package/plotly/validators/isosurface/stream/__init__.py similarity index 100% rename from plotly/validators/isosurface/stream/__init__.py rename to plotly-package/plotly/validators/isosurface/stream/__init__.py diff --git a/plotly/validators/isosurface/surface/__init__.py b/plotly-package/plotly/validators/isosurface/surface/__init__.py similarity index 100% rename from plotly/validators/isosurface/surface/__init__.py rename to plotly-package/plotly/validators/isosurface/surface/__init__.py diff --git a/plotly/validators/layout/__init__.py b/plotly-package/plotly/validators/layout/__init__.py similarity index 100% rename from plotly/validators/layout/__init__.py rename to plotly-package/plotly/validators/layout/__init__.py diff --git a/plotly/validators/layout/angularaxis/__init__.py b/plotly-package/plotly/validators/layout/angularaxis/__init__.py similarity index 100% rename from plotly/validators/layout/angularaxis/__init__.py rename to plotly-package/plotly/validators/layout/angularaxis/__init__.py diff --git a/plotly/validators/layout/annotation/__init__.py b/plotly-package/plotly/validators/layout/annotation/__init__.py similarity index 100% rename from plotly/validators/layout/annotation/__init__.py rename to plotly-package/plotly/validators/layout/annotation/__init__.py diff --git a/plotly/validators/layout/annotation/font/__init__.py b/plotly-package/plotly/validators/layout/annotation/font/__init__.py similarity index 100% rename from plotly/validators/layout/annotation/font/__init__.py rename to plotly-package/plotly/validators/layout/annotation/font/__init__.py diff --git a/plotly/validators/layout/annotation/hoverlabel/__init__.py b/plotly-package/plotly/validators/layout/annotation/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/layout/annotation/hoverlabel/__init__.py rename to plotly-package/plotly/validators/layout/annotation/hoverlabel/__init__.py diff --git a/plotly/validators/layout/annotation/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/layout/annotation/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/layout/annotation/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/layout/annotation/hoverlabel/font/__init__.py diff --git a/plotly/validators/layout/coloraxis/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/__init__.py diff --git a/plotly/validators/layout/coloraxis/colorbar/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/colorbar/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/colorbar/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/colorbar/__init__.py diff --git a/plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/colorbar/tickfont/__init__.py diff --git a/plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/layout/coloraxis/colorbar/title/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/colorbar/title/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/colorbar/title/__init__.py diff --git a/plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/layout/coloraxis/colorbar/title/font/__init__.py diff --git a/plotly/validators/layout/colorscale/__init__.py b/plotly-package/plotly/validators/layout/colorscale/__init__.py similarity index 100% rename from plotly/validators/layout/colorscale/__init__.py rename to plotly-package/plotly/validators/layout/colorscale/__init__.py diff --git a/plotly/validators/layout/font/__init__.py b/plotly-package/plotly/validators/layout/font/__init__.py similarity index 100% rename from plotly/validators/layout/font/__init__.py rename to plotly-package/plotly/validators/layout/font/__init__.py diff --git a/plotly/validators/layout/geo/__init__.py b/plotly-package/plotly/validators/layout/geo/__init__.py similarity index 100% rename from plotly/validators/layout/geo/__init__.py rename to plotly-package/plotly/validators/layout/geo/__init__.py diff --git a/plotly/validators/layout/geo/center/__init__.py b/plotly-package/plotly/validators/layout/geo/center/__init__.py similarity index 100% rename from plotly/validators/layout/geo/center/__init__.py rename to plotly-package/plotly/validators/layout/geo/center/__init__.py diff --git a/plotly/validators/layout/geo/domain/__init__.py b/plotly-package/plotly/validators/layout/geo/domain/__init__.py similarity index 100% rename from plotly/validators/layout/geo/domain/__init__.py rename to plotly-package/plotly/validators/layout/geo/domain/__init__.py diff --git a/plotly/validators/layout/geo/lataxis/__init__.py b/plotly-package/plotly/validators/layout/geo/lataxis/__init__.py similarity index 100% rename from plotly/validators/layout/geo/lataxis/__init__.py rename to plotly-package/plotly/validators/layout/geo/lataxis/__init__.py diff --git a/plotly/validators/layout/geo/lonaxis/__init__.py b/plotly-package/plotly/validators/layout/geo/lonaxis/__init__.py similarity index 100% rename from plotly/validators/layout/geo/lonaxis/__init__.py rename to plotly-package/plotly/validators/layout/geo/lonaxis/__init__.py diff --git a/plotly/validators/layout/geo/projection/__init__.py b/plotly-package/plotly/validators/layout/geo/projection/__init__.py similarity index 100% rename from plotly/validators/layout/geo/projection/__init__.py rename to plotly-package/plotly/validators/layout/geo/projection/__init__.py diff --git a/plotly/validators/layout/geo/projection/rotation/__init__.py b/plotly-package/plotly/validators/layout/geo/projection/rotation/__init__.py similarity index 100% rename from plotly/validators/layout/geo/projection/rotation/__init__.py rename to plotly-package/plotly/validators/layout/geo/projection/rotation/__init__.py diff --git a/plotly/validators/layout/grid/__init__.py b/plotly-package/plotly/validators/layout/grid/__init__.py similarity index 100% rename from plotly/validators/layout/grid/__init__.py rename to plotly-package/plotly/validators/layout/grid/__init__.py diff --git a/plotly/validators/layout/grid/domain/__init__.py b/plotly-package/plotly/validators/layout/grid/domain/__init__.py similarity index 100% rename from plotly/validators/layout/grid/domain/__init__.py rename to plotly-package/plotly/validators/layout/grid/domain/__init__.py diff --git a/plotly/validators/layout/hoverlabel/__init__.py b/plotly-package/plotly/validators/layout/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/layout/hoverlabel/__init__.py rename to plotly-package/plotly/validators/layout/hoverlabel/__init__.py diff --git a/plotly/validators/layout/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/layout/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/layout/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/layout/hoverlabel/font/__init__.py diff --git a/plotly/validators/layout/image/__init__.py b/plotly-package/plotly/validators/layout/image/__init__.py similarity index 100% rename from plotly/validators/layout/image/__init__.py rename to plotly-package/plotly/validators/layout/image/__init__.py diff --git a/plotly/validators/layout/legend/__init__.py b/plotly-package/plotly/validators/layout/legend/__init__.py similarity index 100% rename from plotly/validators/layout/legend/__init__.py rename to plotly-package/plotly/validators/layout/legend/__init__.py diff --git a/plotly/validators/layout/legend/font/__init__.py b/plotly-package/plotly/validators/layout/legend/font/__init__.py similarity index 100% rename from plotly/validators/layout/legend/font/__init__.py rename to plotly-package/plotly/validators/layout/legend/font/__init__.py diff --git a/plotly/validators/layout/mapbox/__init__.py b/plotly-package/plotly/validators/layout/mapbox/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/__init__.py diff --git a/plotly/validators/layout/mapbox/center/__init__.py b/plotly-package/plotly/validators/layout/mapbox/center/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/center/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/center/__init__.py diff --git a/plotly/validators/layout/mapbox/domain/__init__.py b/plotly-package/plotly/validators/layout/mapbox/domain/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/domain/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/domain/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/circle/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/circle/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/circle/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/circle/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/fill/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/fill/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/fill/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/fill/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/line/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/line/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/line/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/line/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/symbol/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/symbol/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/symbol/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/symbol/__init__.py diff --git a/plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py b/plotly-package/plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py similarity index 100% rename from plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py rename to plotly-package/plotly/validators/layout/mapbox/layer/symbol/textfont/__init__.py diff --git a/plotly/validators/layout/margin/__init__.py b/plotly-package/plotly/validators/layout/margin/__init__.py similarity index 100% rename from plotly/validators/layout/margin/__init__.py rename to plotly-package/plotly/validators/layout/margin/__init__.py diff --git a/plotly/validators/layout/modebar/__init__.py b/plotly-package/plotly/validators/layout/modebar/__init__.py similarity index 100% rename from plotly/validators/layout/modebar/__init__.py rename to plotly-package/plotly/validators/layout/modebar/__init__.py diff --git a/plotly/validators/layout/polar/__init__.py b/plotly-package/plotly/validators/layout/polar/__init__.py similarity index 100% rename from plotly/validators/layout/polar/__init__.py rename to plotly-package/plotly/validators/layout/polar/__init__.py diff --git a/plotly/validators/layout/polar/angularaxis/__init__.py b/plotly-package/plotly/validators/layout/polar/angularaxis/__init__.py similarity index 100% rename from plotly/validators/layout/polar/angularaxis/__init__.py rename to plotly-package/plotly/validators/layout/polar/angularaxis/__init__.py diff --git a/plotly/validators/layout/polar/angularaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/polar/angularaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/polar/angularaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/polar/angularaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/polar/angularaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/polar/domain/__init__.py b/plotly-package/plotly/validators/layout/polar/domain/__init__.py similarity index 100% rename from plotly/validators/layout/polar/domain/__init__.py rename to plotly-package/plotly/validators/layout/polar/domain/__init__.py diff --git a/plotly/validators/layout/polar/radialaxis/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py similarity index 100% rename from plotly/validators/layout/polar/radialaxis/__init__.py rename to plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py diff --git a/plotly/validators/layout/polar/radialaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/polar/radialaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/polar/radialaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/polar/radialaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/polar/radialaxis/title/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/polar/radialaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/polar/radialaxis/title/__init__.py diff --git a/plotly/validators/layout/polar/radialaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/polar/radialaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/polar/radialaxis/title/font/__init__.py diff --git a/plotly/validators/layout/radialaxis/__init__.py b/plotly-package/plotly/validators/layout/radialaxis/__init__.py similarity index 100% rename from plotly/validators/layout/radialaxis/__init__.py rename to plotly-package/plotly/validators/layout/radialaxis/__init__.py diff --git a/plotly/validators/layout/scene/__init__.py b/plotly-package/plotly/validators/layout/scene/__init__.py similarity index 100% rename from plotly/validators/layout/scene/__init__.py rename to plotly-package/plotly/validators/layout/scene/__init__.py diff --git a/plotly/validators/layout/scene/annotation/__init__.py b/plotly-package/plotly/validators/layout/scene/annotation/__init__.py similarity index 100% rename from plotly/validators/layout/scene/annotation/__init__.py rename to plotly-package/plotly/validators/layout/scene/annotation/__init__.py diff --git a/plotly/validators/layout/scene/annotation/font/__init__.py b/plotly-package/plotly/validators/layout/scene/annotation/font/__init__.py similarity index 100% rename from plotly/validators/layout/scene/annotation/font/__init__.py rename to plotly-package/plotly/validators/layout/scene/annotation/font/__init__.py diff --git a/plotly/validators/layout/scene/annotation/hoverlabel/__init__.py b/plotly-package/plotly/validators/layout/scene/annotation/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/layout/scene/annotation/hoverlabel/__init__.py rename to plotly-package/plotly/validators/layout/scene/annotation/hoverlabel/__init__.py diff --git a/plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/layout/scene/annotation/hoverlabel/font/__init__.py diff --git a/plotly/validators/layout/scene/aspectratio/__init__.py b/plotly-package/plotly/validators/layout/scene/aspectratio/__init__.py similarity index 100% rename from plotly/validators/layout/scene/aspectratio/__init__.py rename to plotly-package/plotly/validators/layout/scene/aspectratio/__init__.py diff --git a/plotly/validators/layout/scene/camera/__init__.py b/plotly-package/plotly/validators/layout/scene/camera/__init__.py similarity index 100% rename from plotly/validators/layout/scene/camera/__init__.py rename to plotly-package/plotly/validators/layout/scene/camera/__init__.py diff --git a/plotly/validators/layout/scene/camera/center/__init__.py b/plotly-package/plotly/validators/layout/scene/camera/center/__init__.py similarity index 100% rename from plotly/validators/layout/scene/camera/center/__init__.py rename to plotly-package/plotly/validators/layout/scene/camera/center/__init__.py diff --git a/plotly/validators/layout/scene/camera/eye/__init__.py b/plotly-package/plotly/validators/layout/scene/camera/eye/__init__.py similarity index 100% rename from plotly/validators/layout/scene/camera/eye/__init__.py rename to plotly-package/plotly/validators/layout/scene/camera/eye/__init__.py diff --git a/plotly/validators/layout/scene/camera/projection/__init__.py b/plotly-package/plotly/validators/layout/scene/camera/projection/__init__.py similarity index 100% rename from plotly/validators/layout/scene/camera/projection/__init__.py rename to plotly-package/plotly/validators/layout/scene/camera/projection/__init__.py diff --git a/plotly/validators/layout/scene/camera/up/__init__.py b/plotly-package/plotly/validators/layout/scene/camera/up/__init__.py similarity index 100% rename from plotly/validators/layout/scene/camera/up/__init__.py rename to plotly-package/plotly/validators/layout/scene/camera/up/__init__.py diff --git a/plotly/validators/layout/scene/domain/__init__.py b/plotly-package/plotly/validators/layout/scene/domain/__init__.py similarity index 100% rename from plotly/validators/layout/scene/domain/__init__.py rename to plotly-package/plotly/validators/layout/scene/domain/__init__.py diff --git a/plotly/validators/layout/scene/xaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/__init__.py similarity index 100% rename from plotly/validators/layout/scene/xaxis/__init__.py rename to plotly-package/plotly/validators/layout/scene/xaxis/__init__.py diff --git a/plotly/validators/layout/scene/xaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/scene/xaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/scene/xaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/scene/xaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/scene/xaxis/title/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/scene/xaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/scene/xaxis/title/__init__.py diff --git a/plotly/validators/layout/scene/xaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/scene/xaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/scene/xaxis/title/font/__init__.py diff --git a/plotly/validators/layout/scene/yaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/__init__.py similarity index 100% rename from plotly/validators/layout/scene/yaxis/__init__.py rename to plotly-package/plotly/validators/layout/scene/yaxis/__init__.py diff --git a/plotly/validators/layout/scene/yaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/scene/yaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/scene/yaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/scene/yaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/scene/yaxis/title/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/scene/yaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/scene/yaxis/title/__init__.py diff --git a/plotly/validators/layout/scene/yaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/scene/yaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/scene/yaxis/title/font/__init__.py diff --git a/plotly/validators/layout/scene/zaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/__init__.py similarity index 100% rename from plotly/validators/layout/scene/zaxis/__init__.py rename to plotly-package/plotly/validators/layout/scene/zaxis/__init__.py diff --git a/plotly/validators/layout/scene/zaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/scene/zaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/scene/zaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/scene/zaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/scene/zaxis/title/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/scene/zaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/scene/zaxis/title/__init__.py diff --git a/plotly/validators/layout/scene/zaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/scene/zaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/scene/zaxis/title/font/__init__.py diff --git a/plotly/validators/layout/shape/__init__.py b/plotly-package/plotly/validators/layout/shape/__init__.py similarity index 100% rename from plotly/validators/layout/shape/__init__.py rename to plotly-package/plotly/validators/layout/shape/__init__.py diff --git a/plotly/validators/layout/shape/line/__init__.py b/plotly-package/plotly/validators/layout/shape/line/__init__.py similarity index 100% rename from plotly/validators/layout/shape/line/__init__.py rename to plotly-package/plotly/validators/layout/shape/line/__init__.py diff --git a/plotly/validators/layout/slider/__init__.py b/plotly-package/plotly/validators/layout/slider/__init__.py similarity index 100% rename from plotly/validators/layout/slider/__init__.py rename to plotly-package/plotly/validators/layout/slider/__init__.py diff --git a/plotly/validators/layout/slider/currentvalue/__init__.py b/plotly-package/plotly/validators/layout/slider/currentvalue/__init__.py similarity index 100% rename from plotly/validators/layout/slider/currentvalue/__init__.py rename to plotly-package/plotly/validators/layout/slider/currentvalue/__init__.py diff --git a/plotly/validators/layout/slider/currentvalue/font/__init__.py b/plotly-package/plotly/validators/layout/slider/currentvalue/font/__init__.py similarity index 100% rename from plotly/validators/layout/slider/currentvalue/font/__init__.py rename to plotly-package/plotly/validators/layout/slider/currentvalue/font/__init__.py diff --git a/plotly/validators/layout/slider/font/__init__.py b/plotly-package/plotly/validators/layout/slider/font/__init__.py similarity index 100% rename from plotly/validators/layout/slider/font/__init__.py rename to plotly-package/plotly/validators/layout/slider/font/__init__.py diff --git a/plotly/validators/layout/slider/pad/__init__.py b/plotly-package/plotly/validators/layout/slider/pad/__init__.py similarity index 100% rename from plotly/validators/layout/slider/pad/__init__.py rename to plotly-package/plotly/validators/layout/slider/pad/__init__.py diff --git a/plotly/validators/layout/slider/step/__init__.py b/plotly-package/plotly/validators/layout/slider/step/__init__.py similarity index 100% rename from plotly/validators/layout/slider/step/__init__.py rename to plotly-package/plotly/validators/layout/slider/step/__init__.py diff --git a/plotly/validators/layout/slider/transition/__init__.py b/plotly-package/plotly/validators/layout/slider/transition/__init__.py similarity index 100% rename from plotly/validators/layout/slider/transition/__init__.py rename to plotly-package/plotly/validators/layout/slider/transition/__init__.py diff --git a/plotly/validators/layout/template/__init__.py b/plotly-package/plotly/validators/layout/template/__init__.py similarity index 100% rename from plotly/validators/layout/template/__init__.py rename to plotly-package/plotly/validators/layout/template/__init__.py diff --git a/plotly/validators/layout/template/data/__init__.py b/plotly-package/plotly/validators/layout/template/data/__init__.py similarity index 100% rename from plotly/validators/layout/template/data/__init__.py rename to plotly-package/plotly/validators/layout/template/data/__init__.py diff --git a/plotly/validators/layout/ternary/__init__.py b/plotly-package/plotly/validators/layout/ternary/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/__init__.py rename to plotly-package/plotly/validators/layout/ternary/__init__.py diff --git a/plotly/validators/layout/ternary/aaxis/__init__.py b/plotly-package/plotly/validators/layout/ternary/aaxis/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/aaxis/__init__.py rename to plotly-package/plotly/validators/layout/ternary/aaxis/__init__.py diff --git a/plotly/validators/layout/ternary/aaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/ternary/aaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/aaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/ternary/aaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/ternary/aaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/ternary/aaxis/title/__init__.py b/plotly-package/plotly/validators/layout/ternary/aaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/aaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/ternary/aaxis/title/__init__.py diff --git a/plotly/validators/layout/ternary/aaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/ternary/aaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/aaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/ternary/aaxis/title/font/__init__.py diff --git a/plotly/validators/layout/ternary/baxis/__init__.py b/plotly-package/plotly/validators/layout/ternary/baxis/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/baxis/__init__.py rename to plotly-package/plotly/validators/layout/ternary/baxis/__init__.py diff --git a/plotly/validators/layout/ternary/baxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/ternary/baxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/baxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/ternary/baxis/tickfont/__init__.py diff --git a/plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/ternary/baxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/ternary/baxis/title/__init__.py b/plotly-package/plotly/validators/layout/ternary/baxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/baxis/title/__init__.py rename to plotly-package/plotly/validators/layout/ternary/baxis/title/__init__.py diff --git a/plotly/validators/layout/ternary/baxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/ternary/baxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/baxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/ternary/baxis/title/font/__init__.py diff --git a/plotly/validators/layout/ternary/caxis/__init__.py b/plotly-package/plotly/validators/layout/ternary/caxis/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/caxis/__init__.py rename to plotly-package/plotly/validators/layout/ternary/caxis/__init__.py diff --git a/plotly/validators/layout/ternary/caxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/ternary/caxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/caxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/ternary/caxis/tickfont/__init__.py diff --git a/plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/ternary/caxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/ternary/caxis/title/__init__.py b/plotly-package/plotly/validators/layout/ternary/caxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/caxis/title/__init__.py rename to plotly-package/plotly/validators/layout/ternary/caxis/title/__init__.py diff --git a/plotly/validators/layout/ternary/caxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/ternary/caxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/caxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/ternary/caxis/title/font/__init__.py diff --git a/plotly/validators/layout/ternary/domain/__init__.py b/plotly-package/plotly/validators/layout/ternary/domain/__init__.py similarity index 100% rename from plotly/validators/layout/ternary/domain/__init__.py rename to plotly-package/plotly/validators/layout/ternary/domain/__init__.py diff --git a/plotly/validators/layout/title/__init__.py b/plotly-package/plotly/validators/layout/title/__init__.py similarity index 100% rename from plotly/validators/layout/title/__init__.py rename to plotly-package/plotly/validators/layout/title/__init__.py diff --git a/plotly/validators/layout/title/font/__init__.py b/plotly-package/plotly/validators/layout/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/title/font/__init__.py rename to plotly-package/plotly/validators/layout/title/font/__init__.py diff --git a/plotly/validators/layout/title/pad/__init__.py b/plotly-package/plotly/validators/layout/title/pad/__init__.py similarity index 100% rename from plotly/validators/layout/title/pad/__init__.py rename to plotly-package/plotly/validators/layout/title/pad/__init__.py diff --git a/plotly/validators/layout/transition/__init__.py b/plotly-package/plotly/validators/layout/transition/__init__.py similarity index 100% rename from plotly/validators/layout/transition/__init__.py rename to plotly-package/plotly/validators/layout/transition/__init__.py diff --git a/plotly/validators/layout/updatemenu/__init__.py b/plotly-package/plotly/validators/layout/updatemenu/__init__.py similarity index 100% rename from plotly/validators/layout/updatemenu/__init__.py rename to plotly-package/plotly/validators/layout/updatemenu/__init__.py diff --git a/plotly/validators/layout/updatemenu/button/__init__.py b/plotly-package/plotly/validators/layout/updatemenu/button/__init__.py similarity index 100% rename from plotly/validators/layout/updatemenu/button/__init__.py rename to plotly-package/plotly/validators/layout/updatemenu/button/__init__.py diff --git a/plotly/validators/layout/updatemenu/font/__init__.py b/plotly-package/plotly/validators/layout/updatemenu/font/__init__.py similarity index 100% rename from plotly/validators/layout/updatemenu/font/__init__.py rename to plotly-package/plotly/validators/layout/updatemenu/font/__init__.py diff --git a/plotly/validators/layout/updatemenu/pad/__init__.py b/plotly-package/plotly/validators/layout/updatemenu/pad/__init__.py similarity index 100% rename from plotly/validators/layout/updatemenu/pad/__init__.py rename to plotly-package/plotly/validators/layout/updatemenu/pad/__init__.py diff --git a/plotly/validators/layout/xaxis/__init__.py b/plotly-package/plotly/validators/layout/xaxis/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/__init__.py diff --git a/plotly/validators/layout/xaxis/rangeselector/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeselector/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/rangeselector/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/rangeselector/__init__.py diff --git a/plotly/validators/layout/xaxis/rangeselector/button/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeselector/button/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/rangeselector/button/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/rangeselector/button/__init__.py diff --git a/plotly/validators/layout/xaxis/rangeselector/font/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeselector/font/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/rangeselector/font/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/rangeselector/font/__init__.py diff --git a/plotly/validators/layout/xaxis/rangeslider/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/rangeslider/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py diff --git a/plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/rangeslider/yaxis/__init__.py diff --git a/plotly/validators/layout/xaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/xaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/xaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/xaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/xaxis/title/__init__.py b/plotly-package/plotly/validators/layout/xaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/title/__init__.py diff --git a/plotly/validators/layout/xaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/xaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/xaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/xaxis/title/font/__init__.py diff --git a/plotly/validators/layout/yaxis/__init__.py b/plotly-package/plotly/validators/layout/yaxis/__init__.py similarity index 100% rename from plotly/validators/layout/yaxis/__init__.py rename to plotly-package/plotly/validators/layout/yaxis/__init__.py diff --git a/plotly/validators/layout/yaxis/tickfont/__init__.py b/plotly-package/plotly/validators/layout/yaxis/tickfont/__init__.py similarity index 100% rename from plotly/validators/layout/yaxis/tickfont/__init__.py rename to plotly-package/plotly/validators/layout/yaxis/tickfont/__init__.py diff --git a/plotly/validators/layout/yaxis/tickformatstop/__init__.py b/plotly-package/plotly/validators/layout/yaxis/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/layout/yaxis/tickformatstop/__init__.py rename to plotly-package/plotly/validators/layout/yaxis/tickformatstop/__init__.py diff --git a/plotly/validators/layout/yaxis/title/__init__.py b/plotly-package/plotly/validators/layout/yaxis/title/__init__.py similarity index 100% rename from plotly/validators/layout/yaxis/title/__init__.py rename to plotly-package/plotly/validators/layout/yaxis/title/__init__.py diff --git a/plotly/validators/layout/yaxis/title/font/__init__.py b/plotly-package/plotly/validators/layout/yaxis/title/font/__init__.py similarity index 100% rename from plotly/validators/layout/yaxis/title/font/__init__.py rename to plotly-package/plotly/validators/layout/yaxis/title/font/__init__.py diff --git a/plotly/validators/mesh3d/__init__.py b/plotly-package/plotly/validators/mesh3d/__init__.py similarity index 100% rename from plotly/validators/mesh3d/__init__.py rename to plotly-package/plotly/validators/mesh3d/__init__.py diff --git a/plotly/validators/mesh3d/colorbar/__init__.py b/plotly-package/plotly/validators/mesh3d/colorbar/__init__.py similarity index 100% rename from plotly/validators/mesh3d/colorbar/__init__.py rename to plotly-package/plotly/validators/mesh3d/colorbar/__init__.py diff --git a/plotly/validators/mesh3d/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/mesh3d/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/mesh3d/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/mesh3d/colorbar/tickfont/__init__.py diff --git a/plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/mesh3d/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/mesh3d/colorbar/title/__init__.py b/plotly-package/plotly/validators/mesh3d/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/mesh3d/colorbar/title/__init__.py rename to plotly-package/plotly/validators/mesh3d/colorbar/title/__init__.py diff --git a/plotly/validators/mesh3d/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/mesh3d/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/mesh3d/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/mesh3d/colorbar/title/font/__init__.py diff --git a/plotly/validators/mesh3d/contour/__init__.py b/plotly-package/plotly/validators/mesh3d/contour/__init__.py similarity index 100% rename from plotly/validators/mesh3d/contour/__init__.py rename to plotly-package/plotly/validators/mesh3d/contour/__init__.py diff --git a/plotly/validators/mesh3d/hoverlabel/__init__.py b/plotly-package/plotly/validators/mesh3d/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/mesh3d/hoverlabel/__init__.py rename to plotly-package/plotly/validators/mesh3d/hoverlabel/__init__.py diff --git a/plotly/validators/mesh3d/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/mesh3d/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/mesh3d/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/mesh3d/hoverlabel/font/__init__.py diff --git a/plotly/validators/mesh3d/lighting/__init__.py b/plotly-package/plotly/validators/mesh3d/lighting/__init__.py similarity index 100% rename from plotly/validators/mesh3d/lighting/__init__.py rename to plotly-package/plotly/validators/mesh3d/lighting/__init__.py diff --git a/plotly/validators/mesh3d/lightposition/__init__.py b/plotly-package/plotly/validators/mesh3d/lightposition/__init__.py similarity index 100% rename from plotly/validators/mesh3d/lightposition/__init__.py rename to plotly-package/plotly/validators/mesh3d/lightposition/__init__.py diff --git a/plotly/validators/mesh3d/stream/__init__.py b/plotly-package/plotly/validators/mesh3d/stream/__init__.py similarity index 100% rename from plotly/validators/mesh3d/stream/__init__.py rename to plotly-package/plotly/validators/mesh3d/stream/__init__.py diff --git a/plotly/validators/ohlc/__init__.py b/plotly-package/plotly/validators/ohlc/__init__.py similarity index 100% rename from plotly/validators/ohlc/__init__.py rename to plotly-package/plotly/validators/ohlc/__init__.py diff --git a/plotly/validators/ohlc/decreasing/__init__.py b/plotly-package/plotly/validators/ohlc/decreasing/__init__.py similarity index 100% rename from plotly/validators/ohlc/decreasing/__init__.py rename to plotly-package/plotly/validators/ohlc/decreasing/__init__.py diff --git a/plotly/validators/ohlc/decreasing/line/__init__.py b/plotly-package/plotly/validators/ohlc/decreasing/line/__init__.py similarity index 100% rename from plotly/validators/ohlc/decreasing/line/__init__.py rename to plotly-package/plotly/validators/ohlc/decreasing/line/__init__.py diff --git a/plotly/validators/ohlc/hoverlabel/__init__.py b/plotly-package/plotly/validators/ohlc/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/ohlc/hoverlabel/__init__.py rename to plotly-package/plotly/validators/ohlc/hoverlabel/__init__.py diff --git a/plotly/validators/ohlc/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/ohlc/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/ohlc/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/ohlc/hoverlabel/font/__init__.py diff --git a/plotly/validators/ohlc/increasing/__init__.py b/plotly-package/plotly/validators/ohlc/increasing/__init__.py similarity index 100% rename from plotly/validators/ohlc/increasing/__init__.py rename to plotly-package/plotly/validators/ohlc/increasing/__init__.py diff --git a/plotly/validators/ohlc/increasing/line/__init__.py b/plotly-package/plotly/validators/ohlc/increasing/line/__init__.py similarity index 100% rename from plotly/validators/ohlc/increasing/line/__init__.py rename to plotly-package/plotly/validators/ohlc/increasing/line/__init__.py diff --git a/plotly/validators/ohlc/line/__init__.py b/plotly-package/plotly/validators/ohlc/line/__init__.py similarity index 100% rename from plotly/validators/ohlc/line/__init__.py rename to plotly-package/plotly/validators/ohlc/line/__init__.py diff --git a/plotly/validators/ohlc/stream/__init__.py b/plotly-package/plotly/validators/ohlc/stream/__init__.py similarity index 100% rename from plotly/validators/ohlc/stream/__init__.py rename to plotly-package/plotly/validators/ohlc/stream/__init__.py diff --git a/plotly/validators/parcats/__init__.py b/plotly-package/plotly/validators/parcats/__init__.py similarity index 100% rename from plotly/validators/parcats/__init__.py rename to plotly-package/plotly/validators/parcats/__init__.py diff --git a/plotly/validators/parcats/dimension/__init__.py b/plotly-package/plotly/validators/parcats/dimension/__init__.py similarity index 100% rename from plotly/validators/parcats/dimension/__init__.py rename to plotly-package/plotly/validators/parcats/dimension/__init__.py diff --git a/plotly/validators/parcats/domain/__init__.py b/plotly-package/plotly/validators/parcats/domain/__init__.py similarity index 100% rename from plotly/validators/parcats/domain/__init__.py rename to plotly-package/plotly/validators/parcats/domain/__init__.py diff --git a/plotly/validators/parcats/labelfont/__init__.py b/plotly-package/plotly/validators/parcats/labelfont/__init__.py similarity index 100% rename from plotly/validators/parcats/labelfont/__init__.py rename to plotly-package/plotly/validators/parcats/labelfont/__init__.py diff --git a/plotly/validators/parcats/line/__init__.py b/plotly-package/plotly/validators/parcats/line/__init__.py similarity index 100% rename from plotly/validators/parcats/line/__init__.py rename to plotly-package/plotly/validators/parcats/line/__init__.py diff --git a/plotly/validators/parcats/line/colorbar/__init__.py b/plotly-package/plotly/validators/parcats/line/colorbar/__init__.py similarity index 100% rename from plotly/validators/parcats/line/colorbar/__init__.py rename to plotly-package/plotly/validators/parcats/line/colorbar/__init__.py diff --git a/plotly/validators/parcats/line/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/parcats/line/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/parcats/line/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/parcats/line/colorbar/tickfont/__init__.py diff --git a/plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/parcats/line/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/parcats/line/colorbar/title/__init__.py b/plotly-package/plotly/validators/parcats/line/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/parcats/line/colorbar/title/__init__.py rename to plotly-package/plotly/validators/parcats/line/colorbar/title/__init__.py diff --git a/plotly/validators/parcats/line/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/parcats/line/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/parcats/line/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/parcats/line/colorbar/title/font/__init__.py diff --git a/plotly/validators/parcats/stream/__init__.py b/plotly-package/plotly/validators/parcats/stream/__init__.py similarity index 100% rename from plotly/validators/parcats/stream/__init__.py rename to plotly-package/plotly/validators/parcats/stream/__init__.py diff --git a/plotly/validators/parcats/tickfont/__init__.py b/plotly-package/plotly/validators/parcats/tickfont/__init__.py similarity index 100% rename from plotly/validators/parcats/tickfont/__init__.py rename to plotly-package/plotly/validators/parcats/tickfont/__init__.py diff --git a/plotly/validators/parcoords/__init__.py b/plotly-package/plotly/validators/parcoords/__init__.py similarity index 100% rename from plotly/validators/parcoords/__init__.py rename to plotly-package/plotly/validators/parcoords/__init__.py diff --git a/plotly/validators/parcoords/dimension/__init__.py b/plotly-package/plotly/validators/parcoords/dimension/__init__.py similarity index 100% rename from plotly/validators/parcoords/dimension/__init__.py rename to plotly-package/plotly/validators/parcoords/dimension/__init__.py diff --git a/plotly/validators/parcoords/domain/__init__.py b/plotly-package/plotly/validators/parcoords/domain/__init__.py similarity index 100% rename from plotly/validators/parcoords/domain/__init__.py rename to plotly-package/plotly/validators/parcoords/domain/__init__.py diff --git a/plotly/validators/parcoords/labelfont/__init__.py b/plotly-package/plotly/validators/parcoords/labelfont/__init__.py similarity index 100% rename from plotly/validators/parcoords/labelfont/__init__.py rename to plotly-package/plotly/validators/parcoords/labelfont/__init__.py diff --git a/plotly/validators/parcoords/line/__init__.py b/plotly-package/plotly/validators/parcoords/line/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/__init__.py rename to plotly-package/plotly/validators/parcoords/line/__init__.py diff --git a/plotly/validators/parcoords/line/colorbar/__init__.py b/plotly-package/plotly/validators/parcoords/line/colorbar/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/colorbar/__init__.py rename to plotly-package/plotly/validators/parcoords/line/colorbar/__init__.py diff --git a/plotly/validators/parcoords/line/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/parcoords/line/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/parcoords/line/colorbar/tickfont/__init__.py diff --git a/plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/parcoords/line/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/parcoords/line/colorbar/title/__init__.py b/plotly-package/plotly/validators/parcoords/line/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/colorbar/title/__init__.py rename to plotly-package/plotly/validators/parcoords/line/colorbar/title/__init__.py diff --git a/plotly/validators/parcoords/line/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/parcoords/line/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/parcoords/line/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/parcoords/line/colorbar/title/font/__init__.py diff --git a/plotly/validators/parcoords/rangefont/__init__.py b/plotly-package/plotly/validators/parcoords/rangefont/__init__.py similarity index 100% rename from plotly/validators/parcoords/rangefont/__init__.py rename to plotly-package/plotly/validators/parcoords/rangefont/__init__.py diff --git a/plotly/validators/parcoords/stream/__init__.py b/plotly-package/plotly/validators/parcoords/stream/__init__.py similarity index 100% rename from plotly/validators/parcoords/stream/__init__.py rename to plotly-package/plotly/validators/parcoords/stream/__init__.py diff --git a/plotly/validators/parcoords/tickfont/__init__.py b/plotly-package/plotly/validators/parcoords/tickfont/__init__.py similarity index 100% rename from plotly/validators/parcoords/tickfont/__init__.py rename to plotly-package/plotly/validators/parcoords/tickfont/__init__.py diff --git a/plotly/validators/pie/__init__.py b/plotly-package/plotly/validators/pie/__init__.py similarity index 100% rename from plotly/validators/pie/__init__.py rename to plotly-package/plotly/validators/pie/__init__.py diff --git a/plotly/validators/pie/domain/__init__.py b/plotly-package/plotly/validators/pie/domain/__init__.py similarity index 100% rename from plotly/validators/pie/domain/__init__.py rename to plotly-package/plotly/validators/pie/domain/__init__.py diff --git a/plotly/validators/pie/hoverlabel/__init__.py b/plotly-package/plotly/validators/pie/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/pie/hoverlabel/__init__.py rename to plotly-package/plotly/validators/pie/hoverlabel/__init__.py diff --git a/plotly/validators/pie/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/pie/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/pie/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/pie/hoverlabel/font/__init__.py diff --git a/plotly/validators/pie/insidetextfont/__init__.py b/plotly-package/plotly/validators/pie/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/pie/insidetextfont/__init__.py rename to plotly-package/plotly/validators/pie/insidetextfont/__init__.py diff --git a/plotly/validators/pie/marker/__init__.py b/plotly-package/plotly/validators/pie/marker/__init__.py similarity index 100% rename from plotly/validators/pie/marker/__init__.py rename to plotly-package/plotly/validators/pie/marker/__init__.py diff --git a/plotly/validators/pie/marker/line/__init__.py b/plotly-package/plotly/validators/pie/marker/line/__init__.py similarity index 100% rename from plotly/validators/pie/marker/line/__init__.py rename to plotly-package/plotly/validators/pie/marker/line/__init__.py diff --git a/plotly/validators/pie/outsidetextfont/__init__.py b/plotly-package/plotly/validators/pie/outsidetextfont/__init__.py similarity index 100% rename from plotly/validators/pie/outsidetextfont/__init__.py rename to plotly-package/plotly/validators/pie/outsidetextfont/__init__.py diff --git a/plotly/validators/pie/stream/__init__.py b/plotly-package/plotly/validators/pie/stream/__init__.py similarity index 100% rename from plotly/validators/pie/stream/__init__.py rename to plotly-package/plotly/validators/pie/stream/__init__.py diff --git a/plotly/validators/pie/textfont/__init__.py b/plotly-package/plotly/validators/pie/textfont/__init__.py similarity index 100% rename from plotly/validators/pie/textfont/__init__.py rename to plotly-package/plotly/validators/pie/textfont/__init__.py diff --git a/plotly/validators/pie/title/__init__.py b/plotly-package/plotly/validators/pie/title/__init__.py similarity index 100% rename from plotly/validators/pie/title/__init__.py rename to plotly-package/plotly/validators/pie/title/__init__.py diff --git a/plotly/validators/pie/title/font/__init__.py b/plotly-package/plotly/validators/pie/title/font/__init__.py similarity index 100% rename from plotly/validators/pie/title/font/__init__.py rename to plotly-package/plotly/validators/pie/title/font/__init__.py diff --git a/plotly/validators/pointcloud/__init__.py b/plotly-package/plotly/validators/pointcloud/__init__.py similarity index 100% rename from plotly/validators/pointcloud/__init__.py rename to plotly-package/plotly/validators/pointcloud/__init__.py diff --git a/plotly/validators/pointcloud/hoverlabel/__init__.py b/plotly-package/plotly/validators/pointcloud/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/pointcloud/hoverlabel/__init__.py rename to plotly-package/plotly/validators/pointcloud/hoverlabel/__init__.py diff --git a/plotly/validators/pointcloud/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/pointcloud/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/pointcloud/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/pointcloud/hoverlabel/font/__init__.py diff --git a/plotly/validators/pointcloud/marker/__init__.py b/plotly-package/plotly/validators/pointcloud/marker/__init__.py similarity index 100% rename from plotly/validators/pointcloud/marker/__init__.py rename to plotly-package/plotly/validators/pointcloud/marker/__init__.py diff --git a/plotly/validators/pointcloud/marker/border/__init__.py b/plotly-package/plotly/validators/pointcloud/marker/border/__init__.py similarity index 100% rename from plotly/validators/pointcloud/marker/border/__init__.py rename to plotly-package/plotly/validators/pointcloud/marker/border/__init__.py diff --git a/plotly/validators/pointcloud/stream/__init__.py b/plotly-package/plotly/validators/pointcloud/stream/__init__.py similarity index 100% rename from plotly/validators/pointcloud/stream/__init__.py rename to plotly-package/plotly/validators/pointcloud/stream/__init__.py diff --git a/plotly/validators/sankey/__init__.py b/plotly-package/plotly/validators/sankey/__init__.py similarity index 100% rename from plotly/validators/sankey/__init__.py rename to plotly-package/plotly/validators/sankey/__init__.py diff --git a/plotly/validators/sankey/domain/__init__.py b/plotly-package/plotly/validators/sankey/domain/__init__.py similarity index 100% rename from plotly/validators/sankey/domain/__init__.py rename to plotly-package/plotly/validators/sankey/domain/__init__.py diff --git a/plotly/validators/sankey/hoverlabel/__init__.py b/plotly-package/plotly/validators/sankey/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/sankey/hoverlabel/__init__.py rename to plotly-package/plotly/validators/sankey/hoverlabel/__init__.py diff --git a/plotly/validators/sankey/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/sankey/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/sankey/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/sankey/hoverlabel/font/__init__.py diff --git a/plotly/validators/sankey/link/__init__.py b/plotly-package/plotly/validators/sankey/link/__init__.py similarity index 100% rename from plotly/validators/sankey/link/__init__.py rename to plotly-package/plotly/validators/sankey/link/__init__.py diff --git a/plotly/validators/sankey/link/colorscale/__init__.py b/plotly-package/plotly/validators/sankey/link/colorscale/__init__.py similarity index 100% rename from plotly/validators/sankey/link/colorscale/__init__.py rename to plotly-package/plotly/validators/sankey/link/colorscale/__init__.py diff --git a/plotly/validators/sankey/link/hoverlabel/__init__.py b/plotly-package/plotly/validators/sankey/link/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/sankey/link/hoverlabel/__init__.py rename to plotly-package/plotly/validators/sankey/link/hoverlabel/__init__.py diff --git a/plotly/validators/sankey/link/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/sankey/link/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/sankey/link/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/sankey/link/hoverlabel/font/__init__.py diff --git a/plotly/validators/sankey/link/line/__init__.py b/plotly-package/plotly/validators/sankey/link/line/__init__.py similarity index 100% rename from plotly/validators/sankey/link/line/__init__.py rename to plotly-package/plotly/validators/sankey/link/line/__init__.py diff --git a/plotly/validators/sankey/node/__init__.py b/plotly-package/plotly/validators/sankey/node/__init__.py similarity index 100% rename from plotly/validators/sankey/node/__init__.py rename to plotly-package/plotly/validators/sankey/node/__init__.py diff --git a/plotly/validators/sankey/node/hoverlabel/__init__.py b/plotly-package/plotly/validators/sankey/node/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/sankey/node/hoverlabel/__init__.py rename to plotly-package/plotly/validators/sankey/node/hoverlabel/__init__.py diff --git a/plotly/validators/sankey/node/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/sankey/node/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/sankey/node/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/sankey/node/hoverlabel/font/__init__.py diff --git a/plotly/validators/sankey/node/line/__init__.py b/plotly-package/plotly/validators/sankey/node/line/__init__.py similarity index 100% rename from plotly/validators/sankey/node/line/__init__.py rename to plotly-package/plotly/validators/sankey/node/line/__init__.py diff --git a/plotly/validators/sankey/stream/__init__.py b/plotly-package/plotly/validators/sankey/stream/__init__.py similarity index 100% rename from plotly/validators/sankey/stream/__init__.py rename to plotly-package/plotly/validators/sankey/stream/__init__.py diff --git a/plotly/validators/sankey/textfont/__init__.py b/plotly-package/plotly/validators/sankey/textfont/__init__.py similarity index 100% rename from plotly/validators/sankey/textfont/__init__.py rename to plotly-package/plotly/validators/sankey/textfont/__init__.py diff --git a/plotly/validators/scatter/__init__.py b/plotly-package/plotly/validators/scatter/__init__.py similarity index 100% rename from plotly/validators/scatter/__init__.py rename to plotly-package/plotly/validators/scatter/__init__.py diff --git a/plotly/validators/scatter/error_x/__init__.py b/plotly-package/plotly/validators/scatter/error_x/__init__.py similarity index 100% rename from plotly/validators/scatter/error_x/__init__.py rename to plotly-package/plotly/validators/scatter/error_x/__init__.py diff --git a/plotly/validators/scatter/error_y/__init__.py b/plotly-package/plotly/validators/scatter/error_y/__init__.py similarity index 100% rename from plotly/validators/scatter/error_y/__init__.py rename to plotly-package/plotly/validators/scatter/error_y/__init__.py diff --git a/plotly/validators/scatter/hoverlabel/__init__.py b/plotly-package/plotly/validators/scatter/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scatter/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scatter/hoverlabel/__init__.py diff --git a/plotly/validators/scatter/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scatter/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scatter/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scatter/hoverlabel/font/__init__.py diff --git a/plotly/validators/scatter/line/__init__.py b/plotly-package/plotly/validators/scatter/line/__init__.py similarity index 100% rename from plotly/validators/scatter/line/__init__.py rename to plotly-package/plotly/validators/scatter/line/__init__.py diff --git a/plotly/validators/scatter/marker/__init__.py b/plotly-package/plotly/validators/scatter/marker/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/__init__.py rename to plotly-package/plotly/validators/scatter/marker/__init__.py diff --git a/plotly/validators/scatter/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scatter/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scatter/marker/colorbar/__init__.py diff --git a/plotly/validators/scatter/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatter/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatter/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatter/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatter/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatter/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatter/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scatter/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatter/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatter/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatter/marker/gradient/__init__.py b/plotly-package/plotly/validators/scatter/marker/gradient/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/gradient/__init__.py rename to plotly-package/plotly/validators/scatter/marker/gradient/__init__.py diff --git a/plotly/validators/scatter/marker/line/__init__.py b/plotly-package/plotly/validators/scatter/marker/line/__init__.py similarity index 100% rename from plotly/validators/scatter/marker/line/__init__.py rename to plotly-package/plotly/validators/scatter/marker/line/__init__.py diff --git a/plotly/validators/scatter/selected/__init__.py b/plotly-package/plotly/validators/scatter/selected/__init__.py similarity index 100% rename from plotly/validators/scatter/selected/__init__.py rename to plotly-package/plotly/validators/scatter/selected/__init__.py diff --git a/plotly/validators/scatter/selected/marker/__init__.py b/plotly-package/plotly/validators/scatter/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scatter/selected/marker/__init__.py rename to plotly-package/plotly/validators/scatter/selected/marker/__init__.py diff --git a/plotly/validators/scatter/selected/textfont/__init__.py b/plotly-package/plotly/validators/scatter/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatter/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scatter/selected/textfont/__init__.py diff --git a/plotly/validators/scatter/stream/__init__.py b/plotly-package/plotly/validators/scatter/stream/__init__.py similarity index 100% rename from plotly/validators/scatter/stream/__init__.py rename to plotly-package/plotly/validators/scatter/stream/__init__.py diff --git a/plotly/validators/scatter/textfont/__init__.py b/plotly-package/plotly/validators/scatter/textfont/__init__.py similarity index 100% rename from plotly/validators/scatter/textfont/__init__.py rename to plotly-package/plotly/validators/scatter/textfont/__init__.py diff --git a/plotly/validators/scatter/unselected/__init__.py b/plotly-package/plotly/validators/scatter/unselected/__init__.py similarity index 100% rename from plotly/validators/scatter/unselected/__init__.py rename to plotly-package/plotly/validators/scatter/unselected/__init__.py diff --git a/plotly/validators/scatter/unselected/marker/__init__.py b/plotly-package/plotly/validators/scatter/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scatter/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scatter/unselected/marker/__init__.py diff --git a/plotly/validators/scatter/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scatter/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatter/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scatter/unselected/textfont/__init__.py diff --git a/plotly/validators/scatter3d/__init__.py b/plotly-package/plotly/validators/scatter3d/__init__.py similarity index 100% rename from plotly/validators/scatter3d/__init__.py rename to plotly-package/plotly/validators/scatter3d/__init__.py diff --git a/plotly/validators/scatter3d/error_x/__init__.py b/plotly-package/plotly/validators/scatter3d/error_x/__init__.py similarity index 100% rename from plotly/validators/scatter3d/error_x/__init__.py rename to plotly-package/plotly/validators/scatter3d/error_x/__init__.py diff --git a/plotly/validators/scatter3d/error_y/__init__.py b/plotly-package/plotly/validators/scatter3d/error_y/__init__.py similarity index 100% rename from plotly/validators/scatter3d/error_y/__init__.py rename to plotly-package/plotly/validators/scatter3d/error_y/__init__.py diff --git a/plotly/validators/scatter3d/error_z/__init__.py b/plotly-package/plotly/validators/scatter3d/error_z/__init__.py similarity index 100% rename from plotly/validators/scatter3d/error_z/__init__.py rename to plotly-package/plotly/validators/scatter3d/error_z/__init__.py diff --git a/plotly/validators/scatter3d/hoverlabel/__init__.py b/plotly-package/plotly/validators/scatter3d/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scatter3d/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scatter3d/hoverlabel/__init__.py diff --git a/plotly/validators/scatter3d/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scatter3d/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scatter3d/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scatter3d/hoverlabel/font/__init__.py diff --git a/plotly/validators/scatter3d/line/__init__.py b/plotly-package/plotly/validators/scatter3d/line/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/__init__.py diff --git a/plotly/validators/scatter3d/line/colorbar/__init__.py b/plotly-package/plotly/validators/scatter3d/line/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/colorbar/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/colorbar/__init__.py diff --git a/plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatter3d/line/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatter3d/line/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/colorbar/title/__init__.py diff --git a/plotly/validators/scatter3d/line/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatter3d/line/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatter3d/line/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatter3d/line/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatter3d/marker/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/__init__.py diff --git a/plotly/validators/scatter3d/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/colorbar/__init__.py diff --git a/plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatter3d/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatter3d/marker/line/__init__.py b/plotly-package/plotly/validators/scatter3d/marker/line/__init__.py similarity index 100% rename from plotly/validators/scatter3d/marker/line/__init__.py rename to plotly-package/plotly/validators/scatter3d/marker/line/__init__.py diff --git a/plotly/validators/scatter3d/projection/__init__.py b/plotly-package/plotly/validators/scatter3d/projection/__init__.py similarity index 100% rename from plotly/validators/scatter3d/projection/__init__.py rename to plotly-package/plotly/validators/scatter3d/projection/__init__.py diff --git a/plotly/validators/scatter3d/projection/x/__init__.py b/plotly-package/plotly/validators/scatter3d/projection/x/__init__.py similarity index 100% rename from plotly/validators/scatter3d/projection/x/__init__.py rename to plotly-package/plotly/validators/scatter3d/projection/x/__init__.py diff --git a/plotly/validators/scatter3d/projection/y/__init__.py b/plotly-package/plotly/validators/scatter3d/projection/y/__init__.py similarity index 100% rename from plotly/validators/scatter3d/projection/y/__init__.py rename to plotly-package/plotly/validators/scatter3d/projection/y/__init__.py diff --git a/plotly/validators/scatter3d/projection/z/__init__.py b/plotly-package/plotly/validators/scatter3d/projection/z/__init__.py similarity index 100% rename from plotly/validators/scatter3d/projection/z/__init__.py rename to plotly-package/plotly/validators/scatter3d/projection/z/__init__.py diff --git a/plotly/validators/scatter3d/stream/__init__.py b/plotly-package/plotly/validators/scatter3d/stream/__init__.py similarity index 100% rename from plotly/validators/scatter3d/stream/__init__.py rename to plotly-package/plotly/validators/scatter3d/stream/__init__.py diff --git a/plotly/validators/scatter3d/textfont/__init__.py b/plotly-package/plotly/validators/scatter3d/textfont/__init__.py similarity index 100% rename from plotly/validators/scatter3d/textfont/__init__.py rename to plotly-package/plotly/validators/scatter3d/textfont/__init__.py diff --git a/plotly/validators/scattercarpet/__init__.py b/plotly-package/plotly/validators/scattercarpet/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/__init__.py rename to plotly-package/plotly/validators/scattercarpet/__init__.py diff --git a/plotly/validators/scattercarpet/hoverlabel/__init__.py b/plotly-package/plotly/validators/scattercarpet/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scattercarpet/hoverlabel/__init__.py diff --git a/plotly/validators/scattercarpet/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scattercarpet/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scattercarpet/hoverlabel/font/__init__.py diff --git a/plotly/validators/scattercarpet/line/__init__.py b/plotly-package/plotly/validators/scattercarpet/line/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/line/__init__.py rename to plotly-package/plotly/validators/scattercarpet/line/__init__.py diff --git a/plotly/validators/scattercarpet/marker/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/__init__.py diff --git a/plotly/validators/scattercarpet/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/colorbar/__init__.py diff --git a/plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scattercarpet/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scattercarpet/marker/gradient/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/gradient/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/gradient/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/gradient/__init__.py diff --git a/plotly/validators/scattercarpet/marker/line/__init__.py b/plotly-package/plotly/validators/scattercarpet/marker/line/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/marker/line/__init__.py rename to plotly-package/plotly/validators/scattercarpet/marker/line/__init__.py diff --git a/plotly/validators/scattercarpet/selected/__init__.py b/plotly-package/plotly/validators/scattercarpet/selected/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/selected/__init__.py rename to plotly-package/plotly/validators/scattercarpet/selected/__init__.py diff --git a/plotly/validators/scattercarpet/selected/marker/__init__.py b/plotly-package/plotly/validators/scattercarpet/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/selected/marker/__init__.py rename to plotly-package/plotly/validators/scattercarpet/selected/marker/__init__.py diff --git a/plotly/validators/scattercarpet/selected/textfont/__init__.py b/plotly-package/plotly/validators/scattercarpet/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scattercarpet/selected/textfont/__init__.py diff --git a/plotly/validators/scattercarpet/stream/__init__.py b/plotly-package/plotly/validators/scattercarpet/stream/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/stream/__init__.py rename to plotly-package/plotly/validators/scattercarpet/stream/__init__.py diff --git a/plotly/validators/scattercarpet/textfont/__init__.py b/plotly-package/plotly/validators/scattercarpet/textfont/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/textfont/__init__.py rename to plotly-package/plotly/validators/scattercarpet/textfont/__init__.py diff --git a/plotly/validators/scattercarpet/unselected/__init__.py b/plotly-package/plotly/validators/scattercarpet/unselected/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/unselected/__init__.py rename to plotly-package/plotly/validators/scattercarpet/unselected/__init__.py diff --git a/plotly/validators/scattercarpet/unselected/marker/__init__.py b/plotly-package/plotly/validators/scattercarpet/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scattercarpet/unselected/marker/__init__.py diff --git a/plotly/validators/scattercarpet/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scattercarpet/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattercarpet/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scattercarpet/unselected/textfont/__init__.py diff --git a/plotly/validators/scattergeo/__init__.py b/plotly-package/plotly/validators/scattergeo/__init__.py similarity index 100% rename from plotly/validators/scattergeo/__init__.py rename to plotly-package/plotly/validators/scattergeo/__init__.py diff --git a/plotly/validators/scattergeo/hoverlabel/__init__.py b/plotly-package/plotly/validators/scattergeo/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scattergeo/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scattergeo/hoverlabel/__init__.py diff --git a/plotly/validators/scattergeo/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scattergeo/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scattergeo/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scattergeo/hoverlabel/font/__init__.py diff --git a/plotly/validators/scattergeo/line/__init__.py b/plotly-package/plotly/validators/scattergeo/line/__init__.py similarity index 100% rename from plotly/validators/scattergeo/line/__init__.py rename to plotly-package/plotly/validators/scattergeo/line/__init__.py diff --git a/plotly/validators/scattergeo/marker/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/__init__.py diff --git a/plotly/validators/scattergeo/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/colorbar/__init__.py diff --git a/plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scattergeo/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scattergeo/marker/gradient/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/gradient/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/gradient/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/gradient/__init__.py diff --git a/plotly/validators/scattergeo/marker/line/__init__.py b/plotly-package/plotly/validators/scattergeo/marker/line/__init__.py similarity index 100% rename from plotly/validators/scattergeo/marker/line/__init__.py rename to plotly-package/plotly/validators/scattergeo/marker/line/__init__.py diff --git a/plotly/validators/scattergeo/selected/__init__.py b/plotly-package/plotly/validators/scattergeo/selected/__init__.py similarity index 100% rename from plotly/validators/scattergeo/selected/__init__.py rename to plotly-package/plotly/validators/scattergeo/selected/__init__.py diff --git a/plotly/validators/scattergeo/selected/marker/__init__.py b/plotly-package/plotly/validators/scattergeo/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scattergeo/selected/marker/__init__.py rename to plotly-package/plotly/validators/scattergeo/selected/marker/__init__.py diff --git a/plotly/validators/scattergeo/selected/textfont/__init__.py b/plotly-package/plotly/validators/scattergeo/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergeo/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scattergeo/selected/textfont/__init__.py diff --git a/plotly/validators/scattergeo/stream/__init__.py b/plotly-package/plotly/validators/scattergeo/stream/__init__.py similarity index 100% rename from plotly/validators/scattergeo/stream/__init__.py rename to plotly-package/plotly/validators/scattergeo/stream/__init__.py diff --git a/plotly/validators/scattergeo/textfont/__init__.py b/plotly-package/plotly/validators/scattergeo/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergeo/textfont/__init__.py rename to plotly-package/plotly/validators/scattergeo/textfont/__init__.py diff --git a/plotly/validators/scattergeo/unselected/__init__.py b/plotly-package/plotly/validators/scattergeo/unselected/__init__.py similarity index 100% rename from plotly/validators/scattergeo/unselected/__init__.py rename to plotly-package/plotly/validators/scattergeo/unselected/__init__.py diff --git a/plotly/validators/scattergeo/unselected/marker/__init__.py b/plotly-package/plotly/validators/scattergeo/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scattergeo/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scattergeo/unselected/marker/__init__.py diff --git a/plotly/validators/scattergeo/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scattergeo/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergeo/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scattergeo/unselected/textfont/__init__.py diff --git a/plotly/validators/scattergl/__init__.py b/plotly-package/plotly/validators/scattergl/__init__.py similarity index 100% rename from plotly/validators/scattergl/__init__.py rename to plotly-package/plotly/validators/scattergl/__init__.py diff --git a/plotly/validators/scattergl/error_x/__init__.py b/plotly-package/plotly/validators/scattergl/error_x/__init__.py similarity index 100% rename from plotly/validators/scattergl/error_x/__init__.py rename to plotly-package/plotly/validators/scattergl/error_x/__init__.py diff --git a/plotly/validators/scattergl/error_y/__init__.py b/plotly-package/plotly/validators/scattergl/error_y/__init__.py similarity index 100% rename from plotly/validators/scattergl/error_y/__init__.py rename to plotly-package/plotly/validators/scattergl/error_y/__init__.py diff --git a/plotly/validators/scattergl/hoverlabel/__init__.py b/plotly-package/plotly/validators/scattergl/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scattergl/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scattergl/hoverlabel/__init__.py diff --git a/plotly/validators/scattergl/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scattergl/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scattergl/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scattergl/hoverlabel/font/__init__.py diff --git a/plotly/validators/scattergl/line/__init__.py b/plotly-package/plotly/validators/scattergl/line/__init__.py similarity index 100% rename from plotly/validators/scattergl/line/__init__.py rename to plotly-package/plotly/validators/scattergl/line/__init__.py diff --git a/plotly/validators/scattergl/marker/__init__.py b/plotly-package/plotly/validators/scattergl/marker/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/__init__.py diff --git a/plotly/validators/scattergl/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scattergl/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/colorbar/__init__.py diff --git a/plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scattergl/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scattergl/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scattergl/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scattergl/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scattergl/marker/line/__init__.py b/plotly-package/plotly/validators/scattergl/marker/line/__init__.py similarity index 100% rename from plotly/validators/scattergl/marker/line/__init__.py rename to plotly-package/plotly/validators/scattergl/marker/line/__init__.py diff --git a/plotly/validators/scattergl/selected/__init__.py b/plotly-package/plotly/validators/scattergl/selected/__init__.py similarity index 100% rename from plotly/validators/scattergl/selected/__init__.py rename to plotly-package/plotly/validators/scattergl/selected/__init__.py diff --git a/plotly/validators/scattergl/selected/marker/__init__.py b/plotly-package/plotly/validators/scattergl/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scattergl/selected/marker/__init__.py rename to plotly-package/plotly/validators/scattergl/selected/marker/__init__.py diff --git a/plotly/validators/scattergl/selected/textfont/__init__.py b/plotly-package/plotly/validators/scattergl/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergl/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scattergl/selected/textfont/__init__.py diff --git a/plotly/validators/scattergl/stream/__init__.py b/plotly-package/plotly/validators/scattergl/stream/__init__.py similarity index 100% rename from plotly/validators/scattergl/stream/__init__.py rename to plotly-package/plotly/validators/scattergl/stream/__init__.py diff --git a/plotly/validators/scattergl/textfont/__init__.py b/plotly-package/plotly/validators/scattergl/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergl/textfont/__init__.py rename to plotly-package/plotly/validators/scattergl/textfont/__init__.py diff --git a/plotly/validators/scattergl/unselected/__init__.py b/plotly-package/plotly/validators/scattergl/unselected/__init__.py similarity index 100% rename from plotly/validators/scattergl/unselected/__init__.py rename to plotly-package/plotly/validators/scattergl/unselected/__init__.py diff --git a/plotly/validators/scattergl/unselected/marker/__init__.py b/plotly-package/plotly/validators/scattergl/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scattergl/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scattergl/unselected/marker/__init__.py diff --git a/plotly/validators/scattergl/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scattergl/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scattergl/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scattergl/unselected/textfont/__init__.py diff --git a/plotly/validators/scattermapbox/__init__.py b/plotly-package/plotly/validators/scattermapbox/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/__init__.py rename to plotly-package/plotly/validators/scattermapbox/__init__.py diff --git a/plotly/validators/scattermapbox/hoverlabel/__init__.py b/plotly-package/plotly/validators/scattermapbox/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scattermapbox/hoverlabel/__init__.py diff --git a/plotly/validators/scattermapbox/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scattermapbox/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scattermapbox/hoverlabel/font/__init__.py diff --git a/plotly/validators/scattermapbox/line/__init__.py b/plotly-package/plotly/validators/scattermapbox/line/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/line/__init__.py rename to plotly-package/plotly/validators/scattermapbox/line/__init__.py diff --git a/plotly/validators/scattermapbox/marker/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/__init__.py diff --git a/plotly/validators/scattermapbox/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/colorbar/__init__.py diff --git a/plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scattermapbox/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scattermapbox/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scattermapbox/selected/__init__.py b/plotly-package/plotly/validators/scattermapbox/selected/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/selected/__init__.py rename to plotly-package/plotly/validators/scattermapbox/selected/__init__.py diff --git a/plotly/validators/scattermapbox/selected/marker/__init__.py b/plotly-package/plotly/validators/scattermapbox/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/selected/marker/__init__.py rename to plotly-package/plotly/validators/scattermapbox/selected/marker/__init__.py diff --git a/plotly/validators/scattermapbox/stream/__init__.py b/plotly-package/plotly/validators/scattermapbox/stream/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/stream/__init__.py rename to plotly-package/plotly/validators/scattermapbox/stream/__init__.py diff --git a/plotly/validators/scattermapbox/textfont/__init__.py b/plotly-package/plotly/validators/scattermapbox/textfont/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/textfont/__init__.py rename to plotly-package/plotly/validators/scattermapbox/textfont/__init__.py diff --git a/plotly/validators/scattermapbox/unselected/__init__.py b/plotly-package/plotly/validators/scattermapbox/unselected/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/unselected/__init__.py rename to plotly-package/plotly/validators/scattermapbox/unselected/__init__.py diff --git a/plotly/validators/scattermapbox/unselected/marker/__init__.py b/plotly-package/plotly/validators/scattermapbox/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scattermapbox/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scattermapbox/unselected/marker/__init__.py diff --git a/plotly/validators/scatterpolar/__init__.py b/plotly-package/plotly/validators/scatterpolar/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/__init__.py rename to plotly-package/plotly/validators/scatterpolar/__init__.py diff --git a/plotly/validators/scatterpolar/hoverlabel/__init__.py b/plotly-package/plotly/validators/scatterpolar/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scatterpolar/hoverlabel/__init__.py diff --git a/plotly/validators/scatterpolar/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scatterpolar/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scatterpolar/hoverlabel/font/__init__.py diff --git a/plotly/validators/scatterpolar/line/__init__.py b/plotly-package/plotly/validators/scatterpolar/line/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/line/__init__.py rename to plotly-package/plotly/validators/scatterpolar/line/__init__.py diff --git a/plotly/validators/scatterpolar/marker/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/__init__.py diff --git a/plotly/validators/scatterpolar/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/colorbar/__init__.py diff --git a/plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatterpolar/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatterpolar/marker/gradient/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/gradient/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/gradient/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/gradient/__init__.py diff --git a/plotly/validators/scatterpolar/marker/line/__init__.py b/plotly-package/plotly/validators/scatterpolar/marker/line/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/marker/line/__init__.py rename to plotly-package/plotly/validators/scatterpolar/marker/line/__init__.py diff --git a/plotly/validators/scatterpolar/selected/__init__.py b/plotly-package/plotly/validators/scatterpolar/selected/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/selected/__init__.py rename to plotly-package/plotly/validators/scatterpolar/selected/__init__.py diff --git a/plotly/validators/scatterpolar/selected/marker/__init__.py b/plotly-package/plotly/validators/scatterpolar/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/selected/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolar/selected/marker/__init__.py diff --git a/plotly/validators/scatterpolar/selected/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolar/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolar/selected/textfont/__init__.py diff --git a/plotly/validators/scatterpolar/stream/__init__.py b/plotly-package/plotly/validators/scatterpolar/stream/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/stream/__init__.py rename to plotly-package/plotly/validators/scatterpolar/stream/__init__.py diff --git a/plotly/validators/scatterpolar/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolar/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolar/textfont/__init__.py diff --git a/plotly/validators/scatterpolar/unselected/__init__.py b/plotly-package/plotly/validators/scatterpolar/unselected/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/unselected/__init__.py rename to plotly-package/plotly/validators/scatterpolar/unselected/__init__.py diff --git a/plotly/validators/scatterpolar/unselected/marker/__init__.py b/plotly-package/plotly/validators/scatterpolar/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolar/unselected/marker/__init__.py diff --git a/plotly/validators/scatterpolar/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolar/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolar/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolar/unselected/textfont/__init__.py diff --git a/plotly/validators/scatterpolargl/__init__.py b/plotly-package/plotly/validators/scatterpolargl/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/__init__.py diff --git a/plotly/validators/scatterpolargl/hoverlabel/__init__.py b/plotly-package/plotly/validators/scatterpolargl/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/hoverlabel/__init__.py diff --git a/plotly/validators/scatterpolargl/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scatterpolargl/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/hoverlabel/font/__init__.py diff --git a/plotly/validators/scatterpolargl/line/__init__.py b/plotly-package/plotly/validators/scatterpolargl/line/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/line/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/line/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/colorbar/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatterpolargl/marker/line/__init__.py b/plotly-package/plotly/validators/scatterpolargl/marker/line/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/marker/line/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/marker/line/__init__.py diff --git a/plotly/validators/scatterpolargl/selected/__init__.py b/plotly-package/plotly/validators/scatterpolargl/selected/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/selected/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/selected/__init__.py diff --git a/plotly/validators/scatterpolargl/selected/marker/__init__.py b/plotly-package/plotly/validators/scatterpolargl/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/selected/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/selected/marker/__init__.py diff --git a/plotly/validators/scatterpolargl/selected/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolargl/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/selected/textfont/__init__.py diff --git a/plotly/validators/scatterpolargl/stream/__init__.py b/plotly-package/plotly/validators/scatterpolargl/stream/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/stream/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/stream/__init__.py diff --git a/plotly/validators/scatterpolargl/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolargl/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/textfont/__init__.py diff --git a/plotly/validators/scatterpolargl/unselected/__init__.py b/plotly-package/plotly/validators/scatterpolargl/unselected/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/unselected/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/unselected/__init__.py diff --git a/plotly/validators/scatterpolargl/unselected/marker/__init__.py b/plotly-package/plotly/validators/scatterpolargl/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/unselected/marker/__init__.py diff --git a/plotly/validators/scatterpolargl/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scatterpolargl/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterpolargl/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterpolargl/unselected/textfont/__init__.py diff --git a/plotly/validators/scatterternary/__init__.py b/plotly-package/plotly/validators/scatterternary/__init__.py similarity index 100% rename from plotly/validators/scatterternary/__init__.py rename to plotly-package/plotly/validators/scatterternary/__init__.py diff --git a/plotly/validators/scatterternary/hoverlabel/__init__.py b/plotly-package/plotly/validators/scatterternary/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/scatterternary/hoverlabel/__init__.py rename to plotly-package/plotly/validators/scatterternary/hoverlabel/__init__.py diff --git a/plotly/validators/scatterternary/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/scatterternary/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/scatterternary/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/scatterternary/hoverlabel/font/__init__.py diff --git a/plotly/validators/scatterternary/line/__init__.py b/plotly-package/plotly/validators/scatterternary/line/__init__.py similarity index 100% rename from plotly/validators/scatterternary/line/__init__.py rename to plotly-package/plotly/validators/scatterternary/line/__init__.py diff --git a/plotly/validators/scatterternary/marker/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/__init__.py diff --git a/plotly/validators/scatterternary/marker/colorbar/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/colorbar/__init__.py diff --git a/plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/scatterternary/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/colorbar/title/__init__.py diff --git a/plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/scatterternary/marker/gradient/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/gradient/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/gradient/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/gradient/__init__.py diff --git a/plotly/validators/scatterternary/marker/line/__init__.py b/plotly-package/plotly/validators/scatterternary/marker/line/__init__.py similarity index 100% rename from plotly/validators/scatterternary/marker/line/__init__.py rename to plotly-package/plotly/validators/scatterternary/marker/line/__init__.py diff --git a/plotly/validators/scatterternary/selected/__init__.py b/plotly-package/plotly/validators/scatterternary/selected/__init__.py similarity index 100% rename from plotly/validators/scatterternary/selected/__init__.py rename to plotly-package/plotly/validators/scatterternary/selected/__init__.py diff --git a/plotly/validators/scatterternary/selected/marker/__init__.py b/plotly-package/plotly/validators/scatterternary/selected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterternary/selected/marker/__init__.py rename to plotly-package/plotly/validators/scatterternary/selected/marker/__init__.py diff --git a/plotly/validators/scatterternary/selected/textfont/__init__.py b/plotly-package/plotly/validators/scatterternary/selected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterternary/selected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterternary/selected/textfont/__init__.py diff --git a/plotly/validators/scatterternary/stream/__init__.py b/plotly-package/plotly/validators/scatterternary/stream/__init__.py similarity index 100% rename from plotly/validators/scatterternary/stream/__init__.py rename to plotly-package/plotly/validators/scatterternary/stream/__init__.py diff --git a/plotly/validators/scatterternary/textfont/__init__.py b/plotly-package/plotly/validators/scatterternary/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterternary/textfont/__init__.py rename to plotly-package/plotly/validators/scatterternary/textfont/__init__.py diff --git a/plotly/validators/scatterternary/unselected/__init__.py b/plotly-package/plotly/validators/scatterternary/unselected/__init__.py similarity index 100% rename from plotly/validators/scatterternary/unselected/__init__.py rename to plotly-package/plotly/validators/scatterternary/unselected/__init__.py diff --git a/plotly/validators/scatterternary/unselected/marker/__init__.py b/plotly-package/plotly/validators/scatterternary/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/scatterternary/unselected/marker/__init__.py rename to plotly-package/plotly/validators/scatterternary/unselected/marker/__init__.py diff --git a/plotly/validators/scatterternary/unselected/textfont/__init__.py b/plotly-package/plotly/validators/scatterternary/unselected/textfont/__init__.py similarity index 100% rename from plotly/validators/scatterternary/unselected/textfont/__init__.py rename to plotly-package/plotly/validators/scatterternary/unselected/textfont/__init__.py diff --git a/plotly/validators/splom/__init__.py b/plotly-package/plotly/validators/splom/__init__.py similarity index 100% rename from plotly/validators/splom/__init__.py rename to plotly-package/plotly/validators/splom/__init__.py diff --git a/plotly/validators/splom/diagonal/__init__.py b/plotly-package/plotly/validators/splom/diagonal/__init__.py similarity index 100% rename from plotly/validators/splom/diagonal/__init__.py rename to plotly-package/plotly/validators/splom/diagonal/__init__.py diff --git a/plotly/validators/splom/dimension/__init__.py b/plotly-package/plotly/validators/splom/dimension/__init__.py similarity index 100% rename from plotly/validators/splom/dimension/__init__.py rename to plotly-package/plotly/validators/splom/dimension/__init__.py diff --git a/plotly/validators/splom/dimension/axis/__init__.py b/plotly-package/plotly/validators/splom/dimension/axis/__init__.py similarity index 100% rename from plotly/validators/splom/dimension/axis/__init__.py rename to plotly-package/plotly/validators/splom/dimension/axis/__init__.py diff --git a/plotly/validators/splom/hoverlabel/__init__.py b/plotly-package/plotly/validators/splom/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/splom/hoverlabel/__init__.py rename to plotly-package/plotly/validators/splom/hoverlabel/__init__.py diff --git a/plotly/validators/splom/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/splom/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/splom/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/splom/hoverlabel/font/__init__.py diff --git a/plotly/validators/splom/marker/__init__.py b/plotly-package/plotly/validators/splom/marker/__init__.py similarity index 100% rename from plotly/validators/splom/marker/__init__.py rename to plotly-package/plotly/validators/splom/marker/__init__.py diff --git a/plotly/validators/splom/marker/colorbar/__init__.py b/plotly-package/plotly/validators/splom/marker/colorbar/__init__.py similarity index 100% rename from plotly/validators/splom/marker/colorbar/__init__.py rename to plotly-package/plotly/validators/splom/marker/colorbar/__init__.py diff --git a/plotly/validators/splom/marker/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/splom/marker/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/splom/marker/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/splom/marker/colorbar/tickfont/__init__.py diff --git a/plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/splom/marker/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/splom/marker/colorbar/title/__init__.py b/plotly-package/plotly/validators/splom/marker/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/splom/marker/colorbar/title/__init__.py rename to plotly-package/plotly/validators/splom/marker/colorbar/title/__init__.py diff --git a/plotly/validators/splom/marker/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/splom/marker/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/splom/marker/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/splom/marker/colorbar/title/font/__init__.py diff --git a/plotly/validators/splom/marker/line/__init__.py b/plotly-package/plotly/validators/splom/marker/line/__init__.py similarity index 100% rename from plotly/validators/splom/marker/line/__init__.py rename to plotly-package/plotly/validators/splom/marker/line/__init__.py diff --git a/plotly/validators/splom/selected/__init__.py b/plotly-package/plotly/validators/splom/selected/__init__.py similarity index 100% rename from plotly/validators/splom/selected/__init__.py rename to plotly-package/plotly/validators/splom/selected/__init__.py diff --git a/plotly/validators/splom/selected/marker/__init__.py b/plotly-package/plotly/validators/splom/selected/marker/__init__.py similarity index 100% rename from plotly/validators/splom/selected/marker/__init__.py rename to plotly-package/plotly/validators/splom/selected/marker/__init__.py diff --git a/plotly/validators/splom/stream/__init__.py b/plotly-package/plotly/validators/splom/stream/__init__.py similarity index 100% rename from plotly/validators/splom/stream/__init__.py rename to plotly-package/plotly/validators/splom/stream/__init__.py diff --git a/plotly/validators/splom/unselected/__init__.py b/plotly-package/plotly/validators/splom/unselected/__init__.py similarity index 100% rename from plotly/validators/splom/unselected/__init__.py rename to plotly-package/plotly/validators/splom/unselected/__init__.py diff --git a/plotly/validators/splom/unselected/marker/__init__.py b/plotly-package/plotly/validators/splom/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/splom/unselected/marker/__init__.py rename to plotly-package/plotly/validators/splom/unselected/marker/__init__.py diff --git a/plotly/validators/streamtube/__init__.py b/plotly-package/plotly/validators/streamtube/__init__.py similarity index 100% rename from plotly/validators/streamtube/__init__.py rename to plotly-package/plotly/validators/streamtube/__init__.py diff --git a/plotly/validators/streamtube/colorbar/__init__.py b/plotly-package/plotly/validators/streamtube/colorbar/__init__.py similarity index 100% rename from plotly/validators/streamtube/colorbar/__init__.py rename to plotly-package/plotly/validators/streamtube/colorbar/__init__.py diff --git a/plotly/validators/streamtube/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/streamtube/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/streamtube/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/streamtube/colorbar/tickfont/__init__.py diff --git a/plotly/validators/streamtube/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/streamtube/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/streamtube/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/streamtube/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/streamtube/colorbar/title/__init__.py b/plotly-package/plotly/validators/streamtube/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/streamtube/colorbar/title/__init__.py rename to plotly-package/plotly/validators/streamtube/colorbar/title/__init__.py diff --git a/plotly/validators/streamtube/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/streamtube/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/streamtube/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/streamtube/colorbar/title/font/__init__.py diff --git a/plotly/validators/streamtube/hoverlabel/__init__.py b/plotly-package/plotly/validators/streamtube/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/streamtube/hoverlabel/__init__.py rename to plotly-package/plotly/validators/streamtube/hoverlabel/__init__.py diff --git a/plotly/validators/streamtube/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/streamtube/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/streamtube/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/streamtube/hoverlabel/font/__init__.py diff --git a/plotly/validators/streamtube/lighting/__init__.py b/plotly-package/plotly/validators/streamtube/lighting/__init__.py similarity index 100% rename from plotly/validators/streamtube/lighting/__init__.py rename to plotly-package/plotly/validators/streamtube/lighting/__init__.py diff --git a/plotly/validators/streamtube/lightposition/__init__.py b/plotly-package/plotly/validators/streamtube/lightposition/__init__.py similarity index 100% rename from plotly/validators/streamtube/lightposition/__init__.py rename to plotly-package/plotly/validators/streamtube/lightposition/__init__.py diff --git a/plotly/validators/streamtube/starts/__init__.py b/plotly-package/plotly/validators/streamtube/starts/__init__.py similarity index 100% rename from plotly/validators/streamtube/starts/__init__.py rename to plotly-package/plotly/validators/streamtube/starts/__init__.py diff --git a/plotly/validators/streamtube/stream/__init__.py b/plotly-package/plotly/validators/streamtube/stream/__init__.py similarity index 100% rename from plotly/validators/streamtube/stream/__init__.py rename to plotly-package/plotly/validators/streamtube/stream/__init__.py diff --git a/plotly/validators/sunburst/__init__.py b/plotly-package/plotly/validators/sunburst/__init__.py similarity index 100% rename from plotly/validators/sunburst/__init__.py rename to plotly-package/plotly/validators/sunburst/__init__.py diff --git a/plotly/validators/sunburst/domain/__init__.py b/plotly-package/plotly/validators/sunburst/domain/__init__.py similarity index 100% rename from plotly/validators/sunburst/domain/__init__.py rename to plotly-package/plotly/validators/sunburst/domain/__init__.py diff --git a/plotly/validators/sunburst/hoverlabel/__init__.py b/plotly-package/plotly/validators/sunburst/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/sunburst/hoverlabel/__init__.py rename to plotly-package/plotly/validators/sunburst/hoverlabel/__init__.py diff --git a/plotly/validators/sunburst/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/sunburst/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/sunburst/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/sunburst/hoverlabel/font/__init__.py diff --git a/plotly/validators/sunburst/insidetextfont/__init__.py b/plotly-package/plotly/validators/sunburst/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/sunburst/insidetextfont/__init__.py rename to plotly-package/plotly/validators/sunburst/insidetextfont/__init__.py diff --git a/plotly/validators/sunburst/leaf/__init__.py b/plotly-package/plotly/validators/sunburst/leaf/__init__.py similarity index 100% rename from plotly/validators/sunburst/leaf/__init__.py rename to plotly-package/plotly/validators/sunburst/leaf/__init__.py diff --git a/plotly/validators/sunburst/marker/__init__.py b/plotly-package/plotly/validators/sunburst/marker/__init__.py similarity index 100% rename from plotly/validators/sunburst/marker/__init__.py rename to plotly-package/plotly/validators/sunburst/marker/__init__.py diff --git a/plotly/validators/sunburst/marker/line/__init__.py b/plotly-package/plotly/validators/sunburst/marker/line/__init__.py similarity index 100% rename from plotly/validators/sunburst/marker/line/__init__.py rename to plotly-package/plotly/validators/sunburst/marker/line/__init__.py diff --git a/plotly/validators/sunburst/outsidetextfont/__init__.py b/plotly-package/plotly/validators/sunburst/outsidetextfont/__init__.py similarity index 100% rename from plotly/validators/sunburst/outsidetextfont/__init__.py rename to plotly-package/plotly/validators/sunburst/outsidetextfont/__init__.py diff --git a/plotly/validators/sunburst/stream/__init__.py b/plotly-package/plotly/validators/sunburst/stream/__init__.py similarity index 100% rename from plotly/validators/sunburst/stream/__init__.py rename to plotly-package/plotly/validators/sunburst/stream/__init__.py diff --git a/plotly/validators/sunburst/textfont/__init__.py b/plotly-package/plotly/validators/sunburst/textfont/__init__.py similarity index 100% rename from plotly/validators/sunburst/textfont/__init__.py rename to plotly-package/plotly/validators/sunburst/textfont/__init__.py diff --git a/plotly/validators/surface/__init__.py b/plotly-package/plotly/validators/surface/__init__.py similarity index 100% rename from plotly/validators/surface/__init__.py rename to plotly-package/plotly/validators/surface/__init__.py diff --git a/plotly/validators/surface/colorbar/__init__.py b/plotly-package/plotly/validators/surface/colorbar/__init__.py similarity index 100% rename from plotly/validators/surface/colorbar/__init__.py rename to plotly-package/plotly/validators/surface/colorbar/__init__.py diff --git a/plotly/validators/surface/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/surface/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/surface/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/surface/colorbar/tickfont/__init__.py diff --git a/plotly/validators/surface/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/surface/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/surface/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/surface/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/surface/colorbar/title/__init__.py b/plotly-package/plotly/validators/surface/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/surface/colorbar/title/__init__.py rename to plotly-package/plotly/validators/surface/colorbar/title/__init__.py diff --git a/plotly/validators/surface/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/surface/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/surface/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/surface/colorbar/title/font/__init__.py diff --git a/plotly/validators/surface/contours/__init__.py b/plotly-package/plotly/validators/surface/contours/__init__.py similarity index 100% rename from plotly/validators/surface/contours/__init__.py rename to plotly-package/plotly/validators/surface/contours/__init__.py diff --git a/plotly/validators/surface/contours/x/__init__.py b/plotly-package/plotly/validators/surface/contours/x/__init__.py similarity index 100% rename from plotly/validators/surface/contours/x/__init__.py rename to plotly-package/plotly/validators/surface/contours/x/__init__.py diff --git a/plotly/validators/surface/contours/x/project/__init__.py b/plotly-package/plotly/validators/surface/contours/x/project/__init__.py similarity index 100% rename from plotly/validators/surface/contours/x/project/__init__.py rename to plotly-package/plotly/validators/surface/contours/x/project/__init__.py diff --git a/plotly/validators/surface/contours/y/__init__.py b/plotly-package/plotly/validators/surface/contours/y/__init__.py similarity index 100% rename from plotly/validators/surface/contours/y/__init__.py rename to plotly-package/plotly/validators/surface/contours/y/__init__.py diff --git a/plotly/validators/surface/contours/y/project/__init__.py b/plotly-package/plotly/validators/surface/contours/y/project/__init__.py similarity index 100% rename from plotly/validators/surface/contours/y/project/__init__.py rename to plotly-package/plotly/validators/surface/contours/y/project/__init__.py diff --git a/plotly/validators/surface/contours/z/__init__.py b/plotly-package/plotly/validators/surface/contours/z/__init__.py similarity index 100% rename from plotly/validators/surface/contours/z/__init__.py rename to plotly-package/plotly/validators/surface/contours/z/__init__.py diff --git a/plotly/validators/surface/contours/z/project/__init__.py b/plotly-package/plotly/validators/surface/contours/z/project/__init__.py similarity index 100% rename from plotly/validators/surface/contours/z/project/__init__.py rename to plotly-package/plotly/validators/surface/contours/z/project/__init__.py diff --git a/plotly/validators/surface/hoverlabel/__init__.py b/plotly-package/plotly/validators/surface/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/surface/hoverlabel/__init__.py rename to plotly-package/plotly/validators/surface/hoverlabel/__init__.py diff --git a/plotly/validators/surface/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/surface/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/surface/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/surface/hoverlabel/font/__init__.py diff --git a/plotly/validators/surface/lighting/__init__.py b/plotly-package/plotly/validators/surface/lighting/__init__.py similarity index 100% rename from plotly/validators/surface/lighting/__init__.py rename to plotly-package/plotly/validators/surface/lighting/__init__.py diff --git a/plotly/validators/surface/lightposition/__init__.py b/plotly-package/plotly/validators/surface/lightposition/__init__.py similarity index 100% rename from plotly/validators/surface/lightposition/__init__.py rename to plotly-package/plotly/validators/surface/lightposition/__init__.py diff --git a/plotly/validators/surface/stream/__init__.py b/plotly-package/plotly/validators/surface/stream/__init__.py similarity index 100% rename from plotly/validators/surface/stream/__init__.py rename to plotly-package/plotly/validators/surface/stream/__init__.py diff --git a/plotly/validators/table/__init__.py b/plotly-package/plotly/validators/table/__init__.py similarity index 100% rename from plotly/validators/table/__init__.py rename to plotly-package/plotly/validators/table/__init__.py diff --git a/plotly/validators/table/cells/__init__.py b/plotly-package/plotly/validators/table/cells/__init__.py similarity index 100% rename from plotly/validators/table/cells/__init__.py rename to plotly-package/plotly/validators/table/cells/__init__.py diff --git a/plotly/validators/table/cells/fill/__init__.py b/plotly-package/plotly/validators/table/cells/fill/__init__.py similarity index 100% rename from plotly/validators/table/cells/fill/__init__.py rename to plotly-package/plotly/validators/table/cells/fill/__init__.py diff --git a/plotly/validators/table/cells/font/__init__.py b/plotly-package/plotly/validators/table/cells/font/__init__.py similarity index 100% rename from plotly/validators/table/cells/font/__init__.py rename to plotly-package/plotly/validators/table/cells/font/__init__.py diff --git a/plotly/validators/table/cells/line/__init__.py b/plotly-package/plotly/validators/table/cells/line/__init__.py similarity index 100% rename from plotly/validators/table/cells/line/__init__.py rename to plotly-package/plotly/validators/table/cells/line/__init__.py diff --git a/plotly/validators/table/domain/__init__.py b/plotly-package/plotly/validators/table/domain/__init__.py similarity index 100% rename from plotly/validators/table/domain/__init__.py rename to plotly-package/plotly/validators/table/domain/__init__.py diff --git a/plotly/validators/table/header/__init__.py b/plotly-package/plotly/validators/table/header/__init__.py similarity index 100% rename from plotly/validators/table/header/__init__.py rename to plotly-package/plotly/validators/table/header/__init__.py diff --git a/plotly/validators/table/header/fill/__init__.py b/plotly-package/plotly/validators/table/header/fill/__init__.py similarity index 100% rename from plotly/validators/table/header/fill/__init__.py rename to plotly-package/plotly/validators/table/header/fill/__init__.py diff --git a/plotly/validators/table/header/font/__init__.py b/plotly-package/plotly/validators/table/header/font/__init__.py similarity index 100% rename from plotly/validators/table/header/font/__init__.py rename to plotly-package/plotly/validators/table/header/font/__init__.py diff --git a/plotly/validators/table/header/line/__init__.py b/plotly-package/plotly/validators/table/header/line/__init__.py similarity index 100% rename from plotly/validators/table/header/line/__init__.py rename to plotly-package/plotly/validators/table/header/line/__init__.py diff --git a/plotly/validators/table/hoverlabel/__init__.py b/plotly-package/plotly/validators/table/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/table/hoverlabel/__init__.py rename to plotly-package/plotly/validators/table/hoverlabel/__init__.py diff --git a/plotly/validators/table/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/table/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/table/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/table/hoverlabel/font/__init__.py diff --git a/plotly/validators/table/stream/__init__.py b/plotly-package/plotly/validators/table/stream/__init__.py similarity index 100% rename from plotly/validators/table/stream/__init__.py rename to plotly-package/plotly/validators/table/stream/__init__.py diff --git a/plotly/validators/violin/__init__.py b/plotly-package/plotly/validators/violin/__init__.py similarity index 100% rename from plotly/validators/violin/__init__.py rename to plotly-package/plotly/validators/violin/__init__.py diff --git a/plotly/validators/violin/box/__init__.py b/plotly-package/plotly/validators/violin/box/__init__.py similarity index 100% rename from plotly/validators/violin/box/__init__.py rename to plotly-package/plotly/validators/violin/box/__init__.py diff --git a/plotly/validators/violin/box/line/__init__.py b/plotly-package/plotly/validators/violin/box/line/__init__.py similarity index 100% rename from plotly/validators/violin/box/line/__init__.py rename to plotly-package/plotly/validators/violin/box/line/__init__.py diff --git a/plotly/validators/violin/hoverlabel/__init__.py b/plotly-package/plotly/validators/violin/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/violin/hoverlabel/__init__.py rename to plotly-package/plotly/validators/violin/hoverlabel/__init__.py diff --git a/plotly/validators/violin/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/violin/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/violin/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/violin/hoverlabel/font/__init__.py diff --git a/plotly/validators/violin/line/__init__.py b/plotly-package/plotly/validators/violin/line/__init__.py similarity index 100% rename from plotly/validators/violin/line/__init__.py rename to plotly-package/plotly/validators/violin/line/__init__.py diff --git a/plotly/validators/violin/marker/__init__.py b/plotly-package/plotly/validators/violin/marker/__init__.py similarity index 100% rename from plotly/validators/violin/marker/__init__.py rename to plotly-package/plotly/validators/violin/marker/__init__.py diff --git a/plotly/validators/violin/marker/line/__init__.py b/plotly-package/plotly/validators/violin/marker/line/__init__.py similarity index 100% rename from plotly/validators/violin/marker/line/__init__.py rename to plotly-package/plotly/validators/violin/marker/line/__init__.py diff --git a/plotly/validators/violin/meanline/__init__.py b/plotly-package/plotly/validators/violin/meanline/__init__.py similarity index 100% rename from plotly/validators/violin/meanline/__init__.py rename to plotly-package/plotly/validators/violin/meanline/__init__.py diff --git a/plotly/validators/violin/selected/__init__.py b/plotly-package/plotly/validators/violin/selected/__init__.py similarity index 100% rename from plotly/validators/violin/selected/__init__.py rename to plotly-package/plotly/validators/violin/selected/__init__.py diff --git a/plotly/validators/violin/selected/marker/__init__.py b/plotly-package/plotly/validators/violin/selected/marker/__init__.py similarity index 100% rename from plotly/validators/violin/selected/marker/__init__.py rename to plotly-package/plotly/validators/violin/selected/marker/__init__.py diff --git a/plotly/validators/violin/stream/__init__.py b/plotly-package/plotly/validators/violin/stream/__init__.py similarity index 100% rename from plotly/validators/violin/stream/__init__.py rename to plotly-package/plotly/validators/violin/stream/__init__.py diff --git a/plotly/validators/violin/unselected/__init__.py b/plotly-package/plotly/validators/violin/unselected/__init__.py similarity index 100% rename from plotly/validators/violin/unselected/__init__.py rename to plotly-package/plotly/validators/violin/unselected/__init__.py diff --git a/plotly/validators/violin/unselected/marker/__init__.py b/plotly-package/plotly/validators/violin/unselected/marker/__init__.py similarity index 100% rename from plotly/validators/violin/unselected/marker/__init__.py rename to plotly-package/plotly/validators/violin/unselected/marker/__init__.py diff --git a/plotly/validators/volume/__init__.py b/plotly-package/plotly/validators/volume/__init__.py similarity index 100% rename from plotly/validators/volume/__init__.py rename to plotly-package/plotly/validators/volume/__init__.py diff --git a/plotly/validators/volume/caps/__init__.py b/plotly-package/plotly/validators/volume/caps/__init__.py similarity index 100% rename from plotly/validators/volume/caps/__init__.py rename to plotly-package/plotly/validators/volume/caps/__init__.py diff --git a/plotly/validators/volume/caps/x/__init__.py b/plotly-package/plotly/validators/volume/caps/x/__init__.py similarity index 100% rename from plotly/validators/volume/caps/x/__init__.py rename to plotly-package/plotly/validators/volume/caps/x/__init__.py diff --git a/plotly/validators/volume/caps/y/__init__.py b/plotly-package/plotly/validators/volume/caps/y/__init__.py similarity index 100% rename from plotly/validators/volume/caps/y/__init__.py rename to plotly-package/plotly/validators/volume/caps/y/__init__.py diff --git a/plotly/validators/volume/caps/z/__init__.py b/plotly-package/plotly/validators/volume/caps/z/__init__.py similarity index 100% rename from plotly/validators/volume/caps/z/__init__.py rename to plotly-package/plotly/validators/volume/caps/z/__init__.py diff --git a/plotly/validators/volume/colorbar/__init__.py b/plotly-package/plotly/validators/volume/colorbar/__init__.py similarity index 100% rename from plotly/validators/volume/colorbar/__init__.py rename to plotly-package/plotly/validators/volume/colorbar/__init__.py diff --git a/plotly/validators/volume/colorbar/tickfont/__init__.py b/plotly-package/plotly/validators/volume/colorbar/tickfont/__init__.py similarity index 100% rename from plotly/validators/volume/colorbar/tickfont/__init__.py rename to plotly-package/plotly/validators/volume/colorbar/tickfont/__init__.py diff --git a/plotly/validators/volume/colorbar/tickformatstop/__init__.py b/plotly-package/plotly/validators/volume/colorbar/tickformatstop/__init__.py similarity index 100% rename from plotly/validators/volume/colorbar/tickformatstop/__init__.py rename to plotly-package/plotly/validators/volume/colorbar/tickformatstop/__init__.py diff --git a/plotly/validators/volume/colorbar/title/__init__.py b/plotly-package/plotly/validators/volume/colorbar/title/__init__.py similarity index 100% rename from plotly/validators/volume/colorbar/title/__init__.py rename to plotly-package/plotly/validators/volume/colorbar/title/__init__.py diff --git a/plotly/validators/volume/colorbar/title/font/__init__.py b/plotly-package/plotly/validators/volume/colorbar/title/font/__init__.py similarity index 100% rename from plotly/validators/volume/colorbar/title/font/__init__.py rename to plotly-package/plotly/validators/volume/colorbar/title/font/__init__.py diff --git a/plotly/validators/volume/contour/__init__.py b/plotly-package/plotly/validators/volume/contour/__init__.py similarity index 100% rename from plotly/validators/volume/contour/__init__.py rename to plotly-package/plotly/validators/volume/contour/__init__.py diff --git a/plotly/validators/volume/hoverlabel/__init__.py b/plotly-package/plotly/validators/volume/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/volume/hoverlabel/__init__.py rename to plotly-package/plotly/validators/volume/hoverlabel/__init__.py diff --git a/plotly/validators/volume/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/volume/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/volume/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/volume/hoverlabel/font/__init__.py diff --git a/plotly/validators/volume/lighting/__init__.py b/plotly-package/plotly/validators/volume/lighting/__init__.py similarity index 100% rename from plotly/validators/volume/lighting/__init__.py rename to plotly-package/plotly/validators/volume/lighting/__init__.py diff --git a/plotly/validators/volume/lightposition/__init__.py b/plotly-package/plotly/validators/volume/lightposition/__init__.py similarity index 100% rename from plotly/validators/volume/lightposition/__init__.py rename to plotly-package/plotly/validators/volume/lightposition/__init__.py diff --git a/plotly/validators/volume/slices/__init__.py b/plotly-package/plotly/validators/volume/slices/__init__.py similarity index 100% rename from plotly/validators/volume/slices/__init__.py rename to plotly-package/plotly/validators/volume/slices/__init__.py diff --git a/plotly/validators/volume/slices/x/__init__.py b/plotly-package/plotly/validators/volume/slices/x/__init__.py similarity index 100% rename from plotly/validators/volume/slices/x/__init__.py rename to plotly-package/plotly/validators/volume/slices/x/__init__.py diff --git a/plotly/validators/volume/slices/y/__init__.py b/plotly-package/plotly/validators/volume/slices/y/__init__.py similarity index 100% rename from plotly/validators/volume/slices/y/__init__.py rename to plotly-package/plotly/validators/volume/slices/y/__init__.py diff --git a/plotly/validators/volume/slices/z/__init__.py b/plotly-package/plotly/validators/volume/slices/z/__init__.py similarity index 100% rename from plotly/validators/volume/slices/z/__init__.py rename to plotly-package/plotly/validators/volume/slices/z/__init__.py diff --git a/plotly/validators/volume/spaceframe/__init__.py b/plotly-package/plotly/validators/volume/spaceframe/__init__.py similarity index 100% rename from plotly/validators/volume/spaceframe/__init__.py rename to plotly-package/plotly/validators/volume/spaceframe/__init__.py diff --git a/plotly/validators/volume/stream/__init__.py b/plotly-package/plotly/validators/volume/stream/__init__.py similarity index 100% rename from plotly/validators/volume/stream/__init__.py rename to plotly-package/plotly/validators/volume/stream/__init__.py diff --git a/plotly/validators/volume/surface/__init__.py b/plotly-package/plotly/validators/volume/surface/__init__.py similarity index 100% rename from plotly/validators/volume/surface/__init__.py rename to plotly-package/plotly/validators/volume/surface/__init__.py diff --git a/plotly/validators/waterfall/__init__.py b/plotly-package/plotly/validators/waterfall/__init__.py similarity index 100% rename from plotly/validators/waterfall/__init__.py rename to plotly-package/plotly/validators/waterfall/__init__.py diff --git a/plotly/validators/waterfall/connector/__init__.py b/plotly-package/plotly/validators/waterfall/connector/__init__.py similarity index 100% rename from plotly/validators/waterfall/connector/__init__.py rename to plotly-package/plotly/validators/waterfall/connector/__init__.py diff --git a/plotly/validators/waterfall/connector/line/__init__.py b/plotly-package/plotly/validators/waterfall/connector/line/__init__.py similarity index 100% rename from plotly/validators/waterfall/connector/line/__init__.py rename to plotly-package/plotly/validators/waterfall/connector/line/__init__.py diff --git a/plotly/validators/waterfall/decreasing/__init__.py b/plotly-package/plotly/validators/waterfall/decreasing/__init__.py similarity index 100% rename from plotly/validators/waterfall/decreasing/__init__.py rename to plotly-package/plotly/validators/waterfall/decreasing/__init__.py diff --git a/plotly/validators/waterfall/decreasing/marker/__init__.py b/plotly-package/plotly/validators/waterfall/decreasing/marker/__init__.py similarity index 100% rename from plotly/validators/waterfall/decreasing/marker/__init__.py rename to plotly-package/plotly/validators/waterfall/decreasing/marker/__init__.py diff --git a/plotly/validators/waterfall/decreasing/marker/line/__init__.py b/plotly-package/plotly/validators/waterfall/decreasing/marker/line/__init__.py similarity index 100% rename from plotly/validators/waterfall/decreasing/marker/line/__init__.py rename to plotly-package/plotly/validators/waterfall/decreasing/marker/line/__init__.py diff --git a/plotly/validators/waterfall/hoverlabel/__init__.py b/plotly-package/plotly/validators/waterfall/hoverlabel/__init__.py similarity index 100% rename from plotly/validators/waterfall/hoverlabel/__init__.py rename to plotly-package/plotly/validators/waterfall/hoverlabel/__init__.py diff --git a/plotly/validators/waterfall/hoverlabel/font/__init__.py b/plotly-package/plotly/validators/waterfall/hoverlabel/font/__init__.py similarity index 100% rename from plotly/validators/waterfall/hoverlabel/font/__init__.py rename to plotly-package/plotly/validators/waterfall/hoverlabel/font/__init__.py diff --git a/plotly/validators/waterfall/increasing/__init__.py b/plotly-package/plotly/validators/waterfall/increasing/__init__.py similarity index 100% rename from plotly/validators/waterfall/increasing/__init__.py rename to plotly-package/plotly/validators/waterfall/increasing/__init__.py diff --git a/plotly/validators/waterfall/increasing/marker/__init__.py b/plotly-package/plotly/validators/waterfall/increasing/marker/__init__.py similarity index 100% rename from plotly/validators/waterfall/increasing/marker/__init__.py rename to plotly-package/plotly/validators/waterfall/increasing/marker/__init__.py diff --git a/plotly/validators/waterfall/increasing/marker/line/__init__.py b/plotly-package/plotly/validators/waterfall/increasing/marker/line/__init__.py similarity index 100% rename from plotly/validators/waterfall/increasing/marker/line/__init__.py rename to plotly-package/plotly/validators/waterfall/increasing/marker/line/__init__.py diff --git a/plotly/validators/waterfall/insidetextfont/__init__.py b/plotly-package/plotly/validators/waterfall/insidetextfont/__init__.py similarity index 100% rename from plotly/validators/waterfall/insidetextfont/__init__.py rename to plotly-package/plotly/validators/waterfall/insidetextfont/__init__.py diff --git a/plotly/validators/waterfall/outsidetextfont/__init__.py b/plotly-package/plotly/validators/waterfall/outsidetextfont/__init__.py similarity index 100% rename from plotly/validators/waterfall/outsidetextfont/__init__.py rename to plotly-package/plotly/validators/waterfall/outsidetextfont/__init__.py diff --git a/plotly/validators/waterfall/stream/__init__.py b/plotly-package/plotly/validators/waterfall/stream/__init__.py similarity index 100% rename from plotly/validators/waterfall/stream/__init__.py rename to plotly-package/plotly/validators/waterfall/stream/__init__.py diff --git a/plotly/validators/waterfall/textfont/__init__.py b/plotly-package/plotly/validators/waterfall/textfont/__init__.py similarity index 100% rename from plotly/validators/waterfall/textfont/__init__.py rename to plotly-package/plotly/validators/waterfall/textfont/__init__.py diff --git a/plotly/validators/waterfall/totals/__init__.py b/plotly-package/plotly/validators/waterfall/totals/__init__.py similarity index 100% rename from plotly/validators/waterfall/totals/__init__.py rename to plotly-package/plotly/validators/waterfall/totals/__init__.py diff --git a/plotly/validators/waterfall/totals/marker/__init__.py b/plotly-package/plotly/validators/waterfall/totals/marker/__init__.py similarity index 100% rename from plotly/validators/waterfall/totals/marker/__init__.py rename to plotly-package/plotly/validators/waterfall/totals/marker/__init__.py diff --git a/plotly/validators/waterfall/totals/marker/line/__init__.py b/plotly-package/plotly/validators/waterfall/totals/marker/line/__init__.py similarity index 100% rename from plotly/validators/waterfall/totals/marker/line/__init__.py rename to plotly-package/plotly/validators/waterfall/totals/marker/line/__init__.py diff --git a/plotly/version.py b/plotly-package/plotly/version.py similarity index 100% rename from plotly/version.py rename to plotly-package/plotly/version.py diff --git a/plotly/widgets.py b/plotly-package/plotly/widgets.py similarity index 100% rename from plotly/widgets.py rename to plotly-package/plotly/widgets.py diff --git a/plotlywidget/__init__.py b/plotly-package/plotlywidget/__init__.py similarity index 100% rename from plotlywidget/__init__.py rename to plotly-package/plotlywidget/__init__.py diff --git a/plotlywidget/static/extension.js b/plotly-package/plotlywidget/static/extension.js similarity index 100% rename from plotlywidget/static/extension.js rename to plotly-package/plotlywidget/static/extension.js diff --git a/plotlywidget/static/index.js b/plotly-package/plotlywidget/static/index.js similarity index 100% rename from plotlywidget/static/index.js rename to plotly-package/plotlywidget/static/index.js diff --git a/recipe/LICENSE.txt b/plotly-package/recipe/LICENSE.txt similarity index 100% rename from recipe/LICENSE.txt rename to plotly-package/recipe/LICENSE.txt diff --git a/recipe/meta.yaml b/plotly-package/recipe/meta.yaml similarity index 100% rename from recipe/meta.yaml rename to plotly-package/recipe/meta.yaml diff --git a/requirements.txt b/plotly-package/requirements.txt similarity index 100% rename from requirements.txt rename to plotly-package/requirements.txt diff --git a/setup.cfg b/plotly-package/setup.cfg similarity index 100% rename from setup.cfg rename to plotly-package/setup.cfg diff --git a/setup.py b/plotly-package/setup.py similarity index 97% rename from setup.py rename to plotly-package/setup.py index b5c18d9ae19..dd1a27d4a92 100644 --- a/setup.py +++ b/plotly-package/setup.py @@ -420,16 +420,16 @@ def run(self): 'plotly.matplotlylib', 'plotly.matplotlylib.mplexporter', 'plotly.matplotlylib.mplexporter.renderers', - 'chart_studio', - 'chart_studio.api', - 'chart_studio.api.v1', - 'chart_studio.api.v2', - 'chart_studio.dashboard_objs', - 'chart_studio.grid_objs', - 'chart_studio.plotly', - 'chart_studio.plotly.chunked_requests', - 'chart_studio.presentation_objs', - 'chart_studio.widgets', + # 'chartstudio', + # 'chartstudio.api', + # 'chartstudio.api.v1', + # 'chartstudio.api.v2', + # 'chartstudio.dashboard_objs', + # 'chartstudio.grid_objs', + # 'chartstudio.plotly', + # 'chartstudio.plotly.chunked_requests', + # 'chartstudio.presentation_objs', + # 'chartstudio.widgets', '_plotly_utils', '_plotly_future_', ] + graph_objs_packages + validator_packages, diff --git a/versioneer.py b/plotly-package/versioneer.py similarity index 100% rename from versioneer.py rename to plotly-package/versioneer.py From 1a76d05364997d0b38506e541e62a107bd3cae8a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 18:14:25 -0400 Subject: [PATCH 03/34] Move codegen, submodules, templategen to plotly-package directory --- .../codegen}/__init__.py | 0 .../codegen}/compatibility.py | 0 .../codegen}/datatypes.py | 0 {codegen => plotly-package/codegen}/figure.py | 0 {codegen => plotly-package/codegen}/utils.py | 0 .../codegen}/validators.py | 0 .../submodules/chunked_requests/.gitignore | 10 + .../submodules/chunked_requests/README.md | 38 ++ .../submodules/chunked_requests/__init__.py | 0 .../chunked_requests/__init__.py | 1 + .../chunked_requests/chunked_request.py | 329 +++++++++++++++ .../submodules/chunked_requests/circle.yml | 20 + .../chunked_requests/requirements.txt | 1 + .../chunked_requests/test/__init__.py | 0 .../chunked_requests/test/package.json | 5 + .../chunked_requests/test/server.js | 65 +++ .../submodules/chunked_requests/test/tests.py | 197 +++++++++ .../submodules/mplexporter/.gitignore | 46 +++ .../submodules/mplexporter/.travis.yml | 32 ++ plotly-package/submodules/mplexporter/LICENSE | 27 ++ .../submodules/mplexporter/MANIFEST.in | 4 + .../submodules/mplexporter/README.md | 4 + .../mplexporter/mplexporter/__init__.py | 2 + .../mplexporter/mplexporter/_py3k_compat.py | 22 + .../mplexporter/mplexporter/exporter.py | 285 +++++++++++++ .../mplexporter/renderers/__init__.py | 12 + .../mplexporter/mplexporter/renderers/base.py | 388 ++++++++++++++++++ .../mplexporter/renderers/fake_renderer.py | 68 +++ .../mplexporter/renderers/vega_renderer.py | 138 +++++++ .../mplexporter/renderers/vincent_renderer.py | 52 +++ .../mplexporter/mplexporter/tests/__init__.py | 3 + .../mplexporter/tests/test_basic.py | 228 ++++++++++ .../mplexporter/tests/test_utils.py | 34 ++ .../mplexporter/mplexporter/tools.py | 52 +++ .../mplexporter/mplexporter/utils.py | 362 ++++++++++++++++ .../submodules/mplexporter/setup.py | 30 ++ .../templategen}/__init__.py | 0 .../templategen}/definitions.py | 0 .../templategen}/utils/__init__.py | 0 .../templategen}/utils/colors.py | 0 submodules/chunked_requests | 1 - submodules/mplexporter | 1 - 42 files changed, 2455 insertions(+), 2 deletions(-) rename {codegen => plotly-package/codegen}/__init__.py (100%) rename {codegen => plotly-package/codegen}/compatibility.py (100%) rename {codegen => plotly-package/codegen}/datatypes.py (100%) rename {codegen => plotly-package/codegen}/figure.py (100%) rename {codegen => plotly-package/codegen}/utils.py (100%) rename {codegen => plotly-package/codegen}/validators.py (100%) create mode 100644 plotly-package/submodules/chunked_requests/.gitignore create mode 100644 plotly-package/submodules/chunked_requests/README.md create mode 100644 plotly-package/submodules/chunked_requests/__init__.py create mode 100644 plotly-package/submodules/chunked_requests/chunked_requests/__init__.py create mode 100644 plotly-package/submodules/chunked_requests/chunked_requests/chunked_request.py create mode 100644 plotly-package/submodules/chunked_requests/circle.yml create mode 100644 plotly-package/submodules/chunked_requests/requirements.txt create mode 100644 plotly-package/submodules/chunked_requests/test/__init__.py create mode 100644 plotly-package/submodules/chunked_requests/test/package.json create mode 100644 plotly-package/submodules/chunked_requests/test/server.js create mode 100644 plotly-package/submodules/chunked_requests/test/tests.py create mode 100644 plotly-package/submodules/mplexporter/.gitignore create mode 100644 plotly-package/submodules/mplexporter/.travis.yml create mode 100644 plotly-package/submodules/mplexporter/LICENSE create mode 100644 plotly-package/submodules/mplexporter/MANIFEST.in create mode 100644 plotly-package/submodules/mplexporter/README.md create mode 100644 plotly-package/submodules/mplexporter/mplexporter/__init__.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/_py3k_compat.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/exporter.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/renderers/__init__.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/renderers/base.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/renderers/fake_renderer.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/renderers/vega_renderer.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/renderers/vincent_renderer.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/tests/__init__.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/tests/test_basic.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/tests/test_utils.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/tools.py create mode 100644 plotly-package/submodules/mplexporter/mplexporter/utils.py create mode 100644 plotly-package/submodules/mplexporter/setup.py rename {templategen => plotly-package/templategen}/__init__.py (100%) rename {templategen => plotly-package/templategen}/definitions.py (100%) rename {templategen => plotly-package/templategen}/utils/__init__.py (100%) rename {templategen => plotly-package/templategen}/utils/colors.py (100%) delete mode 160000 submodules/chunked_requests delete mode 160000 submodules/mplexporter diff --git a/codegen/__init__.py b/plotly-package/codegen/__init__.py similarity index 100% rename from codegen/__init__.py rename to plotly-package/codegen/__init__.py diff --git a/codegen/compatibility.py b/plotly-package/codegen/compatibility.py similarity index 100% rename from codegen/compatibility.py rename to plotly-package/codegen/compatibility.py diff --git a/codegen/datatypes.py b/plotly-package/codegen/datatypes.py similarity index 100% rename from codegen/datatypes.py rename to plotly-package/codegen/datatypes.py diff --git a/codegen/figure.py b/plotly-package/codegen/figure.py similarity index 100% rename from codegen/figure.py rename to plotly-package/codegen/figure.py diff --git a/codegen/utils.py b/plotly-package/codegen/utils.py similarity index 100% rename from codegen/utils.py rename to plotly-package/codegen/utils.py diff --git a/codegen/validators.py b/plotly-package/codegen/validators.py similarity index 100% rename from codegen/validators.py rename to plotly-package/codegen/validators.py diff --git a/plotly-package/submodules/chunked_requests/.gitignore b/plotly-package/submodules/chunked_requests/.gitignore new file mode 100644 index 00000000000..8dc73c206fa --- /dev/null +++ b/plotly-package/submodules/chunked_requests/.gitignore @@ -0,0 +1,10 @@ + +*.pyc +.ipynb_checkpoints/ +.ipynb_checkpoints/usage-checkpoint.ipynb + +.ipynb_checkpoints/usage-checkpoint.ipynb + +*node_modules* + +*.pyc diff --git a/plotly-package/submodules/chunked_requests/README.md b/plotly-package/submodules/chunked_requests/README.md new file mode 100644 index 00000000000..f6d0a4c73ad --- /dev/null +++ b/plotly-package/submodules/chunked_requests/README.md @@ -0,0 +1,38 @@ +chunked-requests +================ + +A wrapper around Python's httplib for streaming, chunk-encoded HTTP requests. As used in the [Plotly-Python API](https://plot.ly/python/) for streaming, real-time graphing in the browser: [https://plot.ly/python/streaming](https://plot.ly/python/streaming). + +### Quickly +```python +from chunked_requests import Stream + +stream = Stream('127.0.0.1', 8080) + +stream.write('some data') + +# take a break, go on a walk + +stream.write('some more data') # reconnects if disconnected + +response = stream.close() +``` + +See more in this IPython notebook: [http://nbviewer.ipython.org/github/chriddyp/chunked_requests/blob/master/usage.ipynb?create=1](http://nbviewer.ipython.org/github/chriddyp/chunked_requests/blob/master/usage.ipynb?create=1) + +### Docs +- `s = Stream(addr, port=80, headers={})` + + Initializes a connection to `addr:port` with `headers`. + +- `s.write(data, reconnect_on=(200, '', ))` + + Write chunk-encoded data, and reconnect depending on the status code. + +- `response = s.close()` + + Close connection and return a HTTPResponse object + +- `int s.maxtries` + + Max number of times to attempt re-connecting before raising an error diff --git a/plotly-package/submodules/chunked_requests/__init__.py b/plotly-package/submodules/chunked_requests/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/plotly-package/submodules/chunked_requests/chunked_requests/__init__.py b/plotly-package/submodules/chunked_requests/chunked_requests/__init__.py new file mode 100644 index 00000000000..044709703b3 --- /dev/null +++ b/plotly-package/submodules/chunked_requests/chunked_requests/__init__.py @@ -0,0 +1 @@ +from . chunked_request import Stream \ No newline at end of file diff --git a/plotly-package/submodules/chunked_requests/chunked_requests/chunked_request.py b/plotly-package/submodules/chunked_requests/chunked_requests/chunked_request.py new file mode 100644 index 00000000000..eb70488f59c --- /dev/null +++ b/plotly-package/submodules/chunked_requests/chunked_requests/chunked_request.py @@ -0,0 +1,329 @@ +import time +import six +import os +import ssl + +from six.moves import http_client +from six.moves.urllib.parse import urlparse + + +class Stream: + def __init__(self, server, port=80, headers={}, url='/', ssl_enabled=False, + ssl_verification_enabled=True): + ''' Initialize a stream object and an HTTP or HTTPS connection + with chunked Transfer-Encoding to server:port with optional headers. + ''' + self.maxtries = 5 + self._tries = 0 + self._delay = 1 + self._closed = False + self._server = server + self._port = port + self._headers = headers + self._url = url + self._ssl_enabled = ssl_enabled + self._ssl_verification_enabled = ssl_verification_enabled + self._connect() + + def write(self, data, reconnect_on=('', 200, )): + ''' Send `data` to the server in chunk-encoded form. + Check the connection before writing and reconnect + if disconnected and if the response status code is in `reconnect_on`. + + The response may either be an HTTPResponse object or an empty string. + ''' + + if not self._isconnected(): + + # Attempt to get the response. + response = self._getresponse() + + # Reconnect depending on the status code. + if ((response == '' and '' in reconnect_on) or + (response and isinstance(response, http_client.HTTPResponse) and + response.status in reconnect_on)): + self._reconnect() + + elif response and isinstance(response, http_client.HTTPResponse): + # If an HTTPResponse was recieved then + # make the users aware instead of + # auto-reconnecting in case the + # server is responding with an important + # message that might prevent + # future requests from going through, + # like Invalid Credentials. + # This allows the user to determine when + # to reconnect. + raise Exception("Server responded with " + "status code: {status_code}\n" + "and message: {msg}." + .format(status_code=response.status, + msg=response.read())) + + elif response == '': + raise Exception("Attempted to write but socket " + "was not connected.") + + try: + msg = data + msglen = format(len(msg), 'x') # msg length in hex + # Send the message in chunk-encoded form + self._conn.sock.setblocking(1) + self._conn.send('{msglen}\r\n{msg}\r\n' + .format(msglen=msglen, msg=msg).encode('utf-8')) + self._conn.sock.setblocking(0) + except http_client.socket.error: + self._reconnect() + self.write(data) + + def _get_proxy_config(self): + """ + Determine if self._url should be passed through a proxy. If so, return + the appropriate proxy_server and proxy_port. Assumes https_proxy is used + when ssl_enabled=True. + + """ + + proxy_server = None + proxy_port = None + ssl_enabled = self._ssl_enabled + + if ssl_enabled: + proxy = os.environ.get("https_proxy") + else: + proxy = os.environ.get("http_proxy") + no_proxy = os.environ.get("no_proxy") + no_proxy_url = no_proxy and self._server in no_proxy + + if proxy and not no_proxy_url: + p = urlparse(proxy) + proxy_server = p.hostname + proxy_port = p.port + + return proxy_server, proxy_port + + def _get_ssl_context(self): + """ + Return an unverified context if ssl verification is disabled. + + """ + + context = None + + if not self._ssl_verification_enabled: + context = ssl._create_unverified_context() + + return context + + def _connect(self): + ''' Initialize an HTTP/HTTPS connection with chunked Transfer-Encoding + to server:port with optional headers. + ''' + server = self._server + port = self._port + headers = self._headers + ssl_enabled = self._ssl_enabled + proxy_server, proxy_port = self._get_proxy_config() + + if (proxy_server and proxy_port): + if ssl_enabled: + context = self._get_ssl_context() + self._conn = http_client.HTTPSConnection( + proxy_server, proxy_port, context=context + ) + else: + self._conn = http_client.HTTPConnection( + proxy_server, proxy_port + ) + self._conn.set_tunnel(server, port) + else: + if ssl_enabled: + context = self._get_ssl_context() + self._conn = http_client.HTTPSConnection( + server, port, context=context + ) + else: + self._conn = http_client.HTTPConnection(server, port) + + self._conn.putrequest('POST', self._url) + self._conn.putheader('Transfer-Encoding', 'chunked') + for header in headers: + self._conn.putheader(header, headers[header]) + self._conn.endheaders() + + # Set blocking to False prevents recv + # from blocking while waiting for a response. + self._conn.sock.setblocking(False) + self._bytes = six.b('') + self._reset_retries() + time.sleep(0.5) + + def close(self): + ''' Close the connection to server. + + If available, return a http_client.HTTPResponse object. + + Closing the connection involves sending the + Transfer-Encoding terminating bytes. + ''' + self._reset_retries() + self._closed = True + + # Chunked-encoded posts are terminated with '0\r\n\r\n' + # For some reason, either Python or node.js seems to + # require an extra \r\n. + try: + self._conn.send('\r\n0\r\n\r\n'.encode('utf-8')) + except http_client.socket.error: + # In case the socket has already been closed + return '' + + return self._getresponse() + + def _getresponse(self): + ''' Read from recv and return a HTTPResponse object if possible. + Either + 1 - The client has succesfully closed the connection: Return '' + 2 - The server has already closed the connection: Return the response + if possible. + ''' + # Wait for a response + self._conn.sock.setblocking(True) + # Parse the response + response = self._bytes + while True: + try: + _bytes = self._conn.sock.recv(1) + except http_client.socket.error: + # For error 54: Connection reset by peer + # (and perhaps others) + return six.b('') + if _bytes == six.b(''): + break + else: + response += _bytes + # Set recv to be non-blocking again + self._conn.sock.setblocking(False) + + # Convert the response string to a http_client.HTTPResponse + # object with a bit of a hack + if response != six.b(''): + # Taken from + # http://pythonwise.blogspot.ca/2010/02/parse-http-response.html + try: + response = http_client.HTTPResponse(_FakeSocket(response)) + response.begin() + except: + # Bad headers ... etc. + response = six.b('') + return response + + def _isconnected(self): + ''' Return True if the socket is still connected + to the server, False otherwise. + + This check is done in 3 steps: + 1 - Check if we have closed the connection + 2 - Check if the original socket connection failed + 3 - Check if the server has returned any data. If they have, + assume that the server closed the response after they sent + the data, i.e. that the data was the HTTP response. + ''' + + # 1 - check if we've closed the connection. + if self._closed: + return False + + # 2 - Check if the original socket connection failed + # If this failed, then no socket was initialized + if self._conn.sock is None: + return False + + try: + # 3 - Check if the server has returned any data. + # If they have, then start to store the response + # in _bytes. + self._bytes = six.b('') + self._bytes = self._conn.sock.recv(1) + return False + except http_client.socket.error as e: + # Check why recv failed + # Windows machines are the error codes + # that start with 1 + # (http://msdn.microsoft.com/en-ca/library/windows/desktop/ms740668(v=vs.85).aspx) + if e.errno == 35 or e.errno == 10035: + # This is the "Resource temporarily unavailable" error + # which is thrown cuz there was nothing to receive, i.e. + # the server hasn't returned a response yet. + # This is a non-fatal error and the operation + # should be tried again. + # So, assume that the connection is still open. + return True + elif e.errno == 54 or e.errno == 10054: + # This is the "Connection reset by peer" error + # which is thrown cuz the server reset the + # socket, so the connection is closed. + return False + elif e.errno == 11: + # This is the "Resource temporarily unavailable" error + # which happens because the "operation would have blocked + # but nonblocking operation was requested". + # We require non-blocking reading of this socket because + # we don't want to wait around for a response, we just + # want to see if a response is currently available. So + # let's just assume that we're still connected and + # hopefully recieve some data on the next try. + return True + elif isinstance(e, ssl.SSLError): + if e.errno == 2: + # errno 2 occurs when trying to read or write data, but more + # data needs to be received on the underlying TCP transport + # before the request can be fulfilled. + # + # Python 2.7.9+ and Python 3.3+ give this its own exception, + # SSLWantReadError + return True + raise e + else: + # Unknown scenario + raise e + + def _reconnect(self): + ''' Connect if disconnected. + Retry self.maxtries times with delays + ''' + if not self._isconnected(): + try: + self._connect() + except http_client.socket.error as e: + # Attempt to reconnect if the connection was refused + if e.errno == 61 or e.errno == 10061: + # errno 61 is the "Connection Refused" error + time.sleep(self._delay) + self._delay += self._delay # fibonacii delays + self._tries += 1 + if self._tries < self.maxtries: + self._reconnect() + else: + self._reset_retries() + raise e + else: + # Unknown scenario + raise e + + # Reconnect worked - reset _closed + self._closed = False + + def _reset_retries(self): + ''' Reset the connect counters and delays + ''' + self._tries = 0 + self._delay = 1 + + +class _FakeSocket(six.StringIO): + # Used to construct a http_client.HTTPResponse object + # from a string. + # Thx to: http://pythonwise.blogspot.ca/2010/02/parse-http-response.html + def makefile(self, *args, **kwargs): + return self diff --git a/plotly-package/submodules/chunked_requests/circle.yml b/plotly-package/submodules/chunked_requests/circle.yml new file mode 100644 index 00000000000..72e9dfa0346 --- /dev/null +++ b/plotly-package/submodules/chunked_requests/circle.yml @@ -0,0 +1,20 @@ +machine: + node: + version: 0.10.33 + python: + version: 2.7.9 + +dependencies: + pre: + - pip install -r requirements.txt + - cd test + - mkdir node_modules + - npm install http-proxy + +test: + pre: + - node test/server.js: + background: true + - sleep 5 + override: + - nosetests test/tests.py diff --git a/plotly-package/submodules/chunked_requests/requirements.txt b/plotly-package/submodules/chunked_requests/requirements.txt new file mode 100644 index 00000000000..ffe2fce4989 --- /dev/null +++ b/plotly-package/submodules/chunked_requests/requirements.txt @@ -0,0 +1 @@ +six diff --git a/plotly-package/submodules/chunked_requests/test/__init__.py b/plotly-package/submodules/chunked_requests/test/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/plotly-package/submodules/chunked_requests/test/package.json b/plotly-package/submodules/chunked_requests/test/package.json new file mode 100644 index 00000000000..fe9782bf8c2 --- /dev/null +++ b/plotly-package/submodules/chunked_requests/test/package.json @@ -0,0 +1,5 @@ +{ + "dependencies" : { + "http-proxy": "1.7.3" + } +} diff --git a/plotly-package/submodules/chunked_requests/test/server.js b/plotly-package/submodules/chunked_requests/test/server.js new file mode 100644 index 00000000000..33265a0cea7 --- /dev/null +++ b/plotly-package/submodules/chunked_requests/test/server.js @@ -0,0 +1,65 @@ +var http = require('http'), + server = http.createServer(sourcehandler), + fs = require("fs"), + httpProxy = require('http-proxy'); + +server.listen(8080); + +function sourcehandler (req, res) { + + console.log('request! url: ', req.url); + + if (req.method !== "POST") { + console.log(JSON.stringify({msg: "Bad Request Method: " + req.method, + code: 406})); + req.destroy(); + } + + req.once('error', function (e) { + console.log(JSON.stringify(({err:e, msg: "Request Stream Error", code: 500}))); + }); + + req.once('close', function (haderror) { + console.log("REQUEST CLOSING"); + }); + + req.setEncoding('utf8'); + + if(req.url.indexOf('/successful_write') === 0) { + console.log('successful_write URLZ.'); + req.pipe(fs.createWriteStream("request.txt", {flags: 'a'})); + } + + if(req.url==='/5s_timeout') { + // Keep connection open for 5s, close with a 408 + req.pipe(fs.createWriteStream("request.txt", {flags: 'a'})); + setTimeout(function(){ + console.log("\nclosing"); + res.writeHead(408); + res.end("timeout on active data"); + req.destroy(); + }, 5000); + } +} + +// +// Create a proxy server with latency +// +var proxy = httpProxy.createProxyServer(); + +proxy.on('error', function(err, req, res) { + res.end(); +}); + +// +// Create your server that makes an operation that waits a while +// and then proxies the request +// +http.createServer(function (req, res) { + // This simulates an operation that takes 10s to execute + setTimeout(function () { + proxy.web(req, res, { + target: 'http://localhost:8080/successful_write' + }); + }, 10000); +}).listen(9008); diff --git a/plotly-package/submodules/chunked_requests/test/tests.py b/plotly-package/submodules/chunked_requests/test/tests.py new file mode 100644 index 00000000000..41906343b0b --- /dev/null +++ b/plotly-package/submodules/chunked_requests/test/tests.py @@ -0,0 +1,197 @@ +import unittest +import os +import errno +import time +import ssl + +from nose.tools import assert_raises + +# from chunked_requests import +from chunked_requests.chunked_requests import Stream + + +class Test(unittest.TestCase): + def setUp(self): + pass + # stream = Stream('127.0.0.1', port=8080) + + def test_successful_write(self): + ''' Test that data was successfully + written to the server. + ''' + + _remove_file('request.txt') + + stream = Stream('127.0.0.1', + port=8080, + url='/successful_write') + + body = 'request-body'*10 + stream.write(body) + time.sleep(1) + with open('request.txt', 'r') as f: + body_from_file = f.read() + + assert(body_from_file == body) + + _remove_file('request.txt') + + def test_reconnect_on_408_timeout(self): + ''' Test that `reconnect_on` indeed + reconnects on a `408` timeout response + from the server after 5 seconds and + continues to write data. Test that + all of the data was transmitted, even + with a broken connection and re-connect. + ''' + + _remove_file('request.txt') + + stream = Stream('127.0.0.1', + port=8080, + url='/5s_timeout') + + for i in range(8): + stream.write(str(i), + reconnect_on=('', 200, 408)) + time.sleep(1) + + with open('request.txt', 'r') as f: + body_from_file = f.read() + + body_sent = ''.join([str(i) for i in range(8)]) + assert(body_from_file == body_sent) + _remove_file('request.txt') + + def test_failure_on_408_timeout(self): + ''' Test that an error is thrown when + the server returns a 408 timeout and + we choose not to reconnect. + ''' + + with assert_raises(Exception) as cm: + stream = Stream('127.0.0.1', + port=8080, + url='/5s_timeout') + + for i in range(8): + stream.write(str(i), + reconnect_on=('', 200)) + time.sleep(1) + + ex = cm.exception + assert(ex.message == "Server responded " + "with status code: 408\n" + "and message: " + "timeout on active data.") + + def test_huge_request_on_latent_server(self): + _remove_file('request.txt') + + stream = Stream('127.0.0.1', + port=9008) + body = 'x' * (5000 * 1000) + stream.write(body) + + # Proxy servers delays the response for 10 seconds + # Writing 5 mill chars takes a bit, so wait a few + # extra secs before comparing + time.sleep(13) + with open('request.txt', 'r') as f: + body_from_file = f.read() + + assert(body_from_file == body) + + _remove_file('request.txt') + + def test__get_proxy_config(self): + + stream = Stream('127.0.0.1', port=8080) + + # http_proxy is not set + # --> proxy_server and proxy_port should not be set + proxy_server, proxy_port = stream._get_proxy_config() + self.assertIsNone(proxy_server) + self.assertIsNone(proxy_port) + + # set proxy env. variable + os.environ['http_proxy'] = 'http://test:123' + + # http_proxy is set + # --> proxy_server and proxy_port should be set + proxy_server, proxy_port = stream._get_proxy_config() + self.assertEqual(proxy_server, 'test') + self.assertEqual(proxy_port, 123) + + # no_proxy is set but url is not in no_proxy + # --> proxy_server and proxy_port should be set + os.environ['no_proxy'] = 'some_url, other_url' + proxy_server, proxy_port = stream._get_proxy_config() + self.assertEqual(proxy_server, 'test') + self.assertEqual(proxy_port, 123) + + # http_proxy and no_proxy are set and url is in no_proxy + # --> proxy_server and proxy_port should not be set + os.environ['no_proxy'] = 'some_url, {}, other_url'.format( + stream._server + ) + proxy_server, proxy_port = stream._get_proxy_config() + self.assertIsNone(proxy_server) + self.assertIsNone(proxy_port) + + # unset env variables + os.environ.pop('http_proxy') + os.environ.pop('no_proxy') + + def test__get_proxy_config_with_ssl(self): + + stream = Stream('127.0.0.1', port=8080) + + # we actually still have an http connection here, but we're faking https + # to test the expected proxy behaviour + stream._ssl_enabled = True + + # https_proxy is not set + # --> proxy_server and proxy_port should not be set + proxy_server, proxy_port = stream._get_proxy_config() + self.assertIsNone(proxy_server) + self.assertIsNone(proxy_port) + + # set proxy env. variable + os.environ['https_proxy'] = 'https://test:123' + + # https_proxy is set + # --> proxy_server and proxy_port should be set + proxy_server, proxy_port = stream._get_proxy_config() + self.assertEqual(proxy_server, 'test') + self.assertEqual(proxy_port, 123) + + def test__get_ssl_context(self): + + stream = Stream('127.0.0.1', port=8080) + + # we actually still have an http connection here, but we're faking https + # to test the expected proxy behaviour + stream._ssl_enabled = True + + # if ssl verification is enabled (default), context=None expected + context = stream._get_ssl_context() + self.assertIsNone(context) + + # if ssl verification is disabled, SSLContext expected + stream._ssl_verification_enabled = False + context = stream._get_ssl_context() + self.assertIsInstance(context, ssl.SSLContext) + + +def _remove_file(filename): + try: + os.remove(filename) + except OSError as e: + # errno.ENOENT = no such file or directory + if e.errno != errno.ENOENT: + raise e + + +if __name__ == '__main__': + unittest.main() diff --git a/plotly-package/submodules/mplexporter/.gitignore b/plotly-package/submodules/mplexporter/.gitignore new file mode 100644 index 00000000000..8c03c7caa96 --- /dev/null +++ b/plotly-package/submodules/mplexporter/.gitignore @@ -0,0 +1,46 @@ +*.py[cod] + +# C extensions +*.so + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg +lib +lib64 +__pycache__ + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox +nosetests.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + + +# emacs backup files +*~ + +# ipython backups +.ipynb_checkpoints + +# os x files +.DS_Store \ No newline at end of file diff --git a/plotly-package/submodules/mplexporter/.travis.yml b/plotly-package/submodules/mplexporter/.travis.yml new file mode 100644 index 00000000000..64ccad4740c --- /dev/null +++ b/plotly-package/submodules/mplexporter/.travis.yml @@ -0,0 +1,32 @@ +sudo: false +language: python + +python: + - 2.7 + - 3.4 + - 3.5 + +env: + - DEPS="numpy=1.11 matplotlib=1.5 jinja2=2.8 pandas=0.18 nose" + +install: + - conda create -n testenv --yes python=$TRAVIS_PYTHON_VERSION + - source activate testenv + - conda install --yes $DEPS + - python setup.py install + +before_install: + # setup virtual x + - "export DISPLAY=:99.0" + - "sh -e /etc/init.d/xvfb start" + # then install python version to test + - wget https://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -O miniconda.sh + - chmod +x miniconda.sh + - bash miniconda.sh -b -p $HOME/miniconda + - export PATH="$HOME/miniconda/bin:$PATH" + # Learned the hard way: miniconda is not always up-to-date with conda. + - conda update --yes conda + +script: + - nosetests mplexporter + diff --git a/plotly-package/submodules/mplexporter/LICENSE b/plotly-package/submodules/mplexporter/LICENSE new file mode 100644 index 00000000000..096369bcdc4 --- /dev/null +++ b/plotly-package/submodules/mplexporter/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2014, mpld3 +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +* Neither the name of the {organization} nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/plotly-package/submodules/mplexporter/MANIFEST.in b/plotly-package/submodules/mplexporter/MANIFEST.in new file mode 100644 index 00000000000..a8f80c2525f --- /dev/null +++ b/plotly-package/submodules/mplexporter/MANIFEST.in @@ -0,0 +1,4 @@ +include *.md +include LICENSE + +recursive-include mplexporter *.py diff --git a/plotly-package/submodules/mplexporter/README.md b/plotly-package/submodules/mplexporter/README.md new file mode 100644 index 00000000000..7bd44b9cea6 --- /dev/null +++ b/plotly-package/submodules/mplexporter/README.md @@ -0,0 +1,4 @@ +mplexporter +=========== + +A proof of concept general matplotlib exporter diff --git a/plotly-package/submodules/mplexporter/mplexporter/__init__.py b/plotly-package/submodules/mplexporter/mplexporter/__init__.py new file mode 100644 index 00000000000..970731c6d64 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/__init__.py @@ -0,0 +1,2 @@ +from .renderers import Renderer +from .exporter import Exporter diff --git a/plotly-package/submodules/mplexporter/mplexporter/_py3k_compat.py b/plotly-package/submodules/mplexporter/mplexporter/_py3k_compat.py new file mode 100644 index 00000000000..9ca84550d67 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/_py3k_compat.py @@ -0,0 +1,22 @@ +""" +Simple fixes for Python 2/3 compatibility +""" +import sys +PY3K = sys.version_info[0] >= 3 + + +if PY3K: + import builtins + import functools + reduce = functools.reduce + zip = builtins.zip + xrange = builtins.range + map = builtins.map +else: + import __builtin__ + import itertools + builtins = __builtin__ + reduce = __builtin__.reduce + zip = itertools.izip + xrange = __builtin__.xrange + map = itertools.imap diff --git a/plotly-package/submodules/mplexporter/mplexporter/exporter.py b/plotly-package/submodules/mplexporter/mplexporter/exporter.py new file mode 100644 index 00000000000..318ee2bf62c --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/exporter.py @@ -0,0 +1,285 @@ +""" +Matplotlib Exporter +=================== +This submodule contains tools for crawling a matplotlib figure and exporting +relevant pieces to a renderer. +""" +import warnings +import io +from . import utils + +import matplotlib +from matplotlib import transforms, collections +from matplotlib.backends.backend_agg import FigureCanvasAgg + +class Exporter(object): + """Matplotlib Exporter + + Parameters + ---------- + renderer : Renderer object + The renderer object called by the exporter to create a figure + visualization. See mplexporter.Renderer for information on the + methods which should be defined within the renderer. + close_mpl : bool + If True (default), close the matplotlib figure as it is rendered. This + is useful for when the exporter is used within the notebook, or with + an interactive matplotlib backend. + """ + + def __init__(self, renderer, close_mpl=True): + self.close_mpl = close_mpl + self.renderer = renderer + + def run(self, fig): + """ + Run the exporter on the given figure + + Parmeters + --------- + fig : matplotlib.Figure instance + The figure to export + """ + # Calling savefig executes the draw() command, putting elements + # in the correct place. + if fig.canvas is None: + canvas = FigureCanvasAgg(fig) + fig.savefig(io.BytesIO(), format='png', dpi=fig.dpi) + if self.close_mpl: + import matplotlib.pyplot as plt + plt.close(fig) + self.crawl_fig(fig) + + @staticmethod + def process_transform(transform, ax=None, data=None, return_trans=False, + force_trans=None): + """Process the transform and convert data to figure or data coordinates + + Parameters + ---------- + transform : matplotlib Transform object + The transform applied to the data + ax : matplotlib Axes object (optional) + The axes the data is associated with + data : ndarray (optional) + The array of data to be transformed. + return_trans : bool (optional) + If true, return the final transform of the data + force_trans : matplotlib.transform instance (optional) + If supplied, first force the data to this transform + + Returns + ------- + code : string + Code is either "data", "axes", "figure", or "display", indicating + the type of coordinates output. + transform : matplotlib transform + the transform used to map input data to output data. + Returned only if return_trans is True + new_data : ndarray + Data transformed to match the given coordinate code. + Returned only if data is specified + """ + if isinstance(transform, transforms.BlendedGenericTransform): + warnings.warn("Blended transforms not yet supported. " + "Zoom behavior may not work as expected.") + + if force_trans is not None: + if data is not None: + data = (transform - force_trans).transform(data) + transform = force_trans + + code = "display" + if ax is not None: + for (c, trans) in [("data", ax.transData), + ("axes", ax.transAxes), + ("figure", ax.figure.transFigure), + ("display", transforms.IdentityTransform())]: + if transform.contains_branch(trans): + code, transform = (c, transform - trans) + break + + if data is not None: + if return_trans: + return code, transform.transform(data), transform + else: + return code, transform.transform(data) + else: + if return_trans: + return code, transform + else: + return code + + def crawl_fig(self, fig): + """Crawl the figure and process all axes""" + with self.renderer.draw_figure(fig=fig, + props=utils.get_figure_properties(fig)): + for ax in fig.axes: + self.crawl_ax(ax) + + def crawl_ax(self, ax): + """Crawl the axes and process all elements within""" + with self.renderer.draw_axes(ax=ax, + props=utils.get_axes_properties(ax)): + for line in ax.lines: + self.draw_line(ax, line) + for text in ax.texts: + self.draw_text(ax, text) + for (text, ttp) in zip([ax.xaxis.label, ax.yaxis.label, ax.title], + ["xlabel", "ylabel", "title"]): + if(hasattr(text, 'get_text') and text.get_text()): + self.draw_text(ax, text, force_trans=ax.transAxes, + text_type=ttp) + for artist in ax.artists: + # TODO: process other artists + if isinstance(artist, matplotlib.text.Text): + self.draw_text(ax, artist) + for patch in ax.patches: + self.draw_patch(ax, patch) + for collection in ax.collections: + self.draw_collection(ax, collection) + for image in ax.images: + self.draw_image(ax, image) + + legend = ax.get_legend() + if legend is not None: + props = utils.get_legend_properties(ax, legend) + with self.renderer.draw_legend(legend=legend, props=props): + if props['visible']: + self.crawl_legend(ax, legend) + + def crawl_legend(self, ax, legend): + """ + Recursively look through objects in legend children + """ + legendElements = list(utils.iter_all_children(legend._legend_box, + skipContainers=True)) + legendElements.append(legend.legendPatch) + for child in legendElements: + # force a large zorder so it appears on top + child.set_zorder(1E6 + child.get_zorder()) + + # reorder border box to make sure marks are visible + if isinstance(child, matplotlib.patches.FancyBboxPatch): + child.set_zorder(child.get_zorder()-1) + + try: + # What kind of object... + if isinstance(child, matplotlib.patches.Patch): + self.draw_patch(ax, child, force_trans=ax.transAxes) + elif isinstance(child, matplotlib.text.Text): + if child.get_text() != 'None': + self.draw_text(ax, child, force_trans=ax.transAxes) + elif isinstance(child, matplotlib.lines.Line2D): + self.draw_line(ax, child, force_trans=ax.transAxes) + elif isinstance(child, matplotlib.collections.Collection): + self.draw_collection(ax, child, + force_pathtrans=ax.transAxes) + else: + warnings.warn("Legend element %s not impemented" % child) + except NotImplementedError: + warnings.warn("Legend element %s not impemented" % child) + + def draw_line(self, ax, line, force_trans=None): + """Process a matplotlib line and call renderer.draw_line""" + coordinates, data = self.process_transform(line.get_transform(), + ax, line.get_xydata(), + force_trans=force_trans) + linestyle = utils.get_line_style(line) + if (linestyle['dasharray'] is None + and linestyle['drawstyle'] == 'default'): + linestyle = None + markerstyle = utils.get_marker_style(line) + if (markerstyle['marker'] in ['None', 'none', None] + or markerstyle['markerpath'][0].size == 0): + markerstyle = None + label = line.get_label() + if markerstyle or linestyle: + self.renderer.draw_marked_line(data=data, coordinates=coordinates, + linestyle=linestyle, + markerstyle=markerstyle, + label=label, + mplobj=line) + + def draw_text(self, ax, text, force_trans=None, text_type=None): + """Process a matplotlib text object and call renderer.draw_text""" + content = text.get_text() + if content: + transform = text.get_transform() + position = text.get_position() + coords, position = self.process_transform(transform, ax, + position, + force_trans=force_trans) + style = utils.get_text_style(text) + self.renderer.draw_text(text=content, position=position, + coordinates=coords, + text_type=text_type, + style=style, mplobj=text) + + def draw_patch(self, ax, patch, force_trans=None): + """Process a matplotlib patch object and call renderer.draw_path""" + vertices, pathcodes = utils.SVG_path(patch.get_path()) + transform = patch.get_transform() + coordinates, vertices = self.process_transform(transform, + ax, vertices, + force_trans=force_trans) + linestyle = utils.get_path_style(patch, fill=patch.get_fill()) + self.renderer.draw_path(data=vertices, + coordinates=coordinates, + pathcodes=pathcodes, + style=linestyle, + mplobj=patch) + + def draw_collection(self, ax, collection, + force_pathtrans=None, + force_offsettrans=None): + """Process a matplotlib collection and call renderer.draw_collection""" + (transform, transOffset, + offsets, paths) = collection._prepare_points() + + offset_coords, offsets = self.process_transform( + transOffset, ax, offsets, force_trans=force_offsettrans) + path_coords = self.process_transform( + transform, ax, force_trans=force_pathtrans) + + processed_paths = [utils.SVG_path(path) for path in paths] + processed_paths = [(self.process_transform( + transform, ax, path[0], force_trans=force_pathtrans)[1], path[1]) + for path in processed_paths] + + path_transforms = collection.get_transforms() + try: + # matplotlib 1.3: path_transforms are transform objects. + # Convert them to numpy arrays. + path_transforms = [t.get_matrix() for t in path_transforms] + except AttributeError: + # matplotlib 1.4: path transforms are already numpy arrays. + pass + + styles = {'linewidth': collection.get_linewidths(), + 'facecolor': collection.get_facecolors(), + 'edgecolor': collection.get_edgecolors(), + 'alpha': collection._alpha, + 'zorder': collection.get_zorder()} + + offset_dict = {"data": "before", + "screen": "after"} + offset_order = offset_dict[collection.get_offset_position()] + + self.renderer.draw_path_collection(paths=processed_paths, + path_coordinates=path_coords, + path_transforms=path_transforms, + offsets=offsets, + offset_coordinates=offset_coords, + offset_order=offset_order, + styles=styles, + mplobj=collection) + + def draw_image(self, ax, image): + """Process a matplotlib image object and call renderer.draw_image""" + self.renderer.draw_image(imdata=utils.image_to_base64(image), + extent=image.get_extent(), + coordinates="data", + style={"alpha": image.get_alpha(), + "zorder": image.get_zorder()}, + mplobj=image) diff --git a/plotly-package/submodules/mplexporter/mplexporter/renderers/__init__.py b/plotly-package/submodules/mplexporter/mplexporter/renderers/__init__.py new file mode 100644 index 00000000000..ba85b1aa00e --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/renderers/__init__.py @@ -0,0 +1,12 @@ +""" +Matplotlib Renderers +==================== +This submodule contains renderer objects which define renderer behavior used +within the Exporter class. The base renderer class is :class:`Renderer`, an +abstract base class +""" + +from .base import Renderer +from .vega_renderer import VegaRenderer, fig_to_vega +from .vincent_renderer import VincentRenderer, fig_to_vincent +from .fake_renderer import FakeRenderer, FullFakeRenderer diff --git a/plotly-package/submodules/mplexporter/mplexporter/renderers/base.py b/plotly-package/submodules/mplexporter/mplexporter/renderers/base.py new file mode 100644 index 00000000000..6bf5acb444f --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/renderers/base.py @@ -0,0 +1,388 @@ +import warnings +import itertools +from contextlib import contextmanager +from distutils.version import LooseVersion + +import numpy as np +import matplotlib as mpl +from matplotlib import transforms + +from .. import utils +from .. import _py3k_compat as py3k + + +class Renderer(object): + @staticmethod + def ax_zoomable(ax): + return bool(ax and ax.get_navigate()) + + @staticmethod + def ax_has_xgrid(ax): + return bool(ax and ax.xaxis._gridOnMajor and ax.yaxis.get_gridlines()) + + @staticmethod + def ax_has_ygrid(ax): + return bool(ax and ax.yaxis._gridOnMajor and ax.yaxis.get_gridlines()) + + @property + def current_ax_zoomable(self): + return self.ax_zoomable(self._current_ax) + + @property + def current_ax_has_xgrid(self): + return self.ax_has_xgrid(self._current_ax) + + @property + def current_ax_has_ygrid(self): + return self.ax_has_ygrid(self._current_ax) + + @contextmanager + def draw_figure(self, fig, props): + if hasattr(self, "_current_fig") and self._current_fig is not None: + warnings.warn("figure embedded in figure: something is wrong") + self._current_fig = fig + self._fig_props = props + self.open_figure(fig=fig, props=props) + yield + self.close_figure(fig=fig) + self._current_fig = None + self._fig_props = {} + + @contextmanager + def draw_axes(self, ax, props): + if hasattr(self, "_current_ax") and self._current_ax is not None: + warnings.warn("axes embedded in axes: something is wrong") + self._current_ax = ax + self._ax_props = props + self.open_axes(ax=ax, props=props) + yield + self.close_axes(ax=ax) + self._current_ax = None + self._ax_props = {} + + @contextmanager + def draw_legend(self, legend, props): + self._current_legend = legend + self._legend_props = props + self.open_legend(legend=legend, props=props) + yield + self.close_legend(legend=legend) + self._current_legend = None + self._legend_props = {} + + # Following are the functions which should be overloaded in subclasses + + def open_figure(self, fig, props): + """ + Begin commands for a particular figure. + + Parameters + ---------- + fig : matplotlib.Figure + The Figure which will contain the ensuing axes and elements + props : dictionary + The dictionary of figure properties + """ + pass + + def close_figure(self, fig): + """ + Finish commands for a particular figure. + + Parameters + ---------- + fig : matplotlib.Figure + The figure which is finished being drawn. + """ + pass + + def open_axes(self, ax, props): + """ + Begin commands for a particular axes. + + Parameters + ---------- + ax : matplotlib.Axes + The Axes which will contain the ensuing axes and elements + props : dictionary + The dictionary of axes properties + """ + pass + + def close_axes(self, ax): + """ + Finish commands for a particular axes. + + Parameters + ---------- + ax : matplotlib.Axes + The Axes which is finished being drawn. + """ + pass + + def open_legend(self, legend, props): + """ + Beging commands for a particular legend. + + Parameters + ---------- + legend : matplotlib.legend.Legend + The Legend that will contain the ensuing elements + props : dictionary + The dictionary of legend properties + """ + pass + + def close_legend(self, legend): + """ + Finish commands for a particular legend. + + Parameters + ---------- + legend : matplotlib.legend.Legend + The Legend which is finished being drawn + """ + pass + + def draw_marked_line(self, data, coordinates, linestyle, markerstyle, + label, mplobj=None): + """Draw a line that also has markers. + + If this isn't reimplemented by a renderer object, by default, it will + make a call to BOTH draw_line and draw_markers when both markerstyle + and linestyle are not None in the same Line2D object. + + """ + if linestyle is not None: + self.draw_line(data, coordinates, linestyle, label, mplobj) + if markerstyle is not None: + self.draw_markers(data, coordinates, markerstyle, label, mplobj) + + def draw_line(self, data, coordinates, style, label, mplobj=None): + """ + Draw a line. By default, draw the line via the draw_path() command. + Some renderers might wish to override this and provide more + fine-grained behavior. + + In matplotlib, lines are generally created via the plt.plot() command, + though this command also can create marker collections. + + Parameters + ---------- + data : array_like + A shape (N, 2) array of datapoints. + coordinates : string + A string code, which should be either 'data' for data coordinates, + or 'figure' for figure (pixel) coordinates. + style : dictionary + a dictionary specifying the appearance of the line. + mplobj : matplotlib object + the matplotlib plot element which generated this line + """ + pathcodes = ['M'] + (data.shape[0] - 1) * ['L'] + pathstyle = dict(facecolor='none', **style) + pathstyle['edgecolor'] = pathstyle.pop('color') + pathstyle['edgewidth'] = pathstyle.pop('linewidth') + self.draw_path(data=data, coordinates=coordinates, + pathcodes=pathcodes, style=pathstyle, mplobj=mplobj) + + @staticmethod + def _iter_path_collection(paths, path_transforms, offsets, styles): + """Build an iterator over the elements of the path collection""" + N = max(len(paths), len(offsets)) + + # Before mpl 1.4.0, path_transform can be a false-y value, not a valid + # transformation matrix. + if LooseVersion(mpl.__version__) < LooseVersion('1.4.0'): + if path_transforms is None: + path_transforms = [np.eye(3)] + + edgecolor = styles['edgecolor'] + if np.size(edgecolor) == 0: + edgecolor = ['none'] + facecolor = styles['facecolor'] + if np.size(facecolor) == 0: + facecolor = ['none'] + + elements = [paths, path_transforms, offsets, + edgecolor, styles['linewidth'], facecolor] + + it = itertools + return it.islice(py3k.zip(*py3k.map(it.cycle, elements)), N) + + def draw_path_collection(self, paths, path_coordinates, path_transforms, + offsets, offset_coordinates, offset_order, + styles, mplobj=None): + """ + Draw a collection of paths. The paths, offsets, and styles are all + iterables, and the number of paths is max(len(paths), len(offsets)). + + By default, this is implemented via multiple calls to the draw_path() + function. For efficiency, Renderers may choose to customize this + implementation. + + Examples of path collections created by matplotlib are scatter plots, + histograms, contour plots, and many others. + + Parameters + ---------- + paths : list + list of tuples, where each tuple has two elements: + (data, pathcodes). See draw_path() for a description of these. + path_coordinates: string + the coordinates code for the paths, which should be either + 'data' for data coordinates, or 'figure' for figure (pixel) + coordinates. + path_transforms: array_like + an array of shape (*, 3, 3), giving a series of 2D Affine + transforms for the paths. These encode translations, rotations, + and scalings in the standard way. + offsets: array_like + An array of offsets of shape (N, 2) + offset_coordinates : string + the coordinates code for the offsets, which should be either + 'data' for data coordinates, or 'figure' for figure (pixel) + coordinates. + offset_order : string + either "before" or "after". This specifies whether the offset + is applied before the path transform, or after. The matplotlib + backend equivalent is "before"->"data", "after"->"screen". + styles: dictionary + A dictionary in which each value is a list of length N, containing + the style(s) for the paths. + mplobj : matplotlib object + the matplotlib plot element which generated this collection + """ + if offset_order == "before": + raise NotImplementedError("offset before transform") + + for tup in self._iter_path_collection(paths, path_transforms, + offsets, styles): + (path, path_transform, offset, ec, lw, fc) = tup + vertices, pathcodes = path + path_transform = transforms.Affine2D(path_transform) + vertices = path_transform.transform(vertices) + # This is a hack: + if path_coordinates == "figure": + path_coordinates = "points" + style = {"edgecolor": utils.export_color(ec), + "facecolor": utils.export_color(fc), + "edgewidth": lw, + "dasharray": "10,0", + "alpha": styles['alpha'], + "zorder": styles['zorder']} + self.draw_path(data=vertices, coordinates=path_coordinates, + pathcodes=pathcodes, style=style, offset=offset, + offset_coordinates=offset_coordinates, + mplobj=mplobj) + + def draw_markers(self, data, coordinates, style, label, mplobj=None): + """ + Draw a set of markers. By default, this is done by repeatedly + calling draw_path(), but renderers should generally overload + this method to provide a more efficient implementation. + + In matplotlib, markers are created using the plt.plot() command. + + Parameters + ---------- + data : array_like + A shape (N, 2) array of datapoints. + coordinates : string + A string code, which should be either 'data' for data coordinates, + or 'figure' for figure (pixel) coordinates. + style : dictionary + a dictionary specifying the appearance of the markers. + mplobj : matplotlib object + the matplotlib plot element which generated this marker collection + """ + vertices, pathcodes = style['markerpath'] + pathstyle = dict((key, style[key]) for key in ['alpha', 'edgecolor', + 'facecolor', 'zorder', + 'edgewidth']) + pathstyle['dasharray'] = "10,0" + for vertex in data: + self.draw_path(data=vertices, coordinates="points", + pathcodes=pathcodes, style=pathstyle, + offset=vertex, offset_coordinates=coordinates, + mplobj=mplobj) + + def draw_text(self, text, position, coordinates, style, + text_type=None, mplobj=None): + """ + Draw text on the image. + + Parameters + ---------- + text : string + The text to draw + position : tuple + The (x, y) position of the text + coordinates : string + A string code, which should be either 'data' for data coordinates, + or 'figure' for figure (pixel) coordinates. + style : dictionary + a dictionary specifying the appearance of the text. + text_type : string or None + if specified, a type of text such as "xlabel", "ylabel", "title" + mplobj : matplotlib object + the matplotlib plot element which generated this text + """ + raise NotImplementedError() + + def draw_path(self, data, coordinates, pathcodes, style, + offset=None, offset_coordinates="data", mplobj=None): + """ + Draw a path. + + In matplotlib, paths are created by filled regions, histograms, + contour plots, patches, etc. + + Parameters + ---------- + data : array_like + A shape (N, 2) array of datapoints. + coordinates : string + A string code, which should be either 'data' for data coordinates, + 'figure' for figure (pixel) coordinates, or "points" for raw + point coordinates (useful in conjunction with offsets, below). + pathcodes : list + A list of single-character SVG pathcodes associated with the data. + Path codes are one of ['M', 'm', 'L', 'l', 'Q', 'q', 'T', 't', + 'S', 's', 'C', 'c', 'Z', 'z'] + See the SVG specification for details. Note that some path codes + consume more than one datapoint (while 'Z' consumes none), so + in general, the length of the pathcodes list will not be the same + as that of the data array. + style : dictionary + a dictionary specifying the appearance of the line. + offset : list (optional) + the (x, y) offset of the path. If not given, no offset will + be used. + offset_coordinates : string (optional) + A string code, which should be either 'data' for data coordinates, + or 'figure' for figure (pixel) coordinates. + mplobj : matplotlib object + the matplotlib plot element which generated this path + """ + raise NotImplementedError() + + def draw_image(self, imdata, extent, coordinates, style, mplobj=None): + """ + Draw an image. + + Parameters + ---------- + imdata : string + base64 encoded png representation of the image + extent : list + the axes extent of the image: [xmin, xmax, ymin, ymax] + coordinates: string + A string code, which should be either 'data' for data coordinates, + or 'figure' for figure (pixel) coordinates. + style : dictionary + a dictionary specifying the appearance of the image + mplobj : matplotlib object + the matplotlib plot object which generated this image + """ + raise NotImplementedError() diff --git a/plotly-package/submodules/mplexporter/mplexporter/renderers/fake_renderer.py b/plotly-package/submodules/mplexporter/mplexporter/renderers/fake_renderer.py new file mode 100644 index 00000000000..2c4c708c4c2 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/renderers/fake_renderer.py @@ -0,0 +1,68 @@ +from .base import Renderer + + +class FakeRenderer(Renderer): + """ + Fake Renderer + + This is a fake renderer which simply outputs a text tree representing the + elements found in the plot(s). This is used in the unit tests for the + package. + + Below are the methods your renderer must implement. You are free to do + anything you wish within the renderer (i.e. build an XML or JSON + representation, call an external API, etc.) Here the renderer just + builds a simple string representation for testing purposes. + """ + def __init__(self): + self.output = "" + + def open_figure(self, fig, props): + self.output += "opening figure\n" + + def close_figure(self, fig): + self.output += "closing figure\n" + + def open_axes(self, ax, props): + self.output += " opening axes\n" + + def close_axes(self, ax): + self.output += " closing axes\n" + + def open_legend(self, legend, props): + self.output += " opening legend\n" + + def close_legend(self, legend): + self.output += " closing legend\n" + + def draw_text(self, text, position, coordinates, style, + text_type=None, mplobj=None): + self.output += " draw text '{0}' {1}\n".format(text, text_type) + + def draw_path(self, data, coordinates, pathcodes, style, + offset=None, offset_coordinates="data", mplobj=None): + self.output += " draw path with {0} vertices\n".format(data.shape[0]) + + def draw_image(self, imdata, extent, coordinates, style, mplobj=None): + self.output += " draw image of size {0}\n".format(len(imdata)) + + +class FullFakeRenderer(FakeRenderer): + """ + Renderer with the full complement of methods. + + When the following are left undefined, they will be implemented via + other methods in the class. They can be defined explicitly for + more efficient or specialized use within the renderer implementation. + """ + def draw_line(self, data, coordinates, style, label, mplobj=None): + self.output += " draw line with {0} points\n".format(data.shape[0]) + + def draw_markers(self, data, coordinates, style, label, mplobj=None): + self.output += " draw {0} markers\n".format(data.shape[0]) + + def draw_path_collection(self, paths, path_coordinates, path_transforms, + offsets, offset_coordinates, offset_order, + styles, mplobj=None): + self.output += (" draw path collection " + "with {0} offsets\n".format(offsets.shape[0])) diff --git a/plotly-package/submodules/mplexporter/mplexporter/renderers/vega_renderer.py b/plotly-package/submodules/mplexporter/mplexporter/renderers/vega_renderer.py new file mode 100644 index 00000000000..82a30bd9f22 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/renderers/vega_renderer.py @@ -0,0 +1,138 @@ +import warnings +import json +import random +from .base import Renderer +from ..exporter import Exporter + + +class VegaRenderer(Renderer): + def open_figure(self, fig, props): + self.props = props + self.figwidth = int(props['figwidth'] * props['dpi']) + self.figheight = int(props['figheight'] * props['dpi']) + self.data = [] + self.scales = [] + self.axes = [] + self.marks = [] + + def open_axes(self, ax, props): + if len(self.axes) > 0: + warnings.warn("multiple axes not yet supported") + self.axes = [dict(type="x", scale="x", ticks=10), + dict(type="y", scale="y", ticks=10)] + self.scales = [dict(name="x", + domain=props['xlim'], + type="linear", + range="width", + ), + dict(name="y", + domain=props['ylim'], + type="linear", + range="height", + ),] + + def draw_line(self, data, coordinates, style, label, mplobj=None): + if coordinates != 'data': + warnings.warn("Only data coordinates supported. Skipping this") + dataname = "table{0:03d}".format(len(self.data) + 1) + + # TODO: respect the other style settings + self.data.append({'name': dataname, + 'values': [dict(x=d[0], y=d[1]) for d in data]}) + self.marks.append({'type': 'line', + 'from': {'data': dataname}, + 'properties': { + "enter": { + "interpolate": {"value": "monotone"}, + "x": {"scale": "x", "field": "data.x"}, + "y": {"scale": "y", "field": "data.y"}, + "stroke": {"value": style['color']}, + "strokeOpacity": {"value": style['alpha']}, + "strokeWidth": {"value": style['linewidth']}, + } + } + }) + + def draw_markers(self, data, coordinates, style, label, mplobj=None): + if coordinates != 'data': + warnings.warn("Only data coordinates supported. Skipping this") + dataname = "table{0:03d}".format(len(self.data) + 1) + + # TODO: respect the other style settings + self.data.append({'name': dataname, + 'values': [dict(x=d[0], y=d[1]) for d in data]}) + self.marks.append({'type': 'symbol', + 'from': {'data': dataname}, + 'properties': { + "enter": { + "interpolate": {"value": "monotone"}, + "x": {"scale": "x", "field": "data.x"}, + "y": {"scale": "y", "field": "data.y"}, + "fill": {"value": style['facecolor']}, + "fillOpacity": {"value": style['alpha']}, + "stroke": {"value": style['edgecolor']}, + "strokeOpacity": {"value": style['alpha']}, + "strokeWidth": {"value": style['edgewidth']}, + } + } + }) + + def draw_text(self, text, position, coordinates, style, + text_type=None, mplobj=None): + if text_type == 'xlabel': + self.axes[0]['title'] = text + elif text_type == 'ylabel': + self.axes[1]['title'] = text + + +class VegaHTML(object): + def __init__(self, renderer): + self.specification = dict(width=renderer.figwidth, + height=renderer.figheight, + data=renderer.data, + scales=renderer.scales, + axes=renderer.axes, + marks=renderer.marks) + + def html(self): + """Build the HTML representation for IPython.""" + id = random.randint(0, 2 ** 16) + html = '

' % id + html += '\n' + return html + + def _repr_html_(self): + return self.html() + + +def fig_to_vega(fig, notebook=False): + """Convert a matplotlib figure to vega dictionary + + if notebook=True, then return an object which will display in a notebook + otherwise, return an HTML string. + """ + renderer = VegaRenderer() + Exporter(renderer).run(fig) + vega_html = VegaHTML(renderer) + if notebook: + return vega_html + else: + return vega_html.html() + + +VEGA_TEMPLATE = """ +( function() { + var _do_plot = function() { + if ( (typeof vg == 'undefined') && (typeof IPython != 'undefined')) { + $([IPython.events]).on("vega_loaded.vincent", _do_plot); + return; + } + vg.parse.spec(%s, function(chart) { + chart({el: "#vis%d"}).update(); + }); + }; + _do_plot(); +})(); +""" diff --git a/plotly-package/submodules/mplexporter/mplexporter/renderers/vincent_renderer.py b/plotly-package/submodules/mplexporter/mplexporter/renderers/vincent_renderer.py new file mode 100644 index 00000000000..73691eab9c3 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/renderers/vincent_renderer.py @@ -0,0 +1,52 @@ +import warnings +from .base import Renderer +from ..exporter import Exporter + + +class VincentRenderer(Renderer): + def open_figure(self, fig, props): + self.chart = None + self.figwidth = int(props['figwidth'] * props['dpi']) + self.figheight = int(props['figheight'] * props['dpi']) + + def draw_line(self, data, coordinates, style, label, mplobj=None): + import vincent # only import if VincentRenderer is used + if coordinates != 'data': + warnings.warn("Only data coordinates supported. Skipping this") + linedata = {'x': data[:, 0], + 'y': data[:, 1]} + line = vincent.Line(linedata, iter_idx='x', + width=self.figwidth, height=self.figheight) + + # TODO: respect the other style settings + line.scales['color'].range = [style['color']] + + if self.chart is None: + self.chart = line + else: + warnings.warn("Multiple plot elements not yet supported") + + def draw_markers(self, data, coordinates, style, label, mplobj=None): + import vincent # only import if VincentRenderer is used + if coordinates != 'data': + warnings.warn("Only data coordinates supported. Skipping this") + markerdata = {'x': data[:, 0], + 'y': data[:, 1]} + markers = vincent.Scatter(markerdata, iter_idx='x', + width=self.figwidth, height=self.figheight) + + # TODO: respect the other style settings + markers.scales['color'].range = [style['facecolor']] + + if self.chart is None: + self.chart = markers + else: + warnings.warn("Multiple plot elements not yet supported") + + +def fig_to_vincent(fig): + """Convert a matplotlib figure to a vincent object""" + renderer = VincentRenderer() + exporter = Exporter(renderer) + exporter.run(fig) + return renderer.chart diff --git a/plotly-package/submodules/mplexporter/mplexporter/tests/__init__.py b/plotly-package/submodules/mplexporter/mplexporter/tests/__init__.py new file mode 100644 index 00000000000..13028d70afb --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/tests/__init__.py @@ -0,0 +1,3 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt diff --git a/plotly-package/submodules/mplexporter/mplexporter/tests/test_basic.py b/plotly-package/submodules/mplexporter/mplexporter/tests/test_basic.py new file mode 100644 index 00000000000..1c4dfb3e92b --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/tests/test_basic.py @@ -0,0 +1,228 @@ +import matplotlib +import numpy as np +from distutils.version import LooseVersion +from nose.plugins.skip import SkipTest +from numpy.testing import assert_warns + +from ..exporter import Exporter +from ..renderers import FakeRenderer, FullFakeRenderer +from . import plt + + +def fake_renderer_output(fig, Renderer): + renderer = Renderer() + exporter = Exporter(renderer) + exporter.run(fig) + return renderer.output + + +def _assert_output_equal(text1, text2): + for line1, line2 in zip(text1.strip().split(), text2.strip().split()): + assert line1 == line2 + + +def test_lines(): + fig, ax = plt.subplots() + ax.plot(range(20), '-k') + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 20 vertices + closing axes + closing figure + """) + + _assert_output_equal(fake_renderer_output(fig, FullFakeRenderer), + """ + opening figure + opening axes + draw line with 20 points + closing axes + closing figure + """) + + +def test_markers(): + fig, ax = plt.subplots() + ax.plot(range(2), 'ok') + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 25 vertices + draw path with 25 vertices + closing axes + closing figure + """) + + _assert_output_equal(fake_renderer_output(fig, FullFakeRenderer), + """ + opening figure + opening axes + draw 2 markers + closing axes + closing figure + """) + + +def test_path_collection(): + fig, ax = plt.subplots() + ax.scatter(range(3), range(3)) + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 25 vertices + draw path with 25 vertices + draw path with 25 vertices + closing axes + closing figure + """) + + _assert_output_equal(fake_renderer_output(fig, FullFakeRenderer), + """ + opening figure + opening axes + draw path collection with 3 offsets + closing axes + closing figure + """) + + +def test_text(): + fig, ax = plt.subplots() + ax.set_xlabel("my x label") + ax.set_ylabel("my y label") + ax.set_title("my title") + ax.text(0.5, 0.5, "my text") + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw text 'my text' None + draw text 'my x label' xlabel + draw text 'my y label' ylabel + draw text 'my title' title + closing axes + closing figure + """) + + +def test_path(): + fig, ax = plt.subplots() + ax.add_patch(plt.Circle((0, 0), 1)) + ax.add_patch(plt.Rectangle((0, 0), 1, 2)) + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 25 vertices + draw path with 4 vertices + closing axes + closing figure + """) + +def test_Figure(): + """ if the fig is not associated with a canvas, FakeRenderer shall + not fail. """ + fig = plt.Figure() + ax = fig.add_subplot(111) + ax.add_patch(plt.Circle((0, 0), 1)) + ax.add_patch(plt.Rectangle((0, 0), 1, 2)) + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 25 vertices + draw path with 4 vertices + closing axes + closing figure + """) + +def test_multiaxes(): + fig, ax = plt.subplots(2) + ax[0].plot(range(4)) + ax[1].plot(range(10)) + + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 4 vertices + closing axes + opening axes + draw path with 10 vertices + closing axes + closing figure + """) + + +def test_image(): + # Test fails for matplotlib 1.5+ because the size of the image + # generated by matplotlib has changed. + if LooseVersion(matplotlib.__version__) >= LooseVersion('1.5.0'): + raise SkipTest("Test fails for matplotlib version > 1.5.0"); + np.random.seed(0) # image size depends on the seed + fig, ax = plt.subplots(figsize=(2, 2)) + ax.imshow(np.random.random((10, 10)), + cmap=plt.cm.jet, interpolation='nearest') + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw image of size 1240 + closing axes + closing figure + """) + + +def test_legend(): + fig, ax = plt.subplots() + ax.plot([1, 2, 3], label='label') + ax.legend().set_visible(False) + _assert_output_equal(fake_renderer_output(fig, FakeRenderer), + """ + opening figure + opening axes + draw path with 3 vertices + opening legend + closing legend + closing axes + closing figure + """) + + +def test_legend_dots(): + fig, ax = plt.subplots() + ax.plot([1, 2, 3], label='label') + ax.plot([2, 2, 2], 'o', label='dots') + ax.legend().set_visible(True) + _assert_output_equal(fake_renderer_output(fig, FullFakeRenderer), + """ + opening figure + opening axes + draw line with 3 points + draw 3 markers + opening legend + draw line with 2 points + draw text 'label' None + draw 2 markers + draw text 'dots' None + draw path with 4 vertices + closing legend + closing axes + closing figure + """) + + +def test_blended(): + fig, ax = plt.subplots() + ax.axvline(0) + #assert_warns(UserWarning, fake_renderer_output, fig, FakeRenderer) diff --git a/plotly-package/submodules/mplexporter/mplexporter/tests/test_utils.py b/plotly-package/submodules/mplexporter/mplexporter/tests/test_utils.py new file mode 100644 index 00000000000..eb85fbbf072 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/tests/test_utils.py @@ -0,0 +1,34 @@ +from numpy.testing import assert_allclose, assert_equal +from . import plt +from .. import utils + + +def test_path_data(): + circle = plt.Circle((0, 0), 1) + vertices, codes = utils.SVG_path(circle.get_path()) + + assert_allclose(vertices.shape, (25, 2)) + assert_equal(codes, ['M', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'Z']) + + +def test_linestyle(): + linestyles = {'solid': 'none', '-': 'none', + 'dashed': '6,6', '--': '6,6', + 'dotted': '2,2', ':': '2,2', + 'dashdot': '4,4,2,4', '-.': '4,4,2,4', + '': None, 'None': None} + + for ls, result in linestyles.items(): + line, = plt.plot([1, 2, 3], linestyle=ls) + assert_equal(utils.get_dasharray(line), result) + + +def test_axis_w_fixed_formatter(): + positions, labels = [0, 1, 10], ['A','B','C'] + + plt.xticks(positions, labels) + props = utils.get_axis_properties(plt.gca().xaxis) + + assert_equal(props['tickvalues'], positions) + assert_equal(props['tickformat'], labels) + diff --git a/plotly-package/submodules/mplexporter/mplexporter/tools.py b/plotly-package/submodules/mplexporter/mplexporter/tools.py new file mode 100644 index 00000000000..551e8bead73 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/tools.py @@ -0,0 +1,52 @@ +""" +Tools for matplotlib plot exporting +""" + + +def ipynb_vega_init(): + """Initialize the IPython notebook display elements + + This function borrows heavily from the excellent vincent package: + http://github.com/wrobstory/vincent + """ + try: + from IPython.core.display import display, HTML + except ImportError: + print('IPython Notebook could not be loaded.') + + require_js = ''' + if (window['d3'] === undefined) {{ + require.config({{ paths: {{d3: "http://d3js.org/d3.v3.min"}} }}); + require(["d3"], function(d3) {{ + window.d3 = d3; + {0} + }}); + }}; + if (window['topojson'] === undefined) {{ + require.config( + {{ paths: {{topojson: "http://d3js.org/topojson.v1.min"}} }} + ); + require(["topojson"], function(topojson) {{ + window.topojson = topojson; + }}); + }}; + ''' + d3_geo_projection_js_url = "http://d3js.org/d3.geo.projection.v0.min.js" + d3_layout_cloud_js_url = ("http://wrobstory.github.io/d3-cloud/" + "d3.layout.cloud.js") + topojson_js_url = "http://d3js.org/topojson.v1.min.js" + vega_js_url = 'http://trifacta.github.com/vega/vega.js' + + dep_libs = '''$.getScript("%s", function() { + $.getScript("%s", function() { + $.getScript("%s", function() { + $.getScript("%s", function() { + $([IPython.events]).trigger("vega_loaded.vincent"); + }) + }) + }) + });''' % (d3_geo_projection_js_url, d3_layout_cloud_js_url, + topojson_js_url, vega_js_url) + load_js = require_js.format(dep_libs) + html = '' + display(HTML(html)) diff --git a/plotly-package/submodules/mplexporter/mplexporter/utils.py b/plotly-package/submodules/mplexporter/mplexporter/utils.py new file mode 100644 index 00000000000..4059a6b6f58 --- /dev/null +++ b/plotly-package/submodules/mplexporter/mplexporter/utils.py @@ -0,0 +1,362 @@ +""" +Utility Routines for Working with Matplotlib Objects +==================================================== +""" +import itertools +import io +import base64 + +import numpy as np + +import warnings + +import matplotlib +from matplotlib.colors import colorConverter +from matplotlib.path import Path +from matplotlib.markers import MarkerStyle +from matplotlib.transforms import Affine2D +from matplotlib import ticker + + +def export_color(color): + """Convert matplotlib color code to hex color or RGBA color""" + if color is None or colorConverter.to_rgba(color)[3] == 0: + return 'none' + elif colorConverter.to_rgba(color)[3] == 1: + rgb = colorConverter.to_rgb(color) + return '#{0:02X}{1:02X}{2:02X}'.format(*(int(255 * c) for c in rgb)) + else: + c = colorConverter.to_rgba(color) + return "rgba(" + ", ".join(str(int(np.round(val * 255))) + for val in c[:3])+', '+str(c[3])+")" + + +def _many_to_one(input_dict): + """Convert a many-to-one mapping to a one-to-one mapping""" + return dict((key, val) + for keys, val in input_dict.items() + for key in keys) + +LINESTYLES = _many_to_one({('solid', '-', (None, None)): 'none', + ('dashed', '--'): "6,6", + ('dotted', ':'): "2,2", + ('dashdot', '-.'): "4,4,2,4", + ('', ' ', 'None', 'none'): None}) + + +def get_dasharray(obj): + """Get an SVG dash array for the given matplotlib linestyle + + Parameters + ---------- + obj : matplotlib object + The matplotlib line or path object, which must have a get_linestyle() + method which returns a valid matplotlib line code + + Returns + ------- + dasharray : string + The HTML/SVG dasharray code associated with the object. + """ + if obj.__dict__.get('_dashSeq', None) is not None: + return ','.join(map(str, obj._dashSeq)) + else: + ls = obj.get_linestyle() + dasharray = LINESTYLES.get(ls, 'not found') + if dasharray == 'not found': + warnings.warn("line style '{0}' not understood: " + "defaulting to solid line.".format(ls)) + dasharray = LINESTYLES['solid'] + return dasharray + + +PATH_DICT = {Path.LINETO: 'L', + Path.MOVETO: 'M', + Path.CURVE3: 'S', + Path.CURVE4: 'C', + Path.CLOSEPOLY: 'Z'} + + +def SVG_path(path, transform=None, simplify=False): + """Construct the vertices and SVG codes for the path + + Parameters + ---------- + path : matplotlib.Path object + + transform : matplotlib transform (optional) + if specified, the path will be transformed before computing the output. + + Returns + ------- + vertices : array + The shape (M, 2) array of vertices of the Path. Note that some Path + codes require multiple vertices, so the length of these vertices may + be longer than the list of path codes. + path_codes : list + A length N list of single-character path codes, N <= M. Each code is + a single character, in ['L','M','S','C','Z']. See the standard SVG + path specification for a description of these. + """ + if transform is not None: + path = path.transformed(transform) + + vc_tuples = [(vertices if path_code != Path.CLOSEPOLY else [], + PATH_DICT[path_code]) + for (vertices, path_code) + in path.iter_segments(simplify=simplify)] + + if not vc_tuples: + # empty path is a special case + return np.zeros((0, 2)), [] + else: + vertices, codes = zip(*vc_tuples) + vertices = np.array(list(itertools.chain(*vertices))).reshape(-1, 2) + return vertices, list(codes) + + +def get_path_style(path, fill=True): + """Get the style dictionary for matplotlib path objects""" + style = {} + style['alpha'] = path.get_alpha() + if style['alpha'] is None: + style['alpha'] = 1 + style['edgecolor'] = export_color(path.get_edgecolor()) + if fill: + style['facecolor'] = export_color(path.get_facecolor()) + else: + style['facecolor'] = 'none' + style['edgewidth'] = path.get_linewidth() + style['dasharray'] = get_dasharray(path) + style['zorder'] = path.get_zorder() + return style + + +def get_line_style(line): + """Get the style dictionary for matplotlib line objects""" + style = {} + style['alpha'] = line.get_alpha() + if style['alpha'] is None: + style['alpha'] = 1 + style['color'] = export_color(line.get_color()) + style['linewidth'] = line.get_linewidth() + style['dasharray'] = get_dasharray(line) + style['zorder'] = line.get_zorder() + style['drawstyle'] = line.get_drawstyle() + return style + + +def get_marker_style(line): + """Get the style dictionary for matplotlib marker objects""" + style = {} + style['alpha'] = line.get_alpha() + if style['alpha'] is None: + style['alpha'] = 1 + + style['facecolor'] = export_color(line.get_markerfacecolor()) + style['edgecolor'] = export_color(line.get_markeredgecolor()) + style['edgewidth'] = line.get_markeredgewidth() + + style['marker'] = line.get_marker() + markerstyle = MarkerStyle(line.get_marker()) + markersize = line.get_markersize() + markertransform = (markerstyle.get_transform() + + Affine2D().scale(markersize, -markersize)) + style['markerpath'] = SVG_path(markerstyle.get_path(), + markertransform) + style['markersize'] = markersize + style['zorder'] = line.get_zorder() + return style + + +def get_text_style(text): + """Return the text style dict for a text instance""" + style = {} + style['alpha'] = text.get_alpha() + if style['alpha'] is None: + style['alpha'] = 1 + style['fontsize'] = text.get_size() + style['color'] = export_color(text.get_color()) + style['halign'] = text.get_horizontalalignment() # left, center, right + style['valign'] = text.get_verticalalignment() # baseline, center, top + style['malign'] = text._multialignment # text alignment when '\n' in text + style['rotation'] = text.get_rotation() + style['zorder'] = text.get_zorder() + return style + + +def get_axis_properties(axis): + """Return the property dictionary for a matplotlib.Axis instance""" + props = {} + label1On = axis._major_tick_kw.get('label1On', True) + + if isinstance(axis, matplotlib.axis.XAxis): + if label1On: + props['position'] = "bottom" + else: + props['position'] = "top" + elif isinstance(axis, matplotlib.axis.YAxis): + if label1On: + props['position'] = "left" + else: + props['position'] = "right" + else: + raise ValueError("{0} should be an Axis instance".format(axis)) + + # Use tick values if appropriate + locator = axis.get_major_locator() + props['nticks'] = len(locator()) + if isinstance(locator, ticker.FixedLocator): + props['tickvalues'] = list(locator()) + else: + props['tickvalues'] = None + + # Find tick formats + formatter = axis.get_major_formatter() + if isinstance(formatter, ticker.NullFormatter): + props['tickformat'] = "" + elif isinstance(formatter, ticker.FixedFormatter): + props['tickformat'] = list(formatter.seq) + elif not any(label.get_visible() for label in axis.get_ticklabels()): + props['tickformat'] = "" + else: + props['tickformat'] = None + + # Get axis scale + props['scale'] = axis.get_scale() + + # Get major tick label size (assumes that's all we really care about!) + labels = axis.get_ticklabels() + if labels: + props['fontsize'] = labels[0].get_fontsize() + else: + props['fontsize'] = None + + # Get associated grid + props['grid'] = get_grid_style(axis) + + # get axis visibility + props['visible'] = axis.get_visible() + + return props + + +def get_grid_style(axis): + gridlines = axis.get_gridlines() + if axis._gridOnMajor and len(gridlines) > 0: + color = export_color(gridlines[0].get_color()) + alpha = gridlines[0].get_alpha() + dasharray = get_dasharray(gridlines[0]) + return dict(gridOn=True, + color=color, + dasharray=dasharray, + alpha=alpha) + else: + return {"gridOn": False} + + +def get_figure_properties(fig): + return {'figwidth': fig.get_figwidth(), + 'figheight': fig.get_figheight(), + 'dpi': fig.dpi} + + +def get_axes_properties(ax): + props = {'axesbg': export_color(ax.patch.get_facecolor()), + 'axesbgalpha': ax.patch.get_alpha(), + 'bounds': ax.get_position().bounds, + 'dynamic': ax.get_navigate(), + 'axison': ax.axison, + 'frame_on': ax.get_frame_on(), + 'patch_visible':ax.patch.get_visible(), + 'axes': [get_axis_properties(ax.xaxis), + get_axis_properties(ax.yaxis)]} + + for axname in ['x', 'y']: + axis = getattr(ax, axname + 'axis') + domain = getattr(ax, 'get_{0}lim'.format(axname))() + lim = domain + if isinstance(axis.converter, matplotlib.dates.DateConverter): + scale = 'date' + try: + import pandas as pd + from pandas.tseries.converter import PeriodConverter + except ImportError: + pd = None + + if (pd is not None and isinstance(axis.converter, + PeriodConverter)): + _dates = [pd.Period(ordinal=int(d), freq=axis.freq) + for d in domain] + domain = [(d.year, d.month - 1, d.day, + d.hour, d.minute, d.second, 0) + for d in _dates] + else: + domain = [(d.year, d.month - 1, d.day, + d.hour, d.minute, d.second, + d.microsecond * 1E-3) + for d in matplotlib.dates.num2date(domain)] + else: + scale = axis.get_scale() + + if scale not in ['date', 'linear', 'log']: + raise ValueError("Unknown axis scale: " + "{0}".format(axis.get_scale())) + + props[axname + 'scale'] = scale + props[axname + 'lim'] = lim + props[axname + 'domain'] = domain + + return props + + +def iter_all_children(obj, skipContainers=False): + """ + Returns an iterator over all childen and nested children using + obj's get_children() method + + if skipContainers is true, only childless objects are returned. + """ + if hasattr(obj, 'get_children') and len(obj.get_children()) > 0: + for child in obj.get_children(): + if not skipContainers: + yield child + # could use `yield from` in python 3... + for grandchild in iter_all_children(child, skipContainers): + yield grandchild + else: + yield obj + + +def get_legend_properties(ax, legend): + handles, labels = ax.get_legend_handles_labels() + visible = legend.get_visible() + return {'handles': handles, 'labels': labels, 'visible': visible} + + +def image_to_base64(image): + """ + Convert a matplotlib image to a base64 png representation + + Parameters + ---------- + image : matplotlib image object + The image to be converted. + + Returns + ------- + image_base64 : string + The UTF8-encoded base64 string representation of the png image. + """ + ax = image.axes + binary_buffer = io.BytesIO() + + # image is saved in axes coordinates: we need to temporarily + # set the correct limits to get the correct image + lim = ax.axis() + ax.axis(image.get_extent()) + image.write_png(binary_buffer) + ax.axis(lim) + + binary_buffer.seek(0) + return base64.b64encode(binary_buffer.read()).decode('utf-8') diff --git a/plotly-package/submodules/mplexporter/setup.py b/plotly-package/submodules/mplexporter/setup.py new file mode 100644 index 00000000000..aa6591ae307 --- /dev/null +++ b/plotly-package/submodules/mplexporter/setup.py @@ -0,0 +1,30 @@ +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + +DESCRIPTION = "General Matplotlib Exporter" +LONG_DESCRIPTION = open('README.md').read() +NAME = "mplexporter" +AUTHOR = "Jake VanderPlas" +AUTHOR_EMAIL = "jakevdp@cs.washington.edu" +MAINTAINER = "Jake VanderPlas" +MAINTAINER_EMAIL = "jakevdp@cs.washington.edu" +DOWNLOAD_URL = 'https://github.com/mpld3/mplexporter' +URL = DOWNLOAD_URL +LICENSE = 'BSD 3-clause' +VERSION = '0.0.1' + +setup(name=NAME, + version=VERSION, + description=DESCRIPTION, + long_description=LONG_DESCRIPTION, + author=AUTHOR, + author_email=AUTHOR_EMAIL, + maintainer=MAINTAINER, + maintainer_email=MAINTAINER_EMAIL, + url=URL, + download_url=DOWNLOAD_URL, + license=LICENSE, + packages=['mplexporter', 'mplexporter.renderers'], + ) diff --git a/templategen/__init__.py b/plotly-package/templategen/__init__.py similarity index 100% rename from templategen/__init__.py rename to plotly-package/templategen/__init__.py diff --git a/templategen/definitions.py b/plotly-package/templategen/definitions.py similarity index 100% rename from templategen/definitions.py rename to plotly-package/templategen/definitions.py diff --git a/templategen/utils/__init__.py b/plotly-package/templategen/utils/__init__.py similarity index 100% rename from templategen/utils/__init__.py rename to plotly-package/templategen/utils/__init__.py diff --git a/templategen/utils/colors.py b/plotly-package/templategen/utils/colors.py similarity index 100% rename from templategen/utils/colors.py rename to plotly-package/templategen/utils/colors.py diff --git a/submodules/chunked_requests b/submodules/chunked_requests deleted file mode 160000 index 6d7c5ddc71c..00000000000 --- a/submodules/chunked_requests +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6d7c5ddc71cebc343c22a16f2151b11c68720a1d diff --git a/submodules/mplexporter b/submodules/mplexporter deleted file mode 160000 index 474a3a49fe3..00000000000 --- a/submodules/mplexporter +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 474a3a49fe3b3dca859f69a6173263018dd2d34c From a24cb7b9d9ae080de334990c52427b8b225a4462 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 18:15:17 -0400 Subject: [PATCH 04/34] Move figure_factory module to separate distribution package --- plotly-figurefactory-package/README.md | 0 .../plotly/__init__.py | 3 ++ .../plotly/figure_factory/README.md | 0 .../plotly/figure_factory/_2d_density.py | 0 .../plotly/figure_factory/__init__.py | 0 .../figure_factory/_annotated_heatmap.py | 0 .../plotly/figure_factory/_bullet.py | 0 .../plotly/figure_factory/_candlestick.py | 0 .../figure_factory/_county_choropleth.py | 0 .../plotly/figure_factory/_dendrogram.py | 0 .../plotly/figure_factory/_distplot.py | 0 .../plotly/figure_factory/_facet_grid.py | 0 .../plotly/figure_factory/_gantt.py | 0 .../plotly/figure_factory/_ohlc.py | 0 .../plotly/figure_factory/_quiver.py | 0 .../plotly/figure_factory/_scatterplot.py | 0 .../plotly/figure_factory/_streamline.py | 0 .../plotly/figure_factory/_table.py | 0 .../plotly/figure_factory/_ternary_contour.py | 0 .../plotly/figure_factory/_trisurf.py | 0 .../plotly/figure_factory/_violin.py | 0 .../plotly/figure_factory/utils.py | 0 plotly-figurefactory-package/setup.py | 39 +++++++++++++++++++ CHANGELOG.md => plotly-package/CHANGELOG.md | 0 plotly-package/plotly/__init__.py | 5 ++- 25 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 plotly-figurefactory-package/README.md create mode 100644 plotly-figurefactory-package/plotly/__init__.py rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/README.md (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_2d_density.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/__init__.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_annotated_heatmap.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_bullet.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_candlestick.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_county_choropleth.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_dendrogram.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_distplot.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_facet_grid.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_gantt.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_ohlc.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_quiver.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_scatterplot.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_streamline.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_table.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_ternary_contour.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_trisurf.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/_violin.py (100%) rename {plotly-package => plotly-figurefactory-package}/plotly/figure_factory/utils.py (100%) create mode 100644 plotly-figurefactory-package/setup.py rename CHANGELOG.md => plotly-package/CHANGELOG.md (100%) diff --git a/plotly-figurefactory-package/README.md b/plotly-figurefactory-package/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/plotly-figurefactory-package/plotly/__init__.py b/plotly-figurefactory-package/plotly/__init__.py new file mode 100644 index 00000000000..18ba49094ea --- /dev/null +++ b/plotly-figurefactory-package/plotly/__init__.py @@ -0,0 +1,3 @@ +# https://packaging.python.org/guides/packaging-namespace-packages/ +# pkgutil-style-namespace-packages +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/plotly-package/plotly/figure_factory/README.md b/plotly-figurefactory-package/plotly/figure_factory/README.md similarity index 100% rename from plotly-package/plotly/figure_factory/README.md rename to plotly-figurefactory-package/plotly/figure_factory/README.md diff --git a/plotly-package/plotly/figure_factory/_2d_density.py b/plotly-figurefactory-package/plotly/figure_factory/_2d_density.py similarity index 100% rename from plotly-package/plotly/figure_factory/_2d_density.py rename to plotly-figurefactory-package/plotly/figure_factory/_2d_density.py diff --git a/plotly-package/plotly/figure_factory/__init__.py b/plotly-figurefactory-package/plotly/figure_factory/__init__.py similarity index 100% rename from plotly-package/plotly/figure_factory/__init__.py rename to plotly-figurefactory-package/plotly/figure_factory/__init__.py diff --git a/plotly-package/plotly/figure_factory/_annotated_heatmap.py b/plotly-figurefactory-package/plotly/figure_factory/_annotated_heatmap.py similarity index 100% rename from plotly-package/plotly/figure_factory/_annotated_heatmap.py rename to plotly-figurefactory-package/plotly/figure_factory/_annotated_heatmap.py diff --git a/plotly-package/plotly/figure_factory/_bullet.py b/plotly-figurefactory-package/plotly/figure_factory/_bullet.py similarity index 100% rename from plotly-package/plotly/figure_factory/_bullet.py rename to plotly-figurefactory-package/plotly/figure_factory/_bullet.py diff --git a/plotly-package/plotly/figure_factory/_candlestick.py b/plotly-figurefactory-package/plotly/figure_factory/_candlestick.py similarity index 100% rename from plotly-package/plotly/figure_factory/_candlestick.py rename to plotly-figurefactory-package/plotly/figure_factory/_candlestick.py diff --git a/plotly-package/plotly/figure_factory/_county_choropleth.py b/plotly-figurefactory-package/plotly/figure_factory/_county_choropleth.py similarity index 100% rename from plotly-package/plotly/figure_factory/_county_choropleth.py rename to plotly-figurefactory-package/plotly/figure_factory/_county_choropleth.py diff --git a/plotly-package/plotly/figure_factory/_dendrogram.py b/plotly-figurefactory-package/plotly/figure_factory/_dendrogram.py similarity index 100% rename from plotly-package/plotly/figure_factory/_dendrogram.py rename to plotly-figurefactory-package/plotly/figure_factory/_dendrogram.py diff --git a/plotly-package/plotly/figure_factory/_distplot.py b/plotly-figurefactory-package/plotly/figure_factory/_distplot.py similarity index 100% rename from plotly-package/plotly/figure_factory/_distplot.py rename to plotly-figurefactory-package/plotly/figure_factory/_distplot.py diff --git a/plotly-package/plotly/figure_factory/_facet_grid.py b/plotly-figurefactory-package/plotly/figure_factory/_facet_grid.py similarity index 100% rename from plotly-package/plotly/figure_factory/_facet_grid.py rename to plotly-figurefactory-package/plotly/figure_factory/_facet_grid.py diff --git a/plotly-package/plotly/figure_factory/_gantt.py b/plotly-figurefactory-package/plotly/figure_factory/_gantt.py similarity index 100% rename from plotly-package/plotly/figure_factory/_gantt.py rename to plotly-figurefactory-package/plotly/figure_factory/_gantt.py diff --git a/plotly-package/plotly/figure_factory/_ohlc.py b/plotly-figurefactory-package/plotly/figure_factory/_ohlc.py similarity index 100% rename from plotly-package/plotly/figure_factory/_ohlc.py rename to plotly-figurefactory-package/plotly/figure_factory/_ohlc.py diff --git a/plotly-package/plotly/figure_factory/_quiver.py b/plotly-figurefactory-package/plotly/figure_factory/_quiver.py similarity index 100% rename from plotly-package/plotly/figure_factory/_quiver.py rename to plotly-figurefactory-package/plotly/figure_factory/_quiver.py diff --git a/plotly-package/plotly/figure_factory/_scatterplot.py b/plotly-figurefactory-package/plotly/figure_factory/_scatterplot.py similarity index 100% rename from plotly-package/plotly/figure_factory/_scatterplot.py rename to plotly-figurefactory-package/plotly/figure_factory/_scatterplot.py diff --git a/plotly-package/plotly/figure_factory/_streamline.py b/plotly-figurefactory-package/plotly/figure_factory/_streamline.py similarity index 100% rename from plotly-package/plotly/figure_factory/_streamline.py rename to plotly-figurefactory-package/plotly/figure_factory/_streamline.py diff --git a/plotly-package/plotly/figure_factory/_table.py b/plotly-figurefactory-package/plotly/figure_factory/_table.py similarity index 100% rename from plotly-package/plotly/figure_factory/_table.py rename to plotly-figurefactory-package/plotly/figure_factory/_table.py diff --git a/plotly-package/plotly/figure_factory/_ternary_contour.py b/plotly-figurefactory-package/plotly/figure_factory/_ternary_contour.py similarity index 100% rename from plotly-package/plotly/figure_factory/_ternary_contour.py rename to plotly-figurefactory-package/plotly/figure_factory/_ternary_contour.py diff --git a/plotly-package/plotly/figure_factory/_trisurf.py b/plotly-figurefactory-package/plotly/figure_factory/_trisurf.py similarity index 100% rename from plotly-package/plotly/figure_factory/_trisurf.py rename to plotly-figurefactory-package/plotly/figure_factory/_trisurf.py diff --git a/plotly-package/plotly/figure_factory/_violin.py b/plotly-figurefactory-package/plotly/figure_factory/_violin.py similarity index 100% rename from plotly-package/plotly/figure_factory/_violin.py rename to plotly-figurefactory-package/plotly/figure_factory/_violin.py diff --git a/plotly-package/plotly/figure_factory/utils.py b/plotly-figurefactory-package/plotly/figure_factory/utils.py similarity index 100% rename from plotly-package/plotly/figure_factory/utils.py rename to plotly-figurefactory-package/plotly/figure_factory/utils.py diff --git a/plotly-figurefactory-package/setup.py b/plotly-figurefactory-package/setup.py new file mode 100644 index 00000000000..9bf4e2d1b12 --- /dev/null +++ b/plotly-figurefactory-package/setup.py @@ -0,0 +1,39 @@ +from setuptools import setup + + +def readme(): + with open("README.md") as f: + return f.read() + + +setup( + name="plotly-figure-factory", + version="1.0.0a1", + author="Chris P", + author_email="chris@plot.ly", + maintainer="Jon Mease", + maintainer_email="jon@plot.ly", + url="https://plot.ly/python/", + project_urls={"Github": "https://github.com/plotly/plotly.py"}, + description="An open-source, interactive graphing library for Python", + long_description=readme(), + long_description_content_type="text/markdown", + classifiers=[ + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Topic :: Scientific/Engineering :: Visualization", + ], + license="MIT", + packages=[ + "plotly.figure_factory", + ], + install_requires=["plotly", "six"], + zip_safe=False, +) diff --git a/CHANGELOG.md b/plotly-package/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to plotly-package/CHANGELOG.md diff --git a/plotly-package/plotly/__init__.py b/plotly-package/plotly/__init__.py index 0bef71adc6e..a8fdee9158d 100644 --- a/plotly-package/plotly/__init__.py +++ b/plotly-package/plotly/__init__.py @@ -25,9 +25,12 @@ - exceptions: defines our custom exception classes """ - from __future__ import absolute_import +# https://packaging.python.org/guides/packaging-namespace-packages/ +# pkgutil-style-namespace-packages +__path__ = __import__('pkgutil').extend_path(__path__, __name__) + from plotly import ( graph_objs, tools, From 9d524ffd3514d171ba38d24c38ff69e499d9a5eb Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 18:15:57 -0400 Subject: [PATCH 05/34] remove unused example images directory --- example_images/simple_scatter.png | Bin 14867 -> 0 bytes example_images/subplot_methods.png | Bin 53475 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 example_images/simple_scatter.png delete mode 100644 example_images/subplot_methods.png diff --git a/example_images/simple_scatter.png b/example_images/simple_scatter.png deleted file mode 100644 index bf6cb5dc9f7620d1f2709b16c4200a6634f4c1b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14867 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 diff --git a/example_images/subplot_methods.png b/example_images/subplot_methods.png deleted file mode 100644 index 278f47dda3fe5517c7e30f967bf48b6961af6be3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53475 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 <&&s~vpXJo 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 From bb027772dfd0c5c1709dbaba9934d55757a970c4 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 18:17:04 -0400 Subject: [PATCH 06/34] plotly-figurefactory-package to plotly-figure-factory-package --- .../README.md | 0 .../plotly/__init__.py | 0 .../plotly/figure_factory/README.md | 0 .../plotly/figure_factory/_2d_density.py | 0 .../plotly/figure_factory/__init__.py | 0 .../plotly/figure_factory/_annotated_heatmap.py | 0 .../plotly/figure_factory/_bullet.py | 0 .../plotly/figure_factory/_candlestick.py | 0 .../plotly/figure_factory/_county_choropleth.py | 0 .../plotly/figure_factory/_dendrogram.py | 0 .../plotly/figure_factory/_distplot.py | 0 .../plotly/figure_factory/_facet_grid.py | 0 .../plotly/figure_factory/_gantt.py | 0 .../plotly/figure_factory/_ohlc.py | 0 .../plotly/figure_factory/_quiver.py | 0 .../plotly/figure_factory/_scatterplot.py | 0 .../plotly/figure_factory/_streamline.py | 0 .../plotly/figure_factory/_table.py | 0 .../plotly/figure_factory/_ternary_contour.py | 0 .../plotly/figure_factory/_trisurf.py | 0 .../plotly/figure_factory/_violin.py | 0 .../plotly/figure_factory/utils.py | 0 .../setup.py | 0 23 files changed, 0 insertions(+), 0 deletions(-) rename {plotly-figurefactory-package => plotly-figure-factory-package}/README.md (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/__init__.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/README.md (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_2d_density.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/__init__.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_annotated_heatmap.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_bullet.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_candlestick.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_county_choropleth.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_dendrogram.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_distplot.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_facet_grid.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_gantt.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_ohlc.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_quiver.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_scatterplot.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_streamline.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_table.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_ternary_contour.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_trisurf.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/_violin.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/plotly/figure_factory/utils.py (100%) rename {plotly-figurefactory-package => plotly-figure-factory-package}/setup.py (100%) diff --git a/plotly-figurefactory-package/README.md b/plotly-figure-factory-package/README.md similarity index 100% rename from plotly-figurefactory-package/README.md rename to plotly-figure-factory-package/README.md diff --git a/plotly-figurefactory-package/plotly/__init__.py b/plotly-figure-factory-package/plotly/__init__.py similarity index 100% rename from plotly-figurefactory-package/plotly/__init__.py rename to plotly-figure-factory-package/plotly/__init__.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/README.md b/plotly-figure-factory-package/plotly/figure_factory/README.md similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/README.md rename to plotly-figure-factory-package/plotly/figure_factory/README.md diff --git a/plotly-figurefactory-package/plotly/figure_factory/_2d_density.py b/plotly-figure-factory-package/plotly/figure_factory/_2d_density.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_2d_density.py rename to plotly-figure-factory-package/plotly/figure_factory/_2d_density.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/__init__.py b/plotly-figure-factory-package/plotly/figure_factory/__init__.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/__init__.py rename to plotly-figure-factory-package/plotly/figure_factory/__init__.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_annotated_heatmap.py b/plotly-figure-factory-package/plotly/figure_factory/_annotated_heatmap.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_annotated_heatmap.py rename to plotly-figure-factory-package/plotly/figure_factory/_annotated_heatmap.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_bullet.py b/plotly-figure-factory-package/plotly/figure_factory/_bullet.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_bullet.py rename to plotly-figure-factory-package/plotly/figure_factory/_bullet.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_candlestick.py b/plotly-figure-factory-package/plotly/figure_factory/_candlestick.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_candlestick.py rename to plotly-figure-factory-package/plotly/figure_factory/_candlestick.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_county_choropleth.py b/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_county_choropleth.py rename to plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_dendrogram.py b/plotly-figure-factory-package/plotly/figure_factory/_dendrogram.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_dendrogram.py rename to plotly-figure-factory-package/plotly/figure_factory/_dendrogram.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_distplot.py b/plotly-figure-factory-package/plotly/figure_factory/_distplot.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_distplot.py rename to plotly-figure-factory-package/plotly/figure_factory/_distplot.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_facet_grid.py b/plotly-figure-factory-package/plotly/figure_factory/_facet_grid.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_facet_grid.py rename to plotly-figure-factory-package/plotly/figure_factory/_facet_grid.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_gantt.py b/plotly-figure-factory-package/plotly/figure_factory/_gantt.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_gantt.py rename to plotly-figure-factory-package/plotly/figure_factory/_gantt.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_ohlc.py b/plotly-figure-factory-package/plotly/figure_factory/_ohlc.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_ohlc.py rename to plotly-figure-factory-package/plotly/figure_factory/_ohlc.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_quiver.py b/plotly-figure-factory-package/plotly/figure_factory/_quiver.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_quiver.py rename to plotly-figure-factory-package/plotly/figure_factory/_quiver.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_scatterplot.py b/plotly-figure-factory-package/plotly/figure_factory/_scatterplot.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_scatterplot.py rename to plotly-figure-factory-package/plotly/figure_factory/_scatterplot.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_streamline.py b/plotly-figure-factory-package/plotly/figure_factory/_streamline.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_streamline.py rename to plotly-figure-factory-package/plotly/figure_factory/_streamline.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_table.py b/plotly-figure-factory-package/plotly/figure_factory/_table.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_table.py rename to plotly-figure-factory-package/plotly/figure_factory/_table.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_ternary_contour.py b/plotly-figure-factory-package/plotly/figure_factory/_ternary_contour.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_ternary_contour.py rename to plotly-figure-factory-package/plotly/figure_factory/_ternary_contour.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_trisurf.py b/plotly-figure-factory-package/plotly/figure_factory/_trisurf.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_trisurf.py rename to plotly-figure-factory-package/plotly/figure_factory/_trisurf.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/_violin.py b/plotly-figure-factory-package/plotly/figure_factory/_violin.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/_violin.py rename to plotly-figure-factory-package/plotly/figure_factory/_violin.py diff --git a/plotly-figurefactory-package/plotly/figure_factory/utils.py b/plotly-figure-factory-package/plotly/figure_factory/utils.py similarity index 100% rename from plotly-figurefactory-package/plotly/figure_factory/utils.py rename to plotly-figure-factory-package/plotly/figure_factory/utils.py diff --git a/plotly-figurefactory-package/setup.py b/plotly-figure-factory-package/setup.py similarity index 100% rename from plotly-figurefactory-package/setup.py rename to plotly-figure-factory-package/setup.py From 315fce6dbda6217d35aff36df2f844055ba7dbe7 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 18:18:44 -0400 Subject: [PATCH 07/34] chartstudio -> chart_studio package name --- .../README.md | 0 chart-studio-package/chart_studio/__init__.py | 2 ++ .../chart_studio}/api/__init__.py | 0 .../chart_studio}/api/utils.py | 0 .../chart_studio/api/v1/__init__.py | 3 +++ .../chart_studio}/api/v1/clientresp.py | 4 ++-- .../chart_studio}/api/v1/utils.py | 8 +++---- .../chart_studio/api/v2/__init__.py | 5 +++++ .../chart_studio}/api/v2/dash_apps.py | 2 +- .../chart_studio}/api/v2/dashboards.py | 2 +- .../chart_studio}/api/v2/files.py | 2 +- .../chart_studio}/api/v2/folders.py | 2 +- .../chart_studio}/api/v2/grids.py | 2 +- .../chart_studio}/api/v2/images.py | 2 +- .../chart_studio}/api/v2/plot_schema.py | 2 +- .../chart_studio}/api/v2/plots.py | 2 +- .../api/v2/spectacle_presentations.py | 2 +- .../chart_studio}/api/v2/users.py | 2 +- .../chart_studio}/api/v2/utils.py | 4 ++-- .../chart_studio}/config.py | 2 +- .../chart_studio}/dashboard_objs/__init__.py | 0 .../dashboard_objs/dashboard_objs.py | 2 +- .../chart_studio}/exceptions.py | 2 +- .../chart_studio}/files.py | 0 .../chart_studio}/grid_objs/__init__.py | 2 +- .../chart_studio}/grid_objs/grid_objs.py | 2 +- .../chart_studio}/plotly/__init__.py | 0 .../plotly/chunked_requests/__init__.py | 0 .../chunked_requests/chunked_request.py | 2 +- .../chart_studio}/plotly/plotly.py | 14 ++++++------ .../presentation_objs/__init__.py | 0 .../presentation_objs/presentation_objs.py | 4 ++-- .../chart_studio}/session.py | 0 .../chart_studio}/tests/__init__.py | 0 .../chart_studio}/tests/test_core/__init__.py | 0 .../tests/test_core/test_tools/__init__.py | 0 .../test_tools/test_configuration.py | 4 ++-- .../test_core/test_tools/test_file_tools.py | 4 ++-- .../test_core/test_tools/test_get_embed.py | 2 +- .../tests/test_optional/__init__.py | 0 .../tests/test_optional/test_grid/__init__.py | 0 .../test_optional/test_grid/test_grid.py | 4 ++-- .../test_optional/test_ipython/__init__.py | 0 .../test_ipython/test_widgets.py | 2 +- .../test_matplotlylib/__init__.py | 0 .../test_matplotlylib/test_plot_mpl.py | 2 +- .../test_optional/test_utils/__init__.py | 0 .../test_optional/test_utils/test_utils.py | 2 +- .../tests/test_plot_ly/__init__.py | 0 .../tests/test_plot_ly/test_api/__init__.py | 4 ++-- .../test_plot_ly/test_api/test_v1/__init__.py | 0 .../test_api/test_v1/test_clientresp.py | 8 +++---- .../test_api/test_v1/test_utils.py | 16 +++++++------- .../test_plot_ly/test_api/test_v2/__init__.py | 0 .../test_api/test_v2/test_files.py | 8 +++---- .../test_api/test_v2/test_folders.py | 8 +++---- .../test_api/test_v2/test_grids.py | 8 +++---- .../test_api/test_v2/test_images.py | 8 +++---- .../test_api/test_v2/test_plot_schema.py | 8 +++---- .../test_api/test_v2/test_plots.py | 8 +++---- .../test_api/test_v2/test_users.py | 8 +++---- .../test_api/test_v2/test_utils.py | 14 ++++++------ .../test_plot_ly/test_dashboard/__init__.py | 0 .../test_dashboard/test_dashboard.py | 2 +- .../tests/test_plot_ly/test_file/__init__.py | 0 .../tests/test_plot_ly/test_file/test_file.py | 6 ++--- .../test_plot_ly/test_get_figure/__init__.py | 0 .../test_get_figure/test_get_figure.py | 6 ++--- .../test_get_requests/__init__.py | 0 .../test_get_requests/test_get_requests.py | 2 +- .../tests/test_plot_ly/test_grid/__init__.py | 0 .../tests/test_plot_ly/test_grid/test_grid.py | 10 ++++----- .../tests/test_plot_ly/test_image/__init__.py | 0 .../test_plot_ly/test_image/test_image.py | 4 ++-- .../tests/test_plot_ly/test_meta/__init__.py | 0 .../tests/test_plot_ly/test_meta/test_meta.py | 8 +++---- .../test_plot_ly/test_plotly/__init__.py | 0 .../test_plotly/test_credentials.py | 10 ++++----- .../test_plot_ly/test_plotly/test_plot.py | 12 +++++----- .../test_plot_ly/test_session/__init__.py | 0 .../test_plot_ly/test_session/test_session.py | 8 +++---- .../test_spectacle_presentation/__init__.py | 0 .../test_spectacle_presentation.py | 10 ++++----- .../test_plot_ly/test_stream/__init__.py | 0 .../test_plot_ly/test_stream/test_stream.py | 4 ++-- .../chart_studio}/tests/utils.py | 2 +- .../chart_studio}/tools.py | 4 ++-- .../chart_studio}/utils.py | 0 .../chart_studio/widgets/__init__.py | 3 +++ .../chart_studio}/widgets/graph_widget.py | 2 +- .../setup.py | 22 +++++++++---------- .../specs/GraphWidgetSpec.md | 0 .../specs/gridspec.md | 0 chartstudio-package/chartstudio/__init__.py | 2 -- .../chartstudio/api/v1/__init__.py | 3 --- .../chartstudio/api/v2/__init__.py | 5 ----- .../chartstudio/widgets/__init__.py | 3 --- plotly-package/_plotly_future_/__init__.py | 10 ++++----- .../_plotly_utils/basevalidators.py | 2 +- plotly-package/plotly/tools.py | 4 ++-- plotly-package/setup.py | 20 ++++++++--------- 101 files changed, 179 insertions(+), 179 deletions(-) rename {chartstudio-package => chart-studio-package}/README.md (100%) create mode 100644 chart-studio-package/chart_studio/__init__.py rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/utils.py (100%) create mode 100644 chart-studio-package/chart_studio/api/v1/__init__.py rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v1/clientresp.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v1/utils.py (93%) create mode 100644 chart-studio-package/chart_studio/api/v2/__init__.py rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/dash_apps.py (90%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/dashboards.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/files.py (97%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/folders.py (97%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/grids.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/images.py (88%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/plot_schema.py (88%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/plots.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/spectacle_presentations.py (92%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/users.py (86%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/api/v2/utils.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/config.py (96%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/dashboard_objs/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/dashboard_objs/dashboard_objs.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/exceptions.py (97%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/files.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/grid_objs/__init__.py (54%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/grid_objs/grid_objs.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/plotly/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/plotly/chunked_requests/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/plotly/chunked_requests/chunked_request.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/plotly/plotly.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/presentation_objs/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/presentation_objs/presentation_objs.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/session.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_core/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_core/test_tools/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_core/test_tools/test_configuration.py (75%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_core/test_tools/test_file_tools.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_core/test_tools/test_get_embed.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_grid/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_grid/test_grid.py (88%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_ipython/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_ipython/test_widgets.py (83%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_matplotlylib/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_matplotlylib/test_plot_mpl.py (97%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_utils/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_optional/test_utils/test_utils.py (95%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/__init__.py (95%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v1/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v1/test_clientresp.py (89%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v1/test_utils.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_files.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_folders.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_grids.py (96%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_images.py (80%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py (75%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_plots.py (93%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_users.py (73%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_api/test_v2/test_utils.py (95%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_dashboard/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_dashboard/test_dashboard.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_file/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_file/test_file.py (91%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_get_figure/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_get_figure/test_get_figure.py (95%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_get_requests/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_get_requests/test_get_requests.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_grid/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_grid/test_grid.py (95%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_image/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_image/test_image.py (96%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_meta/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_meta/test_meta.py (89%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_plotly/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_plotly/test_credentials.py (92%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_plotly/test_plot.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_session/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_session/test_session.py (82%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_spectacle_presentation/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_stream/__init__.py (100%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/test_plot_ly/test_stream/test_stream.py (98%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tests/utils.py (97%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/tools.py (99%) rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/utils.py (100%) create mode 100644 chart-studio-package/chart_studio/widgets/__init__.py rename {chartstudio-package/chartstudio => chart-studio-package/chart_studio}/widgets/graph_widget.py (99%) rename {chartstudio-package => chart-studio-package}/setup.py (76%) rename {chartstudio-package => chart-studio-package}/specs/GraphWidgetSpec.md (100%) rename {chartstudio-package => chart-studio-package}/specs/gridspec.md (100%) delete mode 100644 chartstudio-package/chartstudio/__init__.py delete mode 100644 chartstudio-package/chartstudio/api/v1/__init__.py delete mode 100644 chartstudio-package/chartstudio/api/v2/__init__.py delete mode 100644 chartstudio-package/chartstudio/widgets/__init__.py diff --git a/chartstudio-package/README.md b/chart-studio-package/README.md similarity index 100% rename from chartstudio-package/README.md rename to chart-studio-package/README.md diff --git a/chart-studio-package/chart_studio/__init__.py b/chart-studio-package/chart_studio/__init__.py new file mode 100644 index 00000000000..c1adbe629b9 --- /dev/null +++ b/chart-studio-package/chart_studio/__init__.py @@ -0,0 +1,2 @@ +from __future__ import absolute_import +from chart_studio import (plotly, dashboard_objs, grid_objs, session) diff --git a/chartstudio-package/chartstudio/api/__init__.py b/chart-studio-package/chart_studio/api/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/api/__init__.py rename to chart-studio-package/chart_studio/api/__init__.py diff --git a/chartstudio-package/chartstudio/api/utils.py b/chart-studio-package/chart_studio/api/utils.py similarity index 100% rename from chartstudio-package/chartstudio/api/utils.py rename to chart-studio-package/chart_studio/api/utils.py diff --git a/chart-studio-package/chart_studio/api/v1/__init__.py b/chart-studio-package/chart_studio/api/v1/__init__.py new file mode 100644 index 00000000000..05fbba4143a --- /dev/null +++ b/chart-studio-package/chart_studio/api/v1/__init__.py @@ -0,0 +1,3 @@ +from __future__ import absolute_import + +from chart_studio.api.v1.clientresp import clientresp diff --git a/chartstudio-package/chartstudio/api/v1/clientresp.py b/chart-studio-package/chart_studio/api/v1/clientresp.py similarity index 93% rename from chartstudio-package/chartstudio/api/v1/clientresp.py rename to chart-studio-package/chart_studio/api/v1/clientresp.py index cfbfb89aafb..1f7707e1d97 100644 --- a/chartstudio-package/chartstudio/api/v1/clientresp.py +++ b/chart-studio-package/chart_studio/api/v1/clientresp.py @@ -7,8 +7,8 @@ from _plotly_utils.utils import PlotlyJSONEncoder -from chartstudio import config, utils -from chartstudio.api.v1.utils import request +from chart_studio import config, utils +from chart_studio.api.v1.utils import request def clientresp(data, **kwargs): diff --git a/chartstudio-package/chartstudio/api/v1/utils.py b/chart-studio-package/chart_studio/api/v1/utils.py similarity index 93% rename from chartstudio-package/chartstudio/api/v1/utils.py rename to chart-studio-package/chart_studio/api/v1/utils.py index ed7a998fd95..d0c40263a17 100644 --- a/chartstudio-package/chartstudio/api/v1/utils.py +++ b/chart-studio-package/chart_studio/api/v1/utils.py @@ -5,9 +5,9 @@ from retrying import retry import _plotly_utils.exceptions -from chartstudio import config, exceptions -from chartstudio.api.utils import basic_auth -from chartstudio.api.v2.utils import should_retry +from chart_studio import config, exceptions +from chart_studio.api.utils import basic_auth +from chart_studio.api.v2.utils import should_retry def validate_response(response): @@ -75,7 +75,7 @@ def request(method, url, **kwargs): """ if kwargs.get('json', None) is not None: - # See chartstudio.api.v2.utils.request for examples on how to do this. + # See chart_studio.api.v2.utils.request for examples on how to do this. raise _plotly_utils.exceptions.PlotlyError( 'V1 API does not handle arbitrary json.') kwargs['headers'] = dict(kwargs.get('headers', {}), **get_headers()) diff --git a/chart-studio-package/chart_studio/api/v2/__init__.py b/chart-studio-package/chart_studio/api/v2/__init__.py new file mode 100644 index 00000000000..c248f72543d --- /dev/null +++ b/chart-studio-package/chart_studio/api/v2/__init__.py @@ -0,0 +1,5 @@ +from __future__ import absolute_import + +from chart_studio.api.v2 import (dash_apps, dashboards, files, folders, grids, + images, plot_schema, plots, + spectacle_presentations, users) diff --git a/chartstudio-package/chartstudio/api/v2/dash_apps.py b/chart-studio-package/chart_studio/api/v2/dash_apps.py similarity index 90% rename from chartstudio-package/chartstudio/api/v2/dash_apps.py rename to chart-studio-package/chart_studio/api/v2/dash_apps.py index 04da94f2a15..c46ec3ff69e 100644 --- a/chartstudio-package/chartstudio/api/v2/dash_apps.py +++ b/chart-studio-package/chart_studio/api/v2/dash_apps.py @@ -3,7 +3,7 @@ """ from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, request +from chart_studio.api.v2.utils import build_url, request RESOURCE = 'dash-apps' diff --git a/chartstudio-package/chartstudio/api/v2/dashboards.py b/chart-studio-package/chart_studio/api/v2/dashboards.py similarity index 93% rename from chartstudio-package/chartstudio/api/v2/dashboards.py rename to chart-studio-package/chart_studio/api/v2/dashboards.py index 21e9de65a4c..60c4e0dd898 100644 --- a/chartstudio-package/chartstudio/api/v2/dashboards.py +++ b/chart-studio-package/chart_studio/api/v2/dashboards.py @@ -6,7 +6,7 @@ """ from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, request +from chart_studio.api.v2.utils import build_url, request RESOURCE = 'dashboards' diff --git a/chartstudio-package/chartstudio/api/v2/files.py b/chart-studio-package/chart_studio/api/v2/files.py similarity index 97% rename from chartstudio-package/chartstudio/api/v2/files.py rename to chart-studio-package/chart_studio/api/v2/files.py index 8f9e75c1cd1..1e250158f66 100644 --- a/chartstudio-package/chartstudio/api/v2/files.py +++ b/chart-studio-package/chart_studio/api/v2/files.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/files endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, make_params, request +from chart_studio.api.v2.utils import build_url, make_params, request RESOURCE = 'files' diff --git a/chartstudio-package/chartstudio/api/v2/folders.py b/chart-studio-package/chart_studio/api/v2/folders.py similarity index 97% rename from chartstudio-package/chartstudio/api/v2/folders.py rename to chart-studio-package/chart_studio/api/v2/folders.py index 064944dabc9..81d72466ca1 100644 --- a/chartstudio-package/chartstudio/api/v2/folders.py +++ b/chart-studio-package/chart_studio/api/v2/folders.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/folders endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, make_params, request +from chart_studio.api.v2.utils import build_url, make_params, request RESOURCE = 'folders' diff --git a/chartstudio-package/chartstudio/api/v2/grids.py b/chart-studio-package/chart_studio/api/v2/grids.py similarity index 98% rename from chartstudio-package/chartstudio/api/v2/grids.py rename to chart-studio-package/chart_studio/api/v2/grids.py index d5b7964454c..726419a9b3d 100644 --- a/chartstudio-package/chartstudio/api/v2/grids.py +++ b/chart-studio-package/chart_studio/api/v2/grids.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/grids endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, make_params, request +from chart_studio.api.v2.utils import build_url, make_params, request RESOURCE = 'grids' diff --git a/chartstudio-package/chartstudio/api/v2/images.py b/chart-studio-package/chart_studio/api/v2/images.py similarity index 88% rename from chartstudio-package/chartstudio/api/v2/images.py rename to chart-studio-package/chart_studio/api/v2/images.py index 4bd7641bc9d..c6f7ea1a781 100644 --- a/chartstudio-package/chartstudio/api/v2/images.py +++ b/chart-studio-package/chart_studio/api/v2/images.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/images endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, request +from chart_studio.api.v2.utils import build_url, request RESOURCE = 'images' diff --git a/chartstudio-package/chartstudio/api/v2/plot_schema.py b/chart-studio-package/chart_studio/api/v2/plot_schema.py similarity index 88% rename from chartstudio-package/chartstudio/api/v2/plot_schema.py rename to chart-studio-package/chart_studio/api/v2/plot_schema.py index 23e1887aa2a..9b9a7ea7edf 100644 --- a/chartstudio-package/chartstudio/api/v2/plot_schema.py +++ b/chart-studio-package/chart_studio/api/v2/plot_schema.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/plot-schema endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, make_params, request +from chart_studio.api.v2.utils import build_url, make_params, request RESOURCE = 'plot-schema' diff --git a/chartstudio-package/chartstudio/api/v2/plots.py b/chart-studio-package/chart_studio/api/v2/plots.py similarity index 98% rename from chartstudio-package/chartstudio/api/v2/plots.py rename to chart-studio-package/chart_studio/api/v2/plots.py index 892da148c53..d33c01b7068 100644 --- a/chartstudio-package/chartstudio/api/v2/plots.py +++ b/chart-studio-package/chart_studio/api/v2/plots.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/plots endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, make_params, request +from chart_studio.api.v2.utils import build_url, make_params, request RESOURCE = 'plots' diff --git a/chartstudio-package/chartstudio/api/v2/spectacle_presentations.py b/chart-studio-package/chart_studio/api/v2/spectacle_presentations.py similarity index 92% rename from chartstudio-package/chartstudio/api/v2/spectacle_presentations.py rename to chart-studio-package/chart_studio/api/v2/spectacle_presentations.py index 3f7b9030f23..343809d4586 100644 --- a/chartstudio-package/chartstudio/api/v2/spectacle_presentations.py +++ b/chart-studio-package/chart_studio/api/v2/spectacle_presentations.py @@ -3,7 +3,7 @@ """ from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, request +from chart_studio.api.v2.utils import build_url, request RESOURCE = 'spectacle-presentations' diff --git a/chartstudio-package/chartstudio/api/v2/users.py b/chart-studio-package/chart_studio/api/v2/users.py similarity index 86% rename from chartstudio-package/chartstudio/api/v2/users.py rename to chart-studio-package/chart_studio/api/v2/users.py index 430982efc07..b9300c2107e 100644 --- a/chartstudio-package/chartstudio/api/v2/users.py +++ b/chart-studio-package/chart_studio/api/v2/users.py @@ -1,7 +1,7 @@ """Interface to Plotly's /v2/files endpoints.""" from __future__ import absolute_import -from chartstudio.api.v2.utils import build_url, request +from chart_studio.api.v2.utils import build_url, request RESOURCE = 'users' diff --git a/chartstudio-package/chartstudio/api/v2/utils.py b/chart-studio-package/chart_studio/api/v2/utils.py similarity index 98% rename from chartstudio-package/chartstudio/api/v2/utils.py rename to chart-studio-package/chart_studio/api/v2/utils.py index 1489813f440..8d7a14dfa36 100644 --- a/chartstudio-package/chartstudio/api/v2/utils.py +++ b/chart-studio-package/chart_studio/api/v2/utils.py @@ -6,8 +6,8 @@ from retrying import retry import _plotly_utils.exceptions -from chartstudio import config, exceptions -from chartstudio.api.utils import basic_auth +from chart_studio import config, exceptions +from chart_studio.api.utils import basic_auth from _plotly_utils.utils import PlotlyJSONEncoder diff --git a/chartstudio-package/chartstudio/config.py b/chart-studio-package/chart_studio/config.py similarity index 96% rename from chartstudio-package/chartstudio/config.py rename to chart-studio-package/chart_studio/config.py index 17e584e3045..5cb2b30ad48 100644 --- a/chartstudio-package/chartstudio/config.py +++ b/chart-studio-package/chart_studio/config.py @@ -6,7 +6,7 @@ """ from __future__ import absolute_import -from chartstudio import session, tools +from chart_studio import session, tools def get_credentials(): diff --git a/chartstudio-package/chartstudio/dashboard_objs/__init__.py b/chart-studio-package/chart_studio/dashboard_objs/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/dashboard_objs/__init__.py rename to chart-studio-package/chart_studio/dashboard_objs/__init__.py diff --git a/chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py b/chart-studio-package/chart_studio/dashboard_objs/dashboard_objs.py similarity index 99% rename from chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py rename to chart-studio-package/chart_studio/dashboard_objs/dashboard_objs.py index e05d42b7ce3..13ef7032e00 100644 --- a/chartstudio-package/chartstudio/dashboard_objs/dashboard_objs.py +++ b/chart-studio-package/chart_studio/dashboard_objs/dashboard_objs.py @@ -12,7 +12,7 @@ import _plotly_utils.exceptions from _plotly_utils import optional_imports -from chartstudio import exceptions +from chart_studio import exceptions IPython = optional_imports.get_module('IPython') diff --git a/chartstudio-package/chartstudio/exceptions.py b/chart-studio-package/chart_studio/exceptions.py similarity index 97% rename from chartstudio-package/chartstudio/exceptions.py rename to chart-studio-package/chart_studio/exceptions.py index fcc6289ef85..fa5054b86b3 100644 --- a/chartstudio-package/chartstudio/exceptions.py +++ b/chart-studio-package/chart_studio/exceptions.py @@ -7,7 +7,7 @@ """ from __future__ import absolute_import -from chartstudio.api.utils import to_native_utf8_string +from chart_studio.api.utils import to_native_utf8_string # Base Plotly Error diff --git a/chartstudio-package/chartstudio/files.py b/chart-studio-package/chart_studio/files.py similarity index 100% rename from chartstudio-package/chartstudio/files.py rename to chart-studio-package/chart_studio/files.py diff --git a/chartstudio-package/chartstudio/grid_objs/__init__.py b/chart-studio-package/chart_studio/grid_objs/__init__.py similarity index 54% rename from chartstudio-package/chartstudio/grid_objs/__init__.py rename to chart-studio-package/chart_studio/grid_objs/__init__.py index 01d4d5e5565..ae484f25e17 100644 --- a/chartstudio-package/chartstudio/grid_objs/__init__.py +++ b/chart-studio-package/chart_studio/grid_objs/__init__.py @@ -5,4 +5,4 @@ """ from __future__ import absolute_import -from chartstudio.grid_objs.grid_objs import Grid, Column +from chart_studio.grid_objs.grid_objs import Grid, Column diff --git a/chartstudio-package/chartstudio/grid_objs/grid_objs.py b/chart-studio-package/chart_studio/grid_objs/grid_objs.py similarity index 99% rename from chartstudio-package/chartstudio/grid_objs/grid_objs.py rename to chart-studio-package/chart_studio/grid_objs/grid_objs.py index f7e57bc5738..92363da3852 100644 --- a/chartstudio-package/chartstudio/grid_objs/grid_objs.py +++ b/chart-studio-package/chart_studio/grid_objs/grid_objs.py @@ -15,7 +15,7 @@ import json as _json from _plotly_utils.optional_imports import get_module -from chartstudio import utils, exceptions +from chart_studio import utils, exceptions __all__ = None diff --git a/chartstudio-package/chartstudio/plotly/__init__.py b/chart-studio-package/chart_studio/plotly/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/plotly/__init__.py rename to chart-studio-package/chart_studio/plotly/__init__.py diff --git a/chartstudio-package/chartstudio/plotly/chunked_requests/__init__.py b/chart-studio-package/chart_studio/plotly/chunked_requests/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/plotly/chunked_requests/__init__.py rename to chart-studio-package/chart_studio/plotly/chunked_requests/__init__.py diff --git a/chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py b/chart-studio-package/chart_studio/plotly/chunked_requests/chunked_request.py similarity index 99% rename from chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py rename to chart-studio-package/chart_studio/plotly/chunked_requests/chunked_request.py index 98f9151b357..5f39704c720 100644 --- a/chartstudio-package/chartstudio/plotly/chunked_requests/chunked_request.py +++ b/chart-studio-package/chart_studio/plotly/chunked_requests/chunked_request.py @@ -6,7 +6,7 @@ from six.moves import http_client from six.moves.urllib.parse import urlparse, unquote -from chartstudio.api import utils +from chart_studio.api import utils class Stream: diff --git a/chartstudio-package/chartstudio/plotly/plotly.py b/chart-studio-package/chart_studio/plotly/plotly.py similarity index 99% rename from chartstudio-package/chartstudio/plotly/plotly.py rename to chart-studio-package/chart_studio/plotly/plotly.py index feea3b97940..7bfb50c2af8 100644 --- a/chartstudio-package/chartstudio/plotly/plotly.py +++ b/chart-studio-package/chart_studio/plotly/plotly.py @@ -33,14 +33,14 @@ from _plotly_utils.basevalidators import CompoundValidator, is_array from _plotly_utils.utils import PlotlyJSONEncoder -from chartstudio import files, session, tools, utils, exceptions -from chartstudio.api import v1, v2 -from chartstudio.plotly import chunked_requests -from chartstudio.grid_objs import Grid -from chartstudio.dashboard_objs import dashboard_objs as dashboard +from chart_studio import files, session, tools, utils, exceptions +from chart_studio.api import v1, v2 +from chart_studio.plotly import chunked_requests +from chart_studio.grid_objs import Grid +from chart_studio.dashboard_objs import dashboard_objs as dashboard # This is imported like this for backwards compat. Careful if changing. -from chartstudio.config import get_config, get_credentials +from chart_studio.config import get_config, get_credentials __all__ = None @@ -1692,7 +1692,7 @@ def _extract_grid_graph_obj(obj_dict, reference_obj, grid, path): Function modifies obj_dict and grid in-place """ - from chartstudio.grid_objs import Column + from chart_studio.grid_objs import Column for prop in list(obj_dict.keys()): propsrc = '{}src'.format(prop) diff --git a/chartstudio-package/chartstudio/presentation_objs/__init__.py b/chart-studio-package/chart_studio/presentation_objs/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/presentation_objs/__init__.py rename to chart-studio-package/chart_studio/presentation_objs/__init__.py diff --git a/chartstudio-package/chartstudio/presentation_objs/presentation_objs.py b/chart-studio-package/chart_studio/presentation_objs/presentation_objs.py similarity index 99% rename from chartstudio-package/chartstudio/presentation_objs/presentation_objs.py rename to chart-studio-package/chart_studio/presentation_objs/presentation_objs.py index 7cecd5861eb..699f6996121 100644 --- a/chartstudio-package/chartstudio/presentation_objs/presentation_objs.py +++ b/chart-studio-package/chart_studio/presentation_objs/presentation_objs.py @@ -12,8 +12,8 @@ import warnings import _plotly_utils.exceptions -from chartstudio import exceptions -from chartstudio.config import get_config +from chart_studio import exceptions +from chart_studio.config import get_config HEIGHT = 700.0 WIDTH = 1000.0 diff --git a/chartstudio-package/chartstudio/session.py b/chart-studio-package/chart_studio/session.py similarity index 100% rename from chartstudio-package/chartstudio/session.py rename to chart-studio-package/chart_studio/session.py diff --git a/chartstudio-package/chartstudio/tests/__init__.py b/chart-studio-package/chart_studio/tests/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/__init__.py rename to chart-studio-package/chart_studio/tests/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_core/__init__.py b/chart-studio-package/chart_studio/tests/test_core/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_core/__init__.py rename to chart-studio-package/chart_studio/tests/test_core/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_core/test_tools/__init__.py b/chart-studio-package/chart_studio/tests/test_core/test_tools/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_core/test_tools/__init__.py rename to chart-studio-package/chart_studio/tests/test_core/test_tools/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_configuration.py similarity index 75% rename from chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py rename to chart-studio-package/chart_studio/tests/test_core/test_tools/test_configuration.py index 31114397294..9215b008e47 100644 --- a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_configuration.py +++ b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_configuration.py @@ -2,8 +2,8 @@ from unittest import TestCase -from chartstudio.files import CONFIG_FILE, FILE_CONTENT -from chartstudio.tools import get_config_defaults +from chart_studio.files import CONFIG_FILE, FILE_CONTENT +from chart_studio.tools import get_config_defaults class TestGetConfigDefaults(TestCase): diff --git a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_file_tools.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py rename to chart-studio-package/chart_studio/tests/test_core/test_tools/test_file_tools.py index 42c757d0e37..3f5549625ca 100644 --- a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_file_tools.py +++ b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_file_tools.py @@ -1,5 +1,5 @@ -from chartstudio import tools -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio import tools +from chart_studio.tests.utils import PlotlyTestCase import warnings diff --git a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_get_embed.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py rename to chart-studio-package/chart_studio/tests/test_core/test_tools/test_get_embed.py index e964e1c3430..7b49365e54f 100644 --- a/chartstudio-package/chartstudio/tests/test_core/test_tools/test_get_embed.py +++ b/chart-studio-package/chart_studio/tests/test_core/test_tools/test_get_embed.py @@ -4,7 +4,7 @@ from nose.tools import raises -import chartstudio.tools as tls +import chart_studio.tools as tls from _plotly_utils.exceptions import PlotlyError diff --git a/chartstudio-package/chartstudio/tests/test_optional/__init__.py b/chart-studio-package/chart_studio/tests/test_optional/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_optional/__init__.py rename to chart-studio-package/chart_studio/tests/test_optional/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_grid/__init__.py b/chart-studio-package/chart_studio/tests/test_optional/test_grid/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_optional/test_grid/__init__.py rename to chart-studio-package/chart_studio/tests/test_optional/test_grid/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py b/chart-studio-package/chart_studio/tests/test_optional/test_grid/test_grid.py similarity index 88% rename from chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py rename to chart-studio-package/chart_studio/tests/test_optional/test_grid/test_grid.py index 6b469e657d7..aaf48967843 100644 --- a/chartstudio-package/chartstudio/tests/test_optional/test_grid/test_grid.py +++ b/chart-studio-package/chart_studio/tests/test_optional/test_grid/test_grid.py @@ -9,8 +9,8 @@ from unittest import TestCase -from chartstudio.exceptions import InputError -from chartstudio.grid_objs import Grid +from chart_studio.exceptions import InputError +from chart_studio.grid_objs import Grid import pandas as pd diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_ipython/__init__.py b/chart-studio-package/chart_studio/tests/test_optional/test_ipython/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_optional/test_ipython/__init__.py rename to chart-studio-package/chart_studio/tests/test_optional/test_ipython/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py b/chart-studio-package/chart_studio/tests/test_optional/test_ipython/test_widgets.py similarity index 83% rename from chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py rename to chart-studio-package/chart_studio/tests/test_optional/test_ipython/test_widgets.py index 597834032c0..8cd365d1e49 100644 --- a/chartstudio-package/chartstudio/tests/test_optional/test_ipython/test_widgets.py +++ b/chart-studio-package/chart_studio/tests/test_optional/test_ipython/test_widgets.py @@ -6,7 +6,7 @@ from unittest import TestCase -from chartstudio.widgets import GraphWidget +from chart_studio.widgets import GraphWidget class TestWidgets(TestCase): diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/__init__.py b/chart-studio-package/chart_studio/tests/test_optional/test_matplotlylib/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/__init__.py rename to chart-studio-package/chart_studio/tests/test_optional/test_matplotlylib/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py b/chart-studio-package/chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py similarity index 97% rename from chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py rename to chart-studio-package/chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py index 5e9bbf3924c..83732461ba9 100644 --- a/chartstudio-package/chartstudio/tests/test_optional/test_matplotlylib/test_plot_mpl.py +++ b/chart-studio-package/chart_studio/tests/test_optional/test_matplotlylib/test_plot_mpl.py @@ -12,7 +12,7 @@ import _plotly_utils.exceptions from plotly import optional_imports -from chartstudio.plotly import plotly as py +from chart_studio.plotly import plotly as py from unittest import TestCase matplotlylib = optional_imports.get_module('plotly.matplotlylib') diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_utils/__init__.py b/chart-studio-package/chart_studio/tests/test_optional/test_utils/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_optional/test_utils/__init__.py rename to chart-studio-package/chart_studio/tests/test_optional/test_utils/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py b/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py similarity index 95% rename from chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py rename to chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py index 63ab9a38bae..0af99a87be4 100644 --- a/chartstudio-package/chartstudio/tests/test_optional/test_utils/test_utils.py +++ b/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py @@ -2,7 +2,7 @@ from unittest import TestCase import _plotly_utils.utils -from chartstudio.grid_objs import Column +from chart_studio.grid_objs import Column from plotly import utils from plotly.tests.test_optional.test_utils.test_utils import numeric_list, \ mixed_list, np_list diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/__init__.py similarity index 95% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/__init__.py index c36a2c72a4f..5a2ce755612 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/__init__.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/__init__.py @@ -2,8 +2,8 @@ from requests import Response -from chartstudio.session import sign_in -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.session import sign_in +from chart_studio.tests.utils import PlotlyTestCase import sys diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py similarity index 89% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py index 712d4c836d8..2ce3fe66df2 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_clientresp.py @@ -1,8 +1,8 @@ from __future__ import absolute_import from plotly import version -from chartstudio.api.v1 import clientresp -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v1 import clientresp +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class Duck(object): @@ -16,11 +16,11 @@ def setUp(self): super(ClientrespTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v1.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v1.utils.requests.request') self.request_mock.return_value = self.get_response(b'{}', 200) # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v1.utils.validate_response') + self.mock('chart_studio.api.v1.utils.validate_response') def test_data_only(self): data = [{'y': [3, 5], 'name': Duck()}] diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py similarity index 93% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py index 89f3194b3bf..8fb761de550 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v1/test_utils.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v1/test_utils.py @@ -4,13 +4,13 @@ import json as _json from requests.exceptions import ConnectionError -from chartstudio.api.utils import to_native_utf8_string -from chartstudio.api.v1 import utils -from chartstudio.exceptions import PlotlyRequestError +from chart_studio.api.utils import to_native_utf8_string +from chart_studio.api.v1 import utils +from chart_studio.exceptions import PlotlyRequestError from _plotly_utils.exceptions import PlotlyError -from chartstudio.session import sign_in -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.session import sign_in +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.tests.utils import PlotlyTestCase import sys @@ -142,13 +142,13 @@ def setUp(self): proxy_password='hydrated', plotly_proxy_authorization=False) # Mock the actual api call, we don't want to do network tests here. - patcher = patch('chartstudio.api.v1.utils.requests.request') + patcher = patch('chart_studio.api.v1.utils.requests.request') self.request_mock = patcher.start() self.addCleanup(patcher.stop) self.request_mock.return_value = MagicMock(Response) # Mock the validation function since we test that elsewhere. - patcher = patch('chartstudio.api.v1.utils.validate_response') + patcher = patch('chart_studio.api.v1.utils.validate_response') self.validate_response_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py similarity index 93% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py index 74c5dbe9670..e911af4cbc9 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_files.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_files.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chartstudio.api.v2 import files -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import files +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class FilesTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(FilesTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_retrieve(self): files.retrieve('hodor:88') diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py similarity index 93% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py index ac6c26e11b2..0d0780f2b22 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_folders.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_folders.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chartstudio.api.v2 import folders -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import folders +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class FoldersTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(FoldersTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_create(self): path = '/foo/man/bar/' diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py similarity index 96% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py index da111b0d236..aa3d06bd6c1 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_grids.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_grids.py @@ -2,8 +2,8 @@ import json as _json -from chartstudio.api.v2 import grids -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import grids +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class GridsTest(PlotlyApiTestCase): @@ -12,11 +12,11 @@ def setUp(self): super(GridsTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_create(self): filename = 'a grid' diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py similarity index 80% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py index 05eca116242..11f4f90c9e1 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_images.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_images.py @@ -2,8 +2,8 @@ import json as _json -from chartstudio.api.v2 import images -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import images +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class ImagesTest(PlotlyApiTestCase): @@ -12,11 +12,11 @@ def setUp(self): super(ImagesTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_create(self): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py similarity index 75% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py index 6be3c030d39..e79798c504c 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plot_schema.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chartstudio.api.v2 import plot_schema -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import plot_schema +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class PlotSchemaTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(PlotSchemaTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_retrieve(self): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py similarity index 93% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py index 2a2db2f8554..ed4157226f1 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_plots.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_plots.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chartstudio.api.v2 import plots -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import plots +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class PlotsTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(PlotsTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_create(self): filename = 'a plot' diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py similarity index 73% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py index d51f5aa9f09..5e787424437 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_users.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_users.py @@ -1,7 +1,7 @@ from __future__ import absolute_import -from chartstudio.api.v2 import users -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.v2 import users +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class UsersTest(PlotlyApiTestCase): @@ -10,11 +10,11 @@ def setUp(self): super(UsersTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. - self.mock('chartstudio.api.v2.utils.validate_response') + self.mock('chart_studio.api.v2.utils.validate_response') def test_current(self): users.current() diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py similarity index 95% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py index 91d10b888a9..f8bb29ec345 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_api/test_v2/test_utils.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_api/test_v2/test_utils.py @@ -4,11 +4,11 @@ from requests.exceptions import ConnectionError from plotly import version -from chartstudio.api.utils import to_native_utf8_string -from chartstudio.api.v2 import utils -from chartstudio.exceptions import PlotlyRequestError -from chartstudio.session import sign_in -from chartstudio.tests.test_plot_ly.test_api import PlotlyApiTestCase +from chart_studio.api.utils import to_native_utf8_string +from chart_studio.api.v2 import utils +from chart_studio.exceptions import PlotlyRequestError +from chart_studio.session import sign_in +from chart_studio.tests.test_plot_ly.test_api import PlotlyApiTestCase class MakeParamsTest(PlotlyApiTestCase): @@ -191,12 +191,12 @@ def setUp(self): super(RequestTest, self).setUp() # Mock the actual api call, we don't want to do network tests here. - self.request_mock = self.mock('chartstudio.api.v2.utils.requests.request') + self.request_mock = self.mock('chart_studio.api.v2.utils.requests.request') self.request_mock.return_value = self.get_response() # Mock the validation function since we can test that elsewhere. self.validate_response_mock = self.mock( - 'chartstudio.api.v2.utils.validate_response') + 'chart_studio.api.v2.utils.validate_response') self.method = 'get' self.url = 'https://foo.bar.does.not.exist.anywhere' diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_dashboard/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_dashboard/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py index 2419aeabe6a..184f788b1fe 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_dashboard/test_dashboard.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_dashboard/test_dashboard.py @@ -9,7 +9,7 @@ from unittest import TestCase from _plotly_utils.exceptions import PlotlyError -import chartstudio.dashboard_objs.dashboard_objs as dashboard +import chart_studio.dashboard_objs.dashboard_objs as dashboard class TestDashboard(TestCase): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_file/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_file/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_file/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_file/test_file.py similarity index 91% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_file/test_file.py index 9cfc1d5b9a5..c46383d0119 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_file/test_file.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_file/test_file.py @@ -10,9 +10,9 @@ from nose.plugins.attrib import attr -from chartstudio import plotly as py -from chartstudio.exceptions import PlotlyRequestError -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio import plotly as py +from chart_studio.exceptions import PlotlyRequestError +from chart_studio.tests.utils import PlotlyTestCase @attr('slow') diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_figure/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_get_figure/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py similarity index 95% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py index c69dfbdd0b1..b23288b8b4d 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_figure/test_get_figure.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_figure/test_get_figure.py @@ -13,9 +13,9 @@ from nose.plugins.attrib import attr import _plotly_utils.exceptions -from chartstudio import exceptions -from chartstudio.plotly import plotly as py -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio import exceptions +from chart_studio.plotly import plotly as py +from chart_studio.tests.utils import PlotlyTestCase def is_trivial(obj): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_requests/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_get_requests/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py index aef2a5e30dc..863afc90a58 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_get_requests/test_get_requests.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_get_requests/test_get_requests.py @@ -12,7 +12,7 @@ from nose.plugins.attrib import attr import json as _json -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.tests.utils import PlotlyTestCase default_headers = {'plotly-username': '', 'plotly-apikey': '', diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_grid/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_grid/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_grid/test_grid.py similarity index 95% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_grid/test_grid.py index e093192cc56..601c02ed2e2 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_grid/test_grid.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_grid/test_grid.py @@ -13,13 +13,13 @@ from nose.plugins.attrib import attr -from chartstudio import plotly as py -from chartstudio.exceptions import InputError, PlotlyRequestError +from chart_studio import plotly as py +from chart_studio.exceptions import InputError, PlotlyRequestError from _plotly_utils.exceptions import PlotlyError from plotly.graph_objs import Scatter -from chartstudio.grid_objs import Column, Grid -from chartstudio.plotly import parse_grid_id_args -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.grid_objs import Column, Grid +from chart_studio.plotly import parse_grid_id_args +from chart_studio.tests.utils import PlotlyTestCase def random_filename(): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_image/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_image/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_image/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_image/test_image.py similarity index 96% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_image/test_image.py index 09c43b329ac..4c74bc753a3 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_image/test_image.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_image/test_image.py @@ -9,8 +9,8 @@ from nose.plugins.attrib import attr import _plotly_utils.exceptions -from chartstudio.plotly import plotly as py -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.plotly import plotly as py +from chart_studio.tests.utils import PlotlyTestCase @attr('slow') diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_meta/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_meta/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_meta/test_meta.py similarity index 89% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_meta/test_meta.py index b65bf23f1d5..3c8010dded2 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_meta/test_meta.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_meta/test_meta.py @@ -13,10 +13,10 @@ from nose.plugins.attrib import attr from unittest import skip -from chartstudio import plotly as py -from chartstudio.exceptions import PlotlyRequestError -from chartstudio.grid_objs import Column, Grid -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio import plotly as py +from chart_studio.exceptions import PlotlyRequestError +from chart_studio.grid_objs import Column, Grid +from chart_studio.tests.utils import PlotlyTestCase class MetaTest(PlotlyTestCase): diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py similarity index 92% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py index 53a24d15cde..628b047d373 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_credentials.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_credentials.py @@ -1,10 +1,10 @@ from __future__ import absolute_import import _plotly_utils.exceptions -from chartstudio import plotly as py, exceptions -import chartstudio.session as session -import chartstudio.tools as tls -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio import plotly as py, exceptions +import chart_studio.session as session +import chart_studio.tools as tls +from chart_studio.tests.utils import PlotlyTestCase import sys @@ -19,7 +19,7 @@ class TestSignIn(PlotlyTestCase): def setUp(self): super(TestSignIn, self).setUp() - patcher = patch('chartstudio.api.v2.users.current') + patcher = patch('chart_studio.api.v2.users.current') self.users_current_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_plot.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_plot.py index 9c590d80f9f..6c0bd8934c3 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_plotly/test_plot.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_plotly/test_plot.py @@ -15,13 +15,13 @@ from nose.plugins.attrib import attr -import chartstudio.tools as tls +import chart_studio.tools as tls import plotly.tools -from chartstudio import session -from chartstudio.tests.utils import PlotlyTestCase -from chartstudio.plotly import plotly as py +from chart_studio import session +from chart_studio.tests.utils import PlotlyTestCase +from chart_studio.plotly import plotly as py from _plotly_utils.exceptions import PlotlyError, PlotlyEmptyDataError -from chartstudio.files import CONFIG_FILE +from chart_studio.files import CONFIG_FILE # import from mock @@ -285,7 +285,7 @@ def setUp(self): super(TestPlotOptionLogic, self).setUp() # Make sure we don't hit sign-in validation failures. - patcher = patch('chartstudio.api.v2.users.current') + patcher = patch('chart_studio.api.v2.users.current') self.users_current_mock = patcher.start() self.addCleanup(patcher.stop) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_session/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_session/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_session/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_session/test_session.py similarity index 82% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_session/test_session.py index 36fa66c3899..ae1c6a67c57 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_session/test_session.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_session/test_session.py @@ -1,9 +1,9 @@ from __future__ import absolute_import -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.tests.utils import PlotlyTestCase -from chartstudio import session -from chartstudio.session import update_session_plot_options, SHARING_OPTIONS +from chart_studio import session +from chart_studio.session import update_session_plot_options, SHARING_OPTIONS from _plotly_utils.exceptions import PlotlyError @@ -26,7 +26,7 @@ def test_update_session_plot_options_valid_sharing_argument(self): # _session['plot_options'] should contain sharing key after # update_session_plot_options is called by correct arguments # 'public, 'private' or 'secret' - from chartstudio.session import _session + from chart_studio.session import _session for key in SHARING_OPTIONS: kwargs = {'sharing': key} update_session_plot_options(**kwargs) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_spectacle_presentation/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_spectacle_presentation/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py index 5150b4ec3c8..b1f9431783c 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_spectacle_presentation/test_spectacle_presentation.py @@ -9,8 +9,8 @@ from unittest import TestCase from _plotly_utils.exceptions import PlotlyError -import chartstudio -import chartstudio.presentation_objs as pres +import chart_studio +import chart_studio.presentation_objs as pres class TestPresentation(TestCase): @@ -21,7 +21,7 @@ def test_invalid_style(self): """ self.assertRaisesRegexp( - PlotlyError, chartstudio.presentation_objs.presentation_objs.STYLE_ERROR, + PlotlyError, chart_studio.presentation_objs.presentation_objs.STYLE_ERROR, pres.Presentation, markdown_string, style='foo' ) @@ -35,7 +35,7 @@ def test_open_code_block(self): """ self.assertRaisesRegexp( - PlotlyError, chartstudio.presentation_objs.presentation_objs.CODE_ENV_ERROR, + PlotlyError, chart_studio.presentation_objs.presentation_objs.CODE_ENV_ERROR, pres.Presentation, markdown_string, style='moods' ) @@ -48,7 +48,7 @@ def test_invalid_code_language(self): """ self.assertRaisesRegexp( - PlotlyError, chartstudio.presentation_objs.presentation_objs.LANG_ERROR, pres.Presentation, + PlotlyError, chart_studio.presentation_objs.presentation_objs.LANG_ERROR, pres.Presentation, markdown_string, style='moods' ) diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/__init__.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_stream/__init__.py similarity index 100% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/__init__.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_stream/__init__.py diff --git a/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py b/chart-studio-package/chart_studio/tests/test_plot_ly/test_stream/test_stream.py similarity index 98% rename from chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py rename to chart-studio-package/chart_studio/tests/test_plot_ly/test_stream/test_stream.py index bdb8617ddf3..7d7aac7670a 100644 --- a/chartstudio-package/chartstudio/tests/test_plot_ly/test_stream/test_stream.py +++ b/chart-studio-package/chart_studio/tests/test_plot_ly/test_stream/test_stream.py @@ -8,9 +8,9 @@ from nose.plugins.attrib import attr -from chartstudio import plotly as py +from chart_studio import plotly as py from plotly.graph_objs import (Layout, Scatter, Stream) -from chartstudio.tests.utils import PlotlyTestCase +from chart_studio.tests.utils import PlotlyTestCase un = 'PythonAPI' ak = 'ubpiol2cve' diff --git a/chartstudio-package/chartstudio/tests/utils.py b/chart-studio-package/chart_studio/tests/utils.py similarity index 97% rename from chartstudio-package/chartstudio/tests/utils.py rename to chart-studio-package/chart_studio/tests/utils.py index 6f8b58739d0..4ad485f6258 100644 --- a/chartstudio-package/chartstudio/tests/utils.py +++ b/chart-studio-package/chart_studio/tests/utils.py @@ -1,7 +1,7 @@ import copy from unittest import TestCase -from chartstudio import session, files, utils +from chart_studio import session, files, utils from plotly.files import ensure_writable_plotly_dir class PlotlyTestCase(TestCase): diff --git a/chartstudio-package/chartstudio/tools.py b/chart-studio-package/chart_studio/tools.py similarity index 99% rename from chartstudio-package/chartstudio/tools.py rename to chart-studio-package/chart_studio/tools.py index 539609eec42..37acf6ec19e 100644 --- a/chartstudio-package/chartstudio/tools.py +++ b/chart-studio-package/chart_studio/tools.py @@ -18,8 +18,8 @@ import _plotly_utils.exceptions from _plotly_utils.files import ensure_writable_plotly_dir -from chartstudio import session, utils -from chartstudio.files import CONFIG_FILE, CREDENTIALS_FILE, FILE_CONTENT +from chart_studio import session, utils +from chart_studio.files import CONFIG_FILE, CREDENTIALS_FILE, FILE_CONTENT ipython_core_display = optional_imports.get_module('IPython.core.display') sage_salvus = optional_imports.get_module('sage_salvus') diff --git a/chartstudio-package/chartstudio/utils.py b/chart-studio-package/chart_studio/utils.py similarity index 100% rename from chartstudio-package/chartstudio/utils.py rename to chart-studio-package/chart_studio/utils.py diff --git a/chart-studio-package/chart_studio/widgets/__init__.py b/chart-studio-package/chart_studio/widgets/__init__.py new file mode 100644 index 00000000000..f1a63808df9 --- /dev/null +++ b/chart-studio-package/chart_studio/widgets/__init__.py @@ -0,0 +1,3 @@ +from __future__ import absolute_import + +from chart_studio.widgets.graph_widget import GraphWidget diff --git a/chartstudio-package/chartstudio/widgets/graph_widget.py b/chart-studio-package/chart_studio/widgets/graph_widget.py similarity index 99% rename from chartstudio-package/chartstudio/widgets/graph_widget.py rename to chart-studio-package/chart_studio/widgets/graph_widget.py index 2cb6dec34b3..e1b08087319 100644 --- a/chartstudio-package/chartstudio/widgets/graph_widget.py +++ b/chart-studio-package/chart_studio/widgets/graph_widget.py @@ -14,7 +14,7 @@ from IPython.display import Javascript, display import plotly.tools -from chartstudio import plotly as py, tools, utils +from chart_studio import plotly as py, tools, utils from plotly.graph_objs import Figure # Load JS widget code diff --git a/chartstudio-package/setup.py b/chart-studio-package/setup.py similarity index 76% rename from chartstudio-package/setup.py rename to chart-studio-package/setup.py index c73c6064d63..0ccdb2e9876 100644 --- a/chartstudio-package/setup.py +++ b/chart-studio-package/setup.py @@ -7,7 +7,7 @@ def readme(): setup( - name="chartstudio", + name="chart_studio", version="4.0.0a1", author="Chris P", author_email="chris@plot.ly", @@ -32,16 +32,16 @@ def readme(): ], license="MIT", packages=[ - "chartstudio", - "chartstudio.api", - "chartstudio.api.v1", - "chartstudio.api.v2", - "chartstudio.dashboard_objs", - "chartstudio.grid_objs", - "chartstudio.plotly", - "chartstudio.plotly.chunked_requests", - "chartstudio.presentation_objs", - "chartstudio.widgets", + "chart_studio", + "chart_studio.api", + "chart_studio.api.v1", + "chart_studio.api.v2", + "chart_studio.dashboard_objs", + "chart_studio.grid_objs", + "chart_studio.plotly", + "chart_studio.plotly.chunked_requests", + "chart_studio.presentation_objs", + "chart_studio.widgets", ], install_requires=["plotly", "requests", "retrying>=1.3.3", "six"], zip_safe=False, diff --git a/chartstudio-package/specs/GraphWidgetSpec.md b/chart-studio-package/specs/GraphWidgetSpec.md similarity index 100% rename from chartstudio-package/specs/GraphWidgetSpec.md rename to chart-studio-package/specs/GraphWidgetSpec.md diff --git a/chartstudio-package/specs/gridspec.md b/chart-studio-package/specs/gridspec.md similarity index 100% rename from chartstudio-package/specs/gridspec.md rename to chart-studio-package/specs/gridspec.md diff --git a/chartstudio-package/chartstudio/__init__.py b/chartstudio-package/chartstudio/__init__.py deleted file mode 100644 index 5ca3a3a65b7..00000000000 --- a/chartstudio-package/chartstudio/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from __future__ import absolute_import -from chartstudio import (plotly, dashboard_objs, grid_objs, session) diff --git a/chartstudio-package/chartstudio/api/v1/__init__.py b/chartstudio-package/chartstudio/api/v1/__init__.py deleted file mode 100644 index c738db20411..00000000000 --- a/chartstudio-package/chartstudio/api/v1/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from chartstudio.api.v1.clientresp import clientresp diff --git a/chartstudio-package/chartstudio/api/v2/__init__.py b/chartstudio-package/chartstudio/api/v2/__init__.py deleted file mode 100644 index 790b971d726..00000000000 --- a/chartstudio-package/chartstudio/api/v2/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from __future__ import absolute_import - -from chartstudio.api.v2 import (dash_apps, dashboards, files, folders, grids, - images, plot_schema, plots, - spectacle_presentations, users) diff --git a/chartstudio-package/chartstudio/widgets/__init__.py b/chartstudio-package/chartstudio/widgets/__init__.py deleted file mode 100644 index 09bcb6da533..00000000000 --- a/chartstudio-package/chartstudio/widgets/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from chartstudio.widgets.graph_widget import GraphWidget diff --git a/plotly-package/_plotly_future_/__init__.py b/plotly-package/_plotly_future_/__init__.py index 15e666194af..64b17e6c194 100644 --- a/plotly-package/_plotly_future_/__init__.py +++ b/plotly-package/_plotly_future_/__init__.py @@ -24,7 +24,7 @@ def _assert_plotly_not_imported(): warnings.filterwarnings( 'default', - '.*?is deprecated, please use chartstudio*', + '.*?is deprecated, please use chart_studio*', DeprecationWarning ) @@ -32,7 +32,7 @@ def _assert_plotly_not_imported(): def _chart_studio_warning(submodule): warnings.warn( 'The plotly.{submodule} module is deprecated, ' - 'please use chartstudio.{submodule} instead' + 'please use chart_studio.{submodule} instead' .format(submodule=submodule), DeprecationWarning, stacklevel=2) @@ -41,8 +41,8 @@ def _chart_studio_warning(submodule): def _chart_studio_error(submodule): raise ImportError(""" The plotly.{submodule} module is deprecated, -please install the chartstudio package and use the -chartstudio.{submodule} module instead. +please install the chart_studio package and use the +chart_studio.{submodule} module instead. """.format(submodule=submodule)) @@ -53,7 +53,7 @@ def _chart_studio_deprecation(fn): plotly_name = '.'.join( ['plotly'] + fn_module.split('.')[1:] + [fn_name]) chart_studio_name = '.'.join( - ['chartstudio'] + fn_module.split('.')[1:] + [fn_name]) + ['chart_studio'] + fn_module.split('.')[1:] + [fn_name]) msg = """\ {plotly_name} is deprecated, please use {chart_studio_name}\ diff --git a/plotly-package/_plotly_utils/basevalidators.py b/plotly-package/_plotly_utils/basevalidators.py index 70ddd822a0e..b28f7d6330e 100644 --- a/plotly-package/_plotly_utils/basevalidators.py +++ b/plotly-package/_plotly_utils/basevalidators.py @@ -606,7 +606,7 @@ def description(self): as a plotly.grid_objs.Column object""".format(plotly_name=self.plotly_name)) def validate_coerce(self, v): - from chartstudio.grid_objs import Column + from chart_studio.grid_objs import Column if v is None: # Pass None through pass diff --git a/plotly-package/plotly/tools.py b/plotly-package/plotly/tools.py index 2cb72abc047..a9f0db2901d 100644 --- a/plotly-package/plotly/tools.py +++ b/plotly-package/plotly/tools.py @@ -684,9 +684,9 @@ def create_violin(*args, **kwargs): def get_config_plotly_server_url(): """ Function to get the .config file's 'plotly_domain' without importing - the chartstudio package. This property is needed to compute the default + the chart_studio package. This property is needed to compute the default value of the plotly.js config plotlyServerURL, so it is independent of - the chartstudio integration and still needs to live in + the chart_studio integration and still needs to live in Returns ------- diff --git a/plotly-package/setup.py b/plotly-package/setup.py index dd1a27d4a92..c4ce4740bc5 100644 --- a/plotly-package/setup.py +++ b/plotly-package/setup.py @@ -420,16 +420,16 @@ def run(self): 'plotly.matplotlylib', 'plotly.matplotlylib.mplexporter', 'plotly.matplotlylib.mplexporter.renderers', - # 'chartstudio', - # 'chartstudio.api', - # 'chartstudio.api.v1', - # 'chartstudio.api.v2', - # 'chartstudio.dashboard_objs', - # 'chartstudio.grid_objs', - # 'chartstudio.plotly', - # 'chartstudio.plotly.chunked_requests', - # 'chartstudio.presentation_objs', - # 'chartstudio.widgets', + # 'chart_studio', + # 'chart_studio.api', + # 'chart_studio.api.v1', + # 'chart_studio.api.v2', + # 'chart_studio.dashboard_objs', + # 'chart_studio.grid_objs', + # 'chart_studio.plotly', + # 'chart_studio.plotly.chunked_requests', + # 'chart_studio.presentation_objs', + # 'chart_studio.widgets', '_plotly_utils', '_plotly_future_', ] + graph_objs_packages + validator_packages, From 31d95831bece2ea655ce93b45e9e8eb13ae199ef Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:06:06 -0400 Subject: [PATCH 08/34] optional import of chart_studio in src validator --- plotly-package/_plotly_utils/basevalidators.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plotly-package/_plotly_utils/basevalidators.py b/plotly-package/_plotly_utils/basevalidators.py index b28f7d6330e..d4bd8451cef 100644 --- a/plotly-package/_plotly_utils/basevalidators.py +++ b/plotly-package/_plotly_utils/basevalidators.py @@ -600,19 +600,21 @@ def __init__(self, plotly_name, parent_name, **kwargs): super(SrcValidator, self).__init__( plotly_name=plotly_name, parent_name=parent_name, **kwargs) + self.chart_studio = get_module('chart_studio') + def description(self): return ("""\ The '{plotly_name}' property must be specified as a string or as a plotly.grid_objs.Column object""".format(plotly_name=self.plotly_name)) def validate_coerce(self, v): - from chart_studio.grid_objs import Column if v is None: # Pass None through pass elif isinstance(v, string_types): pass - elif isinstance(v, Column): + elif self.chart_studio and \ + isinstance(v, self.chart_studio.grid_objs.Column): # Convert to id string v = v.id else: From c8b566eb7d09b8fd14c13fa6121bb634d1924d0d Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:07:12 -0400 Subject: [PATCH 09/34] Move figure factory tests to plotly-figure-factory-package --- .../tests/test_optional/test_figure_factory/__init__.py | 0 .../test_optional/test_figure_factory/test_figure_factory.py | 0 .../figure_factory}/tests/test_optional/test_tools/__init__.py | 0 .../tests/test_optional/test_tools/test_figure_factory.py | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/tests/test_optional/test_figure_factory/__init__.py (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/tests/test_optional/test_figure_factory/test_figure_factory.py (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/tests/test_optional/test_tools/__init__.py (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/tests/test_optional/test_tools/test_figure_factory.py (100%) diff --git a/plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py b/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/__init__.py similarity index 100% rename from plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py rename to plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/__init__.py diff --git a/plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py b/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/test_figure_factory.py similarity index 100% rename from plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py rename to plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/test_figure_factory.py diff --git a/plotly-package/plotly/tests/test_optional/test_tools/__init__.py b/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/__init__.py similarity index 100% rename from plotly-package/plotly/tests/test_optional/test_tools/__init__.py rename to plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/__init__.py diff --git a/plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py b/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/test_figure_factory.py similarity index 100% rename from plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py rename to plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/test_figure_factory.py From ccf1080ba81619e635530e27b3759a2916f243cf Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:08:05 -0400 Subject: [PATCH 10/34] Split out plotly/package_data into the appropriate distribution package --- .../chart_studio}/package_data/graphWidget.js | 0 .../chart_studio/widgets/graph_widget.py | 2 +- chart-studio-package/setup.py | 3 ++- .../plotly/figure_factory/_county_choropleth.py | 4 ++-- .../package_data/cb_2016_us_county_500k.dbf | Bin .../package_data/cb_2016_us_county_500k.shp | Bin .../package_data/cb_2016_us_county_500k.shx | Bin .../package_data/cb_2016_us_state_500k.dbf | Bin .../package_data/cb_2016_us_state_500k.shp | Bin .../package_data/cb_2016_us_state_500k.shx | Bin .../package_data/gz_2010_us_050_00_500k.dbf | Bin .../package_data/gz_2010_us_050_00_500k.shp | Bin .../package_data/gz_2010_us_050_00_500k.shx | Bin plotly-figure-factory-package/setup.py | 1 + 14 files changed, 6 insertions(+), 4 deletions(-) rename {plotly-package/plotly => chart-studio-package/chart_studio}/package_data/graphWidget.js (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_county_500k.dbf (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_county_500k.shp (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_county_500k.shx (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_state_500k.dbf (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_state_500k.shp (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/cb_2016_us_state_500k.shx (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/gz_2010_us_050_00_500k.dbf (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/gz_2010_us_050_00_500k.shp (100%) rename {plotly-package/plotly => plotly-figure-factory-package/plotly/figure_factory}/package_data/gz_2010_us_050_00_500k.shx (100%) diff --git a/plotly-package/plotly/package_data/graphWidget.js b/chart-studio-package/chart_studio/package_data/graphWidget.js similarity index 100% rename from plotly-package/plotly/package_data/graphWidget.js rename to chart-studio-package/chart_studio/package_data/graphWidget.js diff --git a/chart-studio-package/chart_studio/widgets/graph_widget.py b/chart-studio-package/chart_studio/widgets/graph_widget.py index e1b08087319..6be1ec2ba19 100644 --- a/chart-studio-package/chart_studio/widgets/graph_widget.py +++ b/chart-studio-package/chart_studio/widgets/graph_widget.py @@ -20,7 +20,7 @@ # Load JS widget code # No officially recommended way to do this in any other way # http://mail.scipy.org/pipermail/ipython-dev/2014-April/013835.html -js_widget_code = pkgutil.get_data('plotly', +js_widget_code = pkgutil.get_data('chart_studio', 'package_data/graphWidget.js' ).decode('utf-8') diff --git a/chart-studio-package/setup.py b/chart-studio-package/setup.py index 0ccdb2e9876..e2de058e389 100644 --- a/chart-studio-package/setup.py +++ b/chart-studio-package/setup.py @@ -7,7 +7,7 @@ def readme(): setup( - name="chart_studio", + name="chart-studio", version="4.0.0a1", author="Chris P", author_email="chris@plot.ly", @@ -43,6 +43,7 @@ def readme(): "chart_studio.presentation_objs", "chart_studio.widgets", ], + package_data={'chart_studio': ['package_data/*']}, install_requires=["plotly", "requests", "retrying>=1.3.3", "six"], zip_safe=False, ) diff --git a/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py b/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py index 684c7147743..2cfe285b807 100644 --- a/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py +++ b/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py @@ -26,8 +26,8 @@ def _create_us_counties_df(st_to_state_name_dict, state_to_st_dict): abs_plotly_dir_path = os.path.dirname(abs_dir_path) - abs_package_data_dir_path = os.path.join(abs_plotly_dir_path, - 'package_data') + abs_package_data_dir_path = os.path.join( + abs_plotly_dir_path, 'figure_factory', 'package_data') shape_pre2010 = 'gz_2010_us_050_00_500k.shp' shape_pre2010 = os.path.join(abs_package_data_dir_path, shape_pre2010) diff --git a/plotly-package/plotly/package_data/cb_2016_us_county_500k.dbf b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.dbf similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_county_500k.dbf rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.dbf diff --git a/plotly-package/plotly/package_data/cb_2016_us_county_500k.shp b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shp similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_county_500k.shp rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shp diff --git a/plotly-package/plotly/package_data/cb_2016_us_county_500k.shx b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shx similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_county_500k.shx rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shx diff --git a/plotly-package/plotly/package_data/cb_2016_us_state_500k.dbf b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.dbf similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_state_500k.dbf rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.dbf diff --git a/plotly-package/plotly/package_data/cb_2016_us_state_500k.shp b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shp similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_state_500k.shp rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shp diff --git a/plotly-package/plotly/package_data/cb_2016_us_state_500k.shx b/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shx similarity index 100% rename from plotly-package/plotly/package_data/cb_2016_us_state_500k.shx rename to plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shx diff --git a/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.dbf b/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.dbf similarity index 100% rename from plotly-package/plotly/package_data/gz_2010_us_050_00_500k.dbf rename to plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.dbf diff --git a/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shp b/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shp similarity index 100% rename from plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shp rename to plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shp diff --git a/plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shx b/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shx similarity index 100% rename from plotly-package/plotly/package_data/gz_2010_us_050_00_500k.shx rename to plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shx diff --git a/plotly-figure-factory-package/setup.py b/plotly-figure-factory-package/setup.py index 9bf4e2d1b12..a4491a8dfb8 100644 --- a/plotly-figure-factory-package/setup.py +++ b/plotly-figure-factory-package/setup.py @@ -34,6 +34,7 @@ def readme(): packages=[ "plotly.figure_factory", ], + package_data={'plotly.figure_factory': ['package_data/*']}, install_requires=["plotly", "six"], zip_safe=False, ) From d39c29a465ad2fd32a6ef087f6690a706049fa14 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:08:28 -0400 Subject: [PATCH 11/34] Update setup.py packages --- plotly-package/setup.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/plotly-package/setup.py b/plotly-package/setup.py index c4ce4740bc5..ae976f0478e 100644 --- a/plotly-package/setup.py +++ b/plotly-package/setup.py @@ -414,22 +414,11 @@ def run(self): packages=['plotly', 'plotlywidget', 'plotly.plotly', - 'plotly.figure_factory', 'plotly.offline', 'plotly.io', 'plotly.matplotlylib', 'plotly.matplotlylib.mplexporter', 'plotly.matplotlylib.mplexporter.renderers', - # 'chart_studio', - # 'chart_studio.api', - # 'chart_studio.api.v1', - # 'chart_studio.api.v2', - # 'chart_studio.dashboard_objs', - # 'chart_studio.grid_objs', - # 'chart_studio.plotly', - # 'chart_studio.plotly.chunked_requests', - # 'chart_studio.presentation_objs', - # 'chart_studio.widgets', '_plotly_utils', '_plotly_future_', ] + graph_objs_packages + validator_packages, From c247ab53e2dd005491c33a20b6ceb06a5df50422 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:19:47 -0400 Subject: [PATCH 12/34] Update codegen for new directory structure --- chart-studio-package/setup.py | 4 +++- plotly-figure-factory-package/setup.py | 4 +++- plotly-package/codegen/__init__.py | 7 +++++-- .../package_data => codegen/resources}/plot-schema.json | 0 .../plotly/validators/funnelarea/domain/__init__.py | 6 ++---- .../plotly/validators/layout/angularaxis/__init__.py | 3 +-- .../plotly/validators/layout/geo/domain/__init__.py | 6 ++---- .../plotly/validators/layout/grid/domain/__init__.py | 6 ++---- .../plotly/validators/layout/mapbox/domain/__init__.py | 6 ++---- .../plotly/validators/layout/polar/domain/__init__.py | 6 ++---- .../plotly/validators/layout/polar/radialaxis/__init__.py | 3 +-- .../plotly/validators/layout/radialaxis/__init__.py | 3 +-- .../plotly/validators/layout/scene/domain/__init__.py | 6 ++---- .../plotly/validators/layout/scene/xaxis/__init__.py | 3 +-- .../plotly/validators/layout/scene/yaxis/__init__.py | 3 +-- .../plotly/validators/layout/scene/zaxis/__init__.py | 3 +-- .../plotly/validators/layout/ternary/domain/__init__.py | 6 ++---- plotly-package/plotly/validators/layout/xaxis/__init__.py | 6 ++---- .../plotly/validators/layout/xaxis/rangeslider/__init__.py | 3 +-- plotly-package/plotly/validators/layout/yaxis/__init__.py | 6 ++---- .../plotly/validators/parcats/domain/__init__.py | 6 ++---- .../plotly/validators/parcoords/domain/__init__.py | 6 ++---- plotly-package/plotly/validators/pie/domain/__init__.py | 6 ++---- plotly-package/plotly/validators/sankey/domain/__init__.py | 6 ++---- .../plotly/validators/sunburst/domain/__init__.py | 6 ++---- plotly-package/plotly/validators/table/domain/__init__.py | 6 ++---- plotly-package/setup.py | 3 ++- 27 files changed, 50 insertions(+), 79 deletions(-) rename plotly-package/{plotly/package_data => codegen/resources}/plot-schema.json (100%) diff --git a/chart-studio-package/setup.py b/chart-studio-package/setup.py index e2de058e389..301cac86e83 100644 --- a/chart-studio-package/setup.py +++ b/chart-studio-package/setup.py @@ -1,8 +1,10 @@ from setuptools import setup +import os def readme(): - with open("README.md") as f: + parent_dir = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(parent_dir, 'README.md')) as f: return f.read() diff --git a/plotly-figure-factory-package/setup.py b/plotly-figure-factory-package/setup.py index a4491a8dfb8..3cbac7cb844 100644 --- a/plotly-figure-factory-package/setup.py +++ b/plotly-figure-factory-package/setup.py @@ -1,8 +1,10 @@ from setuptools import setup +import os def readme(): - with open("README.md") as f: + parent_dir = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(parent_dir, 'README.md')) as f: return f.read() diff --git a/plotly-package/codegen/__init__.py b/plotly-package/codegen/__init__.py index f92fc5a8422..ed9b4785580 100644 --- a/plotly-package/codegen/__init__.py +++ b/plotly-package/codegen/__init__.py @@ -82,7 +82,10 @@ def perform_codegen(): # Set root codegen output directory # --------------------------------- # (relative to project root) - outdir = 'plotly' + abs_file_path = opath.realpath(__file__) + project_root = opath.dirname(opath.dirname(opath.dirname(abs_file_path))); + + outdir = opath.join(project_root, 'plotly-package', 'plotly') # Delete prior codegen output # --------------------------- @@ -103,7 +106,7 @@ def perform_codegen(): # Load plotly schema # ------------------ - with open('plotly/package_data/plot-schema.json', 'r') as f: + with open('plotly-package/codegen/resources/plot-schema.json', 'r') as f: plotly_schema = json.load(f) # Preprocess Schema diff --git a/plotly-package/plotly/package_data/plot-schema.json b/plotly-package/codegen/resources/plot-schema.json similarity index 100% rename from plotly-package/plotly/package_data/plot-schema.json rename to plotly-package/codegen/resources/plot-schema.json diff --git a/plotly-package/plotly/validators/funnelarea/domain/__init__.py b/plotly-package/plotly/validators/funnelarea/domain/__init__.py index 04a1c08ae18..c10f257699a 100644 --- a/plotly-package/plotly/validators/funnelarea/domain/__init__.py +++ b/plotly-package/plotly/validators/funnelarea/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/angularaxis/__init__.py b/plotly-package/plotly/validators/layout/angularaxis/__init__.py index 202c44c65ec..cea62bad8b5 100644 --- a/plotly-package/plotly/validators/layout/angularaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/angularaxis/__init__.py @@ -213,8 +213,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/geo/domain/__init__.py b/plotly-package/plotly/validators/layout/geo/domain/__init__.py index e26b4a01e3d..68503ae8f00 100644 --- a/plotly-package/plotly/validators/layout/geo/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/geo/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/grid/domain/__init__.py b/plotly-package/plotly/validators/layout/grid/domain/__init__.py index f44616c01b1..8f47dc4d28a 100644 --- a/plotly-package/plotly/validators/layout/grid/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/grid/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/mapbox/domain/__init__.py b/plotly-package/plotly/validators/layout/mapbox/domain/__init__.py index 99e179ba122..801ba6800ea 100644 --- a/plotly-package/plotly/validators/layout/mapbox/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/mapbox/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/polar/domain/__init__.py b/plotly-package/plotly/validators/layout/polar/domain/__init__.py index f619999c1b5..eca761c57b5 100644 --- a/plotly-package/plotly/validators/layout/polar/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/polar/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py b/plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py index a0d4c7dbddf..bffb8a3c5c6 100644 --- a/plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/polar/radialaxis/__init__.py @@ -720,8 +720,7 @@ def __init__( 'impliedEdits': { '^autorange': False } - }, - { + }, { 'valType': 'any', 'editType': 'plot', 'impliedEdits': { diff --git a/plotly-package/plotly/validators/layout/radialaxis/__init__.py b/plotly-package/plotly/validators/layout/radialaxis/__init__.py index e61b0b78910..714df7a04e3 100644 --- a/plotly-package/plotly/validators/layout/radialaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/radialaxis/__init__.py @@ -225,8 +225,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/scene/domain/__init__.py b/plotly-package/plotly/validators/layout/scene/domain/__init__.py index a54a3ef4452..1fd7058b54a 100644 --- a/plotly-package/plotly/validators/layout/scene/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/scene/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/scene/xaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/xaxis/__init__.py index ad10f03317b..fc6771dc69a 100644 --- a/plotly-package/plotly/validators/layout/scene/xaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/scene/xaxis/__init__.py @@ -845,8 +845,7 @@ def __init__( 'impliedEdits': { '^autorange': False } - }, - { + }, { 'valType': 'any', 'editType': 'plot', 'impliedEdits': { diff --git a/plotly-package/plotly/validators/layout/scene/yaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/yaxis/__init__.py index ab521879a67..f9f68f5ba96 100644 --- a/plotly-package/plotly/validators/layout/scene/yaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/scene/yaxis/__init__.py @@ -845,8 +845,7 @@ def __init__( 'impliedEdits': { '^autorange': False } - }, - { + }, { 'valType': 'any', 'editType': 'plot', 'impliedEdits': { diff --git a/plotly-package/plotly/validators/layout/scene/zaxis/__init__.py b/plotly-package/plotly/validators/layout/scene/zaxis/__init__.py index e5d9f8ca5b8..2d2be6f0195 100644 --- a/plotly-package/plotly/validators/layout/scene/zaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/scene/zaxis/__init__.py @@ -845,8 +845,7 @@ def __init__( 'impliedEdits': { '^autorange': False } - }, - { + }, { 'valType': 'any', 'editType': 'plot', 'impliedEdits': { diff --git a/plotly-package/plotly/validators/layout/ternary/domain/__init__.py b/plotly-package/plotly/validators/layout/ternary/domain/__init__.py index ef43fe3e5cc..b6c549047c1 100644 --- a/plotly-package/plotly/validators/layout/ternary/domain/__init__.py +++ b/plotly-package/plotly/validators/layout/ternary/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/xaxis/__init__.py b/plotly-package/plotly/validators/layout/xaxis/__init__.py index dc358d0b040..c3c2e13c0aa 100644 --- a/plotly-package/plotly/validators/layout/xaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/xaxis/__init__.py @@ -1010,8 +1010,7 @@ def __init__( '^autorange': False }, 'anim': True - }, - { + }, { 'valType': 'any', 'editType': 'axrange', 'impliedEdits': { @@ -1311,8 +1310,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py b/plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py index 3f5c796d43f..5766e026a90 100644 --- a/plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py +++ b/plotly-package/plotly/validators/layout/xaxis/rangeslider/__init__.py @@ -100,8 +100,7 @@ def __init__( 'impliedEdits': { '^autorange': False } - }, - { + }, { 'valType': 'any', 'editType': 'calc', 'impliedEdits': { diff --git a/plotly-package/plotly/validators/layout/yaxis/__init__.py b/plotly-package/plotly/validators/layout/yaxis/__init__.py index 105b23cf28d..158c34f89e3 100644 --- a/plotly-package/plotly/validators/layout/yaxis/__init__.py +++ b/plotly-package/plotly/validators/layout/yaxis/__init__.py @@ -889,8 +889,7 @@ def __init__( '^autorange': False }, 'anim': True - }, - { + }, { 'valType': 'any', 'editType': 'axrange', 'impliedEdits': { @@ -1190,8 +1189,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'plot' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/parcats/domain/__init__.py b/plotly-package/plotly/validators/parcats/domain/__init__.py index 85df7d78466..024afc9b7b3 100644 --- a/plotly-package/plotly/validators/parcats/domain/__init__.py +++ b/plotly-package/plotly/validators/parcats/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/parcoords/domain/__init__.py b/plotly-package/plotly/validators/parcoords/domain/__init__.py index 4d10c7e3090..0d88d06c2f3 100644 --- a/plotly-package/plotly/validators/parcoords/domain/__init__.py +++ b/plotly-package/plotly/validators/parcoords/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/pie/domain/__init__.py b/plotly-package/plotly/validators/pie/domain/__init__.py index 5bdba524a93..cf053722f44 100644 --- a/plotly-package/plotly/validators/pie/domain/__init__.py +++ b/plotly-package/plotly/validators/pie/domain/__init__.py @@ -17,8 +17,7 @@ def __init__(self, plotly_name='y', parent_name='pie.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -48,8 +47,7 @@ def __init__(self, plotly_name='x', parent_name='pie.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/sankey/domain/__init__.py b/plotly-package/plotly/validators/sankey/domain/__init__.py index b65c6ea6681..9b96b8c6d4a 100644 --- a/plotly-package/plotly/validators/sankey/domain/__init__.py +++ b/plotly-package/plotly/validators/sankey/domain/__init__.py @@ -17,8 +17,7 @@ def __init__(self, plotly_name='y', parent_name='sankey.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -48,8 +47,7 @@ def __init__(self, plotly_name='x', parent_name='sankey.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/sunburst/domain/__init__.py b/plotly-package/plotly/validators/sunburst/domain/__init__.py index 5cd4bada70c..c3fc767f075 100644 --- a/plotly-package/plotly/validators/sunburst/domain/__init__.py +++ b/plotly-package/plotly/validators/sunburst/domain/__init__.py @@ -19,8 +19,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -52,8 +51,7 @@ def __init__( 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/plotly/validators/table/domain/__init__.py b/plotly-package/plotly/validators/table/domain/__init__.py index cf3b0bf8175..4376ce3730a 100644 --- a/plotly-package/plotly/validators/table/domain/__init__.py +++ b/plotly-package/plotly/validators/table/domain/__init__.py @@ -17,8 +17,7 @@ def __init__(self, plotly_name='y', parent_name='table.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, @@ -48,8 +47,7 @@ def __init__(self, plotly_name='x', parent_name='table.domain', **kwargs): 'min': 0, 'max': 1, 'editType': 'calc' - }, - { + }, { 'valType': 'number', 'min': 0, 'max': 1, diff --git a/plotly-package/setup.py b/plotly-package/setup.py index ae976f0478e..65204dc3de2 100644 --- a/plotly-package/setup.py +++ b/plotly-package/setup.py @@ -30,7 +30,8 @@ def plotly_js_version(): def readme(): - with open('README.md') as f: + parent_dir = os.path.dirname(os.path.realpath(__file__)) + with open(os.path.join(parent_dir, 'README.md')) as f: return f.read() From 1ca95d241347b0b59b4b13917e4544580bebaaae Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:35:04 -0400 Subject: [PATCH 13/34] Update setup.py tasks for new directory structure --- plotly-package/setup.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/plotly-package/setup.py b/plotly-package/setup.py index 65204dc3de2..f8ed24bee4e 100644 --- a/plotly-package/setup.py +++ b/plotly-package/setup.py @@ -11,8 +11,9 @@ here = os.path.dirname(os.path.abspath(__file__)) -node_root = os.path.join(here, 'js') -is_repo = os.path.exists(os.path.join(here, '.git')) +project_root = os.path.dirname(here) +node_root = os.path.join(project_root, 'js') +is_repo = os.path.exists(os.path.join(project_root, '.git')) npm_path = os.pathsep.join([ os.path.join(node_root, 'node_modules', '.bin'), @@ -22,7 +23,8 @@ # Load plotly.js version from js/package.json def plotly_js_version(): - with open('js/package.json', 'rt') as f: + path = os.path.join(project_root, 'js', 'package.json') + with open(path, 'rt') as f: package_json = json.load(f) version = package_json['dependencies']['plotly.js'] @@ -30,8 +32,7 @@ def plotly_js_version(): def readme(): - parent_dir = os.path.dirname(os.path.realpath(__file__)) - with open(os.path.join(parent_dir, 'README.md')) as f: + with open(os.path.join(here, 'README.md')) as f: return f.read() @@ -157,7 +158,8 @@ def overwrite_schema(url): import requests req = requests.get(url) assert req.status_code == 200 - with open('plotly/package_data/plot-schema.json', 'wb') as f: + path = os.path.join(here, 'codegen', 'resources', 'plot-schema.json') + with open(path, 'wb') as f: f.write(req.content) @@ -165,12 +167,14 @@ def overwrite_bundle(url): import requests req = requests.get(url) assert req.status_code == 200 - with open('plotly/package_data/plotly.min.js', 'wb') as f: + path = os.path.join(here, 'plotly', 'package_data', 'plotly.min.js') + with open(path, 'wb') as f: f.write(req.content) def overwrite_plotlyjs_version_file(plotlyjs_version): - with open('plotly/offline/_plotlyjs_version.py', 'w') as f: + path = os.path.join(here, 'plotly', 'offline', '_plotlyjs_version.py') + with open(path, 'w') as f: f.write("""\ # DO NOT EDIT # This file is generated by the updatebundle setup.py command @@ -179,7 +183,8 @@ def overwrite_plotlyjs_version_file(plotlyjs_version): def overwrite_plotlywidget_version_file(version): - with open('plotly/_widget_version.py', 'w') as f: + path = os.path.join(here, 'plotly', '_widget_version.py') + with open(path, 'w') as f: f.write("""\ # This file is generated by the updateplotlywidgetversion setup.py command # for automated dev builds @@ -364,8 +369,7 @@ def run(self): package_json = json.load(f) # Replace version with bundle url - root = os.path.dirname(os.path.realpath(__file__)) - pieces = git_pieces_from_vcs('widget-v', root, False) + pieces = git_pieces_from_vcs('widget-v', project_root, False) pieces['dirty'] = False widget_ver = render(pieces, 'pep440')['version'] From 279d1164312c0476398da2fc51688d6fe4c0396a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:39:47 -0400 Subject: [PATCH 14/34] Move plotlywidget.json --- plotlywidget.json => plotly-package/plotlywidget.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename plotlywidget.json => plotly-package/plotlywidget.json (100%) diff --git a/plotlywidget.json b/plotly-package/plotlywidget.json similarity index 100% rename from plotlywidget.json rename to plotly-package/plotlywidget.json From 41da4a5a922ba643af8ba613aeeae3563e603939 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Mon, 3 Jun 2019 19:40:04 -0400 Subject: [PATCH 15/34] Add license file per subproject --- chart-studio-package/LICENSE.txt | 21 +++++++++++++++++++++ plotly-figure-factory-package/LICENSE.txt | 21 +++++++++++++++++++++ plotly-package/LICENSE.txt | 21 +++++++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 chart-studio-package/LICENSE.txt create mode 100644 plotly-figure-factory-package/LICENSE.txt create mode 100644 plotly-package/LICENSE.txt diff --git a/chart-studio-package/LICENSE.txt b/chart-studio-package/LICENSE.txt new file mode 100644 index 00000000000..98b37b6f421 --- /dev/null +++ b/chart-studio-package/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018 Plotly, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plotly-figure-factory-package/LICENSE.txt b/plotly-figure-factory-package/LICENSE.txt new file mode 100644 index 00000000000..98b37b6f421 --- /dev/null +++ b/plotly-figure-factory-package/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018 Plotly, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/plotly-package/LICENSE.txt b/plotly-package/LICENSE.txt new file mode 100644 index 00000000000..98b37b6f421 --- /dev/null +++ b/plotly-package/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018 Plotly, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. From 88362834f648fcdeec58bc76bae994a060f28013 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 08:24:08 -0400 Subject: [PATCH 16/34] Move figure_factory module back into plotly package and extract the geo shape files into a _plotly_geo data package --- .../LICENSE.txt | 0 .../README.md | 0 .../_plotly_geo}/__init__.py | 0 .../package_data/cb_2016_us_county_500k.dbf | Bin .../package_data/cb_2016_us_county_500k.shp | Bin .../package_data/cb_2016_us_county_500k.shx | Bin .../package_data/cb_2016_us_state_500k.dbf | Bin .../package_data/cb_2016_us_state_500k.shp | Bin .../package_data/cb_2016_us_state_500k.shx | Bin .../package_data/gz_2010_us_050_00_500k.dbf | Bin .../package_data/gz_2010_us_050_00_500k.shp | Bin .../package_data/gz_2010_us_050_00_500k.shx | Bin .../setup.py | 10 ++--- .../plotly/figure_factory/README.md | 0 .../plotly/figure_factory/_2d_density.py | 0 .../plotly/figure_factory/__init__.py | 0 .../figure_factory/_annotated_heatmap.py | 0 .../plotly/figure_factory/_bullet.py | 0 .../plotly/figure_factory/_candlestick.py | 0 .../figure_factory/_county_choropleth.py | 36 ++++++++++++------ .../plotly/figure_factory/_dendrogram.py | 0 .../plotly/figure_factory/_distplot.py | 0 .../plotly/figure_factory/_facet_grid.py | 0 .../plotly/figure_factory/_gantt.py | 0 .../plotly/figure_factory/_ohlc.py | 0 .../plotly/figure_factory/_quiver.py | 0 .../plotly/figure_factory/_scatterplot.py | 0 .../plotly/figure_factory/_streamline.py | 0 .../plotly/figure_factory/_table.py | 0 .../plotly/figure_factory/_ternary_contour.py | 0 .../plotly/figure_factory/_trisurf.py | 0 .../plotly/figure_factory/_violin.py | 0 .../plotly/figure_factory/utils.py | 0 .../test_figure_factory/__init__.py | 0 .../test_figure_factory.py | 0 .../test_optional/test_tools/__init__.py | 0 .../test_tools/test_figure_factory.py | 0 plotly-package/setup.py | 1 + 38 files changed, 29 insertions(+), 18 deletions(-) rename {plotly-figure-factory-package => plotly-geo-package}/LICENSE.txt (100%) rename {plotly-figure-factory-package => plotly-geo-package}/README.md (100%) rename {plotly-figure-factory-package/plotly => plotly-geo-package/_plotly_geo}/__init__.py (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_county_500k.dbf (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_county_500k.shp (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_county_500k.shx (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_state_500k.dbf (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_state_500k.shp (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/cb_2016_us_state_500k.shx (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/gz_2010_us_050_00_500k.dbf (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/gz_2010_us_050_00_500k.shp (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-geo-package/_plotly_geo}/package_data/gz_2010_us_050_00_500k.shx (100%) rename {plotly-figure-factory-package => plotly-geo-package}/setup.py (80%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/README.md (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_2d_density.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/__init__.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_annotated_heatmap.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_bullet.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_candlestick.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_county_choropleth.py (97%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_dendrogram.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_distplot.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_facet_grid.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_gantt.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_ohlc.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_quiver.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_scatterplot.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_streamline.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_table.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_ternary_contour.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_trisurf.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/_violin.py (100%) rename {plotly-figure-factory-package => plotly-package}/plotly/figure_factory/utils.py (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-package/plotly}/tests/test_optional/test_figure_factory/__init__.py (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-package/plotly}/tests/test_optional/test_figure_factory/test_figure_factory.py (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-package/plotly}/tests/test_optional/test_tools/__init__.py (100%) rename {plotly-figure-factory-package/plotly/figure_factory => plotly-package/plotly}/tests/test_optional/test_tools/test_figure_factory.py (100%) diff --git a/plotly-figure-factory-package/LICENSE.txt b/plotly-geo-package/LICENSE.txt similarity index 100% rename from plotly-figure-factory-package/LICENSE.txt rename to plotly-geo-package/LICENSE.txt diff --git a/plotly-figure-factory-package/README.md b/plotly-geo-package/README.md similarity index 100% rename from plotly-figure-factory-package/README.md rename to plotly-geo-package/README.md diff --git a/plotly-figure-factory-package/plotly/__init__.py b/plotly-geo-package/_plotly_geo/__init__.py similarity index 100% rename from plotly-figure-factory-package/plotly/__init__.py rename to plotly-geo-package/_plotly_geo/__init__.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.dbf b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.dbf similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.dbf rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.dbf diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shp b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.shp similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shp rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.shp diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shx b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.shx similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_county_500k.shx rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_county_500k.shx diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.dbf b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.dbf similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.dbf rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.dbf diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shp b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.shp similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shp rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.shp diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shx b/plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.shx similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/cb_2016_us_state_500k.shx rename to plotly-geo-package/_plotly_geo/package_data/cb_2016_us_state_500k.shx diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.dbf b/plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.dbf similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.dbf rename to plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.dbf diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shp b/plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.shp similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shp rename to plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.shp diff --git a/plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shx b/plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.shx similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/package_data/gz_2010_us_050_00_500k.shx rename to plotly-geo-package/_plotly_geo/package_data/gz_2010_us_050_00_500k.shx diff --git a/plotly-figure-factory-package/setup.py b/plotly-geo-package/setup.py similarity index 80% rename from plotly-figure-factory-package/setup.py rename to plotly-geo-package/setup.py index 3cbac7cb844..d9d92b00fdf 100644 --- a/plotly-figure-factory-package/setup.py +++ b/plotly-geo-package/setup.py @@ -9,7 +9,7 @@ def readme(): setup( - name="plotly-figure-factory", + name="plotly-geo", version="1.0.0a1", author="Chris P", author_email="chris@plot.ly", @@ -17,7 +17,7 @@ def readme(): maintainer_email="jon@plot.ly", url="https://plot.ly/python/", project_urls={"Github": "https://github.com/plotly/plotly.py"}, - description="An open-source, interactive graphing library for Python", + description="", long_description=readme(), long_description_content_type="text/markdown", classifiers=[ @@ -34,9 +34,7 @@ def readme(): ], license="MIT", packages=[ - "plotly.figure_factory", + "_plotly_geo", ], - package_data={'plotly.figure_factory': ['package_data/*']}, - install_requires=["plotly", "six"], - zip_safe=False, + package_data={'_plotly_geo': ['package_data/*']}, ) diff --git a/plotly-figure-factory-package/plotly/figure_factory/README.md b/plotly-package/plotly/figure_factory/README.md similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/README.md rename to plotly-package/plotly/figure_factory/README.md diff --git a/plotly-figure-factory-package/plotly/figure_factory/_2d_density.py b/plotly-package/plotly/figure_factory/_2d_density.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_2d_density.py rename to plotly-package/plotly/figure_factory/_2d_density.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/__init__.py b/plotly-package/plotly/figure_factory/__init__.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/__init__.py rename to plotly-package/plotly/figure_factory/__init__.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_annotated_heatmap.py b/plotly-package/plotly/figure_factory/_annotated_heatmap.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_annotated_heatmap.py rename to plotly-package/plotly/figure_factory/_annotated_heatmap.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_bullet.py b/plotly-package/plotly/figure_factory/_bullet.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_bullet.py rename to plotly-package/plotly/figure_factory/_bullet.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_candlestick.py b/plotly-package/plotly/figure_factory/_candlestick.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_candlestick.py rename to plotly-package/plotly/figure_factory/_candlestick.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py b/plotly-package/plotly/figure_factory/_county_choropleth.py similarity index 97% rename from plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py rename to plotly-package/plotly/figure_factory/_county_choropleth.py index 2cfe285b807..d4cb015409e 100644 --- a/plotly-figure-factory-package/plotly/figure_factory/_county_choropleth.py +++ b/plotly-package/plotly/figure_factory/_county_choropleth.py @@ -17,20 +17,21 @@ shapely = optional_imports.get_module('shapely') shapefile = optional_imports.get_module('shapefile') gp = optional_imports.get_module('geopandas') +_plotly_geo = optional_imports.get_module('_plotly_geo') def _create_us_counties_df(st_to_state_name_dict, state_to_st_dict): + # URLS - abs_file_path = os.path.realpath(__file__) - abs_dir_path = os.path.dirname(abs_file_path) + abs_dir_path = os.path.realpath(_plotly_geo.__file__) - abs_plotly_dir_path = os.path.dirname(abs_dir_path) + abs_plotly_geo_path = os.path.dirname(abs_dir_path) abs_package_data_dir_path = os.path.join( - abs_plotly_dir_path, 'figure_factory', 'package_data') + abs_plotly_geo_path, 'package_data') shape_pre2010 = 'gz_2010_us_050_00_500k.shp' - shape_pre2010 = os.path.join(abs_package_data_dir_path, shape_pre2010) + shape_pre2010 = os.path.join(abs_package_data_dir_path, shape_pre2010) df_shape_pre2010 = gp.read_file(shape_pre2010) df_shape_pre2010['FIPS'] = (df_shape_pre2010['STATE'] + @@ -38,9 +39,8 @@ def _create_us_counties_df(st_to_state_name_dict, state_to_st_dict): df_shape_pre2010['FIPS'] = pd.to_numeric(df_shape_pre2010['FIPS']) states_path = 'cb_2016_us_state_500k.shp' - states_path = os.path.join(abs_package_data_dir_path, states_path) + states_path = os.path.join(abs_package_data_dir_path, states_path) - # state df df_state = gp.read_file(states_path) df_state = df_state[['STATEFP', 'NAME', 'geometry']] df_state = df_state.rename(columns={'NAME': 'STATE_NAME'}) @@ -561,15 +561,27 @@ def create_choropleth(fips, values, scope=['usa'], binning_endpoints=None, ``` """ # ensure optional modules imported + if not _plotly_geo: + raise ValueError(""" +The create_choropleth figure factory requires the plotly-geo package. +Install using pip with: + +$ pip install plotly-geo + +Or, install using conda with + +$ conda install -c plotly plotly-geo +""") + if not gp or not shapefile or not shapely: raise ImportError( "geopandas, pyshp and shapely must be installed for this figure " "factory.\n\nRun the following commands to install the correct " "versions of the following modules:\n\n" "```\n" - "pip install geopandas==0.3.0\n" - "pip install pyshp==1.2.10\n" - "pip install shapely==1.6.3\n" + "$ pip install geopandas==0.3.0\n" + "$ pip install pyshp==1.2.10\n" + "$ pip install shapely==1.6.3\n" "```\n" "If you are using Windows, follow this post to properly " "install geopandas and dependencies:" @@ -577,8 +589,8 @@ def create_choropleth(fips, values, scope=['usa'], binning_endpoints=None, "If you are using Anaconda, do not use PIP to install the " "packages above. Instead use conda to install them:\n\n" "```\n" - "conda install plotly\n" - "conda install geopandas\n" + "$ conda install plotly\n" + "$ conda install geopandas\n" "```" ) diff --git a/plotly-figure-factory-package/plotly/figure_factory/_dendrogram.py b/plotly-package/plotly/figure_factory/_dendrogram.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_dendrogram.py rename to plotly-package/plotly/figure_factory/_dendrogram.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_distplot.py b/plotly-package/plotly/figure_factory/_distplot.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_distplot.py rename to plotly-package/plotly/figure_factory/_distplot.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_facet_grid.py b/plotly-package/plotly/figure_factory/_facet_grid.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_facet_grid.py rename to plotly-package/plotly/figure_factory/_facet_grid.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_gantt.py b/plotly-package/plotly/figure_factory/_gantt.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_gantt.py rename to plotly-package/plotly/figure_factory/_gantt.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_ohlc.py b/plotly-package/plotly/figure_factory/_ohlc.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_ohlc.py rename to plotly-package/plotly/figure_factory/_ohlc.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_quiver.py b/plotly-package/plotly/figure_factory/_quiver.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_quiver.py rename to plotly-package/plotly/figure_factory/_quiver.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_scatterplot.py b/plotly-package/plotly/figure_factory/_scatterplot.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_scatterplot.py rename to plotly-package/plotly/figure_factory/_scatterplot.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_streamline.py b/plotly-package/plotly/figure_factory/_streamline.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_streamline.py rename to plotly-package/plotly/figure_factory/_streamline.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_table.py b/plotly-package/plotly/figure_factory/_table.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_table.py rename to plotly-package/plotly/figure_factory/_table.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_ternary_contour.py b/plotly-package/plotly/figure_factory/_ternary_contour.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_ternary_contour.py rename to plotly-package/plotly/figure_factory/_ternary_contour.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_trisurf.py b/plotly-package/plotly/figure_factory/_trisurf.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_trisurf.py rename to plotly-package/plotly/figure_factory/_trisurf.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/_violin.py b/plotly-package/plotly/figure_factory/_violin.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/_violin.py rename to plotly-package/plotly/figure_factory/_violin.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/utils.py b/plotly-package/plotly/figure_factory/utils.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/utils.py rename to plotly-package/plotly/figure_factory/utils.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/__init__.py b/plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/__init__.py rename to plotly-package/plotly/tests/test_optional/test_figure_factory/__init__.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/test_figure_factory.py b/plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_figure_factory/test_figure_factory.py rename to plotly-package/plotly/tests/test_optional/test_figure_factory/test_figure_factory.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/__init__.py b/plotly-package/plotly/tests/test_optional/test_tools/__init__.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/__init__.py rename to plotly-package/plotly/tests/test_optional/test_tools/__init__.py diff --git a/plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/test_figure_factory.py b/plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py similarity index 100% rename from plotly-figure-factory-package/plotly/figure_factory/tests/test_optional/test_tools/test_figure_factory.py rename to plotly-package/plotly/tests/test_optional/test_tools/test_figure_factory.py diff --git a/plotly-package/setup.py b/plotly-package/setup.py index f8ed24bee4e..ecc5d6d9c8a 100644 --- a/plotly-package/setup.py +++ b/plotly-package/setup.py @@ -424,6 +424,7 @@ def run(self): 'plotly.matplotlylib', 'plotly.matplotlylib.mplexporter', 'plotly.matplotlylib.mplexporter.renderers', + 'plotly.figure_factory', '_plotly_utils', '_plotly_future_', ] + graph_objs_packages + validator_packages, From 3346a242dc2c376d2f234bf2e32dc0295397c360 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:05:36 -0400 Subject: [PATCH 17/34] Update tox testing config for new directory structure --- .circleci/config.yml | 22 ++++---- chart-studio-package/setup.py | 2 +- chart-studio-package/tox.ini | 85 +++++++++++++++++++++++++++++++ tox.ini => plotly-package/tox.ini | 25 +-------- 4 files changed, 98 insertions(+), 36 deletions(-) create mode 100644 chart-studio-package/tox.ini rename tox.ini => plotly-package/tox.ini (88%) diff --git a/.circleci/config.yml b/.circleci/config.yml index aca6aeeffce..02be8d93ab3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py27-core' + command: 'cd plotly-package; tox -e py27-core' no_output_timeout: 20m python-3.5-core: @@ -31,7 +31,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py35-core' + command: 'cd plotly-package; tox -e py35-core' no_output_timeout: 20m python-3.6-core: @@ -47,7 +47,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py36-core' + command: 'cd plotly-package; tox -e py36-core' no_output_timeout: 20m python-3.7-core: @@ -63,7 +63,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py37-core' + command: 'cd plotly-package; tox -e py37-core' no_output_timeout: 20m # Optional @@ -84,7 +84,7 @@ jobs: no_output_timeout: 20m - run: name: Test with tox - command: 'tox -e py27-optional' + command: 'cd plotly-package; tox -e py27-optional' no_output_timeout: 20m python-3.5-optional: @@ -104,7 +104,7 @@ jobs: no_output_timeout: 20m - run: name: Test with tox - command: 'tox -e py35-optional' + command: 'cd plotly-package; tox -e py35-optional' no_output_timeout: 20m python-3.6-optional: @@ -124,7 +124,7 @@ jobs: no_output_timeout: 20m - run: name: Test with tox - command: 'tox -e py36-optional' + command: 'cd plotly-package; tox -e py36-optional' no_output_timeout: 20m python-3.7-optional: @@ -144,7 +144,7 @@ jobs: no_output_timeout: 20m - run: name: Test with tox - command: 'tox -e py37-optional' + command: 'cd plotly-package; tox -e py37-optional' no_output_timeout: 20m # Plot.ly @@ -161,7 +161,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py27-plot_ly' + command: 'cd chart-studio-package; tox -e py27-plot_ly' no_output_timeout: 20m python-3.5-plot_ly: @@ -177,7 +177,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py35-plot_ly' + command: 'cd chart-studio-package; tox -e py35-plot_ly' no_output_timeout: 20m python-3.7-plot_ly: @@ -193,7 +193,7 @@ jobs: command: 'sudo pip install tox' - run: name: Test with tox - command: 'tox -e py37-plot_ly' + command: 'cd chart-studio-package; tox -e py37-plot_ly' no_output_timeout: 20m python-2-7-orca: diff --git a/chart-studio-package/setup.py b/chart-studio-package/setup.py index 301cac86e83..a4527fddcbd 100644 --- a/chart-studio-package/setup.py +++ b/chart-studio-package/setup.py @@ -10,7 +10,7 @@ def readme(): setup( name="chart-studio", - version="4.0.0a1", + version="1.0.0a1", author="Chris P", author_email="chris@plot.ly", maintainer="Jon Mease", diff --git a/chart-studio-package/tox.ini b/chart-studio-package/tox.ini new file mode 100644 index 00000000000..d08923d17a9 --- /dev/null +++ b/chart-studio-package/tox.ini @@ -0,0 +1,85 @@ +; Tox is a testing tool that manages virtualenvs for testing multiple Python +; environments in a consistent/controlled way. + +; SETTING ENVIRONMENT VARIABLES AND TOX TESTING VARIABLES +; +; You can limit tox testing to certain environments via the `-e` (envlist) +; command line option: +; tox -e py27-core,py34-core +; OR, you can just set the `TOXENV` environment variable, which is handy: +; TOXENV=py27-core,py34-core +; +; Integrating with the virtualenvs in Circle CI is a bit of a pain. For +; whatever reason the "executable" `python35` (at the time of writing) cannot +; be activated directly. Instead the circle.yml file specifies the actual +; binary directly. Because of this, you too have to set the following env +; variables: +; PLOTLY_TOX_PYTHON_27=python2.7 +; PLOTLY_TOX_PYTHON_34=python3.4 +; ... +; These will be specific to your machine and may not look like the ones above. +; If you're not testing with all the python versions (see TOXENV above), +; there's no need to install and map other versions. + +; PASSING ADDITONAL ARGUMENTS TO TEST COMMANDS +; The {posargs} is tox-specific and passes in any command line args after `--`. +; For example, given the testing command in *this* file: +; nosetests {posargs} -x plotly/tests/test_core +; +; The following command: +; tox -- -a '!slow' +; +; Tells tox to call: +; nosetests -a '!slow' -x plotly/tests/test_core +; +; Which is a nice way to skip slow tests for faster testing cycles. + +[tox] +; The py{A,B,C}-{X,Y} generates a matrix of envs: +; pyA-X,pyA-Y,pyB-X,pyB-Y,pyC-X,pyC-Y +envlist = py{27,34,37}-plot_ly + +; Note that envs can be targeted by deps using the : dep syntax. +; Only one dep is allowed per line as of the time of writing. The +; can be a `-` (hyphen) concatenated string of the environments to target +; with the given dep. + +; These commands are general and will be run for *all* environments. +[testenv] +passenv=PLOTLY_TOX_* +whitelist_externals= + mkdir +deps= + coverage==4.3.1 + decorator==4.0.9 + mock==2.0.0 + nose==1.3.7 + requests==2.12.4 + six==1.10.0 + pytz==2016.10 + retrying==1.3.3 + pytest==3.5.1 + backports.tempfile==1.0 + plot_ly: pandas==0.23.2 + plot_ly: numpy==1.14.3 + plot_ly: ipywidgets==7.2.0 + plot_ly: matplotlib==2.2.3 + +; Plot.ly environments +[testenv:py27-plot_ly] +basepython={env:PLOTLY_TOX_PYTHON_27:} +commands= + python --version + nosetests {posargs} -x chart_studio/tests/ + +[testenv:py35-plot_ly] +basepython={env:PLOTLY_TOX_PYTHON_35:} +commands= + python --version + nosetests {posargs} -x chart_studio/tests/ + +[testenv:py37-plot_ly] +basepython={env:PLOTLY_TOX_PYTHON_37:} +commands= + python --version + nosetests {posargs} -x chart_studio/tests/ diff --git a/tox.ini b/plotly-package/tox.ini similarity index 88% rename from tox.ini rename to plotly-package/tox.ini index e0d19d64ac6..5d65ad95f0f 100644 --- a/tox.ini +++ b/plotly-package/tox.ini @@ -37,7 +37,7 @@ [tox] ; The py{A,B,C}-{X,Y} generates a matrix of envs: ; pyA-X,pyA-Y,pyB-X,pyB-Y,pyC-X,pyC-Y -envlist = py{27,34,35,36,37}-{core,optional},py{27,34,37}-plot_ly +envlist = py{27,34,35,36,37}-{core,optional},py{27,34,37} ; Note that envs can be targeted by deps using the : dep syntax. ; Only one dep is allowed per line as of the time of writing. The @@ -74,10 +74,6 @@ deps= optional: matplotlib==2.2.3 optional: xarray==0.10.9 optional: scikit-image==0.13.1 - plot_ly: pandas==0.23.2 - plot_ly: numpy==1.14.3 - plot_ly: ipywidgets==7.2.0 - plot_ly: matplotlib==2.2.3 ; CORE ENVIRONMENTS [testenv:py27-core] @@ -150,22 +146,3 @@ commands= nosetests {posargs} -x plotly/tests/test_optional pytest _plotly_utils/tests/ pytest plotly/tests/test_io - -; Plot.ly environments -[testenv:py27-plot_ly] -basepython={env:PLOTLY_TOX_PYTHON_27:} -commands= - python --version - nosetests {posargs} -x chart_studio/tests/ - -[testenv:py35-plot_ly] -basepython={env:PLOTLY_TOX_PYTHON_35:} -commands= - python --version - nosetests {posargs} -x chart_studio/tests/ - -[testenv:py37-plot_ly] -basepython={env:PLOTLY_TOX_PYTHON_37:} -commands= - python --version - nosetests {posargs} -x chart_studio/tests/ From 5f2b0dd9d1e788c357c83e8cbb392a559cdf4988 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:16:44 -0400 Subject: [PATCH 18/34] Remove legacy graph_reference module --- plotly-package/plotly/graph_reference.py | 600 ------------------ .../test_graph_objs/test_graph_objs.py | 29 +- .../test_graph_reference/__init__.py | 5 - .../test_graph_reference.py | 199 ------ 4 files changed, 1 insertion(+), 832 deletions(-) delete mode 100644 plotly-package/plotly/graph_reference.py delete mode 100644 plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py delete mode 100644 plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py diff --git a/plotly-package/plotly/graph_reference.py b/plotly-package/plotly/graph_reference.py deleted file mode 100644 index aa53de95317..00000000000 --- a/plotly-package/plotly/graph_reference.py +++ /dev/null @@ -1,600 +0,0 @@ -""" -This module handles accessing, storing, and managing the graph reference. - -""" -from __future__ import absolute_import - -import os -import re -import pkgutil - -import six -import json as _json - -from plotly import utils - - -# For backwards compat, we keep this list of previously known objects. -# Moving forward, we only add new trace names. -# {: {'object_name': , 'base_type': } -_BACKWARDS_COMPAT_CLASS_NAMES = { - 'AngularAxis': {'object_name': 'angularaxis', 'base_type': dict}, - 'Annotation': {'object_name': 'annotation', 'base_type': dict}, - 'Annotations': {'object_name': 'annotations', 'base_type': list}, - 'Area': {'object_name': 'area', 'base_type': dict}, - 'Bar': {'object_name': 'bar', 'base_type': dict}, - 'Box': {'object_name': 'box', 'base_type': dict}, - 'ColorBar': {'object_name': 'colorbar', 'base_type': dict}, - 'Contour': {'object_name': 'contour', 'base_type': dict}, - 'Contours': {'object_name': 'contours', 'base_type': dict}, - 'Data': {'object_name': 'data', 'base_type': list}, - 'ErrorX': {'object_name': 'error_x', 'base_type': dict}, - 'ErrorY': {'object_name': 'error_y', 'base_type': dict}, - 'ErrorZ': {'object_name': 'error_z', 'base_type': dict}, - 'Figure': {'object_name': 'figure', 'base_type': dict}, - 'Font': {'object_name': 'font', 'base_type': dict}, - 'Frames': {'object_name': 'frames', 'base_type': list}, - 'Heatmap': {'object_name': 'heatmap', 'base_type': dict}, - 'Histogram': {'object_name': 'histogram', 'base_type': dict}, - 'Histogram2d': {'object_name': 'histogram2d', 'base_type': dict}, - 'Histogram2dContour': {'object_name': 'histogram2dcontour', - 'base_type': dict}, - 'Histogram2dcontour': {'object_name': 'histogram2dcontour', - 'base_type': dict}, - 'Layout': {'object_name': 'layout', 'base_type': dict}, - 'Legend': {'object_name': 'legend', 'base_type': dict}, - 'Line': {'object_name': 'line', 'base_type': dict}, - 'Margin': {'object_name': 'margin', 'base_type': dict}, - 'Marker': {'object_name': 'marker', 'base_type': dict}, - 'RadialAxis': {'object_name': 'radialaxis', 'base_type': dict}, - 'Scatter': {'object_name': 'scatter', 'base_type': dict}, - 'Scatter3d': {'object_name': 'scatter3d', 'base_type': dict}, - 'Scene': {'object_name': 'scene', 'base_type': dict}, - 'Stream': {'object_name': 'stream', 'base_type': dict}, - 'Surface': {'object_name': 'surface', 'base_type': dict}, - 'Trace': {'object_name': None, 'base_type': dict}, - 'XAxis': {'object_name': 'xaxis', 'base_type': dict}, - 'XBins': {'object_name': 'xbins', 'base_type': dict}, - 'YAxis': {'object_name': 'yaxis', 'base_type': dict}, - 'YBins': {'object_name': 'ybins', 'base_type': dict}, - 'ZAxis': {'object_name': 'zaxis', 'base_type': dict} -} - - -def get_graph_reference(): - """ - Load graph reference JSON (aka plot-schema) - - :return: (dict) The graph reference. - - """ - path = os.path.join('package_data', 'plot-schema.json') - s = pkgutil.get_data('plotly', path).decode('utf-8') - graph_reference = utils.decode_unicode(_json.loads(s)) - - # TODO: Patch in frames info until it hits streambed. See #659 - graph_reference['frames'] = { - "items": { - "frames_entry": { - "baseframe": { - "description": "The name of the frame into which this " - "frame's properties are merged before " - "applying. This is used to unify " - "properties and avoid needing to specify " - "the same values for the same properties " - "in multiple frames.", - "role": "info", - "valType": "string" - }, - "data": { - "description": "A list of traces this frame modifies. " - "The format is identical to the normal " - "trace definition.", - "role": "object", - "valType": "any" - }, - "group": { - "description": "An identifier that specifies the group " - "to which the frame belongs, used by " - "animate to select a subset of frames.", - "role": "info", - "valType": "string" - }, - "layout": { - "role": "object", - "description": "Layout properties which this frame " - "modifies. The format is identical to " - "the normal layout definition.", - "valType": "any" - }, - "name": { - "description": "A label by which to identify the frame", - "role": "info", - "valType": "string" - }, - "role": "object", - "traces": { - "description": "A list of trace indices that identify " - "the respective traces in the data " - "attribute", - "role": "info", - "valType": "info_array" - } - } - }, - "role": "object" - } - - return graph_reference - - -def string_to_class_name(string): - """ - Single function to handle turning object names into class names. - - GRAPH_REFERENCE has names like `error_y`, which we'll turn into `ErrorY`. - - :param (str) string: A string that we'll turn into a class name string. - :return: (str) - - """ - - # capitalize first letter - string = re.sub(r'[A-Za-z]', lambda m: m.group().title(), string, count=1) - - # replace `*_` with `*` E.g., `Error_x` --> `ErrorX` - string = re.sub(r'_[A-Za-z0-9]+', lambda m: m.group()[1:].title(), string) - - return str(string) - - -def object_name_to_class_name(object_name): - """Not all objects have classes auto-generated.""" - if object_name in TRACE_NAMES: - return string_to_class_name(object_name) - - if object_name in OBJECT_NAME_TO_CLASS_NAME: - return OBJECT_NAME_TO_CLASS_NAME[object_name] - - if object_name in ARRAYS: - return 'list' - else: - return 'dict' - - -def get_attributes_dicts(object_name, parent_object_names=()): - """ - Returns *all* attribute information given the context of parents. - - The response has the form: - { - ('some', 'path'): {}, - ('some', 'other', 'path'): {}, - ... - 'additional_attributes': {} - } - - There may be any number of paths mapping to attribute dicts. There will be - one attribute dict under 'additional_attributes' which will usually be - empty. - - :param (str|unicode) object_name: The object name whose attributes we want. - :param (list[str|unicode]) parent_object_names: Names of parent objects. - :return: (dict) - - """ - object_dict = OBJECTS[object_name] - - # If we patched this object, we may have added hard-coded attrs. - additional_attributes = object_dict['additional_attributes'] - - # We should also one or more paths where attributes are defined. - attribute_paths = list(object_dict['attribute_paths']) # shallow copy - - # Map frame 'data' and 'layout' to previously-defined figure attributes. - # Examples of parent_object_names changes: - # ['figure', 'frames'] --> ['figure', 'frames'] - # ['figure', 'frames', FRAME_NAME] --> ['figure'] - # ['figure', 'frames', FRAME_NAME, 'data'] --> ['figure', 'data'] - # ['figure', 'frames', FRAME_NAME, 'layout'] --> ['figure', 'layout'] - # ['figure', 'frames', FRAME_NAME, 'foo'] --> - # ['figure', 'frames', FRAME_NAME, 'foo'] - # [FRAME_NAME, 'layout'] --> ['figure', 'layout'] - if FRAME_NAME in parent_object_names: - len_parent_object_names = len(parent_object_names) - index = parent_object_names.index(FRAME_NAME) - if len_parent_object_names == index + 1: - if object_name in ('data', 'layout'): - parent_object_names = ['figure', object_name] - elif len_parent_object_names > index + 1: - if parent_object_names[index + 1] in ('data', 'layout'): - parent_object_names = ( - ['figure'] + list(parent_object_names)[index + 1:] - ) - - # If we have parent_names, some of these attribute paths may be invalid. - for parent_object_name in reversed(parent_object_names): - if parent_object_name in ARRAYS: - continue - parent_object_dict = OBJECTS[parent_object_name] - parent_attribute_paths = parent_object_dict['attribute_paths'] - for path in list(attribute_paths): - if not _is_valid_sub_path(path, parent_attribute_paths): - attribute_paths.remove(path) - - # We return a dict mapping paths to attributes. We also add in additional - # attributes if defined. - attributes_dicts = {path: utils.get_by_path(GRAPH_REFERENCE, path) - for path in attribute_paths} - attributes_dicts['additional_attributes'] = additional_attributes - - return attributes_dicts - - -@utils.memoize() -def _get_valid_attributes(object_name, parent_object_names): - attributes = get_attributes_dicts(object_name, parent_object_names) - # These are for documentation and quick lookups. They're just strings. - valid_attributes = set() - for attributes_dict in attributes.values(): - for key, val in attributes_dict.items(): - if key not in GRAPH_REFERENCE['defs']['metaKeys']: - valid_attributes.add(key) - deprecated_attributes = attributes_dict.get('_deprecated', {}) - for key, val in deprecated_attributes.items(): - if key not in GRAPH_REFERENCE['defs']['metaKeys']: - valid_attributes.add(key) - - return valid_attributes - - -def get_valid_attributes(object_name, parent_object_names=()): - # Enforce that parent_object_names is hashable (a tuple). - return _get_valid_attributes(object_name, tuple(parent_object_names)) - - -def get_deprecated_attributes(object_name, parent_object_names=()): - attributes = get_attributes_dicts(object_name, parent_object_names) - # These are for documentation and quick lookups. They're just strings. - deprecated_attributes = set() - for attributes_dict in attributes.values(): - - deprecated_attributes_dict = attributes_dict.get('_deprecated', {}) - for key, val in deprecated_attributes_dict.items(): - if key not in GRAPH_REFERENCE['defs']['metaKeys']: - deprecated_attributes.add(key) - - return deprecated_attributes - - -def get_subplot_attributes(object_name, parent_object_names=()): - attributes = get_attributes_dicts(object_name, parent_object_names) - # These are for documentation and quick lookups. They're just strings. - subplot_attributes = set() - for attributes_dict in attributes.values(): - - for key, val in attributes_dict.items(): - if key not in GRAPH_REFERENCE['defs']['metaKeys']: - if isinstance(val, dict) and val.get('_isSubplotObj'): - subplot_attributes.add(key) - - deprecated_attributes = attributes_dict.get('_deprecated', {}) - for key, val in deprecated_attributes.items(): - if key not in GRAPH_REFERENCE['defs']['metaKeys']: - if isinstance(val, dict) and val.get('_isSubplotObj'): - subplot_attributes.add(key) - - return subplot_attributes - - -def attribute_path_to_object_names(attribute_container_path): - """ - Return a location within a figure from a path existing in GRAPH_REFERENCE. - - Users don't need to know about GRAPH_REFERENCE, so yielding information - about paths there would only be confusing. Also, the implementation and - structure there may change, but figure structure won't. - - :param (tuple[str]) attribute_container_path: An object should exist here. - - :return: (tuple[str]) A tuple of object names: - - Example: - - In: ('traces', 'pie', 'attributes', 'marker') - Out: ('figure', 'data', 'pie', 'marker') - - """ - object_names = ['figure'] # this is always the case - - if 'layout' in attribute_container_path: - - for path_part in attribute_container_path: - - if path_part in OBJECTS: - object_names.append(path_part) - - if path_part in ARRAYS: - object_names.append(path_part) - object_names.append(path_part[:-1]) - - elif 'layoutAttributes' in attribute_container_path: - - object_names.append('layout') - - start_index = attribute_container_path.index('layoutAttributes') - for path_part in attribute_container_path[start_index:]: - - if path_part in OBJECTS: - object_names.append(path_part) - - if path_part in ARRAYS: - object_names.append(path_part) - object_names.append(path_part[:-1]) - - else: - - # assume it's in 'traces' - object_names.append('data') - for path_part in attribute_container_path: - - if path_part in OBJECTS: - object_names.append(path_part) - - if path_part in ARRAYS: - object_names.append(path_part) - object_names.append(path_part[:-1]) - - return tuple(object_names) - - -@utils.memoize() -def _get_role(object_name, attribute, value_type, parent_object_names=()): - """Private, more easily memoized version of get_role.""" - if attribute == 'type' and object_name in TRACE_NAMES: - return 'info' - attributes_dicts = get_attributes_dicts(object_name, parent_object_names) - matches = [] - for attributes_dict in attributes_dicts.values(): - - for key, val in attributes_dict.items(): - if key == attribute: - matches.append(val) - - for key, val in attributes_dict.get('_deprecated', {}).items(): - if key == attribute: - matches.append(val) - - roles = [] - for match in matches: - role = match['role'] - array_ok = match.get('arrayOk') - if array_ok and value_type == 'array': - role = 'data' - roles.append(role) - - # TODO: this is ambiguous until the figure is in place... - if 'data' in roles: - role = 'data' - else: - role = roles[0] - return role - - -def get_role(object_name, attribute, value=None, parent_object_names=()): - """ - Values have types associated with them based on graph_reference. - - 'data' type values are always kept - 'style' values are kept if they're sequences (but not strings) - - :param (str) object_name: The name of the object containing 'attribute'. - :param (str) attribute: The attribute we want the `role` of. - :param (*) value: If the value is an array, the return can be different. - :param parent_object_names: An iterable of obj names from graph reference. - :returns: (str) This will be 'data', 'style', or 'info'. - - """ - if value is None: - value_type = 'none' - elif isinstance(value, dict): - value_type = 'dict' - elif isinstance(value, six.string_types): - value_type = 'string' - elif hasattr(value, '__iter__'): - value_type = 'array' - else: - value_type = 'unknown' - - # Enforce that parent_object_names is hashable (a tuple). - return _get_role(object_name, attribute, value_type, - tuple(parent_object_names)) - - -def _is_valid_sub_path(path, parent_paths): - """ - Check if a sub path is valid given an iterable of parent paths. - - :param (tuple[str]) path: The path that may be a sub path. - :param (list[tuple]) parent_paths: The known parent paths. - :return: (bool) - - Examples: - - * ('a', 'b', 'c') is a valid subpath of ('a', ) - * ('a', 'd') is not a valid subpath of ('b', ) - * ('a', ) is not a valid subpath of ('a', 'b') - * ('anything',) is a valid subpath of () - - """ - if not parent_paths: - return True - for parent_path in parent_paths: - if path[:len(parent_path)] == parent_path: - return True - return False - - -def _get_objects(): - """ - Create a reorganization of graph reference which organizes by object name. - - Each object can have *many* different definitions in the graph reference. - These possibilities get narrowed down when we have contextual information - about parent objects. For instance, Marker in Scatter has a different - definition than Marker in Pie. However, we need Marker, Scatter, and Pie - to exist on their own as well. - - Each value has the form: - { - 'meta_paths': [], - 'attribute_paths': [], - 'additional_attributes': {} - } - - * meta_paths describes the top-most path where this object is defined - * attribute_paths describes all the locations where attributes exist - * additional_attributes can be used to hard-code (patch) the plot schema - - :return: (dict) - - """ - objects = {} - for node, path in utils.node_generator(GRAPH_REFERENCE): - - if any([key in path for key in GRAPH_REFERENCE['defs']['metaKeys']]): - continue # objects don't exist under nested meta keys - if node.get('role') != 'object': - continue - if 'items' in node: - continue - - object_name = path[-1] - if object_name not in objects: - objects[object_name] = {'meta_paths': [], 'attribute_paths': [], - 'additional_attributes': {}} - - if node.get('attributes'): - objects[object_name]['attribute_paths'].append( - path + ('attributes', ) - ) - else: - objects[object_name]['attribute_paths'].append(path) - - objects[object_name]['meta_paths'].append(path) - - return objects - - -def _patch_objects(): - """Things like Layout, Figure, and Data need to be included.""" - layout_attribute_paths = [] - for node, path in utils.node_generator(GRAPH_REFERENCE): - if any([key in path for key in GRAPH_REFERENCE['defs']['metaKeys']]): - continue # objects don't exist under nested meta keys - - if path and path[-1] == 'layoutAttributes': - layout_attribute_paths.append(path) - - for trace_name in TRACE_NAMES: - OBJECTS[trace_name] = { - 'meta_paths': [('traces', trace_name)], - 'attribute_paths': [('traces', trace_name, 'attributes')], - 'additional_attributes': {} - } - - OBJECTS['layout'] = {'meta_paths': [('layout', )], - 'attribute_paths': layout_attribute_paths, - 'additional_attributes': {}} - - figure_attributes = { - 'layout': {'role': 'object'}, - 'data': {'role': 'object', '_isLinkedToArray': True}, - 'frames': {'role': 'object', '_isLinkedToArray': True} - } - OBJECTS['figure'] = {'meta_paths': [], - 'attribute_paths': [], - 'additional_attributes': figure_attributes} - - -def _get_arrays(): - """Very few arrays, but this dict is the complement of OBJECTS.""" - arrays = {} - for node, path in utils.node_generator(GRAPH_REFERENCE): - - if any([key in path for key in GRAPH_REFERENCE['defs']['metaKeys']]): - continue # objects don't exist under nested meta keys - if node.get('role') != 'object': - continue - if 'items' not in node: - continue - - object_name = path[-1] - if object_name not in arrays: - items = node['items'] - - # If items is a dict, it's anyOf them. - if isinstance(items, dict): - item_names = list(items.keys()) - else: - item_names = [object_name[:-1]] - arrays[object_name] = {'meta_paths': [path], 'items': item_names} - - return arrays - - -def _patch_arrays(): - """Adds information on our eventual Data array.""" - ARRAYS['data'] = {'meta_paths': [('traces', )], 'items': list(TRACE_NAMES)} - - -def _get_classes(): - """ - We eventually make classes out of the objects in GRAPH_REFERENCE. - - :return: (dict) A mapping of class names to object names. - - """ - classes = {} - - # add all the objects we had before, but mark them if they no longer - # exist in the graph reference - backwards_compat_object_names = set() - for class_name, class_dict in _BACKWARDS_COMPAT_CLASS_NAMES.items(): - object_name = class_dict['object_name'] - backwards_compat_object_names.add(object_name) - base_type = class_dict['base_type'] - if object_name in OBJECTS or object_name in ARRAYS: - classes[class_name] = {'object_name': object_name, - 'base_type': base_type} - else: - classes[class_name] = {'object_name': None, 'base_type': base_type} - - # always keep the trace dicts up to date - for object_name in TRACE_NAMES: - if object_name not in backwards_compat_object_names: - # Only add trace if it wasn't included in _BACKWARDS_COMPAT_CLASS_NAMES - class_name = string_to_class_name(object_name) - classes[class_name] = {'object_name': object_name, 'base_type': dict} - - return classes - - -# The ordering here is important. -GRAPH_REFERENCE = get_graph_reference() - -FRAME_NAME = list(GRAPH_REFERENCE['frames']['items'].keys())[0] - -# See http://blog.labix.org/2008/06/27/watch-out-for-listdictkeys-in-python-3 -TRACE_NAMES = list(GRAPH_REFERENCE['traces'].keys()) - -OBJECTS = _get_objects() -_patch_objects() -ARRAYS = _get_arrays() -_patch_arrays() - -CLASSES = _get_classes() - -OBJECT_NAME_TO_CLASS_NAME = {class_dict['object_name']: class_name - for class_name, class_dict in CLASSES.items() - if class_dict['object_name'] is not None} diff --git a/plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py b/plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py index 529cc3781c8..004ef74e8ee 100644 --- a/plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py +++ b/plotly-package/plotly/tests/test_core/test_graph_objs/test_graph_objs.py @@ -1,7 +1,7 @@ from unittest import TestCase import plotly.graph_objs as go -import plotly.graph_reference as gr + OLD_CLASS_NAMES = ['AngularAxis', 'Annotation', 'Annotations', 'Area', 'Bar', 'Box', 'ColorBar', 'Contour', 'Contours', @@ -115,30 +115,3 @@ def test_legacy_title_props_remapped(self): self.assertIn('titlefont', obj) self.assertIn('titlefont.family', obj) self.assertIn('titlefont', iter(obj)) - - -class TestGraphObjs(TestCase): - - def test_traces_should_be_defined(self): - - # we *always* want to create classes for traces - - class_names = [gr.string_to_class_name(object_name) - for object_name in gr.TRACE_NAMES] - for class_name in class_names: - self.assertIn(class_name, go.__dict__.keys()) - - def test_no_new_classes(self): - - # for maintenance reasons, we don't want to generate new class defs - - expected_class_names = {gr.string_to_class_name(object_name) - for object_name in gr.TRACE_NAMES} - expected_class_names.update(OLD_CLASS_NAMES) - - # assume that CapitalCased keys are the classes we defined - current_class_names = {key for key in go.__dict__.keys() - if key[0].isupper()} - if 'FigureWidget' in go.__dict__.keys(): - expected_class_names.add('FigureWidget') - self.assertEqual(current_class_names, expected_class_names) diff --git a/plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py b/plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py deleted file mode 100644 index 1118eb01e82..00000000000 --- a/plotly-package/plotly/tests/test_core/test_graph_reference/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -import warnings - - -def setup_package(): - warnings.filterwarnings('ignore') diff --git a/plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py b/plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py deleted file mode 100644 index f16d1521673..00000000000 --- a/plotly-package/plotly/tests/test_core/test_graph_reference/test_graph_reference.py +++ /dev/null @@ -1,199 +0,0 @@ -""" -A module to test functionality related to *using* the graph reference. - -""" -from __future__ import absolute_import - -from unittest import TestCase - -from plotly import graph_reference as gr -from plotly.graph_reference import string_to_class_name, get_role - -FAKE_API_DOMAIN = 'https://api.am.not.here.ly' - - -class TestStringToClass(TestCase): - - def test_capitalize_first_letter(self): - - object_names = ['marker', 'line', 'scatter'] - class_names = ['Marker', 'Line', 'Scatter'] - for object_name, class_name in zip(object_names, class_names): - self.assertEqual(string_to_class_name(object_name), class_name) - - def test_capitalize_after_underscore(self): - - object_names = ['error_y', 'error_x'] - class_names = ['ErrorY', 'ErrorX'] - for object_name, class_name in zip(object_names, class_names): - self.assertEqual(string_to_class_name(object_name), class_name) - - -class TestObjectNameToClassName(TestCase): - - def test_backwards_compat(self): - - # Old classes should still be shown to users. - - test_tuples = [ - ('angularaxis', 'AngularAxis'), - ('annotation', 'Annotation'), - ('annotations', 'Annotations'), - ('area', 'Area'), - ('colorbar', 'ColorBar'), - ('contour', 'Contour'), - ('contours', 'Contours'), - ('data', 'Data'), - ('error_x', 'ErrorX'), - ('error_y', 'ErrorY'), - ('error_z', 'ErrorZ'), - ('figure', 'Figure'), - ('font', 'Font'), - ('layout', 'Layout'), - ('legend', 'Legend'), - ('margin', 'Margin'), - ('marker', 'Marker'), - ('radialaxis', 'RadialAxis'), - ('scene', 'Scene'), - ('stream', 'Stream'), - ('xaxis', 'XAxis'), - ('xbins', 'XBins'), - ('yaxis', 'YAxis'), - ('ybins', 'YBins'), - ('zaxis', 'ZAxis') - ] - - for object_name, expected_class_name in test_tuples: - class_name = gr.object_name_to_class_name(object_name) - msg = (object_name, expected_class_name, class_name) - self.assertEqual(class_name, expected_class_name, msg=msg) - - def test_old_traces(self): - - # While the old trace classes exist, the newer should be returned. - - test_tuples = [ - ('histogram2dcontour', 'Histogram2dcontour') - ] - - for object_name, expected_class_name in test_tuples: - class_name = gr.object_name_to_class_name(object_name) - msg = (object_name, expected_class_name, class_name) - self.assertEqual(class_name, expected_class_name, msg=msg) - - def test_new_traces(self): - - # New traces should get have classes defined. - - test_tuples = [ - ('choropleth', 'Choropleth'), - ('pie', 'Pie') - ] - - for object_name, expected_class_name in test_tuples: - class_name = gr.object_name_to_class_name(object_name) - msg = (object_name, expected_class_name, class_name) - self.assertEqual(class_name, expected_class_name, msg=msg) - - def test_new_non_trace_objects(self): - - # New objects get 'dict' or 'list'. - - test_tuples = [ - ('geo', 'dict'), - ('shapes', 'list'), - ('shape', 'dict'), - ] - - for object_name, expected_class_name in test_tuples: - class_name = gr.object_name_to_class_name(object_name) - msg = (object_name, expected_class_name, class_name) - self.assertEqual(class_name, expected_class_name, msg=msg) - - -class TestGetAttributesMethods(TestCase): - - def test_get_subplot_attributes(self): - - # importantly, layout should have a bunch of these - - layout_subplot_attributes = gr.get_subplot_attributes('layout') - - # there may be more... - expected_attributes = ['xaxis', 'yaxis', 'geo', 'scene'] - - for expected_attribute in expected_attributes: - self.assertIn(expected_attribute, layout_subplot_attributes) - - def test_get_deprecated_attributes(self): - - # this may eventually break, but it's important to check *something* - - bar_deprecated_attributes = gr.get_deprecated_attributes('bar') - - expected_attributes = ['bardir'] - - for expected_attribute in expected_attributes: - self.assertIn(expected_attribute, bar_deprecated_attributes) - - -class TestGetAttributePathToObjectNames(TestCase): - - def test_layout_attributes(self): - - # layout attrs defined under traces should still show up under layout - - graph_reference_path = ('traces', 'box', 'layoutAttributes') - expected_object_names = ('figure', 'layout') - object_names = gr.attribute_path_to_object_names(graph_reference_path) - self.assertEqual(object_names, expected_object_names) - - def test_trace_attributes(self): - - # trace attributes should be found under 'data' somewhere - - graph_reference_path = ('traces', 'scatter', 'attributes', 'marker', - 'line') - expected_object_names = ('figure', 'data', 'scatter', 'marker', 'line') - object_names = gr.attribute_path_to_object_names(graph_reference_path) - self.assertEqual(object_names, expected_object_names) - - -class TestGetRole(TestCase): - - def test_get_role_no_value(self): - - # this is a bit fragile, but we pick a few stable values - - # (, , , ) - test_tuples = [ - ('scatter', 'x', ('figure', 'data'), 'data'), - ('scatter', 'marker', ('figure', 'data'), 'object'), - ('marker', 'color', ('figure', 'data', 'scatter'), 'style'), - ('layout', 'margin', ('figure', ), 'object'), - ('figure', 'data', (), 'object') - ] - - for tup in test_tuples: - object_name, key, parent_object_names, role = tup - found_role = get_role(object_name, key, - parent_object_names=parent_object_names) - self.assertEqual(found_role, role, msg=tup) - - def test_get_role_with_value(self): - - # some attributes are conditionally considered data if they're arrays - - # (, , , ) - test_tuples = [ - ('scatter', 'x', 'wh0cares', ('figure', 'data'), 'data'), - ('scatter', 'marker', 'wh0cares', ('figure', 'data'), 'object'), - ('marker', 'color', 'r', ('figure', 'data', 'scatter'), 'style'), - ('marker', 'color', ['r'], ('figure', 'data', 'scatter'), 'data'), - ] - - for tup in test_tuples: - object_name, key, value, parent_object_names, role = tup - found_role = get_role(object_name, key, value=value, - parent_object_names=parent_object_names) - self.assertEqual(found_role, role, msg=tup) From 3ae9c56d8307317de384a2eab32150af0ff3cc30 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:46:18 -0400 Subject: [PATCH 19/34] Update test_offline to not depend on working directory --- .gitignore | 2 + .../test_core/test_offline/test_offline.py | 42 ++++++++++++++----- .../plotly/tests/test_optional/temp-plot.html | 32 -------------- .../test_optional/test_offline/temp-plot.html | 28 ------------- 4 files changed, 34 insertions(+), 70 deletions(-) delete mode 100644 plotly-package/plotly/tests/test_optional/temp-plot.html delete mode 100644 plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html diff --git a/.gitignore b/.gitignore index ba7b312ca71..28b04fb5c4c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ plotly.egg-info/ plotly/tests/test_orca/images/*/failed plotly/tests/test_orca/images/*/tmp +/plotly-package/plotly/tests/test_core/test_offline/plotly.min.js +/plotly-package/plotly/tests/test_core/test_offline/temp-plot.html diff --git a/plotly-package/plotly/tests/test_core/test_offline/test_offline.py b/plotly-package/plotly/tests/test_core/test_offline/test_offline.py index 540ba7b3c4d..7ca789d5147 100644 --- a/plotly-package/plotly/tests/test_core/test_offline/test_offline.py +++ b/plotly-package/plotly/tests/test_core/test_offline/test_offline.py @@ -14,6 +14,14 @@ import plotly.io as pio import json +project_root = os.path.dirname( + os.path.dirname( + os.path.dirname( + os.path.realpath(plotly.__file__)))) + +here = os.path.dirname(os.path.realpath(__file__)) +html_filename = os.path.join(here, 'temp-plot.html') + fig = { 'data': [ @@ -64,14 +72,15 @@ download_image = 'Plotly.downloadImage' + class PlotlyOfflineBaseTestCase(TestCase): def tearDown(self): # Some offline tests produce an html file. Make sure we clean up :) try: - os.remove('temp-plot.html') + os.remove(os.path.join(here, 'temp-plot.html')) # Some tests that produce temp-plot.html # also produce plotly.min.js - os.remove('plotly.min.js') + os.remove(os.path.join(here, 'plotly.min.js')) except OSError: pass @@ -96,7 +105,8 @@ def test_default_plot_generates_expected_html(self): fig['layout'], cls=plotly.utils.PlotlyJSONEncoder) - html = self._read_html(plotly.offline.plot(fig, auto_open=False)) + html = self._read_html(plotly.offline.plot( + fig, auto_open=False, filename=html_filename)) # I don't really want to test the entire script output, so # instead just make sure a few of the parts are in here? @@ -120,6 +130,7 @@ def test_including_plotlyjs_truthy_html(self): fig, include_plotlyjs=include_plotlyjs, output_type='file', + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) @@ -149,6 +160,7 @@ def test_including_plotlyjs_false_html(self): fig, include_plotlyjs=include_plotlyjs, output_type='file', + filename=html_filename, auto_open=False)) self.assertNotIn(plotly_config_script, html) @@ -173,6 +185,7 @@ def test_including_plotlyjs_cdn_html(self): fig, include_plotlyjs=include_plotlyjs, output_type='file', + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) self.assertNotIn(PLOTLYJS, html) @@ -191,12 +204,14 @@ def test_including_plotlyjs_cdn_div(self): self.assertNotIn(directory_script, html) def test_including_plotlyjs_directory_html(self): - self.assertFalse(os.path.exists('plotly.min.js')) + self.assertFalse( + os.path.exists(os.path.join(here, 'plotly.min.js'))) for include_plotlyjs in ['directory', 'Directory', 'DIRECTORY']: html = self._read_html(plotly.offline.plot( fig, include_plotlyjs=include_plotlyjs, + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) self.assertNotIn(PLOTLYJS, html) @@ -204,12 +219,14 @@ def test_including_plotlyjs_directory_html(self): self.assertIn(directory_script, html) # plot creates plotly.min.js in the output directory - self.assertTrue(os.path.exists('plotly.min.js')) + self.assertTrue( + os.path.exists(os.path.join(here, 'plotly.min.js'))) with open('plotly.min.js', 'r') as f: self.assertEqual(f.read(), PLOTLYJS) def test_including_plotlyjs_directory_div(self): - self.assertFalse(os.path.exists('plotly.min.js')) + self.assertFalse( + os.path.exists(os.path.join(here, 'plotly.min.js'))) for include_plotlyjs in ['directory', 'Directory', 'DIRECTORY']: html = plotly.offline.plot( @@ -238,6 +255,7 @@ def test_including_plotlyjs_path_html(self): fig, include_plotlyjs=include_plotlyjs, output_type='file', + filename=html_filename, auto_open=False)) self.assertNotIn(PLOTLYJS, html) self.assertNotIn(cdn_script, html) @@ -271,8 +289,8 @@ def test_config(self): config = dict(linkText='Plotly rocks!', showLink=True, editable=True) - html = self._read_html(plotly.offline.plot(fig, config=config, - auto_open=False)) + html = self._read_html(plotly.offline.plot( + fig, config=config, auto_open=False, filename=html_filename)) self.assertIn('"linkText": "Plotly rocks!"', html) self.assertIn('"showLink": true', html) self.assertIn('"editable": true', html) @@ -282,7 +300,7 @@ def test_config_bad_options(self): def get_html(): return self._read_html(plotly.offline.plot( - fig, config=config, auto_open=False)) + fig, config=config, auto_open=False, filename=html_filename)) # Attempts to validate warning ran into # https://bugs.python.org/issue29620, don't check warning for now. @@ -293,7 +311,8 @@ def get_html(): @attr('nodev') def test_plotlyjs_version(self): - with open('js/package.json', 'rt') as f: + path = os.path.join(project_root, 'js', 'package.json') + with open(path, 'rt') as f: package_json = json.load(f) expected_version = package_json['dependencies']['plotly.js'] @@ -305,6 +324,7 @@ def test_include_mathjax_false_html(self): fig, include_mathjax=False, output_type='file', + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) @@ -328,6 +348,7 @@ def test_include_mathjax_cdn_html(self): fig, include_mathjax='cdn', output_type='file', + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) @@ -352,6 +373,7 @@ def test_include_mathjax_path_html(self): fig, include_mathjax=other_cdn, output_type='file', + filename=html_filename, auto_open=False)) self.assertIn(plotly_config_script, html) diff --git a/plotly-package/plotly/tests/test_optional/temp-plot.html b/plotly-package/plotly/tests/test_optional/temp-plot.html deleted file mode 100644 index 0a7f4f39654..00000000000 --- a/plotly-package/plotly/tests/test_optional/temp-plot.html +++ /dev/null @@ -1,32 +0,0 @@ - - - -
- - - -
- -
- - \ No newline at end of file diff --git a/plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html b/plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html deleted file mode 100644 index 03a4fda1e3e..00000000000 --- a/plotly-package/plotly/tests/test_optional/test_offline/temp-plot.html +++ /dev/null @@ -1,28 +0,0 @@ - - - -
- - - -
- -
- - \ No newline at end of file From 8ee50257269cdf69e8f25d35d658379e9fa7f58e Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:48:55 -0400 Subject: [PATCH 20/34] Update config.yml test --- .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 02be8d93ab3..5d6027ab52f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -80,7 +80,7 @@ jobs: command: 'sudo pip install tox' - run: name: Install npm dependencies - command: cd plotly/tests/test_optional/test_jupyter && npm install + command: cd plotly-package/plotly/tests/test_optional/test_jupyter && npm install no_output_timeout: 20m - run: name: Test with tox @@ -100,7 +100,7 @@ jobs: command: 'sudo pip install tox' - run: name: Install npm dependencies - command: cd plotly/tests/test_optional/test_jupyter && npm install + command: cd plotly-package/plotly/tests/test_optional/test_jupyter && npm install no_output_timeout: 20m - run: name: Test with tox @@ -120,7 +120,7 @@ jobs: command: 'sudo pip install tox' - run: name: Install npm dependencies - command: cd plotly/tests/test_optional/test_jupyter && npm install + command: cd plotly-package/plotly/tests/test_optional/test_jupyter && npm install no_output_timeout: 20m - run: name: Test with tox @@ -140,7 +140,7 @@ jobs: command: 'sudo pip install tox' - run: name: Install npm dependencies - command: cd plotly/tests/test_optional/test_jupyter && npm install + command: cd plotly-package/plotly/tests/test_optional/test_jupyter && npm install no_output_timeout: 20m - run: name: Test with tox From 38032c9120ebf8f0bfb7a5b9c8f25b197bbcb1f1 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:50:24 -0400 Subject: [PATCH 21/34] Update test_offline paths --- .../plotly/tests/test_core/test_offline/test_offline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plotly-package/plotly/tests/test_core/test_offline/test_offline.py b/plotly-package/plotly/tests/test_core/test_offline/test_offline.py index 7ca789d5147..719a7e2d7b5 100644 --- a/plotly-package/plotly/tests/test_core/test_offline/test_offline.py +++ b/plotly-package/plotly/tests/test_core/test_offline/test_offline.py @@ -221,7 +221,7 @@ def test_including_plotlyjs_directory_html(self): # plot creates plotly.min.js in the output directory self.assertTrue( os.path.exists(os.path.join(here, 'plotly.min.js'))) - with open('plotly.min.js', 'r') as f: + with open(os.path.join(here, 'plotly.min.js'), 'r') as f: self.assertEqual(f.read(), PLOTLYJS) def test_including_plotlyjs_directory_div(self): From e22f2b63efb5b8989a468a70c0444716dd00129b Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:57:34 -0400 Subject: [PATCH 22/34] CI updates --- .circleci/config.yml | 5 +-- .../tests/test_core/test_tools/__init__.py | 4 --- .../test_core/test_tools/test_validate.py | 35 ------------------- 3 files changed, 3 insertions(+), 41 deletions(-) delete mode 100644 plotly-package/plotly/tests/test_core/test_tools/__init__.py delete mode 100644 plotly-package/plotly/tests/test_core/test_tools/test_validate.py diff --git a/.circleci/config.yml b/.circleci/config.yml index 5d6027ab52f..687e641cd2b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -300,10 +300,10 @@ jobs: command: 'sudo pip install tox requests yapf pytz decorator retrying inflect' - run: name: Update plotlywidget version - command: 'python setup.py updateplotlywidgetversion' + command: 'cd plotly-package; python setup.py updateplotlywidgetversion' - run: name: Update plotly.js to dev - command: 'python setup.py updateplotlyjsdev' + command: 'cd plotly-package; python setup.py updateplotlyjsdev' - run: name: Test with tox command: | @@ -322,6 +322,7 @@ jobs: - run: name: Build source distribution package command: | + cd plotly-package python setup.py sdist sudo cp dist/* /dist when: always diff --git a/plotly-package/plotly/tests/test_core/test_tools/__init__.py b/plotly-package/plotly/tests/test_core/test_tools/__init__.py deleted file mode 100644 index f367e6011a3..00000000000 --- a/plotly-package/plotly/tests/test_core/test_tools/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import warnings - -def setup_package(): - warnings.filterwarnings('ignore') diff --git a/plotly-package/plotly/tests/test_core/test_tools/test_validate.py b/plotly-package/plotly/tests/test_core/test_tools/test_validate.py deleted file mode 100644 index 1dce95f2fa0..00000000000 --- a/plotly-package/plotly/tests/test_core/test_tools/test_validate.py +++ /dev/null @@ -1,35 +0,0 @@ -from __future__ import absolute_import - -from nose.tools import raises - -from plotly.exceptions import PlotlyError -import plotly.tools as tls - - -def test_validate_valid_fig(): - fig = { - 'layout': { - 'title': 'something' - }, - 'data': [ - { - 'x': [1, 2, 3], - 'y': [2, 1, 2] - } - ] - } - tls.validate(fig, 'Figure') - - -@raises(ValueError) -def test_validate_invalid_fig(): - fig = { - 'layout': { - 'title': 'something' - }, - 'data': { - 'x': [1, 2, 3], - 'y': [2, 1, 2] - } - } - tls.validate(fig, 'Figure') From a445a6fff471acab69ad6dce8afd5219f7decae0 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 09:58:03 -0400 Subject: [PATCH 23/34] Remove Legacy graph_objs validate function --- plotly-package/plotly/tools.py | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/plotly-package/plotly/tools.py b/plotly-package/plotly/tools.py index a9f0db2901d..19b8d67e7f9 100644 --- a/plotly-package/plotly/tools.py +++ b/plotly-package/plotly/tools.py @@ -485,31 +485,6 @@ def get_graph_obj(obj, obj_type=None): return cls(obj) -def validate(obj, obj_type): - """Validate a dictionary, list, or graph object as 'obj_type'. - - This will not alter the 'obj' referenced in the call signature. It will - raise an error if the 'obj' reference could not be instantiated as a - valid 'obj_type' graph object. - - """ - # TODO: Deprecate or move. #283 - from plotly import graph_reference - from plotly.graph_objs import graph_objs - - if obj_type not in graph_reference.CLASSES: - obj_type = graph_reference.string_to_class_name(obj_type) - - try: - cls = getattr(graph_objs, obj_type) - #except AttributeError: - except ValueError: - raise exceptions.PlotlyError( - "'{0}' is not a recognizable graph_obj.". - format(obj_type)) - cls(obj) # this will raise on invalid keys/items - - def _replace_newline(obj): """Replaces '\n' with '
' for all strings in a collection.""" if isinstance(obj, dict): From 9c64f2dc32c87115094dad0732f9566c62d7f9b8 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 10:07:07 -0400 Subject: [PATCH 24/34] Remove plotly.tests import in chart_studio tests --- .../tests/test_optional/test_utils/test_utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py b/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py index 0af99a87be4..3d4b5616e65 100644 --- a/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py +++ b/chart-studio-package/chart_studio/tests/test_optional/test_utils/test_utils.py @@ -3,9 +3,13 @@ import _plotly_utils.utils from chart_studio.grid_objs import Column -from plotly import utils -from plotly.tests.test_optional.test_utils.test_utils import numeric_list, \ - mixed_list, np_list +from datetime import datetime as dt +import numpy as np + +np_list = np.array([1, 2, 3, np.NaN, np.NAN, np.Inf, dt(2014, 1, 5)]) +numeric_list = [1, 2, 3] +mixed_list = [1, 'A', dt(2014, 1, 5), dt(2014, 1, 5, 1, 1, 1), + dt(2014, 1, 5, 1, 1, 1, 1)] class TestJSONEncoder(TestCase): From 887ada30775ac72a0f939448826eb4d58de94606 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 10:14:43 -0400 Subject: [PATCH 25/34] Install plotly-geo-package --- plotly-package/tox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/plotly-package/tox.ini b/plotly-package/tox.ini index 5d65ad95f0f..e27d1df6e91 100644 --- a/plotly-package/tox.ini +++ b/plotly-package/tox.ini @@ -60,6 +60,7 @@ deps= retrying==1.3.3 pytest==3.5.1 backports.tempfile==1.0 + optional: ./plotly-geo-package/ optional: numpy==1.11.3 optional: ipython[all]==5.1.0 optional: ipywidgets==7.2.0 From adc343a2276f0eabd51249990ec82add0e3e864a Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 10:22:58 -0400 Subject: [PATCH 26/34] Try again with plotly-geo-package local dependency --- plotly-package/tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plotly-package/tox.ini b/plotly-package/tox.ini index e27d1df6e91..68fba03e055 100644 --- a/plotly-package/tox.ini +++ b/plotly-package/tox.ini @@ -60,7 +60,7 @@ deps= retrying==1.3.3 pytest==3.5.1 backports.tempfile==1.0 - optional: ./plotly-geo-package/ + optional: --editable=file:///{toxinidir}/../plotly-geo-package optional: numpy==1.11.3 optional: ipython[all]==5.1.0 optional: ipywidgets==7.2.0 From f86c1ddd080ac3f27f44209efb2f329f938bf4e3 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 10:26:37 -0400 Subject: [PATCH 27/34] Use local dependency on plotly in tox.ini for chart_studio --- chart-studio-package/tox.ini | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/chart-studio-package/tox.ini b/chart-studio-package/tox.ini index d08923d17a9..2d17ee4642f 100644 --- a/chart-studio-package/tox.ini +++ b/chart-studio-package/tox.ini @@ -60,10 +60,12 @@ deps= retrying==1.3.3 pytest==3.5.1 backports.tempfile==1.0 - plot_ly: pandas==0.23.2 - plot_ly: numpy==1.14.3 - plot_ly: ipywidgets==7.2.0 - plot_ly: matplotlib==2.2.3 + pandas==0.23.2 + numpy==1.14.3 + ipywidgets==7.2.0 + matplotlib==2.2.3 + --editable=file:///{toxinidir}/../plotly-package + ; Plot.ly environments [testenv:py27-plot_ly] From 066f34ba2d0cc34a249c010f2b699126687bccc3 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 10:28:34 -0400 Subject: [PATCH 28/34] Fix orca test paths --- .circleci/config.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 687e641cd2b..928ca103149 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -220,8 +220,8 @@ jobs: command: | . /home/circleci/miniconda/etc/profile.d/conda.sh conda activate circle_optional - pytest --disable-warnings plotly/tests/test_core - pytest plotly/tests/test_orca + pytest --disable-warnings plotly-package/plotly/tests/test_core + pytest plotly-package/plotly/tests/test_orca - store_artifacts: path: plotly/tests/test_orca/images/linux/failed @@ -250,8 +250,8 @@ jobs: command: | . /home/circleci/miniconda/etc/profile.d/conda.sh conda activate circle_optional - pytest --disable-warnings plotly/tests/test_core - pytest plotly/tests/test_orca + pytest --disable-warnings plotly-package/plotly/tests/test_core + pytest plotly-package/plotly/tests/test_orca - store_artifacts: path: plotly/tests/test_orca/images/linux/failed @@ -280,8 +280,8 @@ jobs: command: | . /home/circleci/miniconda/etc/profile.d/conda.sh conda activate circle_optional - pytest --disable-warnings plotly/tests/test_core - pytest plotly/tests/test_orca + pytest --disable-warnings plotly-package/plotly/tests/test_core + pytest plotly-package/plotly/tests/test_orca - store_artifacts: path: plotly/tests/test_orca/images/linux/failed From c6a041964f2ead382ee7592ff21510a610376304 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 11:04:01 -0400 Subject: [PATCH 29/34] fix code gen path to plot-schema --- plotly-package/codegen/__init__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/plotly-package/codegen/__init__.py b/plotly-package/codegen/__init__.py index ed9b4785580..b1176e7ce80 100644 --- a/plotly-package/codegen/__init__.py +++ b/plotly-package/codegen/__init__.py @@ -83,7 +83,7 @@ def perform_codegen(): # --------------------------------- # (relative to project root) abs_file_path = opath.realpath(__file__) - project_root = opath.dirname(opath.dirname(opath.dirname(abs_file_path))); + project_root = opath.dirname(opath.dirname(opath.dirname(abs_file_path))) outdir = opath.join(project_root, 'plotly-package', 'plotly') @@ -106,7 +106,15 @@ def perform_codegen(): # Load plotly schema # ------------------ - with open('plotly-package/codegen/resources/plot-schema.json', 'r') as f: + plot_schema_path = opath.join( + project_root, + 'plotly-package', + 'codegen', + 'resources', + 'plot-schema.json', + ) + + with open(plot_schema_path, 'r') as f: plotly_schema = json.load(f) # Preprocess Schema From 1aa2f66db58465f6734315f16f538429ca0ecf8c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 11:11:07 -0400 Subject: [PATCH 30/34] Fix path in orca testing --- plotly-package/plotly/tests/test_orca/test_to_image.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plotly-package/plotly/tests/test_orca/test_to_image.py b/plotly-package/plotly/tests/test_orca/test_to_image.py index 5d3f19a170c..3ef34155eb7 100644 --- a/plotly-package/plotly/tests/test_orca/test_to_image.py +++ b/plotly-package/plotly/tests/test_orca/test_to_image.py @@ -29,7 +29,10 @@ tmp_dir = images_dir + 'tmp/' # These formats are deterministic. PDF and svg don't seem to be image_formats = ['eps'] -topo_df = pd.read_csv('plotly/tests/test_orca/resources/2011_us_ag_exports.csv') + +here = os.path.dirname(os.path.realpath(__file__)) +topo_df = pd.read_csv( + os.path.join(here, 'resources', '2011_us_ag_exports.csv')) # Fixtures # -------- From 84b1d2a5523cda6e7eb1e8398b6fdc71587aa67f Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 11:19:16 -0400 Subject: [PATCH 31/34] Update plotlywidget build paths --- js/webpack.config.js | 6 +- plotly-package/plotlywidget/__init__.py | 9 - plotly-package/plotlywidget/static/index.js | 204 ++++++++++---------- 3 files changed, 106 insertions(+), 113 deletions(-) delete mode 100644 plotly-package/plotlywidget/__init__.py diff --git a/js/webpack.config.js b/js/webpack.config.js index e561ea3aafc..6a8c3df60e7 100644 --- a/js/webpack.config.js +++ b/js/webpack.config.js @@ -21,7 +21,8 @@ module.exports = [ entry: './src/extension.js', output: { filename: 'extension.js', - path: path.resolve(__dirname, '..', 'plotlywidget', 'static'), + path: path.resolve( + __dirname, '..', 'plotly-package', 'plotlywidget', 'static'), libraryTarget: 'amd' } }, @@ -34,7 +35,8 @@ module.exports = [ entry: './src/index.js', output: { filename: 'index.js', - path: path.resolve(__dirname, '..', 'plotlywidget', 'static'), + path: path.resolve( + __dirname, '..', 'plotly-package', 'plotlywidget', 'static'), libraryTarget: 'amd' }, node: { diff --git a/plotly-package/plotlywidget/__init__.py b/plotly-package/plotlywidget/__init__.py deleted file mode 100644 index 1e592f72173..00000000000 --- a/plotly-package/plotlywidget/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -def _jupyter_nbextension_paths(): - return [{ - 'section': 'notebook', - 'src': 'static', - 'dest': 'plotlywidget', - 'require': 'plotlywidget/extension' - }] - -__frontend_version__ = '^0.1' \ No newline at end of file diff --git a/plotly-package/plotlywidget/static/index.js b/plotly-package/plotlywidget/static/index.js index 772f23755aa..878f1a112ee 100644 --- a/plotly-package/plotlywidget/static/index.js +++ b/plotly-package/plotlywidget/static/index.js @@ -68,30 +68,30 @@ define(["@jupyter-widgets/base"], function(__WEBPACK_EXTERNAL_MODULE_21__) { ret /***/ (function(module, exports, __webpack_require__) { "use strict"; -/** - * inspired by is-number - * but significantly simplified and sped up by ignoring number and string constructors - * ie these return false: - * new Number(1) - * new String('1') - */ - - - -var allBlankCharCodes = __webpack_require__(26); - -module.exports = function(n) { - var type = typeof n; - if(type === 'string') { - var original = n; - n = +n; - // whitespace strings cast to zero - filter them out - if(n===0 && allBlankCharCodes(original)) return false; - } - else if(type !== 'number') return false; - - return n - n < 1; -}; +/** + * inspired by is-number + * but significantly simplified and sped up by ignoring number and string constructors + * ie these return false: + * new Number(1) + * new String('1') + */ + + + +var allBlankCharCodes = __webpack_require__(26); + +module.exports = function(n) { + var type = typeof n; + if(type === 'string') { + var original = n; + n = +n; + // whitespace strings cast to zero - filter them out + if(n===0 && allBlankCharCodes(original)) return false; + } + else if(type !== 'number') return false; + + return n - n < 1; +}; /***/ }), @@ -10495,27 +10495,27 @@ module.exports = function(opts) { /* 10 */ /***/ (function(module, exports) { -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1,eval)("this"); -} catch(e) { - // This works if the window reference is available - if(typeof window === "object") - g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1,eval)("this"); +} catch(e) { + // This works if the window reference is available + if(typeof window === "object") + g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; /***/ }), @@ -31390,28 +31390,28 @@ module.exports = __WEBPACK_EXTERNAL_MODULE_21__; /* 23 */ /***/ (function(module, exports) { -module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - if(!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; -}; +module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if(!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; /***/ }), @@ -32612,41 +32612,41 @@ lib.formatPercent = function(ratio, n) { /***/ (function(module, exports, __webpack_require__) { "use strict"; - - -/** - * Is this string all whitespace? - * This solution kind of makes my brain hurt, but it's significantly faster - * than !str.trim() or any other solution I could find. - * - * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character - * and verified with: - * - * for(var i = 0; i < 65536; i++) { - * var s = String.fromCharCode(i); - * if(+s===0 && !s.trim()) console.log(i, s); - * } - * - * which counts a couple of these as *not* whitespace, but finds nothing else - * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears - * that there are no whitespace characters above this, and code points above - * this do not map onto white space characters. - */ - -module.exports = function(str){ - var l = str.length, - a; - for(var i = 0; i < l; i++) { - a = str.charCodeAt(i); - if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && - (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && - (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && - (a !== 8288) && (a !== 12288) && (a !== 65279)) { - return false; - } - } - return true; -} + + +/** + * Is this string all whitespace? + * This solution kind of makes my brain hurt, but it's significantly faster + * than !str.trim() or any other solution I could find. + * + * whitespace codes from: http://en.wikipedia.org/wiki/Whitespace_character + * and verified with: + * + * for(var i = 0; i < 65536; i++) { + * var s = String.fromCharCode(i); + * if(+s===0 && !s.trim()) console.log(i, s); + * } + * + * which counts a couple of these as *not* whitespace, but finds nothing else + * that *is* whitespace. Note that charCodeAt stops at 16 bits, but it appears + * that there are no whitespace characters above this, and code points above + * this do not map onto white space characters. + */ + +module.exports = function(str){ + var l = str.length, + a; + for(var i = 0; i < l; i++) { + a = str.charCodeAt(i); + if((a < 9 || a > 13) && (a !== 32) && (a !== 133) && (a !== 160) && + (a !== 5760) && (a !== 6158) && (a < 8192 || a > 8205) && + (a !== 8232) && (a !== 8233) && (a !== 8239) && (a !== 8287) && + (a !== 8288) && (a !== 12288) && (a !== 65279)) { + return false; + } + } + return true; +} /***/ }), From ff4a2b26221e70b06f82e8932cc146d6877b8632 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 12:01:57 -0400 Subject: [PATCH 32/34] Fix dev_build paths --- .circleci/config.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 928ca103149..d8c05548a6a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -307,12 +307,14 @@ jobs: - run: name: Test with tox command: | + cd plotly-package locale tox -e py37-core -- -a '!nodev' no_output_timeout: 20m - run: name: Commit command: | + cd plotly-package sudo mkdir /dist git config --global user.email "you@example.com" git config --global user.name "Your Name" @@ -335,7 +337,7 @@ jobs: sudo cp ./plotlywidget* /dist when: always - store_artifacts: - path: /dist + path: plotly-package/dist workflows: version: 2 From d9d9142cf7aea1da868c99a23ed44b6e8ebb61a1 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 12:02:18 -0400 Subject: [PATCH 33/34] fix to_image test paths --- .../plotly/tests/test_orca/test_to_image.py | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/plotly-package/plotly/tests/test_orca/test_to_image.py b/plotly-package/plotly/tests/test_orca/test_to_image.py index 3ef34155eb7..ebc0bfefe1f 100644 --- a/plotly-package/plotly/tests/test_orca/test_to_image.py +++ b/plotly-package/plotly/tests/test_orca/test_to_image.py @@ -1,3 +1,4 @@ +import plotly import plotly.io as pio import plotly.graph_objs as go import os @@ -13,20 +14,21 @@ # Constants # --------- -images_root = 'plotly/tests/test_orca/images/' - +project_root = os.path.dirname(os.path.realpath(plotly.__file__)) +images_root = os.path.join(project_root, 'tests', 'test_orca', 'images') +print(images_root) if sys.platform.startswith('linux'): - images_dir = images_root + 'linux/' + images_dir = os.path.join(images_root, 'linux') elif sys.platform == 'darwin': - images_dir = images_root + 'darwin/' + images_dir = os.path.join(images_root, 'darwin') else: raise ValueError( 'No reference images available for platform: {platform}' .format(platform=sys.platform)) -failed_dir = images_dir + 'failed/' -tmp_dir = images_dir + 'tmp/' +failed_dir = os.path.join(images_dir, 'failed/') +tmp_dir = os.path.join(images_dir, 'tmp/') # These formats are deterministic. PDF and svg don't seem to be image_formats = ['eps'] @@ -157,7 +159,7 @@ def latexfig(): # Utilities # --------- def assert_image_bytes(img_bytes, file_name, _raise=True): - expected_img_path = images_dir + file_name + expected_img_path = os.path.join(images_dir, file_name) try: with open(expected_img_path, 'rb') as f: @@ -166,7 +168,7 @@ def assert_image_bytes(img_bytes, file_name, _raise=True): assert expected == img_bytes except (OSError, AssertionError) as e: - failed_path = failed_dir + file_name + failed_path = os.path.join(failed_dir, file_name) print('Saving failed image to "{failed_path}"' .format(failed_path=failed_path)) @@ -199,13 +201,13 @@ def test_write_image_string(fig1, format): file_name = 'fig1.' + format file_path = tmp_dir + file_name - pio.write_image(fig1, tmp_dir + file_name, + pio.write_image(fig1, os.path.join(tmp_dir, file_name), format=format, width=700, height=500) with open(file_path, 'rb') as f: written_bytes = f.read() - with open(images_dir + file_name, 'rb') as f: + with open(os.path.join(images_dir, file_name), 'rb') as f: expected_bytes = f.read() assert written_bytes == expected_bytes @@ -214,7 +216,7 @@ def test_write_image_string(fig1, format): def test_write_image_writeable(fig1, format): file_name = 'fig1.' + format - with open(images_dir + file_name, 'rb') as f: + with open(os.path.join(images_dir, file_name), 'rb') as f: expected_bytes = f.read() mock_file = MagicMock() @@ -227,16 +229,16 @@ def test_write_image_writeable(fig1, format): def test_write_image_string_format_inference(fig1, format): # Build file paths file_name = 'fig1.' + format - file_path = tmp_dir + file_name + file_path = os.path.join(tmp_dir, file_name) # Use file extension to infer image type. - pio.write_image(fig1, tmp_dir + file_name, + pio.write_image(fig1, os.path.join(tmp_dir, file_name), width=700, height=500) with open(file_path, 'rb') as f: written_bytes = f.read() - with open(images_dir + file_name, 'rb') as f: + with open(os.path.join(images_dir, file_name), 'rb') as f: expected_bytes = f.read() assert written_bytes == expected_bytes @@ -244,22 +246,22 @@ def test_write_image_string_format_inference(fig1, format): def test_write_image_string_no_extension_failure(fig1): # No extension - file_path = tmp_dir + 'fig1' + file_path = os.path.join(tmp_dir, 'fig1') # Use file extension to infer image type. with pytest.raises(ValueError) as err: - pio.write_image(fig1, file_path + 'fig1') + pio.write_image(fig1, os.path.join(file_path, 'fig1')) assert 'add a file extension or specify the type' in str(err.value) def test_write_image_string_bad_extension_failure(fig1): # Bad extension - file_path = tmp_dir + 'fig1.bogus' + file_path = os.path.join(tmp_dir, 'fig1.bogus') # Use file extension to infer image type. with pytest.raises(ValueError) as err: - pio.write_image(fig1, file_path + 'fig1') + pio.write_image(fig1, os.path.join(file_path, 'fig1')) assert 'must be specified as one of the following' in str(err.value) @@ -267,14 +269,14 @@ def test_write_image_string_bad_extension_failure(fig1): def test_write_image_string_bad_extension_override(fig1): # Bad extension file_name = 'fig1.bogus' - tmp_path = tmp_dir + file_name + tmp_path = os.path.join(tmp_dir, file_name) pio.write_image(fig1, tmp_path, format='eps', width=700, height=500) with open(tmp_path, 'rb') as f: written_bytes = f.read() - with open(images_dir + 'fig1.eps', 'rb') as f: + with open(os.path.join(images_dir, 'fig1.eps'), 'rb') as f: expected_bytes = f.read() assert written_bytes == expected_bytes From df82c4cd9a57f3868d96cd7f3db0f7e437005174 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Wed, 5 Jun 2019 12:18:35 -0400 Subject: [PATCH 34/34] Fix write_image paths --- plotly-package/plotly/tests/test_orca/test_to_image.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plotly-package/plotly/tests/test_orca/test_to_image.py b/plotly-package/plotly/tests/test_orca/test_to_image.py index ebc0bfefe1f..d57d84bdfec 100644 --- a/plotly-package/plotly/tests/test_orca/test_to_image.py +++ b/plotly-package/plotly/tests/test_orca/test_to_image.py @@ -250,7 +250,7 @@ def test_write_image_string_no_extension_failure(fig1): # Use file extension to infer image type. with pytest.raises(ValueError) as err: - pio.write_image(fig1, os.path.join(file_path, 'fig1')) + pio.write_image(fig1, file_path) assert 'add a file extension or specify the type' in str(err.value) @@ -261,7 +261,7 @@ def test_write_image_string_bad_extension_failure(fig1): # Use file extension to infer image type. with pytest.raises(ValueError) as err: - pio.write_image(fig1, os.path.join(file_path, 'fig1')) + pio.write_image(fig1, file_path) assert 'must be specified as one of the following' in str(err.value)