diff --git a/demos/OracleAutoMLx_AnomalyDetection.html b/demos/OracleAutoMLx_AnomalyDetection.html index 45d26a7..39f7438 100644 --- a/demos/OracleAutoMLx_AnomalyDetection.html +++ b/demos/OracleAutoMLx_AnomalyDetection.html @@ -14622,7 +14622,7 @@
Anomaly Detection Demo Notebook.
-Copyright © 2024, Oracle and/or its affiliates.
+Copyright © 2025, Oracle and/or its affiliates.
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
Basic
Collecting rdata==0.9 Using cached rdata-0.9-py3-none-any.whl.metadata (1.1 kB) -Requirement already satisfied: numpy in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (1.26.4) -Requirement already satisfied: xarray in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (2024.7.0) -Requirement already satisfied: pandas in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (2.2.2) -Requirement already satisfied: python-dateutil>=2.8.2 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2.9.0.post0) -Requirement already satisfied: pytz>=2020.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2024.2) -Requirement already satisfied: tzdata>=2022.7 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2024.2) -Requirement already satisfied: packaging>=23.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from xarray->rdata==0.9) (24.2) -Requirement already satisfied: six>=1.5 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from python-dateutil>=2.8.2->pandas->rdata==0.9) (1.17.0) +Requirement already satisfied: numpy in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (1.26.4) +Requirement already satisfied: xarray in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (2024.7.0) +Requirement already satisfied: pandas in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (2.2.2) +Requirement already satisfied: python-dateutil>=2.8.2 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2.9.0.post0) +Requirement already satisfied: pytz>=2020.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2025.2) +Requirement already satisfied: tzdata>=2022.7 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2025.2) +Requirement already satisfied: packaging>=23.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from xarray->rdata==0.9) (25.0) +Requirement already satisfied: six>=1.5 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from python-dateutil>=2.8.2->pandas->rdata==0.9) (1.17.0) Using cached rdata-0.9-py3-none-any.whl (19 kB) Installing collected packages: rdata Attempting uninstall: rdata @@ -14779,25 +14779,25 @@Setup¶
Basic
In [2]:-@@ -15565,9 +15565,9 @@import urllib -import rdata -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt - -import plotly.figure_factory as ff -import plotly.express as px -from sklearn.metrics import f1_score, confusion_matrix -from sklearn.model_selection import train_test_split -from pyod.models.iforest import IForest -import time -import datetime +import urllib +import rdata +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +import plotly.figure_factory as ff +import plotly.express as px +from sklearn.metrics import f1_score, confusion_matrix +from sklearn.model_selection import train_test_split +from pyod.models.iforest import IForest +import time +import datetime # Settings for plots plt.rcParams['figure.figsize'] = [10, 7] plt.rcParams['font.size'] = 15 -import automlx -from automlx import init +import automlx +from automlx import initLoad the Credit Card Fraud Dataset -
@@ -17223,9 +17223,9 @@Interactive What-If Explanations -
@@ -17347,12 +17347,12 @@Counterfactual Explainers +
-
@@ -17426,9 +17426,9 @@@@ -17568,9 +17568,9 @@Changing the number of iterations -
diff --git a/demos/OracleAutoMLx_AnomalyDetection.ipynb b/demos/OracleAutoMLx_AnomalyDetection.ipynb index c1ef178..6e5e562 100644 --- a/demos/OracleAutoMLx_AnomalyDetection.ipynb +++ b/demos/OracleAutoMLx_AnomalyDetection.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "ae2ab720", + "id": "00f3548a", "metadata": {}, "source": [ "***\n", @@ -14,7 +14,7 @@ }, { "cell_type": "markdown", - "id": "8a24a53d", + "id": "b1ba63d9", "metadata": {}, "source": [ "Anomaly Detection Demo Notebook.\n", @@ -26,7 +26,7 @@ }, { "cell_type": "markdown", - "id": "6215ca79", + "id": "1b54cad5", "metadata": {}, "source": [ "## Overview of this Notebook\n", @@ -80,7 +80,7 @@ }, { "cell_type": "markdown", - "id": "bc10323c", + "id": "ed5d41ec", "metadata": {}, "source": [ "\n", @@ -92,13 +92,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "8c70652f", + "id": "124c551f", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:47:47.931154Z", - "iopub.status.busy": "2024-12-26T13:47:47.930954Z", - "iopub.status.idle": "2024-12-26T13:47:57.172521Z", - "shell.execute_reply": "2024-12-26T13:47:57.171934Z" + "iopub.execute_input": "2025-04-25T09:59:34.026432Z", + "iopub.status.busy": "2025-04-25T09:59:34.026094Z", + "iopub.status.idle": "2025-04-25T09:59:44.508269Z", + "shell.execute_reply": "2025-04-25T09:59:44.507603Z" } }, "outputs": [ @@ -114,20 +114,20 @@ "output_type": "stream", "text": [ " Using cached rdata-0.9-py3-none-any.whl.metadata (1.1 kB)\r\n", - "Requirement already satisfied: numpy in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (1.26.4)\r\n", - "Requirement already satisfied: xarray in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (2024.7.0)\r\n", - "Requirement already satisfied: pandas in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from rdata==0.9) (2.2.2)\r\n", - "Requirement already satisfied: python-dateutil>=2.8.2 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2.9.0.post0)\r\n", - "Requirement already satisfied: pytz>=2020.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2024.2)\r\n", - "Requirement already satisfied: tzdata>=2022.7 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from pandas->rdata==0.9) (2024.2)\r\n" + "Requirement already satisfied: numpy in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (1.26.4)\r\n", + "Requirement already satisfied: xarray in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (2024.7.0)\r\n", + "Requirement already satisfied: pandas in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from rdata==0.9) (2.2.2)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: packaging>=23.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from xarray->rdata==0.9) (24.2)\r\n", - "Requirement already satisfied: six>=1.5 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-forewardportAMLX2203todev/lib/python3.9/site-packages (from python-dateutil>=2.8.2->pandas->rdata==0.9) (1.17.0)\r\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2.9.0.post0)\r\n", + "Requirement already satisfied: pytz>=2020.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2025.2)\r\n", + "Requirement already satisfied: tzdata>=2022.7 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from pandas->rdata==0.9) (2025.2)\r\n", + "Requirement already satisfied: packaging>=23.1 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from xarray->rdata==0.9) (25.0)\r\n", + "Requirement already satisfied: six>=1.5 in /scratch_user/olautoml/.conda/envs/pipeline-run-3.9.19-releasev252/lib/python3.9/site-packages (from python-dateutil>=2.8.2->pandas->rdata==0.9) (1.17.0)\r\n", "Using cached rdata-0.9-py3-none-any.whl (19 kB)\r\n" ] }, @@ -137,7 +137,13 @@ "text": [ "Installing collected packages: rdata\r\n", " Attempting uninstall: rdata\r\n", - " Found existing installation: rdata 0.11.2\r\n", + " Found existing installation: rdata 0.11.2\r\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ " Uninstalling rdata-0.11.2:\r\n" ] }, @@ -166,7 +172,7 @@ }, { "cell_type": "markdown", - "id": "2bf0b6b9", + "id": "67e80ff5", "metadata": {}, "source": [ "Load the required modules." @@ -175,13 +181,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "d20eb108", + "id": "09821a36", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:47:57.174977Z", - "iopub.status.busy": "2024-12-26T13:47:57.174669Z", - "iopub.status.idle": "2024-12-26T13:48:35.705958Z", - "shell.execute_reply": "2024-12-26T13:48:35.705344Z" + "iopub.execute_input": "2025-04-25T09:59:44.510808Z", + "iopub.status.busy": "2025-04-25T09:59:44.510323Z", + "iopub.status.idle": "2025-04-25T10:00:26.554123Z", + "shell.execute_reply": "2025-04-25T10:00:26.553486Z" } }, "outputs": [], @@ -209,7 +215,7 @@ }, { "cell_type": "markdown", - "id": "0b61d493", + "id": "cfe2a223", "metadata": {}, "source": [ "\n", @@ -220,13 +226,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "d1de2c33", + "id": "0f03efa0", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:35.708636Z", - "iopub.status.busy": "2024-12-26T13:48:35.708143Z", - "iopub.status.idle": "2024-12-26T13:48:56.470642Z", - "shell.execute_reply": "2024-12-26T13:48:56.470025Z" + "iopub.execute_input": "2025-04-25T10:00:26.557270Z", + "iopub.status.busy": "2025-04-25T10:00:26.556221Z", + "iopub.status.idle": "2025-04-25T10:00:49.388257Z", + "shell.execute_reply": "2025-04-25T10:00:49.387666Z" } }, "outputs": [], @@ -243,7 +249,7 @@ }, { "cell_type": "markdown", - "id": "626c18b5", + "id": "52d15861", "metadata": {}, "source": [ "In this case, the target is identified by the `Class` column." @@ -252,13 +258,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "f85f9eaa", + "id": "3f3dc853", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:56.473191Z", - "iopub.status.busy": "2024-12-26T13:48:56.472806Z", - "iopub.status.idle": "2024-12-26T13:48:56.926486Z", - "shell.execute_reply": "2024-12-26T13:48:56.926011Z" + "iopub.execute_input": "2025-04-25T10:00:49.390778Z", + "iopub.status.busy": "2025-04-25T10:00:49.390321Z", + "iopub.status.idle": "2025-04-25T10:00:49.978757Z", + "shell.execute_reply": "2025-04-25T10:00:49.978272Z" } }, "outputs": [], @@ -268,7 +274,7 @@ }, { "cell_type": "markdown", - "id": "5d423bc0", + "id": "34f93770", "metadata": {}, "source": [ "We reduce the total number of features to 20 to have a reasonable training time for this demonstration." @@ -277,13 +283,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "3c76e9d2", + "id": "a461a8de", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:56.928452Z", - "iopub.status.busy": "2024-12-26T13:48:56.928128Z", - "iopub.status.idle": "2024-12-26T13:48:56.961924Z", - "shell.execute_reply": "2024-12-26T13:48:56.961324Z" + "iopub.execute_input": "2025-04-25T10:00:49.980843Z", + "iopub.status.busy": "2025-04-25T10:00:49.980499Z", + "iopub.status.idle": "2025-04-25T10:00:50.026498Z", + "shell.execute_reply": "2025-04-25T10:00:50.025899Z" } }, "outputs": [], @@ -293,7 +299,7 @@ }, { "cell_type": "markdown", - "id": "6ec86525", + "id": "cc0825a0", "metadata": {}, "source": [ "Since the dataset is not split into training and validation sets by default, we now split it into training (60%) and test (40%) datasets. The training set will be used to create a Machine Learning model using AutoML, and the test set will be used to evaluate the model's performance on unseen data." @@ -302,13 +308,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "1e03cbfd", + "id": "a5e4d1ce", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:56.964225Z", - "iopub.status.busy": "2024-12-26T13:48:56.963867Z", - "iopub.status.idle": "2024-12-26T13:48:57.289796Z", - "shell.execute_reply": "2024-12-26T13:48:57.289267Z" + "iopub.execute_input": "2025-04-25T10:00:50.028702Z", + "iopub.status.busy": "2025-04-25T10:00:50.028386Z", + "iopub.status.idle": "2025-04-25T10:00:50.356653Z", + "shell.execute_reply": "2025-04-25T10:00:50.356037Z" } }, "outputs": [ @@ -332,7 +338,7 @@ }, { "cell_type": "markdown", - "id": "a001be54", + "id": "0a1599c9", "metadata": {}, "source": [ "Again to keep the training time reasonable, we also downsample to use 5% of the total training set." @@ -341,13 +347,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "cc404d7b", + "id": "039a183b", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.291569Z", - "iopub.status.busy": "2024-12-26T13:48:57.291300Z", - "iopub.status.idle": "2024-12-26T13:48:57.440948Z", - "shell.execute_reply": "2024-12-26T13:48:57.440419Z" + "iopub.execute_input": "2025-04-25T10:00:50.358715Z", + "iopub.status.busy": "2025-04-25T10:00:50.358271Z", + "iopub.status.idle": "2025-04-25T10:00:50.713308Z", + "shell.execute_reply": "2025-04-25T10:00:50.712736Z" } }, "outputs": [ @@ -370,7 +376,7 @@ }, { "cell_type": "markdown", - "id": "3eaf3886", + "id": "85655da0", "metadata": {}, "source": [ "We also need to reset the indexes after our downsampling." @@ -379,13 +385,13 @@ { "cell_type": "code", "execution_count": 8, - "id": "2813078c", + "id": "0503cae9", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.442707Z", - "iopub.status.busy": "2024-12-26T13:48:57.442445Z", - "iopub.status.idle": "2024-12-26T13:48:57.469620Z", - "shell.execute_reply": "2024-12-26T13:48:57.469142Z" + "iopub.execute_input": "2025-04-25T10:00:50.715240Z", + "iopub.status.busy": "2025-04-25T10:00:50.714914Z", + "iopub.status.idle": "2025-04-25T10:00:50.805439Z", + "shell.execute_reply": "2025-04-25T10:00:50.804947Z" } }, "outputs": [], @@ -396,7 +402,7 @@ }, { "cell_type": "markdown", - "id": "44d5e8cb", + "id": "98732c51", "metadata": {}, "source": [ "Lets look at a few of the samples in the training dataset." @@ -405,13 +411,13 @@ { "cell_type": "code", "execution_count": 9, - "id": "8734493e", + "id": "7ae1ab1b", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.471504Z", - "iopub.status.busy": "2024-12-26T13:48:57.471176Z", - "iopub.status.idle": "2024-12-26T13:48:57.538715Z", - "shell.execute_reply": "2024-12-26T13:48:57.538222Z" + "iopub.execute_input": "2025-04-25T10:00:50.807262Z", + "iopub.status.busy": "2025-04-25T10:00:50.806947Z", + "iopub.status.idle": "2025-04-25T10:00:50.973830Z", + "shell.execute_reply": "2025-04-25T10:00:50.973303Z" } }, "outputs": [ @@ -612,7 +618,7 @@ }, { "cell_type": "markdown", - "id": "0d6bbb63", + "id": "4881ab23", "metadata": {}, "source": [ "The Credit card fraud dataset contains numerical data." @@ -621,13 +627,13 @@ { "cell_type": "code", "execution_count": 10, - "id": "ef99e3d1", + "id": "d902ba26", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.540440Z", - "iopub.status.busy": "2024-12-26T13:48:57.540115Z", - "iopub.status.idle": "2024-12-26T13:48:57.572100Z", - "shell.execute_reply": "2024-12-26T13:48:57.571612Z" + "iopub.execute_input": "2025-04-25T10:00:50.975651Z", + "iopub.status.busy": "2025-04-25T10:00:50.975228Z", + "iopub.status.idle": "2025-04-25T10:00:51.008740Z", + "shell.execute_reply": "2025-04-25T10:00:51.008219Z" } }, "outputs": [ @@ -724,7 +730,7 @@ }, { "cell_type": "markdown", - "id": "310ac8fa", + "id": "b7f4cf7c", "metadata": {}, "source": [ "The Oracle AutoMLx solution automatically handles missing values by dropping features with too many missing values, and filling in the remaining missing values based on the feature type.\n", @@ -735,13 +741,13 @@ { "cell_type": "code", "execution_count": 11, - "id": "7e75ff1a", + "id": "26fc0d22", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.573872Z", - "iopub.status.busy": "2024-12-26T13:48:57.573557Z", - "iopub.status.idle": "2024-12-26T13:48:57.607333Z", - "shell.execute_reply": "2024-12-26T13:48:57.606864Z" + "iopub.execute_input": "2025-04-25T10:00:51.010442Z", + "iopub.status.busy": "2025-04-25T10:00:51.010121Z", + "iopub.status.idle": "2025-04-25T10:00:51.044585Z", + "shell.execute_reply": "2025-04-25T10:00:51.044102Z" } }, "outputs": [ @@ -835,7 +841,7 @@ }, { "cell_type": "markdown", - "id": "29c7e0f5", + "id": "53565863", "metadata": {}, "source": [ "We visualize the distribution of the target variable in the data. The dataset is heavily unbalanced, as is often the case in the anomaly detection use-case." @@ -844,13 +850,13 @@ { "cell_type": "code", "execution_count": 12, - "id": "071982cf", + "id": "747e19d4", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:48:57.609063Z", - "iopub.status.busy": "2024-12-26T13:48:57.608757Z", - "iopub.status.idle": "2024-12-26T13:49:10.073564Z", - "shell.execute_reply": "2024-12-26T13:49:10.073003Z" + "iopub.execute_input": "2025-04-25T10:00:51.046308Z", + "iopub.status.busy": "2025-04-25T10:00:51.045978Z", + "iopub.status.idle": "2025-04-25T10:01:10.363843Z", + "shell.execute_reply": "2025-04-25T10:01:10.363186Z" } }, "outputs": [ @@ -10303,9 +10309,9 @@ } }, "text/html": [ - "@@ -17499,12 +17499,12 @@Interactive What-If Explainers +
Interactive What-If Explainers -
@@ -17518,9 +17518,9 @@@@ -17643,12 +17643,12 @@Counterfactual Explanations +
Local feature i
@@ -17849,9 +17849,9 @@-diff --git a/demos/OracleAutoMLx_Classification.ipynb b/demos/OracleAutoMLx_Classification.ipynb index 4e82451..1d22cdf 100644 --- a/demos/OracleAutoMLx_Classification.ipynb +++ b/demos/OracleAutoMLx_Classification.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "93e287de", + "id": "20ec0f8d", "metadata": {}, "source": [ "***\n", @@ -14,19 +14,19 @@ }, { "cell_type": "markdown", - "id": "6770a091", + "id": "9b985fc1", "metadata": {}, "source": [ "Classification Demo Notebook.\n", "\n", - "Copyright © 2024, Oracle and/or its affiliates.\n", + "Copyright © 2025, Oracle and/or its affiliates.\n", "\n", "Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/" ] }, { "cell_type": "markdown", - "id": "f1fe9177", + "id": "57d4d21b", "metadata": {}, "source": [ "## Overview of this Notebook\n", @@ -82,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "1822224f", + "id": "99388a84", "metadata": {}, "source": [ "\n", @@ -94,13 +94,13 @@ { "cell_type": "code", "execution_count": 1, - "id": "7909ef70", + "id": "2cb7a457", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:14.025297Z", - "iopub.status.busy": "2024-12-26T13:52:14.024918Z", - "iopub.status.idle": "2024-12-26T13:52:14.737909Z", - "shell.execute_reply": "2024-12-26T13:52:14.737212Z" + "iopub.execute_input": "2025-04-25T10:04:59.198961Z", + "iopub.status.busy": "2025-04-25T10:04:59.198523Z", + "iopub.status.idle": "2025-04-25T10:05:00.002181Z", + "shell.execute_reply": "2025-04-25T10:05:00.001648Z" } }, "outputs": [], @@ -113,7 +113,7 @@ }, { "cell_type": "markdown", - "id": "b7399ce1", + "id": "ad83cf51", "metadata": {}, "source": [ "Load the required modules." @@ -122,13 +122,13 @@ { "cell_type": "code", "execution_count": 2, - "id": "7869a27a", + "id": "6fcc1e56", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:14.740842Z", - "iopub.status.busy": "2024-12-26T13:52:14.740347Z", - "iopub.status.idle": "2024-12-26T13:52:17.669135Z", - "shell.execute_reply": "2024-12-26T13:52:17.668414Z" + "iopub.execute_input": "2025-04-25T10:05:00.004524Z", + "iopub.status.busy": "2025-04-25T10:05:00.003985Z", + "iopub.status.idle": "2025-04-25T10:05:03.344639Z", + "shell.execute_reply": "2025-04-25T10:05:03.344044Z" } }, "outputs": [], @@ -165,7 +165,7 @@ }, { "cell_type": "markdown", - "id": "ac2dcc74", + "id": "7796b3e4", "metadata": {}, "source": [ "\n", @@ -176,13 +176,13 @@ { "cell_type": "code", "execution_count": 3, - "id": "710d8f5a", + "id": "9a06420f", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:17.671935Z", - "iopub.status.busy": "2024-12-26T13:52:17.671304Z", - "iopub.status.idle": "2024-12-26T13:52:18.495202Z", - "shell.execute_reply": "2024-12-26T13:52:18.494399Z" + "iopub.execute_input": "2025-04-25T10:05:03.347224Z", + "iopub.status.busy": "2025-04-25T10:05:03.346530Z", + "iopub.status.idle": "2025-04-25T10:05:04.284214Z", + "shell.execute_reply": "2025-04-25T10:05:04.283606Z" } }, "outputs": [], @@ -193,7 +193,7 @@ }, { "cell_type": "markdown", - "id": "7500453c", + "id": "abceeeac", "metadata": {}, "source": [ "Lets look at a few of the values in the data" @@ -202,13 +202,13 @@ { "cell_type": "code", "execution_count": 4, - "id": "d8beca57", + "id": "41d71a78", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:18.498077Z", - "iopub.status.busy": "2024-12-26T13:52:18.497367Z", - "iopub.status.idle": "2024-12-26T13:52:18.694127Z", - "shell.execute_reply": "2024-12-26T13:52:18.693516Z" + "iopub.execute_input": "2025-04-25T10:05:04.286478Z", + "iopub.status.busy": "2025-04-25T10:05:04.285972Z", + "iopub.status.idle": "2025-04-25T10:05:04.328608Z", + "shell.execute_reply": "2025-04-25T10:05:04.328101Z" } }, "outputs": [ @@ -373,7 +373,7 @@ }, { "cell_type": "markdown", - "id": "a565d8ea", + "id": "cef2b492", "metadata": {}, "source": [ "The Adult dataset contains a mix of numerical and string data, making it a challenging problem to train machine learning models on." @@ -382,13 +382,13 @@ { "cell_type": "code", "execution_count": 5, - "id": "a2e738bd", + "id": "dd70d8ae", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:18.696261Z", - "iopub.status.busy": "2024-12-26T13:52:18.695747Z", - "iopub.status.idle": "2024-12-26T13:52:18.727538Z", - "shell.execute_reply": "2024-12-26T13:52:18.726931Z" + "iopub.execute_input": "2025-04-25T10:05:04.330541Z", + "iopub.status.busy": "2025-04-25T10:05:04.330052Z", + "iopub.status.idle": "2025-04-25T10:05:04.361416Z", + "shell.execute_reply": "2025-04-25T10:05:04.360918Z" } }, "outputs": [ @@ -473,7 +473,7 @@ }, { "cell_type": "markdown", - "id": "e53c06a1", + "id": "cab51aea", "metadata": {}, "source": [ "The dataset also contains a lot of missing values. The Oracle AutoMLx solution automatically handles missing values by dropping features with too many missing values, and filling in the remaining missing values based on the feature type." @@ -482,13 +482,13 @@ { "cell_type": "code", "execution_count": 6, - "id": "435d5234", + "id": "6295574c", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:18.729568Z", - "iopub.status.busy": "2024-12-26T13:52:18.729076Z", - "iopub.status.idle": "2024-12-26T13:52:18.762250Z", - "shell.execute_reply": "2024-12-26T13:52:18.761653Z" + "iopub.execute_input": "2025-04-25T10:05:04.363288Z", + "iopub.status.busy": "2025-04-25T10:05:04.362814Z", + "iopub.status.idle": "2025-04-25T10:05:04.395592Z", + "shell.execute_reply": "2025-04-25T10:05:04.395094Z" } }, "outputs": [ @@ -573,7 +573,7 @@ }, { "cell_type": "markdown", - "id": "f06ac880", + "id": "76bf62f4", "metadata": {}, "source": [ "We visualize the distribution of the target variable in the training data." @@ -582,13 +582,13 @@ { "cell_type": "code", "execution_count": 7, - "id": "5901e20f", + "id": "3fe2f853", "metadata": { "execution": { - "iopub.execute_input": "2024-12-26T13:52:18.764258Z", - "iopub.status.busy": "2024-12-26T13:52:18.763764Z", - "iopub.status.idle": "2024-12-26T13:52:20.291727Z", - "shell.execute_reply": "2024-12-26T13:52:20.291060Z" + "iopub.execute_input": "2025-04-25T10:05:04.397463Z", + "iopub.status.busy": "2025-04-25T10:05:04.396980Z", + "iopub.status.idle": "2025-04-25T10:05:06.330034Z", + "shell.execute_reply": "2025-04-25T10:05:06.329511Z" } }, "outputs": [ @@ -50339,9 +50339,9 @@ } }, "text/html": [ - "+OracleAutoMLx_Classification_Text @@ -36,6 +36,7 @@ .highlight .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */ .highlight .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */ .highlight .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */ +.highlight .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */ .highlight .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */ .highlight .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */ .highlight .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */ @@ -14538,9 +14539,9 @@ - + - - - + ++@@ -14580,8 +14622,19 @@+++
-Building and Explaining a Text Classifier using AutoMLx
-by the Oracle AutoMLx Team
+Building and Explaining a Text Classifier using AutoMLx
+by the Oracle AutoMLx Team
+ +++++@@ -14593,7 +14646,7 @@+Building and Explaining a Text Classifier using AutoMLx
--AutoMLx Text Classification Demo version 23.2.0.
+AutoMLx Text Classification
Copyright © 2023, Oracle and/or its affiliates.
Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
@@ -14607,46 +14660,45 @@Building and Explaining a Text Classifier using AutoMLx
-@@ -14659,13 +14711,13 @@Overview of this Notebook¶
In this notebook we will build a classifier using the Oracle AutoMLx tool for the public 20newsgroup dataset. The dataset is a binary classification dataset, and more details about the dataset can be found at http://qwone.com/~jason/20Newsgroups/. -We explore the various options provided by the Oracle AutoMLx tool, allowing the user to exercise control over the AutoML training process. We then evaluate the different models trained by AutoML. Finally we provide an overview of the possibilites that Oracle AutoMLx offers for explaining the predictions of the tuned model.
+Overview of this Notebook¶
In this notebook we will build a classifier using the Oracle AutoMLx tool for the public 20newsgroup dataset. The dataset is a binary classification dataset, and more details about the dataset can be found at http://qwone.com/~jason/20Newsgroups/. +We explore the various options provided by the Oracle AutoMLx tool, allowing the user to exercise control over the AutoML training process. We then evaluate the different models trained by AutoML. Finally we provide an overview of the possibilities that Oracle AutoMLx offers for explaining the predictions of the tuned model.
-Prerequisites¶
+
Prerequisites¶
- Experience level: Novice (Python and Machine Learning)
- Professional experience: Some industry experience
-Business Use¶
Data analytics and modeling problems using Machine Learning (ML) are becoming popular and often rely on data science expertise to build accurate ML models. Such modeling tasks primarily involve the following steps:
+Business Use¶
Data analytics and modeling problems using Machine Learning (ML) are becoming popular and often rely on data science expertise to build accurate ML models. Such modeling tasks differs according to type of problem to be solved, eg. Text classification primarily involve the following steps:
-
-- Preprocess dataset (clean, impute, engineer features, normalize).
+- Preprocess dataset (vectorize).
- Pick an appropriate model for the given dataset and prediction task at hand.
- Tune the chosen model’s hyperparameters for the given dataset.
All of these steps are significantly time consuming and heavily rely on data scientist expertise. Unfortunately, to make this problem harder, the best feature subset, model, and hyperparameter choice widely varies with the dataset and the prediction task. Hence, there is no one-size-fits-all solution to achieve reasonably good model performance. Using a simple Python API, AutoML can quickly (faster) jump-start the datascience process with an accurately-tuned model and appropriate features for a given prediction task.
-Table of Contents¶
-
- 0. Setup
-- 1. Load the 20newsgroup Income dataset
-- 2. AutoML
-
- 2.0. Set the engine and deprecation warnings
-- 2.1. Create an Instance of Oracle AutoMLx
-- 2.2. Train a Model using AutoML
-- 2.3. Analyze the AutoML optimization process
-
- 2.3.1. Algorithm Selection
-- 2.3.2. Adaptive Sampling
-- 2.3.3. Feature Selection
-- 2.3.4. Hyperparameter Tuning
+All of these steps are significantly time consuming and heavily rely on data scientist expertise. Unfortunately, to make this problem harder, the best feature subset, model, and hyperparameter choice widely varies with the dataset and the prediction task. Hence, there is no one-size-fits-all solution to achieve reasonably good model performance. Using a simple Python API, AutoML can quickly jump-start the datascience process with an accurately-tuned model and appropriate features for a given prediction task.
+Table of Contents¶
+
- Setup
+- Load the 20newsgroup Income dataset
+- AutoML
-- 3. Machine Learning Explainability (MLX)
Table of Contents
+-@@ -14673,9 +14725,7 @@Setup¶
Basic
In [1]:--! pip install seaborn==0.12.1 - -%matplotlib inline +@@ -14685,45 +14735,6 @@%matplotlib inline %load_ext autoreload %autoreload 2Setup¶
Basic
---- - -- -- -- - - - - -- ---Requirement already satisfied: seaborn==0.12.1 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (0.12.1) -Requirement already satisfied: pandas>=0.25 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from seaborn==0.12.1) (1.4.1) -Requirement already satisfied: matplotlib!=3.6.1,>=3.1 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from seaborn==0.12.1) (3.5.1) -Requirement already satisfied: numpy>=1.17 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from seaborn==0.12.1) (1.22.2) -Requirement already satisfied: kiwisolver>=1.0.1 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (1.1.0) -Requirement already satisfied: pyparsing>=2.2.1 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (2.4.7) -Requirement already satisfied: python-dateutil>=2.7 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (2.8.2) -Requirement already satisfied: packaging>=20.0 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (21.3) -Requirement already satisfied: pillow>=6.2.0 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (9.4.0) -Requirement already satisfied: fonttools>=4.22.0 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (4.29.1) -Requirement already satisfied: cycler>=0.10 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (0.10.0) -Requirement already satisfied: pytz>=2020.1 in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from pandas>=0.25->seaborn==0.12.1) (2022.1) -Requirement already satisfied: six in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from cycler>=0.10->matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (1.16.0) -Requirement already satisfied: setuptools in /scratch_user/ypushak/automl-3/automl/py_3.8.7/lib/python3.8/site-packages (from kiwisolver>=1.0.1->matplotlib!=3.6.1,>=3.1->seaborn==0.12.1) (62.3.4) - -[notice] A new release of pip available: 22.2.2 -> 23.0.1 -[notice] To update, run: pip install --upgrade pip --@@ -14744,24 +14755,21 @@-Setup¶
Basic
In [2]:-@@ -14776,8 +14784,8 @@import gzip +import numpy as np import pandas as pd import matplotlib.pyplot as plt -import seaborn as sns from sklearn.metrics import f1_score from sklearn.model_selection import train_test_split from sklearn.datasets import fetch_20newsgroups +import time +import datetime # Settings for plots -plt.rcParams['figure.figsize'] = [10, 7] -plt.rcParams['font.size'] = 15 -sns.set(color_codes=True) -sns.set(font_scale=1.5) -sns.set_palette("bright") -sns.set_style("whitegrid") - -import automl -from automl import init +plt.rcParams['figure.figsize'] = [10, 7] +plt.rcParams['font.size'] = 15 + +import automlx +from automlx import initSetup¶
Basic
@@ -14790,15 +14798,15 @@- -Load the 20 News Group dataset¶
We start by reading in the dataset from sklearn. The dataset has already been pre-split into training and test sets. The training set will be used to create a Machine Learning model using AutoML, and the test set will be used to evaluate the model's performance on unseen data.
+ +Load the 20 News Group dataset¶
We start by reading in the dataset from sklearn. The dataset has already been pre-split into training and test sets. The training set will be used to create a Machine Learning model using AutoMLx, and the test set will be used to evaluate the model's performance on unseen data.
Load the 20 News Group datasetIn [3]:
- --@@ -14924,7 +14932,7 @@train = fetch_20newsgroups(subset='train') -test = fetch_20newsgroups(subset='test') +@@ -14852,26 +14860,26 @@train = fetch_20newsgroups(subset='train') +test = fetch_20newsgroups(subset='test') target_names = train.target_names X_train, y_train = pd.DataFrame(train.data), pd.DataFrame(train.target) X_test, y_test = pd.DataFrame(test.data), pd.DataFrame(test.target) -column_names = ["Message"] +column_names = ["Message"] X_train.columns = column_names X_test.columns = column_namesLoad the 20 News Group dataset -
['alt.atheism', - 'comp.graphics', - 'comp.os.ms-windows.misc', - 'comp.sys.ibm.pc.hardware', - 'comp.sys.mac.hardware', - 'comp.windows.x', - 'misc.forsale', - 'rec.autos', - 'rec.motorcycles', - 'rec.sport.baseball', - 'rec.sport.hockey', - 'sci.crypt', - 'sci.electronics', - 'sci.med', - 'sci.space', - 'soc.religion.christian', - 'talk.politics.guns', - 'talk.politics.mideast', - 'talk.politics.misc', - 'talk.religion.misc']+['alt.atheism', + 'comp.graphics', + 'comp.os.ms-windows.misc', + 'comp.sys.ibm.pc.hardware', + 'comp.sys.mac.hardware', + 'comp.windows.x', + 'misc.forsale', + 'rec.autos', + 'rec.motorcycles', + 'rec.sport.baseball', + 'rec.sport.hockey', + 'sci.crypt', + 'sci.electronics', + 'sci.med', + 'sci.space', + 'soc.religion.christian', + 'talk.politics.guns', + 'talk.politics.mideast', + 'talk.politics.misc', + 'talk.religion.misc']Load the 20 News Group dataset
-- -
- Algorithm -#Samples -#Features -Mean Validation Score -Hyperparameters -CPU Time -Memory Usage (GB) ++ - -TorchMLPClassifier_HT -948 -3972 --0.0589 -{'activation': 'relu', 'class_weight': None, 'dropout': 0.1, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'adagrad'} -15.5464 -(0.007289886474609375, None) -- -TorchMLPClassifier_HT -948 -3972 --0.0740 -{'activation': 'relu', 'class_weight': None, 'dropout': 0.0012425681319433632, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'adam'} -14.4130 -(6.103515625e-05, None) -- -TorchMLPClassifier_HT -948 -3972 --0.0740 -{'activation': 'relu', 'class_weight': None, 'dropout': 1e-05, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'adam'} -15.2612 -(0.000148773193359375, None) -- -TorchMLPClassifier_HT -948 -3972 --0.0740 -{'activation': 'relu', 'class_weight': 'balanced', 'dropout': 0.1, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'adam'} -15.6056 -(0.0, None) -- -TorchMLPClassifier_HT -948 -3972 --0.0740 -{'activation': 'relu', 'class_weight': None, 'dropout': 0.1, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'adam'} -17.4901 -(3.0517578125e-05, None) -- -... -... -... -... -... -... -... -- TorchMLPClassifier_AdaBoostClassifier_FS -948 -1 --1.4784 -{'activation': 'relu', 'class_weight': None, 'dropout': 0.1, 'l2_reg': 0.0, 'nr_layers': 1, 'nr_neurons': 100, 'optimizer': 'adam'} -0.5320 -0.0 +Training Dataset size +(2715, 1) - +GaussianNB_AS -948 -11026 --2.6122 -{} -0.2168 -0.0 +Validation Dataset size +(679, 1) ++ +CV +ManualSplit(Shuffle=False, Seed=7) ++ Optimization Metric +neg_log_loss - TorchMLPClassifier_HT -948 -3972 --8.2554 -{'activation': 'tanh', 'class_weight': 'balanced', 'dropout': 5e-06, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 133, 'optimizer': 'rmsprop'} -20.4976 -(0.0020904541015625, None) +Selected Algorithm +LGBMClassifier - DecisionTreeClassifier_AS -948 -11026 --10.0133 -{'class_weight': None, 'max_features': 1.0, 'min_samples_leaf': 0.000625, 'min_samples_split': 0.00125} -0.5121 -0.0 +Selected Hyperparameters +{'num_leaves': 31, 'boosting_type': 'gbdt', 'learning_rate': 0.1, 'min_child_weight': 0.00119999, 'max_depth': -1, 'reg_alpha': 0, 'reg_lambda': 1, 'n_estimators': 100, 'class_weight': 'balanced'} - TorchMLPClassifier_HT -948 -3972 --12.1224 -{'activation': 'relu', 'class_weight': None, 'dropout': 0.1, 'l2_reg': 0.0, 'nr_layers': 3, 'nr_neurons': 100, 'optimizer': 'rmsprop'} -16.5498 -(0.0, None) +Python version +3.8.7 (default, Aug 25 2022, 13:59:56) \n[GCC 8.5.0 20210514 (Red Hat 8.5.0-10.1.0.1)] ----------We also provide the capability to visualize the results of each stage of the AutoML pipeline.
-------- --Algorithm Selection¶
The plot below shows the scores predicted by Algorithm Selection for each algorithm. The horizontal line shows the average score across all algorithms. Algorithms below the line are colored turquoise, whereas those with a score higher than the mean are colored teal. Here we can see that the
+TorchMLPClassifier
achieved the highest predicted score (orange bar), and is chosen for subsequent stages of the Pipeline.-------+In [14]:------# Each trial is a tuple of -# (algorithm, no. samples, no. features, mean CV score, hyperparameters, -# all CV scores, total CV time (s), memory usage (Gb)) -trials = est1.model_selection_trials_ -colors = [] -scores = [x[3] for x in trials] -models = [x[0] for x in trials] -y_margin = 0.10 * (max(scores) - min(scores)) -s = pd.Series(scores, index=models).sort_values(ascending=False) + + -for f in s.keys(): - if f == '{}_AS'.format(est1.selected_model_): - colors.append('orange') - elif s[f] >= s.mean(): - colors.append('teal') - else: - colors.append('turquoise') - -fig, ax = plt.subplots(1) -ax.set_title("Algorithm Selection Trials") -ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) -ax.set_ylabel(est1.inferred_score_metric[0]) -s.plot.bar(ax=ax, color=colors, edgecolor='black') -ax.axhline(y=s.mean(), color='black', linewidth=0.5) -plt.show() -+-Trials Summary-- -- --------- --Adaptive Sampling¶
Following Algorithm Selection, Adaptive Sampling aims to find the smallest dataset sample that can be created without compromising validation set score for the chosen model. Given the small size of the training data (948 samples), Adaptive Sampling is not relevant here.
- ----- -----In [15]:------ -# Each trial is a tuple of -# (algorithm, no. samples, no. features, mean CV score, hyperparameters, -# all CV scores, total CV time (s), memory usage (Gb)) -trials = est1.adaptive_sampling_trials_ -scores = [x[3] for x in trials] -n_samples = [x[1] for x in trials] -y_margin = 0.10 * (max(scores) - min(scores)) - -fig, ax = plt.subplots(1) -ax.set_title("Adaptive Sampling ({})".format(trials[0][0])) -ax.set_xlabel('Dataset sample size') -ax.set_ylabel(est1.inferred_score_metric[0]) -ax.grid(color='g', linestyle='-', linewidth=0.1) -ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) -ax.plot(n_samples, scores, 'k:', marker="s", color='teal', markersize=3) -plt.show() --- --- - -- -- -- - - - - - - -- --- --
-------- --Feature Selection¶
After finding a sample subset, the next step is to find a relevant feature subset to maximize score for the chosen algorithm. The Feature Selection step identifies the smallest feature subset that does not compromise on the score of the chosen algorithm. The orange line shows the optimal number of features chosen by Feature Selection (in this case, retaining only about 4 000 of the more than 11 000 available words).
- ----- -----In [16]:------ -# Each trial is a tuple of -# (algorithm, no. samples, no. features, mean CV score, hyperparameters, -# all CV scores, total CV time (s), memory usage (Gb)) -trials = est1.feature_selection_trials_ -scores = [x[3] for x in trials] -n_features = [x[2] for x in trials] -y_margin = 0.10 * (max(scores) - min(scores)) - - -fig, ax = plt.subplots(1) -ax.set_title("Feature Selection Trials") -ax.set_xlabel("Number of Features") -ax.set_ylabel(est1.inferred_score_metric[0]) -ax.grid(color='g', linestyle='-', linewidth=0.1) -ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) -ax.plot(n_features, scores, 'k:', marker="s", color='teal', markersize=3) -ax.axvline(x=len(est1.selected_features_names_), color='orange', linewidth=2.0) -plt.show() --- --- - -- -- -- - - - - - - -- --- --
-------- --Hyperparameter Tuning¶
Hyperparameter Tuning is the last stage of the AutoML pipeline, and focuses on improving the chosen algorithm's score on the reduced dataset (after Adaptive Sampling and Feature Selection). We use a novel algorithm to search across many hyperparameters dimensions, and converge automatically when optimal hyperparameters are identified. Each trial in the graph below represents a particular hyperparameters configuration for the selected model.
- ---- -----In [17]:------ -# Each trial is a tuple of -# (algorithm, no. samples, no. features, mean CV score, hyperparameters, -# all CV scores, total CV time (s), memory usage (Gb)) -trials = est1.tuning_trials_ -scores = [x[3] for x in reversed(trials)] -y_margin = 0.10 * (max(scores) - min(scores)) - - -fig, ax = plt.subplots(1) -ax.set_title("Hyperparameter Tuning Trials") -ax.set_xlabel("Iteration $n$") -ax.set_ylabel(est1.inferred_score_metric[0]) -ax.grid(color='g', linestyle='-', linewidth=0.1) -ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) -ax.plot(range(1, len(trials) + 1), scores, 'k:', marker="s", color='teal', markersize=3) -plt.show() ---- - -- -- - - - - - - -@@ -15923,109 +19520,16 @@-![]()
Hyperparameter Tuning
-------- --Specify a time budget to AutoML¶
The Oracle AutoMLx tool also supports a user given time budget in seconds. Given the small size of this dataset, we give a small
- -time budget
of 10 seconds using the time_budget argument.--- -----In [18]:------ -est2 = automl.Pipeline(task="classification") -est2.fit(X_train, y_train, X_valid, y_valid, cv=None, col_types=['text'], time_budget=10) - -y_predict = est2.predict(X_test) -score_default = f1_score(y_test, y_predict, average="micro") - -print('F1 micro Score on test data: {:3.3f}'.format(score_default)) ---- - -- -- - - - - -- ---[2023-03-22 09:18:12,531] [automl.pipeline] Random state (7) is used for model builds -[2023-03-22 09:18:12,794] [automl.pipeline] Dataset shape: (948, 1) -[2023-03-22 09:18:12,841] [automl.pipeline] Running Auto-Preprocessing -[2023-03-22 09:18:14,757] [automl.pipeline] Preprocessing completed. Updated Dataset shape: (948, 11026), cv: None -[2023-03-22 09:18:19,069] [automl.pipeline] SVC, KNeighborsClassifier are disabled for datasets with > 10K samples or > 1K features -[2023-03-22 09:18:19,070] [automl.pipeline] Running Model Selection --- - - - - -- ---Time budget exceeded by 0.05s, resetting XEngine -Timebudget Exceeded or Timedout completed 1/9, 0 tasks timedout --- - - - - --+[2023-03-22 09:18:22,915] [automl.pipeline] Model Selection completed. Selected model: ['DecisionTreeClassifier'] -[2023-03-22 09:18:22,917] [automl.pipeline] Running Adaptive Sampling. Dataset Shape: (948, 11026), Valid Shape: (238, 11026), CV: None, Class counts: [237 237 237 237] -[2023-03-22 09:18:22,969] [automl.pipeline] Timebudget exhausted. Skipping Adaptive Sampling -[2023-03-22 09:18:22,987] [automl.pipeline] Adaptive Sampling Completed. Updated Dataset Shape: (948, 11026), Valid Shape: (238, 11026), CV: None, Class counts: [237 237 237 237] -[2023-03-22 09:18:22,987] [automl.pipeline] Starting Feature Selection 0. Dataset Shape: (948, 11026) -[2023-03-22 09:18:23,036] [automl.pipeline] Timebudget exhausted. Skipping Feature Selection -[2023-03-22 09:18:23,037] [automl.pipeline] Using all features: Index(['00', '000', '0000', '00000', '00041032', '0004422', '001230', '001321', - '0029', '004418', - ... - 'zinc', 'zion', 'zip', 'zipping', 'zisfein', 'zmodem', 'zone', 'zoo', - 'zoology', 'zrepachol'], - dtype='object', length=11026) -[2023-03-22 09:18:23,058] [automl.pipeline] Feature Selection 0 completed. Updated Dataset shape: (948, 11026) -[2023-03-22 09:18:23,107] [automl.pipeline] Timebudget exhausted. Skipping Hyperparameter Optimization for DecisionTreeClassifier -[2023-03-22 09:18:23,564] [automl.pipeline] (Re)fitting Pipeline -[2023-03-22 09:18:29,310] [automl.xengine] Local ProcessPool execution (n_jobs=40) -[2023-03-22 09:18:29,512] [automl.pipeline] AutoML completed. Time taken - 15.504 sec -F1 micro Score on test data: 0.716 --++- +++-We also provide the capability to visualize the results of each stage of the AutoMLx pipeline.
-@@ -16033,15 +19537,8 @@-Specify a time budget to AutoML
@@ -16051,16 +19548,37 @@- -Specify a different scoring metric to AutoML¶
By default, the score metric is set to
-neg_log_loss
for classifcation andneg_mean_squared_error
for regression.The user can also choose another scoring metric. The list of possible metrics is given by:
--
-- For binary classification, one of 'roc_auc', 'accuracy', 'f1', 'precision', 'recall', 'f1_micro', 'f1_macro', 'f1_weighted', 'f1_samples', 'recall_micro', 'recall_macro', 'recall_weighted', 'recall_samples', 'precision_micro', 'precision_macro', 'precision_weighted', 'precision_samples'
-- For multiclass classification , one of 'neg_log_loss', 'recall_macro', 'accuracy','f1_micro', 'f1_macro', 'f1_weighted', 'f1_samples', 'recall_micro', 'recall_weighted', 'recall_samples', 'precision_micro', 'precision_macro', 'precision_weighted', 'precision_samples'
-- For regression, one of 'neg_mean_squared_error', 'r2', 'neg_mean_absolute_error', 'neg_mean_squared_log_error', 'neg_median_absolute_error'
-Here, we ask AutoML to optimize for the 'f1_micro' scoring metric.
+ +Algorithm Selection¶
The plot below shows the scores predicted by Algorithm Selection for each algorithm. The horizontal line shows the average score across all algorithms. Algorithms below the line are colored turquoise, whereas those with a score higher than the mean are colored teal.
Specify a different scorin
-- -In [19]:+In [12]:- --- -@@ -16081,172 +19599,17 @@est3 = automl.Pipeline(task="classification", score_metric='f1_micro') -est3.fit(X_train, y_train, X_valid, y_valid, cv=None, col_types=['text'], time_budget=60) +# Each trial is a row in a dataframe that contains +# Algorithm, Number of Samples, Number of Features, Hyperparameters, Score, Runtime, Memory Usage, Step as features +trials = est1.completed_trials_summary_[est1.completed_trials_summary_["Step"].str.contains('Model Selection')] +name_of_score_column = f"Score ({est1._inferred_score_metric[0].name})" +trials.replace([np.inf, -np.inf], np.nan, inplace=True) +trials.dropna(subset=[name_of_score_column], inplace = True) +scores = trials[name_of_score_column].tolist() +models = trials['Algorithm'].tolist() +colors = [] -y_predict = est3.predict(X_test) -score_default = f1_score(y_test, y_predict, average="micro") +y_margin = 0.10 * (max(scores) - min(scores)) +s = pd.Series(scores, index=models).sort_values(ascending=False) +s = s.dropna() +for f in s.keys(): + if f.strip() == est1.selected_model_.strip(): + colors.append('orange') + elif s[f] >= s.mean(): + colors.append('teal') + else: + colors.append('turquoise') -print('F1 micro Score on test data: {:3.3f}'.format(score_default)) +fig, ax = plt.subplots(1) +ax.set_title("Algorithm Selection Trials") +ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) +ax.set_ylabel(est1._inferred_score_metric[0].name) +s.plot.bar(ax=ax, color=colors, edgecolor='black') +ax.axhline(y=s.mean(), color='black', linewidth=0.5) +plt.show()Specify a different scorin -
--[2023-03-22 09:18:32,696] [automl.pipeline] Random state (7) is used for model builds -[2023-03-22 09:18:32,931] [automl.pipeline] Dataset shape: (948, 1) -[2023-03-22 09:18:32,976] [automl.pipeline] Running Auto-Preprocessing -[2023-03-22 09:18:34,815] [automl.pipeline] Preprocessing completed. Updated Dataset shape: (948, 11026), cv: None -[2023-03-22 09:18:39,467] [automl.pipeline] SVC, KNeighborsClassifier are disabled for datasets with > 10K samples or > 1K features -[2023-03-22 09:18:39,468] [automl.pipeline] Running Model Selection -[2023-03-22 09:19:22,252] [automl.pipeline] Model Selection completed. Selected model: ['TorchMLPClassifier'] -[2023-03-22 09:19:22,253] [automl.pipeline] Running Adaptive Sampling. Dataset Shape: (948, 11026), Valid Shape: (238, 11026), CV: None, Class counts: [237 237 237 237] --- - - - - -- ---Time budget exceeded by 4.87s, resetting XEngine -Timebudget Exceeded or Timedout completed 0/1, 0 tasks timedout --- - - - - -- ---[2023-03-22 09:19:37,891] [automl.pipeline] Adaptive Sampling Completed. Updated Dataset Shape: (948, 11026), Valid Shape: (238, 11026), CV: None, Class counts: [237 237 237 237] -[2023-03-22 09:19:37,891] [automl.pipeline] Starting Feature Selection 0. Dataset Shape: (948, 11026) -[2023-03-22 09:19:37,935] [automl.pipeline] Timebudget exhausted. Skipping Feature Selection -[2023-03-22 09:19:37,936] [automl.pipeline] Using all features: Index(['00', '000', '0000', '00000', '00041032', '0004422', '001230', '001321', - '0029', '004418', - ... - 'zinc', 'zion', 'zip', 'zipping', 'zisfein', 'zmodem', 'zone', 'zoo', - 'zoology', 'zrepachol'], - dtype='object', length=11026) -[2023-03-22 09:19:37,955] [automl.pipeline] Feature Selection 0 completed. Updated Dataset shape: (948, 11026) -[2023-03-22 09:19:37,999] [automl.pipeline] Timebudget exhausted. Skipping Hyperparameter Optimization for TorchMLPClassifier -[2023-03-22 09:19:38,594] [automl.pipeline] (Re)fitting Pipeline -[2023-03-22 09:20:31,302] [automl.xengine] Local ProcessPool execution (n_jobs=40) -[2023-03-22 09:20:31,487] [automl.pipeline] AutoML completed. Time taken - 117.251 sec -F1 micro Score on test data: 0.908 ----------- --Machine Learning Explainability¶
----------For a variety of decision-making tasks, getting only a prediction as model output is not sufficient. A user may wish to know why the model outputs that prediction, or which data features are relevant for that prediction. For that purpose the Oracle AutoMLx solution defines the MLExplainer object, which allows to compute a variety of model explanations
- -Initializing an MLExplainer¶
The MLExplainer object takes as argument the trained model, the training data and labels, as well as the task.
- ----+----In [20]:------explainer = automl.MLExplainer(est1, - X_train, - y_train, - target_names=['sci.crypt', 'sci.electronics', 'sci.med', 'sci.space'], - task="classification", - col_types=["text"]) -+-
--------- --Model Explanations (Global Token Importance)¶
-----------For text classification tasks, since we first extract tokens (features), the Oracle AutoMLx solution offers a single way to compute a notion of token importance: Global Token Importance. The notion of Global Token Importance intuitively measures how much a token impacts the model's predictions (relative to the provided train labels). This notion of token importance considers each token independently from all other tokens. Tokens are the most fine-grained building blocks of the NLP model, such as sentences, words, or characters.
----------Computing the importance¶
----------We use a permutation-based method to successively measure the importance of each token (feature). Such a method therefore runs in linear time with respect to the -number of features (tokens) in the dataset.
-The method
explain_model()
allows to compute such feature importances. It also provides 95% confidence intervals for each token importance attribution.-@@ -16256,23 +19619,8 @@----In [21]:------result_explain_model_default = explainer.explain_model() -Computing the importance
---Visualization¶
-----@@ -16282,10 +19630,28 @@--There are two options to show the explanation's results:
--
-- -
to_dataframe()
will return a dataframe of the results.- -
show_in_notebook()
will show the results as a bar plot.The features are returned in decreasing order of importance.
+ +Feature Selection¶
After finding a sample subset, the next step is to find a relevant feature subset to maximize score for the chosen algorithm. The feature selection step identifies the smallest feature subset that does not compromise on the score of the chosen algorithm. The orange line shows the optimal number of features chosen by Feature Selection.
Visualization
-In [22]:+In [13]:-+@@ -16303,179 +19669,16 @@result_explain_model_default.to_dataframe(n_tokens=20) +# Each trial is a row in a dataframe that contains +# Algorithm, Number of Samples, Number of Features, Hyperparameters, Score, Runtime, Memory Usage, Step as features +trials = est1.completed_trials_summary_[est1.completed_trials_summary_["Step"].str.contains('Feature Selection')] +trials.replace([np.inf, -np.inf], np.nan, inplace=True) +trials.dropna(subset=[name_of_score_column], inplace = True) +trials.sort_values(by=['# Features'],ascending=True, inplace = True) +scores = trials[name_of_score_column].tolist() +n_features = trials['# Features'].tolist() + +y_margin = 0.10 * (max(scores) - min(scores)) +fig, ax = plt.subplots(1) +ax.set_title("Feature Selection Trials") +ax.set_xlabel("Number of Features") +ax.set_ylabel(est1._inferred_score_metric[0].name) +ax.grid(color='g', linestyle='-', linewidth=0.1) +ax.set_ylim(min(scores) - y_margin, max(scores) + y_margin) +ax.plot(n_features, scores, 'k:', marker="s", color='teal', markersize=3) +ax.axvline(x=len(est1.selected_features_names_), color='orange', linewidth=2.0) +plt.show()Visualization -
Out[22]:- - - --@@ -16483,16 +19686,53 @@- -- -
+ + + + + +- - - -- token -attribution -upper_bound -lower_bound -- -0 -security -0.000048 -0.000049 -0.000048 -- -1 -orbit -0.000026 -0.000046 -0.000006 -- -2 -space -0.000025 -0.000036 -0.000013 -- -3 -prb -0.000021 -0.000025 -0.000017 -- -4 -gtoal -0.000017 -0.000028 -0.000006 -- -5 -moon -0.000016 -0.000016 -0.000016 -- -6 -encryption -0.000015 -0.000018 -0.000013 -- -7 -aurora -0.000012 -0.000013 -0.000010 -- -8 -tapped -0.000011 -0.000012 -0.000010 -- -9 -circuit -0.000009 -0.000012 -0.000006 -- -10 -alaska -0.000007 -0.000009 -0.000005 -- -11 -disease -0.000006 -0.000006 -0.000006 -- -12 -launch -0.000005 -0.000009 -0.000002 -- -13 -shuttle -0.000005 -0.000006 -0.000004 -- -14 -crypto -0.000005 -0.000005 -0.000005 -- -15 -power -0.000005 -0.000005 -0.000004 -- -16 -pitt -0.000005 -0.000006 -0.000003 -- -17 -encrypted -0.000004 -0.000004 -0.000003 -- -18 -spacecraft -0.000004 -0.000004 -0.000003 -- - -19 -clipper -0.000004 -0.000004 -0.000003 -++![]()
Visualization
+++++++ ++Hyperparameter Tuning¶
Hyperparameter Tuning is the last stage of the AutoMLx pipeline, and focuses on improving the chosen algorithm's score on the reduced dataset (after Adaptive Sampling and Feature Selection). We use a novel algorithm to search across many hyperparameters dimensions, and converge automatically when optimal hyperparameters are identified. Each trial in the graph below represents a particular hyperparameters configuration for the selected model.
++-+ +In [23]:+In [14]:+ +-+ +@@ -16514,128 +19754,186 @@result_explain_model_default.show_in_notebook(n_tokens=20) +# Each trial is a row in a dataframe that contains +# Algorithm, Number of Samples, Number of Features, Hyperparameters, Score, Runtime, Memory Usage, Step as features +trials = est1.completed_trials_summary_[est1.completed_trials_summary_["Step"].str.contains('Model Tuning')] +trials.replace([np.inf, -np.inf], np.nan, inplace=True) +trials.dropna(subset=[name_of_score_column], inplace = True) +trials.drop(trials[trials['Finished'] == -1].index, inplace = True) +trials['Finished']= trials['Finished'].apply(lambda x: time.mktime(datetime.datetime.strptime(x, + "%a %b %d %H:%M:%S %Y").timetuple())) +trials.sort_values(by=['Finished'],ascending=True, inplace = True) +scores = trials[name_of_score_column].tolist() +score = [] +score.append(scores[0]) +for i in range(1,len(scores)): + if scores[i]>= score[i-1]: + score.append(scores[i]) + else: + score.append(score[i-1]) +y_margin = 0.10 * (max(score) - min(score)) + +fig, ax = plt.subplots(1) +ax.set_title("Hyperparameter Tuning Trials") +ax.set_xlabel("Iteration $n$") +ax.set_ylabel(est1._inferred_score_metric[0].name) +ax.grid(color='g', linestyle='-', linewidth=0.1) +ax.set_ylim(min(score) - y_margin, max(score) + y_margin) +ax.plot(range(1, len(trials) + 1), score, 'k:', marker="s", color='teal', markersize=3) +plt.show()Visualization - - + +
++ ++
++++++++ ++Advanced AutoML Configuration¶
You can also configure the pipeline with suitable parameters according to your needs.
+ +++++ +++++In [15]:++++++ +custom_pipeline = automlx.Pipeline( + task='classification', + model_list=[ # Specify the models you want the AutoML to consider + 'GaussianNB', + 'LGBMClassifier', +], + min_features=1.0, # Specify minimum features to force the model to use. It can take 3 possible types of values: + # If int, 0 < min_features <= n_features, + # If float, 0 < min_features <= 1.0, 1.0 means disabling feature selection + # If list, names of features to keep, for example ['a', 'b'] means keep features 'a' and 'b' + + n_algos_tuned=2, # Choose how many models to tune + adaptive_sampling=False, # Disable or enable Adaptive Sampling step. Default to `True` + preprocessing=True, # Disable or enable Preprocessing step. Default to `True` + search_space={}, # You can specify the hyper-parameters and ranges AutoML searches + max_tuning_trials=2, # The maximum number of tuning trials. Can be integer or Dict (max number for each model) + score_metric='f1_macro', # Any scikit-learn metric or a custom function +) ++++++++++A few of the advanced settings can be passed directly to the pipeline's fit method, instead of its constructor.
+ ++@@ -16680,8 +19978,9 @@+++++In [16]:++++++ +custom_pipeline.fit( + X_train, + y_train, + X_valid, + y_valid, + col_types=["text"], + time_budget= 50, # Specify time budget in seconds + cv='auto' # Automatically pick a good cross-validation (cv) strategy for the user's dataset. + # Ignored if X_valid and y_valid are provided. + # Can also be: + # - An integer (for example, to use 5-fold cross validation) + # - A list of data indices to use as splits (for advanced, such as time-based splitting) +) +y_proba = custom_pipeline.predict_proba(X_test) +score_default = f1_score(y_test, y_predict, average="micro") + +print(f'Score on test data : {score_default}') ++@@ -16657,7 +19955,7 @@+ ++++-++[2024-05-23 10:42:32,537] [automlx.interface] Dataset shape: (3394,1) +[2024-05-23 10:42:32,598] [automlx.interface] Model Tune disabled. +[2024-05-23 10:42:32,885] [automlx.data_transform] Running preprocessing. Number of features: 2 +[2024-05-23 10:42:52,004] [automlx.data_transform] Preprocessing completed. Took 19.119 secs +[2024-05-23 10:42:52,334] [automlx.process] Running Model Generation +[2024-05-23 10:43:10,641] [automlx.process] Model Generation completed. +[2024-05-23 10:43:11,010] [automlx.model_selection] Running Model Selection +[2024-05-23 10:43:11,011] [automlx.trials] Fewer models (2) than top_k (2) provided, skipping model selection +[2024-05-23 10:43:22,393] [automlx.interface] Re-fitting pipeline +[2024-05-23 10:44:20,154] [automlx.interface] AutoMLx completed. +Score on test data : 0.6987519915029209 ++-+++++++++ ++Machine Learning Explainability¶
++++++++++For a variety of decision-making tasks, getting only a prediction as model output is not sufficient. A user may wish to know why the model outputs that prediction, or which data features are relevant for that prediction. For that purpose the Oracle AutoMLx solution defines the MLExplainer object, which allows to compute a variety of model explanations
+ +Initializing an MLExplainer¶
The MLExplainer object takes as argument the trained model, the training data and labels, as well as the task.
+@@ -16645,8 +19943,8 @@++++In [17]:++++++explainer = automlx.MLExplainer(est1, + X_train, + y_train, + target_names=target_names, + task="classification", + col_types=["text"]) +Visualization
Local Token importance
@@ -16669,7 +19967,7 @@-For text classification tasks, since we first extract tokens (features), the Oracle AutoMLx solution offers a single way to compute a notion of token importance: Local Token Importance. The notion of Local Token Importance intuitively measures how much a token impacts an instance's predictions (relative to the provided train labels). This notion of token importance considers each token independently from all other tokens.
+For text classification tasks, since we first extract tokens (features), the Oracle AutoMLx solution offers a single way to compute a notion of token importance: Global Token Importance. The notion of Global Token Importance intuitively measures how much a token impacts the model's predictions (relative to the provided train labels). Tokens are the most fine-grained building blocks of the NLP model, such as sentences, words, or characters.
Local Token importance
Compute the importance
@@ -16691,11 +19990,10 @@-By default we use a surrogate method to successively measure the importance of each token in a given instance. Such a method therefore runs in linear time with respect to the number of features in the dataset.
-The method
+explain_prediction()
allows to compute such feature importances. It also provides 95% confidence intervals for each feature importance attribution.We use a permutation-based method to successively measure the importance of each token (feature). Such a method therefore runs in linear time with respect to the +number of features (tokens) in the dataset.
+The method
explain_model()
allows to compute such feature importances.Compute the importance
-In [24]:+In [18]:@@ -16736,10 +20034,10 @@-@@ -16727,7 +20019,13 @@@@ -16710,13 +20008,7 @@index = 0 -result_explain_prediction_default = explainer.explain_prediction(X_train.iloc[index:index + 1, :]) +result_explain_model_default = explainer.explain_model()Compute the importance
-There are two options to show the explanation's results:
--
-- -
to_dataframe()
will return a dataframe of the results.- -
show_in_notebook()
will show the results as a bar plot.The features are returned in decreasing order of importance.
- +Visualization¶
Compute the importance
-Visualization¶
+There are two options to show the explanation's results:
++
+- +
to_dataframe()
will return a dataframe of the results.- +
show_in_notebook()
will show the results as a bar plot.The features are returned in decreasing order of importance.
+Visualization
-In [25]:+In [19]:-@@ -16757,13 +20055,13 @@result_explain_prediction_default[0].to_dataframe() +result_explain_model_default.to_dataframe(n_tokens=20)Visualization -
Out[25]:+Out[19]:-","","plotly-logomark ",""," ",""].join("")}}},99863:function(t,e){"use strict";e.isLeftAnchor=function(t){return"left"===t.xanchor||"auto"===t.xanchor&&t.x<=1/3},e.isCenterAnchor=function(t){return"center"===t.xanchor||"auto"===t.xanchor&&t.x>1/3&&t.x<2/3},e.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},e.isTopAnchor=function(t){return"top"===t.yanchor||"auto"===t.yanchor&&t.y>=2/3},e.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3},e.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3}},26348:function(t,e,r){"use strict";var n=r(64872),i=n.mod,a=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function u(t,e){return a(e-t,s)}function c(t,e){if(l(e))return!0;var r,n;e[0]"," "," "," "," "," "," "," "," "," "," "," (n=i(n,s))&&(n+=s);var a=i(t,s),o=a+s;return a>=r&&a<=n||o>=r&&o<=n}function f(t,e,r,n,i,a,u){i=i||0,a=a||0;var c,f,h,p,d,v=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}v?(c=0,f=o,h=s):r =i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},73627:function(t,e){"use strict";var r=Array.isArray,n=ArrayBuffer,i=DataView;function a(t){return n.isView(t)&&!(t instanceof i)}function o(t){return r(t)||a(t)}function s(t,e,r){if(o(t)){if(o(t[0])){for(var n=r,i=0;i i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var i="number"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?e.set(f(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i=n.regex||c(r);"string"==typeof t&&i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(-1===(n.extras||[]).indexOf(t))if("string"==typeof t){for(var i=t.split("+"),a=0;a =n&&t<=i?t:c}if("string"!=typeof t&&"number"!=typeof t)return c;t=String(t);var u=_(r),y=t.charAt(0);!u||"G"!==y&&"g"!==y||(t=t.substr(1),r="");var w=u&&"chinese"===r.substr(0,7),T=t.match(w?x:m);if(!T)return c;var k=T[1],A=T[3]||"1",M=Number(T[5]||1),S=Number(T[7]||0),E=Number(T[9]||0),L=Number(T[11]||0);if(u){if(2===k.length)return c;var C;k=Number(k);try{var P=g.getComponentMethod("calendars","getCal")(r);if(w){var O="i"===A.charAt(A.length-1);A=parseInt(A,10),C=P.newDate(k,P.toMonthIndex(k,A,O),M)}else C=P.newDate(k,Number(A),M)}catch(t){return c}return C?(C.toJD()-v)*f+S*h+E*p+L*d:c}k=2===k.length?(Number(k)+2e3-b)%100+b:Number(k),A-=1;var I=new Date(Date.UTC(2e3,A,M,S,E));return I.setUTCFullYear(k),I.getUTCMonth()!==A||I.getUTCDate()!==M?c:I.getTime()+L*d},n=e.MIN_MS=e.dateTime2ms("-9999"),i=e.MAX_MS=e.dateTime2ms("9999-12-31 23:59:59.9999"),e.isDateTime=function(t,r){return e.dateTime2ms(t,r)!==c};var T=90*f,k=3*h,A=5*p;function M(t,e,r,n,i){if((e||r||n||i)&&(t+=" "+w(e,2)+":"+w(r,2),(n||i)&&(t+=":"+w(n,2),i))){for(var a=4;i%10==0;)a-=1,i/=10;t+="."+w(i,a)}return t}e.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=n&&t<=i))return c;e||(e=0);var a,o,s,u,m,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/f)+v,E=Math.floor(l(t,f));try{a=g.getComponentMethod("calendars","getCal")(r).fromJD(S).formatDate("yyyy-mm-dd")}catch(t){a=y("G%Y-%m-%d")(new Date(w))}if("-"===a.charAt(0))for(;a.length<11;)a="-0"+a.substr(1);else for(;a.length<10;)a="0"+a;o=e =n+f&&t<=i-f))return c;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return M(a("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},e.cleanDate=function(t,r,n){if(t===c)return r;if(e.isJSDate(t)||"number"==typeof t&&isFinite(t)){if(_(n))return s.error("JS Dates and milliseconds are incompatible with world calendars",t),r;if(!(t=e.ms2DateTimeLocal(+t))&&void 0!==r)return r}else if(!e.isDateTime(t,n))return s.error("unrecognized date",t),r;return t};var S=/%\d?f/g,E=/%h/g,L={1:"1",2:"1",3:"2",4:"2"};function C(t,e,r,n){t=t.replace(S,(function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"}));var i=new Date(Math.floor(e+.05));if(t=t.replace(E,(function(){return L[r("%q")(i)]})),_(n))try{t=g.getComponentMethod("calendars","worldCalFmt")(t,e,n)}catch(t){return"Invalid"}return r(t)(i)}var P=[59,59.9,59.99,59.999,59.9999];e.formatDate=function(t,e,r,n,i,a){if(i=_(i)&&i,!e)if("y"===r)e=a.year;else if("m"===r)e=a.month;else{if("d"!==r)return function(t,e){var r=l(t+.05,f),n=w(Math.floor(r/h),2)+":"+w(l(Math.floor(r/p),60),2);if("M"!==e){o(e)||(e=0);var i=(100+Math.min(l(t/d,60),P[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+i}return n}(t,r)+"\n"+C(a.dayMonthYear,t,n,i);e=a.dayMonth+"\n"+a.year}return C(e,t,n,i)};var O=3*f;e.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,f);if(t=Math.round(t-n),r)try{var i=Math.round(t/f)+v,a=g.getComponentMethod("calendars","getCal")(r),o=a.fromJD(i);return e%12?a.add(o,e,"m"):a.add(o,e/12,"y"),(o.toJD()-v)*f+n}catch(e){s.error("invalid ms "+t+" in calendar "+r)}var u=new Date(t+O);return u.setUTCMonth(u.getUTCMonth()+e)+n-O},e.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,u=_(e)&&g.getComponentMethod("calendars","getCal")(e),c=0;c 0&&t[e+1][0]<0)return e;return null}switch(e="RUS"===s||"FJI"===s?function(t){var e;if(null===u(t))e=t;else for(e=new Array(t.length),i=0;i e?r[n++]=[t[i][0]+360,t[i][1]]:i===e?(r[n++]=t[i],r[n++]=[t[i][0],-90]):r[n++]=t[i];var a=h.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(h.tester(t))},a.type){case"MultiPolygon":for(r=0;r i&&(i=u,e=l)}else e=r;return o.default(e).geometry.coordinates}(c),n.fIn=t,n.fOut=c,s.push(c)}else u.log(["Location",n.loc,"does not have a valid GeoJSON geometry.","Traces with locationmode *geojson-id* only support","*Polygon* and *MultiPolygon* geometries."].join(" "))}delete i[r]}switch(r.type){case"FeatureCollection":var h=r.features;for(n=0;n 100?(clearInterval(a),n("Unexpected error while fetching from "+t)):void i++}),50)}))}for(var o=0;o 0&&(r.push(i),i=[])}return i.length>0&&r.push(i),r},e.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},e.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r 1||v<0||v>1?null:{x:t+l*v,y:e+f*v}}function l(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}e.segmentsIntersect=s,e.segmentDistance=function(t,e,r,n,i,a,o,u){if(s(t,e,r,n,i,a,o,u))return 0;var c=r-t,f=n-e,h=o-i,p=u-a,d=c*c+f*f,v=h*h+p*p,g=Math.min(l(c,f,d,i-t,a-e),l(c,f,d,o-t,u-e),l(h,p,v,t-i,e-a),l(h,p,v,r-i,n-a));return Math.sqrt(g)},e.getTextLocation=function(t,e,r,s){if(t===i&&s===a||(n={},i=t,a=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),u=t.getPointAtLength(o(r+s/2,e)),c=Math.atan((u.y-l.y)/(u.x-l.x)),f=t.getPointAtLength(o(r,e)),h={x:(4*f.x+l.x+u.x)/6,y:(4*f.y+l.y+u.y)/6,theta:c};return n[r]=h,h},e.clearLocationCache=function(){i=null},e.getVisibleSegment=function(t,e,r){var n,i,a=e.left,o=e.right,s=e.top,l=e.bottom,u=0,c=t.getTotalLength(),f=c;function h(e){var r=t.getPointAtLength(e);0===e?n=r:e===c&&(i=r);var u=r.xo?r.x-o:0,f=r.y l?r.y-l:0;return Math.sqrt(u*u+f*f)}for(var p=h(u);p;){if((u+=p+r)>f)return;p=h(u)}for(p=h(f);p;){if(u>(f-=p+r))return;p=h(f)}return{min:u,max:f,len:f-u,total:c,isClosed:0===u&&f===c&&Math.abs(n.x-i.x)<.1&&Math.abs(n.y-i.y)<.1}},e.findPointOnPath=function(t,e,r,n){for(var i,a,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,u=n.iterationLimit||30,c=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,f=0,h=0,p=s;f0?p=i:h=i,f++}return a}},81697:function(t,e,r){"use strict";var n=r(92770),i=r(84267),a=r(25075),o=r(21081),s=r(22399).defaultLine,l=r(73627).isArrayOrTypedArray,u=a(s);function c(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return u;var e=a(t);return e.length?e:u}function h(t){return n(t)?t:1}t.exports={formatColor:function(t,e,r){var n,i,s,p,d,v=t.color,g=l(v),y=l(e),m=o.extractOpts(t),x=[];if(n=void 0!==m.colorscale?o.makeColorScaleFuncFromTrace(t):f,i=g?function(t,e){return void 0===t[e]?u:a(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?1:h(t[e])}:h,g||y)for(var b=0;b1?(r*t+r*e)/r:t+e,i=String(n).length;if(i>16){var a=String(e).length;if(i>=String(t).length+a){var o=parseFloat(n).toPrecision(12);-1===o.indexOf("e+")&&(n=+o)}}return n}},71828:function(t,e,r){"use strict";var n=r(39898),i=r(84096).g0,a=r(60721).WU,o=r(92770),s=r(50606),l=s.FP_SAFE,u=-l,c=s.BADNUM,f=t.exports={};f.adjustFormat=function(t){return!t||/^\d[.]\df/.test(t)||/[.]\d%/.test(t)?t:"0.f"===t?"~f":/^\d%/.test(t)?"~%":/^\ds/.test(t)?"~s":!/^[~,.0$]/.test(t)&&/[&fps]/.test(t)?"~"+t:t};var h={};f.warnBadFormat=function(t){var e=String(t);h[e]||(h[e]=1,f.warn('encountered bad format: "'+e+'"'))},f.noFormat=function(t){return String(t)},f.numberFormat=function(t){var e;try{e=a(f.adjustFormat(t))}catch(e){return f.warnBadFormat(t),f.noFormat}return e},f.nestedProperty=r(65487),f.keyedContainer=r(66636),f.relativeAttr=r(6962),f.isPlainObject=r(41965),f.toLogRange=r(58163),f.relinkPrivateKeys=r(51332);var p=r(73627);f.isTypedArray=p.isTypedArray,f.isArrayOrTypedArray=p.isArrayOrTypedArray,f.isArray1D=p.isArray1D,f.ensureArray=p.ensureArray,f.concat=p.concat,f.maxRowLength=p.maxRowLength,f.minRowLength=p.minRowLength;var d=r(64872);f.mod=d.mod,f.modHalf=d.modHalf;var v=r(96554);f.valObjectMeta=v.valObjectMeta,f.coerce=v.coerce,f.coerce2=v.coerce2,f.coerceFont=v.coerceFont,f.coercePattern=v.coercePattern,f.coerceHoverinfo=v.coerceHoverinfo,f.coerceSelectionMarkerOpacity=v.coerceSelectionMarkerOpacity,f.validate=v.validate;var g=r(41631);f.dateTime2ms=g.dateTime2ms,f.isDateTime=g.isDateTime,f.ms2DateTime=g.ms2DateTime,f.ms2DateTimeLocal=g.ms2DateTimeLocal,f.cleanDate=g.cleanDate,f.isJSDate=g.isJSDate,f.formatDate=g.formatDate,f.incrementMonth=g.incrementMonth,f.dateTick0=g.dateTick0,f.dfltRange=g.dfltRange,f.findExactDates=g.findExactDates,f.MIN_MS=g.MIN_MS,f.MAX_MS=g.MAX_MS;var y=r(65888);f.findBin=y.findBin,f.sorterAsc=y.sorterAsc,f.sorterDes=y.sorterDes,f.distinctVals=y.distinctVals,f.roundUp=y.roundUp,f.sort=y.sort,f.findIndexOfMin=y.findIndexOfMin,f.sortObjectKeys=r(78607);var m=r(80038);f.aggNums=m.aggNums,f.len=m.len,f.mean=m.mean,f.median=m.median,f.midRange=m.midRange,f.variance=m.variance,f.stdev=m.stdev,f.interp=m.interp;var x=r(35657);f.init2dArray=x.init2dArray,f.transposeRagged=x.transposeRagged,f.dot=x.dot,f.translationMatrix=x.translationMatrix,f.rotationMatrix=x.rotationMatrix,f.rotationXYMatrix=x.rotationXYMatrix,f.apply3DTransform=x.apply3DTransform,f.apply2DTransform=x.apply2DTransform,f.apply2DTransform2=x.apply2DTransform2,f.convertCssMatrix=x.convertCssMatrix,f.inverseTransformMatrix=x.inverseTransformMatrix;var b=r(26348);f.deg2rad=b.deg2rad,f.rad2deg=b.rad2deg,f.angleDelta=b.angleDelta,f.angleDist=b.angleDist,f.isFullCircle=b.isFullCircle,f.isAngleInsideSector=b.isAngleInsideSector,f.isPtInsideSector=b.isPtInsideSector,f.pathArc=b.pathArc,f.pathSector=b.pathSector,f.pathAnnulus=b.pathAnnulus;var _=r(99863);f.isLeftAnchor=_.isLeftAnchor,f.isCenterAnchor=_.isCenterAnchor,f.isRightAnchor=_.isRightAnchor,f.isTopAnchor=_.isTopAnchor,f.isMiddleAnchor=_.isMiddleAnchor,f.isBottomAnchor=_.isBottomAnchor;var w=r(87642);f.segmentsIntersect=w.segmentsIntersect,f.segmentDistance=w.segmentDistance,f.getTextLocation=w.getTextLocation,f.clearLocationCache=w.clearLocationCache,f.getVisibleSegment=w.getVisibleSegment,f.findPointOnPath=w.findPointOnPath;var T=r(1426);f.extendFlat=T.extendFlat,f.extendDeep=T.extendDeep,f.extendDeepAll=T.extendDeepAll,f.extendDeepNoArrays=T.extendDeepNoArrays;var k=r(47769);f.log=k.log,f.warn=k.warn,f.error=k.error;var A=r(30587);f.counterRegex=A.counter;var M=r(79990);f.throttle=M.throttle,f.throttleDone=M.done,f.clearThrottle=M.clear;var S=r(24401);function E(t){var e={};for(var r in t)for(var n=t[r],i=0;i l||t=e)&&o(t)&&t>=0&&t%1==0},f.noop=r(64213),f.identity=r(23389),f.repeat=function(t,e){for(var r=new Array(e),n=0;n r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},f.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},f.simpleMap=function(t,e,r,n,i){for(var a=t.length,o=new Array(a),s=0;s=Math.pow(2,r)?i>10?(f.warn("randstr failed uniqueness"),l):t(e,r,n,(i||0)+1):l},f.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r["_"+e]=t,r},f.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r =s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},f.syncOrAsync=function(t,e,r){var n;function i(){return f.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(i);return r&&r(e)},f.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},f.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n 0?e:0}))},f.fillArray=function(t,e,r,n){if(n=n||f.identity,f.isArrayOrTypedArray(t))for(var i=0;i 1?i+o[1]:"";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+a+"$2");return s+l},f.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var z=/^\w*$/;f.templateString=function(t,e){var r={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,n){var i;return z.test(n)?i=e[n]:(r[n]=r[n]||f.nestedProperty(e,n).get,i=r[n]()),f.isValidTextValue(i)?i:""}))};var R={max:10,count:0,name:"hovertemplate"};f.hovertemplateString=function(){return U.apply(R,arguments)};var F={max:10,count:0,name:"texttemplate"};f.texttemplateString=function(){return U.apply(F,arguments)};var B=/^(\S+)([\*\/])(-?\d+(\.\d+)?)$/,N={max:10,count:0,name:"texttemplate",parseMultDiv:!0};f.texttemplateStringForShapes=function(){return U.apply(N,arguments)};var j=/^[:|\|]/;function U(t,e,r){var n=this,a=arguments;e||(e={});var o={};return t.replace(f.TEMPLATE_STRING_REGEX,(function(t,s,l){var u="_xother"===s||"_yother"===s,c="_xother_"===s||"_yother_"===s,h="xother_"===s||"yother_"===s,p="xother"===s||"yother"===s||u||h||c,d=s;(u||c)&&(d=d.substring(1)),(h||c)&&(d=d.substring(0,d.length-1));var v,g,y,m=null,x=null;if(n.parseMultDiv){var b=function(t){var e=t.match(B);return e?{key:e[1],op:e[2],number:Number(e[3])}:{key:t,op:null,number:null}}(d);d=b.key,m=b.op,x=b.number}if(p){if(void 0===(v=e[d]))return""}else for(y=3;y =48&&o<=57,u=s>=48&&s<=57;if(l&&(n=10*n+o-48),u&&(i=10*i+s-48),!l||!u){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var V=2e9;f.seedPseudoRandom=function(){V=2e9},f.pseudoRandom=function(){var t=V;return V=(69069*V+1)%4294967296,Math.abs(V-t)<429496729?f.pseudoRandom():V/4294967296},f.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=f.extractOption(t,e,"htx","hovertext");if(f.isValidTextValue(i))return n(i);var a=f.extractOption(t,e,"tx","text");return f.isValidTextValue(a)?n(a):void 0},f.isValidTextValue=function(t){return t||0===t},f.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+"%",n=0;n 1&&(u=1):u=0,f.strTranslate(i-u*(r+o),a-u*(n+s))+f.strScale(u)+(l?"rotate("+l+(e?"":" "+r+" "+n)+")":"")},f.setTransormAndDisplay=function(t,e){t.attr("transform",f.getTextTransform(e)),t.style("display",e.scale?null:"none")},f.ensureUniformFontSize=function(t,e){var r=f.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r},f.join2=function(t,e,r){var n=t.length;return n>1?t.slice(0,-1).join(e)+r+t[n-1]:t.join(e)},f.bigFont=function(t){return Math.round(1.2*t)};var H=f.getFirefoxVersion(),q=null!==H&&H<86;f.getPositionFromD3Event=function(){return q?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},41965:function(t){"use strict";t.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t).hasOwnProperty("hasOwnProperty")}},66636:function(t,e,r){"use strict";var n=r(65487),i=/^\w*$/;t.exports=function(t,e,r,a){var o,s,l;r=r||"name",a=a||"value";var u={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||"";var c={};if(s)for(o=0;o 2)return u[e]=2|u[e],h.set(t,null);if(f){for(o=e;o 1){var e=["LOG:"];for(t=0;t 1){var r=[];for(t=0;t "),"long")}},a.warn=function(){var t;if(n.logging>0){var e=["WARN:"];for(t=0;t 0){var r=[];for(t=0;t "),"stick")}},a.error=function(){var t;if(n.logging>0){var e=["ERROR:"];for(t=0;t 0){var r=[];for(t=0;t "),"stick")}}},77310:function(t,e,r){"use strict";var n=r(39898);t.exports=function(t,e,r){var i=t.selectAll("g."+r.replace(/\s/g,".")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append("g").attr("class",r),i.order();var a=t.classed("rangeplot")?"nodeRangePlot3":"node3";return i.each((function(t){t[0][a]=n.select(this)})),i}},35657:function(t,e,r){"use strict";var n=r(79576);e.init2dArray=function(t,e){for(var r=new Array(t),n=0;n e/2?t-Math.round(t/e)*e:t}}},65487:function(t,e,r){"use strict";var n=r(92770),i=r(73627).isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,u=t;for(s=0;s /g),l=0;l a||u===i||u s||e&&l(t))}:function(t,e){var l=t[0],u=t[1];if(l===i||l a||u===i||u s)return!1;var c,f,h,p,d,v=r.length,g=r[0][0],y=r[0][1],m=0;for(c=1;c Math.max(f,g)||u>Math.max(h,y)))if(u c||Math.abs(n(o,h))>i)return!0;return!1},a.filter=function(t,e){var r=[t[0]],n=0,i=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(i+1);for(var u=l+1;u 1&&o(t.pop()),{addPt:o,raw:t,filtered:r}}},79749:function(t,e,r){"use strict";var n=r(58617),i=r(98580);t.exports=function(t,e,a){var o=t._fullLayout,s=!0;return o._glcanvas.each((function(n){if(n.regl)n.regl.preloadCachedCode(a);else if(!n.pick||o._has("parcoords")){try{n.regl=i({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.g.devicePixelRatio,extensions:e||[],cachedCode:a||{}})}catch(t){s=!1}n.regl||(s=!1),s&&this.addEventListener("webglcontextlost",(function(e){t&&t.emit&&t.emit("plotly_webglcontextlost",{event:e,layer:n.key})}),!1)}})),s||n({container:o._glcontainer.node()}),s}},45142:function(t,e,r){"use strict";var n=r(92770),i=r(35791);t.exports=function(t){var e;if("string"!=typeof(e=t&&t.hasOwnProperty("userAgent")?t.userAgent:function(){var t;return"undefined"!=typeof navigator&&(t=navigator.userAgent),t&&t.headers&&"string"==typeof t.headers["user-agent"]&&(t=t.headers["user-agent"]),t}()))return!0;var r=i({ua:{headers:{"user-agent":e}},tablet:!0,featureDetect:!1});if(!r)for(var a=e.split(" "),o=1;o -1;s--){var l=a[s];if("Version/"===l.substr(0,8)){var u=l.substr(8).split(".")[0];if(n(u)&&(u=+u),u>=13)return!0}}return r}},75138:function(t){"use strict";t.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n i.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r =t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r e}function f(t,e){return t>=e}e.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-s)-1:Math.floor((t-e.start)/e.size+s);var a,o,h=0,p=e.length,d=0,v=p>1?(e[p-1]-e[0])/(p-1):1;for(o=v>=0?r?l:u:r?f:c,t+=v*s*(r?-1:1)*(v>=0?1:-1);h 90&&i.log("Long binary search..."),h-1},e.sorterAsc=function(t,e){return t-e},e.sorterDes=function(t,e){return e-t},e.distinctVals=function(t){var r,n=t.slice();for(n.sort(e.sorterAsc),r=n.length-1;r>-1&&n[r]===o;r--);for(var i,a=n[r]-n[0]||1,s=a/(r||1)/1e4,l=[],u=0;u<=r;u++){var c=n[u],f=c-i;void 0===i?(l.push(c),i=c):f>s&&(a=Math.min(a,f),l.push(c),i=c)}return{vals:l,minDiff:a}},e.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},e.findIndexOfMin=function(t,e){e=e||a;for(var r,n=1/0,i=0;i
a.length)&&(o=a.length),n(r)||(r=!1),i(a[0])){for(l=new Array(o),s=0;s t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},78614:function(t,e,r){"use strict";var n=r(25075);t.exports=function(t){return t?n(t):[0,0,0,1]}},3883:function(t,e,r){"use strict";var n=r(32396),i=r(91424),a=r(71828),o=null;t.exports=function(){if(null!==o)return o;o=!1;var t=a.isIE()||a.isSafari()||a.isIOS();if(window.navigator.userAgent&&!t){var e=Array.from(n.CSS_DECLARATIONS).reverse(),r=window.CSS&&window.CSS.supports||window.supportsCSS;if("function"==typeof r)o=e.some((function(t){return r.apply(null,t)}));else{var s=i.tester.append("image").attr("style",n.STYLE),l=window.getComputedStyle(s.node()).imageRendering;o=e.some((function(t){var e=t[1];return l===e||l===e.toLowerCase()})),s.remove()}}return o}},63893:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=i.strTranslate,o=r(77922),s=r(18783).LINE_SPACING,l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;e.convertToTspans=function(t,r,g){var S=t.text(),E=!t.attr("data-notex")&&r&&r._context.typesetMath&&"undefined"!=typeof MathJax&&S.match(l),P=n.select(t.node().parentNode);if(!P.empty()){var O=t.attr("class")?t.attr("class").split(" ")[0]:"text";return O+="-math",P.selectAll("svg."+O).remove(),P.selectAll("g."+O+"-group").remove(),t.style("display",null).attr({"data-unformatted":S,"data-math":"N"}),E?(r&&r._promises||[]).push(new Promise((function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10),o={fontSize:r};!function(t,e,r){var a,o,s,l,h=parseInt((MathJax.version||"").split(".")[0]);if(2===h||3===h){var p=function(){var r="math-output-"+i.randstr({},64),a=(l=n.select("body").append("div").attr({id:r}).style({visibility:"hidden",position:"absolute","font-size":e.fontSize+"px"}).text(t.replace(u,"\\lt ").replace(c,"\\gt "))).node();return 2===h?MathJax.Hub.Typeset(a):MathJax.typeset([a])},d=function(){var e=l.select(2===h?".MathJax_SVG":".MathJax"),a=!e.empty()&&l.select("svg").node();if(a){var o,s=a.getBoundingClientRect();o=2===h?n.select("body").select("#MathJax_SVG_glyphs"):e.select("defs"),r(e,o,s)}else i.log("There was an error in the tex syntax.",t),r();l.remove()};2===h?MathJax.Hub.Queue((function(){return o=i.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:f},displayAlign:"left"})}),(function(){if("SVG"!==(a=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer("SVG")}),p,d,(function(){if("SVG"!==a)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})):3===h&&(o=i.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=f,"svg"!==(a=MathJax.config.startup.output)&&(MathJax.config.startup.output="svg"),MathJax.startup.defaultReady(),MathJax.startup.promise.then((function(){p(),d(),"svg"!==a&&(MathJax.config.startup.output=a),MathJax.config=o})))}else i.warn("No MathJax version:",MathJax.version)}(E[2],o,(function(n,i,o){P.selectAll("svg."+O).remove(),P.selectAll("g."+O+"-group").remove();var s=n&&n.select("svg");if(!s||!s.node())return I(),void e();var l=P.append("g").classed(O+"-group",!0).attr({"pointer-events":"none","data-unformatted":S,"data-math":"Y"});l.node().appendChild(s.node()),i&&i.node()&&s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild);var u=o.width,c=o.height;s.attr({class:O,height:c,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var f=t.node().style.fill||"black",h=s.select("g");h.attr({fill:f,stroke:f});var p=h.node().getBoundingClientRect(),d=p.width,v=p.height;(d>u||v>c)&&(s.style("overflow","hidden"),d=(p=s.node().getBoundingClientRect()).width,v=p.height);var y=+t.attr("x"),m=+t.attr("y"),x=-(r||t.node().getBoundingClientRect().height)/4;if("y"===O[0])l.attr({transform:"rotate("+[-90,y,m]+")"+a(-d/2,x-v/2)});else if("l"===O[0])m=x-v/2;else if("a"===O[0]&&0!==O.indexOf("atitle"))y=0,m=x;else{var b=t.attr("text-anchor");y-=d*("middle"===b?.5:"end"===b?1:0),m=m+x-v/2}s.attr({x:y,y:m}),g&&g.call(t,l),e(l)}))}))):I(),t}function I(){P.empty()||(O=t.attr("class")+"-math",P.select("svg."+O).remove()),t.text("").style("white-space","pre");var r=function(t,e){e=e.replace(y," ");var r,a=!1,l=[],u=-1;function c(){u++;var e=document.createElementNS(o.svg,"tspan");n.select(e).attr({class:"line",dy:u*s+"em"}),t.appendChild(e),r=e;var i=l;if(l=[{node:e}],i.length>1)for(var a=1;a doesnt match end tag <"+t+">. Pretending it did match.",e),r=l[l.length-1].node}else i.log("Ignoring unexpected end tag "+t+">.",e)}b.test(e)?c():(r=t,l=[{node:t}]);for(var E=e.split(m),P=0;P |>|>)/g,f=[["$","$"],["\\(","\\)"]],h={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},p={sub:"0.3em",sup:"-0.6em"},d={sub:"-0.21em",sup:"0.42em"},v="",g=["http:","https:","mailto:","",void 0,":"],y=e.NEWLINES=/(\r\n?|\n)/g,m=/(<[^<>]*>)/,x=/<(\/?)([^ >]*)(\s+(.*))?>/i,b=/
/i;e.BR_TAG_ALL=/
/gi;var _=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,w=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,T=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,k=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function A(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&L(n)}var M=/(^|;)\s*color:/;e.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:["br"],i=t.split(m),a=[],o="",s=0,l=0;l3?a.push(u.substr(0,p-3)+"..."):a.push(u.substr(0,p));break}o=""}}return a.join("")};var S={mu:"μ",amp:"&",lt:"<",gt:">",nbsp:" ",times:"×",plusmn:"±",deg:"°"},E=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function L(t){return t.replace(E,(function(t,e){return("#"===e.charAt(0)?function(t){if(!(t>1114111)){var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}}("x"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):S[e])||t}))}function C(t){var e=encodeURI(decodeURI(t)),r=document.createElement("a"),n=document.createElement("a");r.href=t,n.href=e;var i=r.protocol,a=n.protocol;return-1!==g.indexOf(i)&&-1!==g.indexOf(a)?e:""}function P(t,e,r){var n,a,o,s=r.horizontalAlign,l=r.verticalAlign||"top",u=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a="bottom"===l?function(){return u.bottom-n.height}:"middle"===l?function(){return u.top+(u.height-n.height)/2}:function(){return u.top},o="right"===s?function(){return u.right-n.width}:"center"===s?function(){return u.left+(u.width-n.width)/2}:function(){return u.left},function(){n=this.node().getBoundingClientRect();var t=o()-c.left,e=a()-c.top,s=r.gd||{};if(r.gd){s._fullLayout._calcInverseTransform(s);var l=i.apply3DTransform(s._fullLayout._invTransform)(t,e);t=l[0],e=l[1]}return this.style({top:e+"px",left:t+"px","z-index":1e3}),this}}e.convertEntities=L,e.sanitizeHTML=function(t){t=t.replace(y," ");for(var e=document.createElement("p"),r=e,i=[],a=t.split(m),o=0;o a.ts+e?l():a.timer=setTimeout((function(){l(),a.timer=null}),e)},e.done=function(t){var e=r[t];return e&&e.timer?new Promise((function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}})):Promise.resolve()},e.clear=function(t){if(t)n(r[t]),delete r[t];else for(var i in r)e.clear(i)}},58163:function(t,e,r){"use strict";var n=r(92770);t.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},90973:function(t,e,r){"use strict";var n=t.exports={},i=r(78776).locationmodeToLayer,a=r(96892).zL;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},37815:function(t){"use strict";t.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}},92177:function(t){"use strict";t.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}},14458:function(t,e,r){"use strict";var n=r(73972);t.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s 0&&o.log("Clearing previous rejected promises from queue."),t._promises=[]},e.cleanLayout=function(t){var r,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var a=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,f=(s.subplotsRegistry.ternary||{}).attrRegex,h=(s.subplotsRegistry.gl3d||{}).attrRegex,v=Object.keys(t);for(r=0;r 3?(I.x=1.02,I.xanchor="left"):I.x<-2&&(I.x=-.02,I.xanchor="right"),I.y>3?(I.y=1.02,I.yanchor="bottom"):I.y<-2&&(I.y=-.02,I.yanchor="top")),d(t),"rotate"===t.dragmode&&(t.dragmode="orbit"),u.clean(t),t.template&&t.template.layout&&e.cleanLayout(t.template.layout),t},e.cleanData=function(t){for(var r=0;r 0)return t.substr(0,e)}e.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=["x","y","z"];e.clearAxisTypes=function(t,e,r){for(var n=0;n 1&&a.warn("Full array edits are incompatible with other edits",f);var m=r[""][""];if(u(m))e.set(null);else{if(!Array.isArray(m))return a.warn("Unrecognized full array edit value",f,m),!0;e.set(m)}return!v&&(h(g,y),p(t),!0)}var x,b,_,w,T,k,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=c(y,f).get(),P=[],O=-1,I=L.length;for(x=0;x L.length-(A?0:1))a.warn("index out of range",f,_);else if(void 0!==k)T.length>1&&a.warn("Insertion & removal are incompatible with edits to the same index.",f,_),u(k)?P.push(_):A?("add"===k&&(k={}),L.splice(_,0,k),C&&C.splice(_,0,{})):a.warn("Unrecognized full object edit value",f,_,k),-1===O&&(O=_);else for(b=0;b =0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),v)return!1;if(h(g,y),d!==i){var D;if(-1===O)D=S;else{for(I=Math.max(L.length,I),D=[],x=0;x =O);x++)D.push(_);for(x=O;x=t.data.length||i<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error("each index in "+r+" must be unique.")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),I(t,e,"currentIndices"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&I(t,r,"newIndices"),void 0!==r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function z(t,e,r,n,a){!function(t,e,r,n){var i=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!o.isPlainObject(e))throw new Error("update must be a key:value object");if(void 0===r)throw new Error("indices must be an integer or array of integers");for(var a in I(t,r,"indices"),e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error("attribute "+a+" must be an array of length equal to indices array length");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}(t,e,r,n);for(var l=function(t,e,r,n){var a,l,u,c,f,h=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=O(r,t.data.length-1),e)for(var v=0;v -1&&-1===r.indexOf("grouptitlefont")?l(r,r.replace("titlefont","title.font")):r.indexOf("titleposition")>-1?l(r,r.replace("titleposition","title.position")):r.indexOf("titleside")>-1?l(r,r.replace("titleside","title.side")):r.indexOf("titleoffset")>-1&&l(r,r.replace("titleoffset","title.offset")):l(r,r.replace("title","title.text"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){t=o.getGraphDiv(t),T.clearPromiseQueue(t);var n={};if("string"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn("Relayout fail.",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var i=X(t,n),a=i.flags;a.calc&&(t.calcdata=void 0);var s=[h.previousPromises];a.layoutReplot?s.push(k.layoutReplot):Object.keys(n).length&&(q(t,a,i)||h.supplyDefaults(t),a.legend&&s.push(k.doLegend),a.layoutstyle&&s.push(k.layoutStyles),a.axrange&&G(s,i.rangesAltered),a.ticks&&s.push(k.doTicksRelayout),a.modebar&&s.push(k.doModeBar),a.camera&&s.push(k.doCamera),a.colorbars&&s.push(k.doColorBars),s.push(E)),s.push(h.rehover,h.redrag,h.reselect),u.add(t,H,[t,i.undoit],H,[t,i.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then((function(){return t.emit("plotly_relayout",i.eventData),t}))}function q(t,e,r){var n,i,a=t._fullLayout;if(!e.axrange)return!1;for(var s in e)if("axrange"!==s&&e[s])return!1;var l=function(t,e){return o.coerce(n,i,v,t,e)},u={};for(var c in r.rangesAltered){var f=p.id2name(c);if(n=t.layout[f],i=a[f],d(n,i,l,u),i._matchGroup)for(var h in i._matchGroup)if(h!==c){var g=a[p.id2name(h)];g.autorange=i.autorange,g.range=i.range.slice(),g._input.range=i.range.slice()}}return!0}function G(t,e){var r=e?function(t){var r=[];for(var n in e){var i=p.getFromId(t,n);if(r.push(n),-1!==(i.ticklabelposition||"").indexOf("inside")&&i._anchorAxis&&r.push(i._anchorAxis._id),i._matchGroup)for(var a in i._matchGroup)e[a]||r.push(a)}return p.draw(t,r,{skipTitle:!0})}:function(t){return p.draw(t,"redraw")};t.push(b,k.doAutoRangeAndConstraints,r,k.drawData,k.finalDraw)}var Z=/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/,Y=/^[xyz]axis[0-9]*\.autorange$/,W=/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/;function X(t,e){var r,n,i,a=t.layout,l=t._fullLayout,u=l._guiEditing,h=N(l._preGUI,u),d=Object.keys(e),v=p.list(t),g=o.extendDeepAll({},e),y={};for(V(e),d=Object.keys(e),n=0;n 0&&"string"!=typeof I.parts[z];)z--;var R=I.parts[z],F=I.parts[z-1]+"."+R,j=I.parts.slice(0,z).join("."),U=s(t.layout,j).get(),H=s(l,j).get(),q=I.get();if(void 0!==D){k[O]=D,S[O]="reverse"===R?D:B(q);var G=f.getLayoutValObject(l,I.parts);if(G&&G.impliedEdits&&null!==D)for(var X in G.impliedEdits)E(o.relativeAttr(O,X),G.impliedEdits[X]);if(-1!==["width","height"].indexOf(O))if(D){E("autosize",null);var K="height"===O?"width":"height";E(K,l[K])}else l[O]=t._initialAutoSize[O];else if("autosize"===O)E("width",D?null:l.width),E("height",D?null:l.height);else if(F.match(Z))P(F),s(l,j+"._inputRange").set(null);else if(F.match(Y)){P(F),s(l,j+"._inputRange").set(null);var $=s(l,j).get();$._inputDomain&&($._input.domain=$._inputDomain.slice())}else F.match(W)&&s(l,j+"._inputDomain").set(null);if("type"===R){L=U;var Q="linear"===H.type&&"log"===D,tt="log"===H.type&&"linear"===D;if(Q||tt){if(L&&L.range)if(H.autorange)Q&&(L.range=L.range[1]>L.range[0]?[1,2]:[2,1]);else{var et=L.range[0],rt=L.range[1];Q?(et<=0&&rt<=0&&E(j+".autorange",!0),et<=0?et=rt/1e6:rt<=0&&(rt=et/1e6),E(j+".range[0]",Math.log(et)/Math.LN10),E(j+".range[1]",Math.log(rt)/Math.LN10)):(E(j+".range[0]",Math.pow(10,et)),E(j+".range[1]",Math.pow(10,rt)))}else E(j+".autorange",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[I.parts[0]]&&"radialaxis"===I.parts[1]&&delete l[I.parts[0]]._subplot.viewInitial["radialaxis.range"],c.getComponentMethod("annotations","convertCoords")(t,H,D,E),c.getComponentMethod("images","convertCoords")(t,H,D,E)}else E(j+".autorange",!0),E(j+".range",null);s(l,j+"._inputRange").set(null)}else if(R.match(M)){var nt=s(l,O).get(),it=(D||{}).type;it&&"-"!==it||(it="linear"),c.getComponentMethod("annotations","convertCoords")(t,nt,it,E),c.getComponentMethod("images","convertCoords")(t,nt,it,E)}var at=w.containerArrayMatch(O);if(at){r=at.array,n=at.index;var ot=at.property,st=G||{editType:"calc"};""!==n&&""===ot&&(w.isAddVal(D)?S[O]=null:w.isRemoveVal(D)?S[O]=(s(a,r).get()||[])[n]:o.warn("unrecognized full object value",e)),A.update(_,st),y[r]||(y[r]={});var lt=y[r][n];lt||(lt=y[r][n]={}),lt[ot]=D,delete e[O]}else"reverse"===R?(U.range?U.range.reverse():(E(j+".autorange",!0),U.range=[1,0]),H.autorange?_.calc=!0:_.plot=!0):("dragmode"===O&&(!1===D&&!1!==q||!1!==D&&!1===q)||l._has("scatter-like")&&l._has("regl")&&"dragmode"===O&&("lasso"===D||"select"===D)&&"lasso"!==q&&"select"!==q||l._has("gl2d")?_.plot=!0:G?A.update(_,G):_.calc=!0,I.set(D))}}for(r in y)w.applyContainerArrayChanges(t,h(a,r),y[r],_,h)||(_.plot=!0);for(var ut in C){var ct=(L=p.getFromId(t,ut))&&L._constraintGroup;if(ct)for(var ft in _.calc=!0,ct)C[ft]||(p.getFromId(t,ft)._constraintShrinkable=!0)}(J(t)||e.height||e.width)&&(_.plot=!0);var ht=l.shapes;for(n=0;n 1;)if(n.pop(),void 0!==(r=s(e,n.join(".")+".uirevision").get()))return r;return e.uirevision}function nt(t,e){for(var r=0;r =i.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function u(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise((function(a,c){function f(){t.emit("plotly_animating"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&function(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,T.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete&&e.onComplete()})),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit("plotly_animated"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}()};e()}var p,d,v=0;function g(t){return Array.isArray(i)?v>=i.length?t.transitionOpts=i[v]:t.transitionOpts=i[0]:t.transitionOpts=i,v++,t}var y=[],m=null==e,x=Array.isArray(e);if(m||x||!o.isPlainObject(e)){if(m||-1!==["string","number"].indexOf(typeof e))for(p=0;p 0&&w w)&&k.push(d);y=k}}y.length>0?function(e){if(0!==e.length){for(var i=0;i =0;n--)if(o.isPlainObject(e[n])){var v=e[n].name,g=(c[v]||d[v]||{}).name,y=e[n].name,m=c[g]||d[g];g&&y&&"number"==typeof y&&m&&S<5&&(S++,o.warn('addFrames: overwriting frame "'+(c[g]||d[g]).name+'" with a frame whose name of type "number" also equates to "'+g+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),5===S&&o.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),d[v]={name:v},p.push({frame:h.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:f+n})}p.sort((function(t,e){return t.index>e.index?-1:t.index =0;n--){if("number"==typeof(i=p[n].frame).name&&o.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!i.name)for(;c[i.name="frame "+t._transitionData._counter++];);if(c[i.name]){for(a=0;a =0;r--)n=e[r],a.push({type:"delete",index:n}),s.unshift({type:"insert",index:n,value:i[n]});var l=h.modifyFrames,c=h.modifyFrames,f=[t,s],p=[t,a];return u&&u.add(t,l,f,c,p),h.modifyFrames(t,a)},e.addTraces=function t(r,n,i){r=o.getGraphDiv(r);var a,s,l=[],c=e.deleteTraces,f=t,h=[r,l],p=[r,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("traces must be defined.");for(Array.isArray(e)||(e=[e]),n=0;n =0&&r =0&&r =a.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!_(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function _(t){return t===Math.round(t)&&t>=0}function w(){var t,e,r={};for(t in f(r,o),n.subplotsRegistry)if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i=0;i =l.length)return!1;i=(r=(n.transformsRegistry[l[u].type]||{}).attributes)&&r[e[2]],s=3}else{var c=t._module;if(c||(c=(n.modules[t.type||a.type.dflt]||{})._module),!c)return!1;if(!(i=(r=c.attributes)&&r[o])){var f=c.basePlotModule;f&&f.attributes&&(i=f.attributes[o])}i||(i=a[o])}return b(i,e,s)},e.getLayoutValObject=function(t,e){var r=function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var u;for(r=0;r =i&&(r._input||{})._templateitemname;s&&(o=i);var l,u=e+"["+o+"]";function c(){l={},s&&(l[u]={},l[u][a]=s)}function f(t,e){s?n.nestedProperty(l[u],t).set(e):l[u+"."+t]=e}function h(){var t=l;return c(),t}return c(),{modifyBase:function(t,e){l[t]=e},modifyItem:f,getUpdateObj:h,applyUpdate:function(e,r){e&&f(e,r);var i=h();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},61549:function(t,e,r){"use strict";var n=r(39898),i=r(73972),a=r(74875),o=r(71828),s=r(63893),l=r(33306),u=r(7901),c=r(91424),f=r(92998),h=r(64168),p=r(89298),d=r(18783),v=r(99082),g=v.enforce,y=v.clean,m=r(71739).doAutoRange,x="start";function b(t,e,r){for(var n=0;n =t[1]||i[1]<=t[0])&&a[0] e[0])return!0}return!1}function _(t){var r,i,s,l,f,v,g=t._fullLayout,y=g._size,m=y.p,x=p.list(t,"",!0);if(g._paperdiv.style({width:t._context.responsive&&g.autosize&&!t._context._hasZeroWidth&&!t.layout.width?"100%":g.width+"px",height:t._context.responsive&&g.autosize&&!t._context._hasZeroHeight&&!t.layout.height?"100%":g.height+"px"}).selectAll(".main-svg").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),e.drawMainTitle(t),h.manage(t),!g._has("cartesian"))return a.previousPromises(t);function _(t,e,r){var n=t._lw/2;return"x"===t._id.charAt(0)?e?"top"===r?e._offset-m-n:e._offset+e._length+m+n:y.t+y.h*(1-(t.position||0))+n%1:e?"right"===r?e._offset+e._length+m+n:e._offset-m-n:y.l+y.w*(t.position||0)+n%1}for(r=0;r .5?"t":"b",o=t._fullLayout.margin[a],s=0;return"paper"===e.yref?s=r+e.pad.t+e.pad.b:"container"===e.yref&&(s=function(t,e,r,n,i){var a=0;return"middle"===r&&(a+=i/2),"t"===t?("top"===r&&(a+=i),a+=n-e*n):("bottom"===r&&(a+=i),a+=e*n),a}(a,n,i,t._fullLayout.height,r)+e.pad.t+e.pad.b),s>o?s:0}(t,r,g);y>0&&(function(t,e,r,n){var i="title.automargin",s=t._fullLayout.title,l=s.y>.5?"t":"b",u={x:s.x,y:s.y,t:0,b:0},c={};"paper"===s.yref&&function(t,e,r,n,i){var a="paper"===e.yref?t._fullLayout._size.h:t._fullLayout.height,s=o.isTopAnchor(e)?n:n-i,l="b"===r?a-s:s;return!(o.isTopAnchor(e)&&"t"===r||o.isBottomAnchor(e)&&"b"===r)&&lT?c.push({code:"unused",traceType:m,templateCount:w,dataCount:T}):T>w&&c.push({code:"reused",traceType:m,templateCount:w,dataCount:T})}}else c.push({code:"data"});if(function t(e,r){for(var n in e)if("_"!==n.charAt(0)){var a=e[n],o=v(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&c.push({code:"missing",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:p,layout:h},""),c.length)return c.map(y)}},403:function(t,e,r){"use strict";var n=r(92770),i=r(72391),a=r(74875),o=r(71828),s=r(25095),l=r(5900),u=r(70942),c=r(11506).version,f={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}};t.exports=function(t,e){var r,h,p,d;function v(t){return!(t in e)||o.validate(e[t],f[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],h=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),h=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!v("width")&&null!==e.width||!v("height")&&null!==e.height)throw new Error("Height and width should be pixel values.");if(!v("format"))throw new Error("Export format is not "+o.join2(f.format.values,", "," or ")+".");var g={};function y(t,r){return o.coerce(e,g,f,t,r)}var m=y("format"),x=y("width"),b=y("height"),_=y("scale"),w=y("setBackground"),T=y("imageDataOnly"),k=document.createElement("div");k.style.position="absolute",k.style.left="-5000px",document.body.appendChild(k);var A=o.extendFlat({},h);x?A.width=x:null===e.width&&n(d.width)&&(A.width=d.width),b?A.height=b:null===e.height&&n(d.height)&&(A.height=d.height);var M=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(k);function E(){return new Promise((function(t){setTimeout(t,s.getDelay(k._fullLayout))}))}function L(){return new Promise((function(t,e){var r=l(k,m,_),n=k._fullLayout.width,f=k._fullLayout.height;function h(){i.purge(k),document.body.removeChild(k)}if("full-json"===m){var p=a.graphJson(k,!1,"keepdata","object",!0,!0);return p.version=c,p=JSON.stringify(p),h(),t(T?p:s.encodeJSON(p))}if(h(),"svg"===m)return t(T?r:s.encodeSVG(r));var d=document.createElement("canvas");d.id=o.randstr(),u({format:m,width:n,height:f,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.newPlot(k,r,A,M).then(S).then(E).then(L).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,""):t}(e))})).catch((function(t){e(t)}))}))}},84936:function(t,e,r){"use strict";var n=r(71828),i=r(74875),a=r(86281),o=r(72075).dfltConfig,s=n.isPlainObject,l=Array.isArray,u=n.isArrayOrTypedArray;function c(t,e,r,i,a,o){o=o||[];for(var f=Object.keys(t),h=0;h x.length&&i.push(p("unused",a,y.concat(x.length)));var A,M,S,E,L,C=x.length,P=Array.isArray(k);if(P&&(C=Math.min(C,k.length)),2===b.dimensions)for(M=0;M x[M].length&&i.push(p("unused",a,y.concat(M,x[M].length)));var O=x[M].length;for(A=0;A<(P?Math.min(O,k[M].length):O);A++)S=P?k[M][A]:k,E=m[M][A],L=x[M][A],n.validate(E,S)?L!==E&&L!==+E&&i.push(p("dynamic",a,y.concat(M,A),E,L)):i.push(p("value",a,y.concat(M,A),E))}else i.push(p("array",a,y.concat(M),m[M]));else for(M=0;M 1&&h.push(p("object","layout"))),i.supplyDefaults(d);for(var v=d._fullData,g=r.length,y=0;y 0&&Math.round(f)===f))return{vals:i};u=f}for(var h=e.calendar,p="start"===l,d="end"===l,v=t[r+"period0"],g=a(v,h)||0,y=[],m=[],x=[],b=i.length,_=0;_A;)k=o(k,-u,h);for(;k<=A;)k=o(k,u,h);T=o(k,-u,h)}else{for(k=g+(w=Math.round((A-g)/c))*c;k>A;)k-=c;for(;k<=A;)k+=c;T=k-c}y[_]=p?T:d?k:(T+k)/2,m[_]=T,x[_]=k}return{vals:y,starts:m,ends:x}}},89502:function(t){"use strict";t.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}},71739:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(71828),o=r(50606).FP_SAFE,s=r(73972),l=r(91424),u=r(41675),c=u.getFromId,f=u.isLinked;function h(t,e){var r,n,i=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),u=g(t,e),c=u.min,f=u.max;if(0===c.length||0===f.length)return a.simpleMap(e.range,e.r2l);var h=c[0].val,v=f[0].val;for(r=1;r 0&&((A=C-s(b)-l(_))>P?M/A>O&&(w=b,T=_,O=M/A):M/C>O&&(w={val:b.val,nopad:1},T={val:_.val,nopad:1},O=M/C));if(h===v){var I=h-1,D=h+1;if(E)if(0===h)i=[0,1];else{var z=(h>0?f:c).reduce((function(t,e){return Math.max(t,l(e))}),0),R=h/(1-Math.min(.5,z/C));i=h>0?[0,R]:[R,0]}else i=L?[Math.max(0,I),Math.max(1,D)]:[I,D]}else E?(w.val>=0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:0,nopad:1})):L&&(w.val-O*s(w)<0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:1,nopad:1})),O=(T.val-w.val-p(e,b.val,_.val))/(C-s(w)-l(T)),i=[w.val-O*s(w),T.val+O*l(T)];return i=k(i,e),e.limitRange&&e.limitRange(),m&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function p(t,e,r){var n=0;if(t.rangebreaks)for(var i=t.locateBreaks(e,r),a=0;a 0?r.ppadplus:r.ppadminus)||r.ppad||0),S=A((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=A(r.vpadplus||r.vpad),L=A(r.vpadminus||r.vpad);if(!T){if(h=1/0,p=-1/0,w)for(n=0;n 0&&(h=a),a>p&&a -o&&(h=a),a>p&&a =O;n--)P(n);return{min:d,max:v,opts:r}},concatExtremes:g};var v=3;function g(t,e,r){var n,i,a,o=e._id,s=t._fullData,l=t._fullLayout,u=[],f=[];function h(t,e){for(n=0;n =r&&(u.extrapad||!o)){s=!1;break}i(e,u.val)&&u.pad<=r&&(o||!u.extrapad)&&(t.splice(l,1),l--)}if(s){var c=a&&0===e;t.push({val:e,pad:c?0:r,extrapad:!c&&o})}}function b(t){return i(t)&&Math.abs(t) =e}function T(t,e,r){return void 0===e||void 0===r||(e=t.d2l(e)) =u&&(o=u,r=u),s<=u&&(s=u,n=u)}}return r=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.minallowed&&T(e,r.minallowed,r.maxallowed)?r.minallowed:r&&void 0!==r.clipmin&&T(e,r.clipmin,r.clipmax)?Math.max(t,e.d2l(r.clipmin)):t}(r,e),n=function(t,e){var r=e.autorangeoptions;return r&&void 0!==r.maxallowed&&T(e,r.minallowed,r.maxallowed)?r.maxallowed:r&&void 0!==r.clipmax&&T(e,r.clipmin,r.clipmax)?Math.min(t,e.d2l(r.clipmax)):t}(n,e),[r,n]}},23074:function(t){"use strict";t.exports=function(t,e,r){var n,i;if(r){var a="reversed"===e||"min reversed"===e||"max reversed"===e;n=r[a?1:0],i=r[a?0:1]}var o=t("autorangeoptions.minallowed",null===i?n:void 0),s=t("autorangeoptions.maxallowed",null===n?i:void 0);void 0===o&&t("autorangeoptions.clipmin"),void 0===s&&t("autorangeoptions.clipmax"),t("autorangeoptions.include")}},89298:function(t,e,r){"use strict";var n=r(39898),i=r(92770),a=r(74875),o=r(73972),s=r(71828),l=s.strTranslate,u=r(63893),c=r(92998),f=r(7901),h=r(91424),p=r(13838),d=r(66287),v=r(50606),g=v.ONEMAXYEAR,y=v.ONEAVGYEAR,m=v.ONEMINYEAR,x=v.ONEMAXQUARTER,b=v.ONEAVGQUARTER,_=v.ONEMINQUARTER,w=v.ONEMAXMONTH,T=v.ONEAVGMONTH,k=v.ONEMINMONTH,A=v.ONEWEEK,M=v.ONEDAY,S=M/2,E=v.ONEHOUR,L=v.ONEMIN,C=v.ONESEC,P=v.MINUS_SIGN,O=v.BADNUM,I={K:"zeroline"},D={K:"gridline",L:"path"},z={K:"minor-gridline",L:"path"},R={K:"tick",L:"path"},F={K:"tick",L:"text"},B={width:["x","r","l","xl","xr"],height:["y","t","b","yt","yb"],right:["r","xr"],left:["l","xl"],top:["t","yt"],bottom:["b","yb"]},N=r(18783),j=N.MID_SHIFT,U=N.CAP_SHIFT,V=N.LINE_SPACING,H=N.OPPOSITE_SIDE,q=t.exports={};q.setConvert=r(21994);var G=r(4322),Z=r(41675),Y=Z.idSort,W=Z.isLinked;q.id2name=Z.id2name,q.name2id=Z.name2id,q.cleanId=Z.cleanId,q.list=Z.list,q.listIds=Z.listIds,q.getFromId=Z.getFromId,q.getFromTrace=Z.getFromTrace;var X=r(71739);q.getAutoRange=X.getAutoRange,q.findExtremes=X.findExtremes;var J=1e-4;function K(t){var e=(t[1]-t[0])*J;return[t[0]-e,t[1]+e]}q.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+"axis"],u=n+"ref",c={};return i||(i=l[0]||("string"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+" domain"}))),c[u]={valType:"enumerated",values:l.concat(a?"string"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,c,u)},q.getRefType=function(t){return void 0===t?t:"paper"===t?"paper":"pixel"===t?"pixel":/( domain)$/.test(t)?"domain":"range"},q.coercePosition=function(t,e,r,n,i,a){var o,l;if("range"!==q.getRefType(n))o=s.ensureNumber,l=r(i,a);else{var u=q.getFromId(e,n);l=r(i,a=u.fraction2r(a)),o=u.cleanPos}t[i]=o(l)},q.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?s.ensureNumber:q.getFromId(e,r).cleanPos)(t)},q.redrawComponents=function(t,e){e=e||q.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),u={},c=0;c r&&f 2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},q.saveRangeInitial=function(t,e){for(var r=q.list(t,"",!0),n=!1,i=0;i .3*h||c(n)||c(a))){var p=r.dtick/2;t+=t+p .8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=q.tickIncrement(t,"M6","reverse")+1.5*M:a.exactMonths>.8?t=q.tickIncrement(t,"M1","reverse")+15.5*M:t-=S;var l=q.tickIncrement(t,r);if(l<=n)return l}return t}(m,t,y,u,a)),g=m;g<=c;)g=q.tickIncrement(g,y,!1,a);return{start:e.c2r(m,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:c-u}},q.prepMinorTicks=function(t,e,r){if(!e.minor.dtick){delete t.dtick;var n,a=e.dtick&&i(e._tmin);if(a){var o=q.tickIncrement(e._tmin,e.dtick,!0);n=[e._tmin,.99*o+.01*e._tmin]}else{var l=s.simpleMap(e.range,e.r2l);n=[l[0],.8*l[0]+.2*l[1]]}if(t.range=s.simpleMap(n,e.l2r),t._isMinor=!0,q.prepTicks(t,r),a){var u=i(e.dtick),c=i(t.dtick),f=u?e.dtick:+e.dtick.substring(1),h=c?t.dtick:+t.dtick.substring(1);u&&c?et(f,h)?f===2*A&&h===2*M&&(t.dtick=A):f===2*A&&h===3*M?t.dtick=A:f!==A||(e._input.minor||{}).nticks?rt(f/h,2.5)?t.dtick=f/2:t.dtick=f:t.dtick=M:"M"===String(e.dtick).charAt(0)?c?t.dtick="M1":et(f,h)?f>=12&&2===h&&(t.dtick="M3"):t.dtick=e.dtick:"L"===String(t.dtick).charAt(0)?"L"===String(e.dtick).charAt(0)?et(f,h)||(t.dtick=rt(f/h,2.5)?e.dtick/2:e.dtick):t.dtick="D1":"D2"===t.dtick&&+e.dtick>1&&(t.dtick=1)}t.range=e.range}void 0===e.minor._tick0Init&&(t.tick0=e.tick0)},q.prepTicks=function(t,e){var r=s.simpleMap(t.range,t.r2l,void 0,void 0,e);if("auto"===t.tickmode||!t.dtick){var n,a=t.nticks;a||("category"===t.type||"multicategory"===t.type?(n=t.tickfont?s.bigFont(t.tickfont.size||12):15,a=t._length/n):(n="y"===t._id.charAt(0)?40:80,a=s.constrain(t._length/n,4,9)+1),"radialaxis"===t._name&&(a*=2)),t.minor&&"array"!==t.minor.tickmode||"array"===t.tickmode&&(a*=100),t._roughDTick=Math.abs(r[1]-r[0])/a,q.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}"period"===t.ticklabelmode&&function(t){var e;function r(){return!(i(t.dtick)||"M"!==t.dtick.charAt(0))}var n=r(),a=q.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=E,o&&!n&&t.dtick =(I?0:1);D--){var z=!D;D?(t._dtickInit=t.dtick,t._tick0Init=t.tick0):(t.minor._dtickInit=t.minor.dtick,t.minor._tick0Init=t.minor.tick0);var R=D?t:s.extendFlat({},t,t.minor);if(z?q.prepMinorTicks(R,t,e):q.prepTicks(R,e),"array"!==R.tickmode)if("sync"!==R.tickmode){var F=K(c),B=F[0],N=F[1],j=i(R.dtick),U="log"===a&&!(j||"L"===R.dtick.charAt(0)),V=q.tickFirst(R,e);if(D){if(t._tmin=V,V=N:Y<=N;Y=q.tickIncrement(Y,W,f,o)){if(D&&H++,R.rangebreaks&&!f){if(Y=p)break}if(C.length>d||Y===Z)break;Z=Y;var X={value:Y};D?(U&&Y!==(0|Y)&&(X.simpleLabel=!0),l>1&&H%l&&(X.skipLabel=!0),C.push(X)):(X.minor=!0,P.push(X))}}else C=[],v=at(t);else D?(C=[],v=ot(t)):(P=[],L=ot(t))}if(I&&!("inside"===t.minor.ticks&&"outside"===t.ticks||"outside"===t.minor.ticks&&"inside"===t.ticks)){for(var J=C.map((function(t){return t.value})),$=[],Q=0;Q 0?(a=n-1,o=n):(a=n,o=n);var s,l=t[a].value,u=t[o].value,c=Math.abs(u-l),f=r||c,h=0;f>=m?h=c>=m&&c<=g?c:y:r===b&&f>=_?h=c>=_&&c<=x?c:b:f>=k?h=c>=k&&c<=w?c:T:r===A&&f>=A?h=A:f>=M?h=M:r===S&&f>=S?h=S:r===E&&f>=E&&(h=E),h>=c&&(h=c,s=!0);var p=i+h;if(e.rangebreaks&&h>0){for(var d=0,v=0;v<84;v++){var L=(v+.5)/84;e.maskBreaks(i*(1-L)+L*p)!==O&&d++}(h*=d/84)||(t[n].drop=!0),s&&c>A&&(h=c)}(h>0||0===n)&&(t[n].periodX=i+h/2)}}(C,t,t._definedDelta),t.rangebreaks){var it="y"===t._id.charAt(0),st=1;"auto"===t.tickmode&&(st=t.tickfont?t.tickfont.size:12);var lt=NaN;for(r=C.length-1;r>-1;r--)if(C[r].drop)C.splice(r,1);else{C[r].value=zt(C[r].value,t);var ut=t.c2p(C[r].value);(it?lt>ut-st:lt p||ft p&&(ct.periodX=p),ft 10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=M&&a<=10||e>=15*M)t._tickround="d";else if(e>=L&&a<=16||e>=E)t._tickround="M";else if(e>=C&&a<=19||e>=L)t._tickround="S";else{var o=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(a,o)-20,t._tickround<0&&(t._tickround=4)}}else if(i(e)||"L"===e.charAt(0)){var s=t.range.map(t.r2d||Number);i(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),u=Math.floor(Math.log(l)/Math.LN10+.01),c=void 0===t.minexponent?3:t.minexponent;Math.abs(u)>c&&(mt(t.exponentformat)&&!xt(u)?t._tickexponent=3*Math.round((u-1)/3):t._tickexponent=u)}else t._tickround=null}function gt(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}q.autoTicks=function(t,e,r){var n;function a(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if("date"===t.type){t.tick0=s.dateTick0(t.calendar,0);var o=2*e;if(o>y)e/=y,n=a(10),t.dtick="M"+12*dt(e,n,st);else if(o>T)e/=T,t.dtick="M"+dt(e,1,lt);else if(o>M){if(t.dtick=dt(e,M,t._hasDayOfWeekBreaks?[1,2,7,14]:ct),!r){var l=q.getTickFormat(t),u="period"===t.ticklabelmode;u&&(t._rawTick0=t.tick0),/%[uVW]/.test(l)?t.tick0=s.dateTick0(t.calendar,2):t.tick0=s.dateTick0(t.calendar,1),u&&(t._dowTick0=t.tick0)}}else o>E?t.dtick=dt(e,E,lt):o>L?t.dtick=dt(e,L,ut):o>C?t.dtick=dt(e,C,ut):(n=a(10),t.dtick=dt(e,n,st))}else if("log"===t.type){t.tick0=0;var c=s.simpleMap(t.range,t.r2l);if(t._isMinor&&(e*=1.5),e>.7)t.dtick=Math.ceil(e);else if(Math.abs(c[1]-c[0])<1){var f=1.5*Math.abs((c[1]-c[0])/e);e=Math.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/f,n=a(10),t.dtick="L"+dt(e,n,st)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type||"multicategory"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):Dt(t)?(t.tick0=0,n=1,t.dtick=dt(e,n,pt)):(t.tick0=0,n=a(10),t.dtick=dt(e,n,st));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&"string"!=typeof t.dtick){var h=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(h)}},q.tickIncrement=function(t,e,r,a){var o=r?-1:1;if(i(e))return s.increment(t,o*e);var l=e.charAt(0),u=o*Number(e.substr(1));if("M"===l)return s.incrementMonth(t,u,a);if("L"===l)return Math.log(Math.pow(10,t)+u)/Math.LN10;if("D"===l){var c="D2"===e?ht:ft,f=t+.01*o,h=s.roundUp(s.mod(f,1),c,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw"unrecognized dtick "+String(e)},q.tickFirst=function(t,e){var r=t.r2l||Number,a=s.simpleMap(t.range,r,void 0,void 0,e),o=a[1] ")}else t._prevDateHead=l,u+="
"+l;e.text=u}(t,o,r,u):"log"===c?function(t,e,r,n,a){var o=t.dtick,l=e.x,u=t.tickformat,c="string"==typeof o&&o.charAt(0);if("never"===a&&(a=""),n&&"L"!==c&&(o="L3",c="L"),u||"L"===c)e.text=bt(Math.pow(10,l),t,a,n);else if(i(o)||"D"===c&&s.mod(l+.01,1)<.1){var f=Math.round(l),h=Math.abs(f),p=t.exponentformat;"power"===p||mt(p)&&xt(f)?(e.text=0===f?1:1===f?"10":"10"+(f>1?"":P)+h+"",e.fontSize*=1.25):("e"===p||"E"===p)&&h>2?e.text="1"+p+(f>0?"+":P)+h:(e.text=bt(Math.pow(10,l),t,"","fakehover"),"D1"===o&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==c)throw"unrecognized dtick "+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if("D1"===t.dtick){var d=String(e.text).charAt(0);"0"!==d&&"1"!==d||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,u,v):"category"===c?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=""),e.text=String(r)}(t,o):"multicategory"===c?function(t,e,r){var n=Math.round(e.x),i=t._categories[n]||[],a=void 0===i[1]?"":String(i[1]),o=void 0===i[0]?"":String(i[0]);r?e.text=o+" - "+a:(e.text=a,e.text2=o)}(t,o,r):Dt(t)?function(t,e,r,n,i){if("radians"!==t.thetaunit||r)e.text=bt(e.x,t,i,n);else{var a=e.x/180;if(0===a)e.text="0";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){for(var r=1;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,i=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]>=100)e.text=bt(s.deg2rad(e.x),t,i,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text="π":e.text=o[0]+"π":e.text=["",o[0],"","⁄","",o[1],"","π"].join(""),l&&(e.text=P+e.text)}}}}(t,o,r,u,v):function(t,e,r,n,i){"never"===i?i="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i="hide"),e.text=bt(e.x,t,i,n)}(t,o,0,u,v),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),t.labelalias&&t.labelalias.hasOwnProperty(o.text)){var g=t.labelalias[o.text];"string"==typeof g&&(o.text=g)}if("boundaries"===t.tickson||t.showdividers){var y=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[y(o.x-.5),y(o.x+t.dtick-.5)]}return o},q.hoverLabelText=function(t,e,r){r&&(t=s.extendFlat({},t,{hoverformat:r}));var n=Array.isArray(e)?e[0]:e,i=Array.isArray(e)?e[1]:void 0;if(void 0!==i&&i!==n)return q.hoverLabelText(t,n,r)+" - "+q.hoverLabelText(t,i,r);var a="log"===t.type&&n<=0,o=q.tickText(t,t.c2l(a?-n:n),"hover").text;return a?0===n?"0":P+o:o};var yt=["f","p","n","μ","m","","k","M","G","T"];function mt(t){return"SI"===t||"B"===t}function xt(t){return t>14||t<-15}function bt(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||"B",u=e._tickexponent,c=q.getTickFormat(e),f=e.separatethousands;if(n){var h={exponentformat:l,minexponent:e.minexponent,dtick:"none"===e.showexponent?e.dtick:i(t)&&Math.abs(t)||1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};vt(h),o=(Number(h._tickround)||0)+4,u=h._tickexponent,e.hoverformat&&(c=e.hoverformat)}if(c)return e._numFormat(c)(t).replace(/-/g,P);var p,d=Math.pow(10,-o)/2;if("none"===l&&(u=0),(t=Math.abs(t))"+p+"":"B"===l&&9===u?t+="B":mt(l)&&(t+=yt[u/3+5])),a?P+t:t}function _t(t,e){if(t){var r=Object.keys(B).reduce((function(t,r){return-1!==e.indexOf(r)&&B[r].forEach((function(e){t[e]=1})),t}),{});Object.keys(t).forEach((function(e){r[e]||(1===e.length?t[e]=0:delete t[e])}))}}function wt(t,e){for(var r=[],n={},i=0;i contributors',o=['© Carto',a].join(" "),s=['Map tiles by Stamen Design','under CC BY 3.0',"|",'Data by OpenStreetMap contributors','under ODbL'].join(" "),l={"open-street-map":{id:"osm",version:8,sources:{"plotly-osm-tiles":{type:"raster",attribution:a,tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png","https://b.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-osm-tiles",type:"raster",source:"plotly-osm-tiles",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"white-bg":{id:"white-bg",version:8,sources:{},layers:[{id:"white-bg",type:"background",paint:{"background-color":"#FFFFFF"},minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"carto-positron":{id:"carto-positron",version:8,sources:{"plotly-carto-positron":{type:"raster",attribution:o,tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-positron",type:"raster",source:"plotly-carto-positron",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"carto-darkmatter":{id:"carto-darkmatter",version:8,sources:{"plotly-carto-darkmatter":{type:"raster",attribution:o,tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-darkmatter",type:"raster",source:"plotly-carto-darkmatter",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-terrain":{id:"stamen-terrain",version:8,sources:{"plotly-stamen-terrain":{type:"raster",attribution:s,tiles:["https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-terrain",type:"raster",source:"plotly-stamen-terrain",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-toner":{id:"stamen-toner",version:8,sources:{"plotly-stamen-toner":{type:"raster",attribution:s,tiles:["https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-toner",type:"raster",source:"plotly-stamen-toner",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"},"stamen-watercolor":{id:"stamen-watercolor",version:8,sources:{"plotly-stamen-watercolor":{type:"raster",attribution:['Map tiles by Stamen Design','under CC BY 3.0',"|",'Data by OpenStreetMap contributors','under CC BY SA'].join(" "),tiles:["https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-watercolor",type:"raster",source:"plotly-stamen-watercolor",minzoom:0,maxzoom:22}],glyphs:"https://fonts.openmaptiles.org/{fontstack}/{range}.pbf"}},u=n(l);t.exports={requiredVersion:i,styleUrlPrefix:"mapbox://styles/mapbox/",styleUrlSuffix:"v9",styleValuesMapbox:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],styleValueDflt:"basic",stylesNonMapbox:l,styleValuesNonMapbox:u,traceLayerPrefix:"plotly-trace-layer-",layoutLayerPrefix:"plotly-layout-layer-",wrongVersionErrorMsg:["Your custom plotly.js bundle is not using the correct mapbox-gl version","Please install mapbox-gl@"+i+"."].join("\n"),noAccessTokenErrorMsg:["Missing Mapbox access token.","Mapbox trace type require a Mapbox access token to be registered.","For example:"," Plotly.newPlot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });","More info here: https://www.mapbox.com/help/define-access-token/"].join("\n"),missingStyleErrorMsg:["No valid mapbox style found, please set `mapbox.style` to one of:",u.join(", "),"or register a Mapbox access token to use a Mapbox-served style."].join("\n"),multipleTokensErrorMsg:["Set multiple mapbox access token across different mapbox subplot,","using first token found as mapbox-gl does not allow multipleaccess tokens on the same page."].join("\n"),mapOnErrorMsg:"Mapbox error.",mapboxLogo:{path0:"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z",path1:"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z",path2:"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z",polygon:"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34"},styleRules:{map:"overflow:hidden;position:relative;","missing-css":"display:none;",canary:"background-color:salmon;","ctrl-bottom-left":"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;","ctrl-bottom-right":"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;",ctrl:"clear: both; pointer-events: auto; transform: translate(0, 0);","ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner":"display: none;","ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner":"display: block; margin-top:2px","ctrl-attrib.mapboxgl-compact:hover":"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;","ctrl-attrib.mapboxgl-compact::after":'content: ""; cursor: pointer; position: absolute; background-image: url(\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"%3E %3Cpath fill="%23333333" fill-rule="evenodd" d="M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0"/%3E %3C/svg%3E\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',"ctrl-attrib.mapboxgl-compact":"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;","ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; right: 0","ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; left: 0","ctrl-bottom-left .mapboxgl-ctrl":"margin: 0 0 10px 10px; float: left;","ctrl-bottom-right .mapboxgl-ctrl":"margin: 0 10px 10px 0; float: right;","ctrl-attrib":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a:hover":"color: inherit; text-decoration: underline;","ctrl-attrib .mapbox-improve-map":"font-weight: bold; margin-left: 2px;","attrib-empty":"display: none;","ctrl-logo":'display:block; width: 21px; height: 21px; background-image: url(\'data:image/svg+xml;charset=utf-8,%3C?xml version="1.0" encoding="utf-8"?%3E %3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 21 21" style="enable-background:new 0 0 21 21;" xml:space="preserve"%3E%3Cg transform="translate(0,0.01)"%3E%3Cpath d="m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z" style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3Cpath d="M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpath d="M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpolygon points="11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 " style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3C/g%3E%3C/svg%3E\')'}}},13056:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){var r=t.split(" "),i=r[0],a=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,u=["",""],c=[0,0];switch(i){case"top":u[0]="top",c[1]=-l;break;case"bottom":u[0]="bottom",c[1]=l}switch(a){case"left":u[1]="right",c[0]=-s;break;case"right":u[1]="left",c[0]=s}return{anchor:u[0]&&u[1]?u.join("-"):u[0]?u[0]:u[1]?u[1]:"center",offset:c}}},50101:function(t,e,r){"use strict";var n=r(44517),i=r(71828),a=i.strTranslate,o=i.strScale,s=r(27659).AU,l=r(77922),u=r(39898),c=r(91424),f=r(63893),h=r(10481),p="mapbox",d=e.constants=r(77734);function v(t){return"string"==typeof t&&(-1!==d.styleValuesMapbox.indexOf(t)||0===t.indexOf("mapbox://"))}e.name=p,e.attr="subplot",e.idRoot=p,e.idRegex=e.attrRegex=i.counterRegex(p),e.attributes={subplot:{valType:"subplotid",dflt:"mapbox",editType:"calc"}},e.layoutAttributes=r(23585),e.supplyLayoutDefaults=r(77882),e.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=e._subplots[p];if(n.version!==d.requiredVersion)throw new Error(d.wrongVersionErrorMsg);var o=function(t,e){var r=t._fullLayout;if(""===t._context.mapboxAccessToken)return"";for(var n=[],a=[],o=!1,s=!1,l=0;l1&&r =i.min&&t =0,a=c(t,e[1])<=0;return(r||i)&&(n||a)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case"date":case"linear":for(e=0;e =o(i)))){r=n;break}break;case"log":for(e=0;e =0&&i.unshift(i.splice(n,1).shift())}}));var o={false:{left:0,right:0}};return s.syncOrAsync(i.map((function(e){return function(){if(e){var n=q.getFromId(t,e);r||(r={}),r.axShifts=o,r.overlayingShiftedAx=a;var i=q.drawOne(t,n,r);return n._shiftPusher&&Bt(n,n._fullDepth||0,o,!0),n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}})))},q.drawOne=function(t,e,r){var n,i,l,u=(r=r||{}).axShifts||{},p=r.overlayingShiftedAx||[];e.setScale();var d=t._fullLayout,v=e._id,g=v.charAt(0),y=q.counterLetter(v),m=d._plots[e._mainSubplot];if(m){if(e._shiftPusher=e.autoshift||-1!==p.indexOf(e._id)||-1!==p.indexOf(e.overlaying),e._shiftPusher&"free"===e.anchor){var x=e.linewidth/2||0;"inside"===e.ticks&&(x+=e.ticklen),Bt(e,x,u,!0),Bt(e,e.shift||0,u,!1)}!0===r.skipTitle&&void 0!==e._shift||(e._shift=function(t,e){return t.autoshift?e[t.overlaying][t.side]:t.shift||0}(e,u));var b=m[g+"axislayer"],_=e._mainLinePosition,w=_+=e._shift,T=e._mainMirrorPosition,k=e._vals=q.calcTicks(e),A=[e.mirror,w,T].join("_");for(n=0;n 0?r.bottom-c:0,f))));var h=0,p=0;if(e._shiftPusher&&(h=Math.max(f,r.height>0?"l"===l?c-r.left:r.right-c:0),e.title.text!==d._dfltTitle[g]&&(p=(e._titleStandoff||0)+(e._titleScoot||0),"l"===l&&(p+=At(e))),e._fullDepth=Math.max(h,p)),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var v=[0,1],m="number"==typeof e._shift?e._shift:0;if("x"===g){if("b"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?c-r.top:0,f),v.reverse()),r.width>0){var x=r.right-(e._offset+e._length);x>0&&(n.xr=1,n.r=x);var b=e._offset-r.left;b>0&&(n.xl=0,n.l=b)}}else if("l"===l?(e._depth=Math.max(r.height>0?c-r.left:0,f),n[l]=e._depth-m):(e._depth=Math.max(r.height>0?r.right-c:0,f),n[l]=e._depth+m,v.reverse()),r.height>0){var _=r.bottom-(e._offset+e._length);_>0&&(n.yb=0,n.b=_);var w=e._offset-r.top;w>0&&(n.yt=1,n.t=w)}n[y]="free"===e.anchor?e.position:e._anchorAxis.domain[v[0]],e.title.text!==d._dfltTitle[g]&&(n[l]+=At(e)+(e.title.standoff||0)),e.mirror&&"free"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[u]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[u]+=f),!0===e.mirror||"ticks"===e.mirror?i[y]=e._anchorAxis.domain[v[1]]:"all"!==e.mirror&&"allticks"!==e.mirror||(i[y]=[e._counterDomainMin,e._counterDomainMax][v[1]]))}lt&&(s=o.getComponentMethod("rangeslider","autoMarginOpts")(t,e)),"string"==typeof e.automargin&&(_t(n,e.automargin),_t(i,e.automargin)),a.autoMargin(t,Et(e),n),a.autoMargin(t,Lt(e),i),a.autoMargin(t,Ct(e),s)})),s.syncOrAsync(ot)}}function ut(t){var r=v+(t||"tick");return M[r]||(M[r]=function(t,e){var r,n,i,a;return t._selections[e].size()?(r=1/0,n=-1/0,i=1/0,a=-1/0,t._selections[e].each((function(){var t=St(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),i=Math.min(i,e.left),a=Math.max(a,e.right)}))):(r=0,n=0,i=0,a=0),{top:r,bottom:n,left:i,right:a,height:n-r,width:a-i}}(e,r)),M[r]}},q.getTickSigns=function(t,e){var r=t._id.charAt(0),n={x:"top",y:"right"}[r],i=t.side===n?1:-1,a=[-1,1,i,-i];return"inside"!==(e?(t.minor||{}).ticks:t.ticks)==("x"===r)&&(a=a.map((function(t){return-t}))),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},q.makeTransTickFn=function(t){return"x"===t._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},q.makeTransTickLabelFn=function(t){var e=function(t){var e=t.ticklabelposition||"",r=function(t){return-1!==e.indexOf(t)},n=r("top"),i=r("left"),a=r("right"),o=r("bottom"),s=r("inside"),l=o||i||n||a;if(!l&&!s)return[0,0];var u=t.side,c=l?(t.tickwidth||0)/2:0,f=3,h=t.tickfont?t.tickfont.size:12;return(o||n)&&(c+=h*U,f+=(t.linewidth||0)/2),(i||a)&&(c+=(t.linewidth||0)/2,f+=3),s&&"top"===u&&(f-=h*(1-U)),(i||n)&&(c=-c),"bottom"!==u&&"right"!==u||(f=-f),[l?c:0,s?f:0]}(t),r=e[0],n=e[1];return"x"===t._id.charAt(0)?function(e){return l(r+t._offset+t.l2p(Tt(e)),n)}:function(e){return l(n,r+t._offset+t.l2p(Tt(e)))}},q.makeTickPath=function(t,e,r,n){n||(n={});var i=n.minor;if(i&&!t.minor)return"";var a=void 0!==n.len?n.len:i?t.minor.ticklen:t.ticklen,o=t._id.charAt(0),s=(t.linewidth||1)/2;return"x"===o?"M0,"+(e+s*r)+"v"+a*r:"M"+(e+s*r)+",0h"+a*r},q.makeLabelFns=function(t,e,r){var n=t.ticklabelposition||"",a=function(t){return-1!==n.indexOf(t)},o=a("top"),l=a("left"),u=a("right"),c=a("bottom")||l||o||u,f=a("inside"),h="inside"===n&&"inside"===t.ticks||!f&&"outside"===t.ticks&&"boundaries"!==t.tickson,p=0,d=0,v=h?t.ticklen:0;if(f?v*=-1:c&&(v=0),h&&(p+=v,r)){var g=s.deg2rad(r);p=v*Math.cos(g)+1,d=v*Math.sin(g)}t.showticklabels&&(h||t.showline)&&(p+=.2*t.tickfont.size);var y,m,x,b,_,w={labelStandoff:p+=(t.linewidth||1)/2*(f?-1:1),labelShift:d},T=0,k=t.side,A=t._id.charAt(0),M=t.tickangle;if("x"===A)b=(_=!f&&"bottom"===k||f&&"top"===k)?1:-1,f&&(b*=-1),y=d*b,m=e+p*b,x=_?1:-.2,90===Math.abs(M)&&(f?x+=j:x=-90===M&&"bottom"===k?U:90===M&&"top"===k?j:.5,T=j/2*(M/90)),w.xFn=function(t){return t.dx+y+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*x},w.anchorFn=function(t,e){if(c){if(l)return"end";if(u)return"start"}return i(e)&&0!==e&&180!==e?e*b<0!==f?"end":"start":"middle"},w.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:"top"===t.side!==f?-n:0};else if("y"===A){if(b=(_=!f&&"left"===k||f&&"right"===k)?1:-1,f&&(b*=-1),y=p,m=d*b,x=0,f||90!==Math.abs(M)||(x=-90===M&&"left"===k||90===M&&"right"===k?U:.5),f){var S=i(M)?+M:0;if(0!==S){var E=s.deg2rad(S);T=Math.abs(Math.sin(E))*U*b,x=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*x)*b+T*t.fontSize},w.yFn=function(t){return t.dy+m+t.fontSize*j},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?"middle":_?"end":"start"},w.heightFn=function(e,r,n){return"right"===t.side&&(r*=-1),r<-30?-n:r<30?-.5*n:0}}return w},q.drawTicks=function(t,e,r){r=r||{};var i=e._id+"tick",a=[].concat(e.minor&&e.minor.ticks?r.vals.filter((function(t){return t.minor&&!t.noTick})):[]).concat(e.ticks?r.vals.filter((function(t){return!t.minor&&!t.noTick})):[]),o=r.layer.selectAll("path."+i).data(a,kt);o.exit().remove(),o.enter().append("path").classed(i,1).classed("ticks",1).classed("crisp",!1!==r.crisp).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.tickcolor:e.tickcolor)})).style("stroke-width",(function(r){return h.crispRound(t,r.minor?e.minor.tickwidth:e.tickwidth,1)+"px"})).attr("d",r.path).style("display",null),Ft(e,[R]),o.attr("transform",r.transFn)},q.drawGrid=function(t,e,r){if(r=r||{},"sync"!==e.tickmode){var i=e._id+"grid",a=e.minor&&e.minor.showgrid,o=a?r.vals.filter((function(t){return t.minor})):[],s=e.showgrid?r.vals.filter((function(t){return!t.minor})):[],l=r.counterAxis;if(l&&q.shouldShowZeroLine(t,e,l))for(var u="array"===e.tickmode,c=0;c =0;y--){var m=y?v:g;if(m){var x=m.selectAll("path."+i).data(y?s:o,kt);x.exit().remove(),x.enter().append("path").classed(i,1).classed("crisp",!1!==r.crisp),x.attr("transform",r.transFn).attr("d",r.path).each((function(t){return f.stroke(n.select(this),t.minor?e.minor.gridcolor:e.gridcolor||"#ddd")})).style("stroke-dasharray",(function(t){return h.dashStyle(t.minor?e.minor.griddash:e.griddash,t.minor?e.minor.gridwidth:e.gridwidth)})).style("stroke-width",(function(t){return(t.minor?d:e._gw)+"px"})).style("display",null),"function"==typeof r.path&&x.attr("d",r.path)}}Ft(e,[D,z])}},q.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+"zl",i=q.shouldShowZeroLine(t,e,r.counterAxis),a=r.layer.selectAll("path."+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append("path").classed(n,1).classed("zl",1).classed("crisp",!1!==r.crisp).each((function(){r.layer.selectAll("path").sort((function(t,e){return Y(t.id,e.id)}))})),a.attr("transform",r.transFn).attr("d",r.path).call(f.stroke,e.zerolinecolor||f.defaultLine).style("stroke-width",h.crispRound(t,e.zerolinewidth,e._gw||1)+"px").style("display",null),Ft(e,[I])},q.drawLabels=function(t,e,r){r=r||{};var a=t._fullLayout,o=e._id,c=o.charAt(0),f=r.cls||o+"tick",p=r.vals.filter((function(t){return t.text})),d=r.labelFns,v=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[f],y=r.layer.selectAll("g."+f).data(e.showticklabels?p:[],kt),m=[];function x(t,a){t.each((function(t){var o=n.select(this),s=o.select(".text-math-group"),c=d.anchorFn(t,a),f=r.transFn.call(o.node(),t)+(i(a)&&0!=+a?" rotate("+a+","+d.xFn(t)+","+(d.yFn(t)-t.fontSize/2)+")":""),p=u.lineCount(o),v=V*t.fontSize,g=d.heightFn(t,i(a)?+a:0,(p-1)*v);if(g&&(f+=l(0,g)),s.empty()){var y=o.select("text");y.attr({transform:f,"text-anchor":c}),y.style("opacity",1),e._adjustTickLabelsOverflow&&e._adjustTickLabelsOverflow()}else{var m=h.bBox(s.node()).width*{end:-.5,start:.5}[c];s.attr("transform",f+l(m,0))}}))}y.enter().append("g").classed(f,1).append("text").attr("text-anchor","middle").each((function(e){var r=n.select(this),i=t._promises.length;r.call(u.positionText,d.xFn(e),d.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(u.convertToTspans,t),t._promises[i]?m.push(t._promises.pop().then((function(){x(r,v)}))):x(r,v)})),Ft(e,[F]),y.exit().remove(),r.repositionOnUpdate&&y.each((function(t){n.select(this).select("text").call(u.positionText,d.xFn(t),d.yFn(t))})),e._adjustTickLabelsOverflow=function(){var r=e.ticklabeloverflow;if(r&&"allow"!==r){var i=-1!==r.indexOf("hide"),o="x"===e._id.charAt(0),l=0,u=o?t._fullLayout.width:t._fullLayout.height;if(-1!==r.indexOf("domain")){var c=s.simpleMap(e.range,e.r2l);l=e.l2p(c[0])+e._offset,u=e.l2p(c[1])+e._offset}var f=Math.min(l,u),p=Math.max(l,u),d=e.side,v=1/0,g=-1/0;for(var m in y.each((function(t){var r=n.select(this);if(r.select(".text-math-group").empty()){var a=h.bBox(r.node()),s=0;o?(a.right>p||a.left p||a.top+(e.tickangle?0:t.fontSize/4) e["_visibleLabelMin_"+r._id]?l.style("display","none"):"tick"!==t.K||i||l.style("display",null)}))}))}))}))},x(y,g+1?g:v);var b=null;e._selections&&(e._selections[f]=y);var _=[function(){return m.length&&Promise.all(m)}];e.automargin&&a._redrawFromAutoMarginCount&&90===g?(b=90,_.push((function(){x(y,g)}))):_.push((function(){if(x(y,v),p.length&&"x"===c&&!i(v)&&("log"!==e.type||"D"!==String(e.dtick).charAt(0))){b=0;var t,n=0,a=[];if(y.each((function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),i=St(this),o=h.bBox(i.node());a.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})})),"boundaries"!==e.tickson&&!e.showdividers||r.secondary){var o=p.length,l=Math.abs((p[o-1].x-p[0].x)*e._m)/(o-1),u=e.ticklabelposition||"",f=function(t){return-1!==u.indexOf(t)},d=f("top"),g=f("left"),m=f("right"),_=f("bottom")||g||d||m?(e.tickwidth||0)+6:0,w=l<2.5*n||"multicategory"===e.type||"realaxis"===e._name;for(t=0;t 0?A*=1+A/(O-=A):A=0,"y"!==e._id.charAt(0)&&(A=-A),L[S]=T.p2d(T.d2p(T.range[S])+M*A),"min"===T.autorange||"max reversed"===T.autorange?(L[0]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0):"max"!==T.autorange&&"min reversed"!==T.autorange||(L[1]=null,T._rangeInitial0=void 0,T._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[T._name+".range"]=L}var B=s.syncOrAsync(_);return B&&B.then&&t._promises.push(B),B},q.getPxPosition=function(t,e){var r,n=t._fullLayout._size,i=e._id.charAt(0),a=e.side;return"free"!==e.anchor?r=e._anchorAxis:"x"===i?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:"y"===i&&(r={_offset:n.l+(e.position||0)*n.w+e._shift,_length:0}),"top"===a||"left"===a?r._offset:"bottom"===a||"right"===a?r._offset+r._length:void 0},q.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&("linear"===e.type||"-"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===O)&&(Mt(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=q.counterLetter(e._id),l=e._offset+(Math.abs(n[0]) 1)for(n=1;n 2*o}(i,e))return"date";var g="strict"!==r.autotypenumbers;return function(t,e){for(var r=t.length,n=f(r),i=0,o=0,s={},c=0;c 2*i}(i,g)?"category":function(t,e){for(var r=t.length,n=0;n =2){var s,u,c="";if(2===o.length)for(s=0;s<2;s++)if(u=_(o[s])){c=y;break}var f=i("pattern",c);if(f===y)for(s=0;s<2;s++)(u=_(o[s]))&&(e.bounds[s]=o[s]=u-1);if(f)for(s=0;s<2;s++)switch(u=o[s],f){case y:if(!n(u))return void(e.enabled=!1);if((u=+u)!==Math.floor(u)||u<0||u>=7)return void(e.enabled=!1);e.bounds[s]=o[s]=u;break;case m:if(!n(u))return void(e.enabled=!1);if((u=+u)<0||u>24)return void(e.enabled=!1);e.bounds[s]=o[s]=u}if(!1===r.autorange){var h=r.range;if(h[0] h[1])return void(e.enabled=!1)}else if(o[0]>h[0]&&o[1] n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},e.ref2id=function(t){return!!/^[xyz]/.test(t)&&t.split(" ")[0]},e.isLinked=function(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},15258:function(t){"use strict";t.exports=function(t,e,r,n){if("category"===e.type){var i,a=t.categoryarray,o=Array.isArray(a)&&a.length>0;o&&(i="array");var s,l=r("categoryorder",i);"array"===l&&(s=r("categoryarray")),o||"array"!==l||(l=e.categoryorder="trace"),"trace"===l?e._initialCategories=[]:"array"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,i,a=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n n?i.substr(n):a.substr(r))+o:i+a+t*e:o}function g(t,e){for(var r=e._size,n=r.h/r.w,i={},a=Object.keys(t),o=0;o u*x)||T)for(r=0;r I&&F P&&(P=F);h/=(P-C)/(2*O),C=l.l2r(C),P=l.l2r(P),l.range=l._input.range=S =0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function N(t,e,r,n,i){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform",u(r,n)).attr("d",i+"Z")}function j(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:f.background,stroke:f.defaultLine,"stroke-width":1,opacity:0}).attr("transform",u(e,r)).attr("d","M0,0Z")}function U(t,e,r,n,i,a){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),V(t,e,i,a)}function V(t,e,r,n){r||(t.transition().style("fill",n>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function H(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function q(t){O&&t.data&&t._context.showTips&&(i.notifier(i._(t,"Double-click to zoom back out"),"long"),O=!1)}function G(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,P)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function Z(t,e,r,n,a){for(var o,s,l,u,c=!1,f={},h={},p=(a||{}).xaHash,d=(a||{}).yaHash,v=0;v =0)i._fullLayout._deactivateShape(i);else{var o=i._fullLayout.clickmode;if(H(i),2!==t||yt||qt(),gt)o.indexOf("select")>-1&&S(r,i,J,K,e.id,Pt),o.indexOf("event")>-1&&p.click(i,r,e.id);else if(1===t&&yt){var s=v?I:O,u="s"===v||"w"===y?0:1,f=s._name+".range["+u+"]",h=function(t,e){var r,n=t.range[e],i=Math.abs(n-t.range[1-e]);return"date"===t.type?n:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,a("."+r+"g")(Math.pow(10,n))):(r=Math.floor(Math.log(Math.abs(n))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,a("."+String(r)+"g")(n))}(s,u),d="left",g="middle";if(s.fixedrange)return;v?(g="n"===v?"top":"bottom","right"===s.side&&(d="right")):"e"===y&&(d="right"),i._context.showAxisRangeEntryBoxes&&n.select(bt).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(h),fill:s.tickfont?s.tickfont.color:"#444",horizontalAlign:d,verticalAlign:g}).on("edit",(function(t){var e=s.d2r(t);void 0!==e&&l.call("_guiRelayout",i,f,e)}))}}}function Dt(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(tt,pt*e+_t)),i=Math.max(0,Math.min(et,dt*r+wt)),a=Math.abs(n-_t),o=Math.abs(i-wt);function s(){St="",Tt.r=Tt.l,Tt.t=Tt.b,Lt.attr("d","M0,0Z")}if(Tt.l=Math.min(_t,n),Tt.r=Math.max(_t,n),Tt.t=Math.min(wt,i),Tt.b=Math.max(wt,i),rt.isSubplotConstrained)a>P||o>P?(St="xy",a/tt>o/et?(o=a*et/tt,wt>i?Tt.t=wt-o:Tt.b=wt+o):(a=o*tt/et,_t>n?Tt.l=_t-a:Tt.r=_t+a),Lt.attr("d",G(Tt))):s();else if(nt.isSubplotConstrained)if(a>P||o>P){St="xy";var l=Math.min(Tt.l/tt,(et-Tt.b)/et),u=Math.max(Tt.r/tt,(et-Tt.t)/et);Tt.l=l*tt,Tt.r=u*tt,Tt.b=(1-l)*et,Tt.t=(1-u)*et,Lt.attr("d",G(Tt))}else s();else!at||o 0){var c;if(nt.isSubplotConstrained||!it&&1===at.length){for(c=0;c 1&&(void 0!==a.maxallowed&&st===(a.range[0] 1&&(void 0!==o.maxallowed&<===(o.range[0] b[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s),"sync"===e.tickmode&&(e.tickmode="auto")}return r("layer"),e}},89426:function(t,e,r){"use strict";var n=r(59652);t.exports=function(t,e,r,i,a){a||(a={});var o=a.tickSuffixDflt,s=n(t);r("tickprefix")&&r("showtickprefix",s),r("ticksuffix",o)&&r("showticksuffix",s)}},23608:function(t,e,r){"use strict";var n=r(23074);t.exports=function(t,e,r,i){var a=e._template||{},o=e.type||a.type||"-";r("minallowed"),r("maxallowed");var s,l=r("range");l||i.noInsiderange||"log"===o||(!(s=r("insiderange"))||null!==s[0]&&null!==s[1]||(e.insiderange=!1,s=void 0),s&&(l=r("range",s)));var u,c=e.getAutorangeDflt(l,i),f=r("autorange",c);!l||(null!==l[0]||null!==l[1])&&(null!==l[0]&&null!==l[1]||"reversed"!==f&&!0!==f)&&(null===l[0]||"min"!==f&&"max reversed"!==f)&&(null===l[1]||"max"!==f&&"min reversed"!==f)||(l=void 0,delete e.range,e.autorange=!0,u=!0),u||(f=r("autorange",c=e.getAutorangeDflt(l,i))),f&&(n(r,f,l),"linear"!==o&&"-"!==o||r("rangemode")),e.cleanRange()}},42449:function(t,e,r){"use strict";var n=r(18783).FROM_BL;t.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},21994:function(t,e,r){"use strict";var n=r(39898),i=r(84096).g0,a=r(71828),o=a.numberFormat,s=r(92770),l=a.cleanNumber,u=a.ms2DateTime,c=a.dateTime2ms,f=a.ensureNumber,h=a.isArrayOrTypedArray,p=r(50606),d=p.FP_SAFE,v=p.BADNUM,g=p.LOG_CLIP,y=p.ONEWEEK,m=p.ONEDAY,x=p.ONEHOUR,b=p.ONEMIN,_=p.ONESEC,w=r(41675),T=r(85555),k=T.HOUR_PATTERN,A=T.WEEKDAY_PATTERN;function M(t){return Math.pow(10,t)}function S(t){return null!=t}t.exports=function(t,e){e=e||{};var r=t._id||"x",p=r.charAt(0);function E(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-2*g*Math.abs(n-i))}return v}function L(e,r,n,i){if((i||{}).msUTC&&s(e))return+e;var o=c(e,n||t.calendar);if(o===v){if(!s(e))return v;e=+e;var l=Math.floor(10*a.mod(e+.05,1)),u=Math.round(e-l/10);o=c(new Date(u))+l/10}return o}function C(e,r,n){return u(e,r,n||t.calendar)}function P(e){return t._categories[Math.round(e)]}function O(e){if(S(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push("number"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return v}function I(e){if(t._categoriesMap)return t._categoriesMap[e]}function D(t){var e=I(t);return void 0!==e?e:s(t)?+t:void 0}function z(t){return s(t)?+t:I(t)}function R(t,e,r){return n.round(r+e*t,2)}function F(t,e,r){return(t-r)/e}var B=function(e){return s(e)?R(e,t._m,t._b):v},N=function(e){return F(e,t._m,t._b)};if(t.rangebreaks){var j="y"===p;B=function(e){if(!s(e))return v;var r=t._rangebreaks.length;if(!r)return R(e,t._m,t._b);var n=j;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,a=i*e,o=0,l=0;l c)){o=a<(u+c)/2?l:l+1;break}o=l+1}var f=t._B[o]||0;return isFinite(f)?R(e,t._m2,f):0},N=function(e){var r=t._rangebreaks.length;if(!r)return F(e,t._m,t._b);for(var n=0,i=0;i t._rangebreaks[i].pmax&&(n=i+1);return F(e,t._m2,t._B[n])}}t.c2l="log"===t.type?E:f,t.l2c="log"===t.type?M:f,t.l2p=B,t.p2l=N,t.c2p="log"===t.type?function(t,e){return B(E(t,e))}:B,t.p2c="log"===t.type?function(t){return M(N(t))}:N,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=l,t.c2d=t.c2r=t.l2d=t.l2r=f,t.d2p=t.r2p=function(e){return t.l2p(l(e))},t.p2d=t.p2r=N,t.cleanPos=f):"log"===t.type?(t.d2r=t.d2l=function(t,e){return E(l(t),e)},t.r2d=t.r2c=function(t){return M(l(t))},t.d2c=t.r2l=l,t.c2d=t.l2r=f,t.c2r=E,t.l2d=M,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return M(N(t))},t.r2p=function(e){return t.l2p(l(e))},t.p2r=N,t.cleanPos=f):"date"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=L,t.c2d=t.c2r=t.l2d=t.l2r=C,t.d2p=t.r2p=function(e,r,n){return t.l2p(L(e,0,n))},t.p2d=t.p2r=function(t,e,r){return C(N(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,v,t.calendar)}):"category"===t.type?(t.d2c=t.d2l=O,t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=z(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=f,t.r2l=z,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:f(t)}):"multicategory"===t.type&&(t.r2d=t.c2d=t.l2d=P,t.d2r=t.d2l_noadd=D,t.r2c=function(e){var r=D(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=I,t.l2r=t.c2r=f,t.r2l=D,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return P(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return Array.isArray(t)||"string"==typeof t&&""!==t?t:f(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var u in l)if(u!==r){var c=e[w.id2name(u)];s=s.concat(c._traceIndices)}var f=[[0,{}],[0,{}]],d=[];for(i=0;i l[1]&&(i[s?0:1]=n)}},t.cleanRange=function(e,r){t._cleanRange(e,r),t.limitRange(e)},t._cleanRange=function(e,r){r||(r={}),e||(e="range");var n,i,o=a.nestedProperty(t,e).get();if(i=(i="date"===t.type?a.dfltRange(t.calendar):"y"===p?T.DFLTRANGEY:"realaxis"===t._name?[0,1]:r.dfltRange||T.DFLTRANGEX).slice(),"tozero"!==t.rangemode&&"nonnegative"!==t.rangemode||(i[0]=0),o&&2===o.length){var l=null===o[0],u=null===o[1];for("date"!==t.type||t.autorange||(o[0]=a.cleanDate(o[0],v,t.calendar),o[1]=a.cleanDate(o[1],v,t.calendar)),n=0;n<2;n++)if("date"===t.type){if(!a.isDateTime(o[n],t.calendar)){t[e]=i;break}if(t.r2l(o[0])===t.r2l(o[1])){var c=a.constrain(t.r2l(o[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);o[0]=t.l2r(c-1e3),o[1]=t.l2r(c+1e3);break}}else{if(!s(o[n])){if(l||u||!s(o[1-n])){t[e]=i;break}o[n]=o[1-n]*(n?10:.1)}if(o[n]<-d?o[n]=-d:o[n]>d&&(o[n]=d),o[0]===o[1]){var f=Math.max(1,Math.abs(1e-6*o[0]));o[0]-=f,o[1]+=f}}}else a.nestedProperty(t,e).set(i)},t.setScale=function(r){var n=e._size;if(t.overlaying){var i=w.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?"_r":"range",o=t.calendar;t.cleanRange(a);var s,l,u=t.r2l(t[a][0],o),c=t.r2l(t[a][1],o),f="y"===p;if(f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(u,c),Math.max(u,c)),t._rangebreaks.length)){for(s=0;s c&&(h=!h),h&&t._rangebreaks.reverse();var d=h?-1:1;for(t._m2=d*t._length/(Math.abs(c-u)-t._lBreaks),t._B.push(-t._m2*(f?c:u)),s=0;s i&&(i+=7,o i&&(i+=24,o =n&&o=n&&e=s.min&&(t s.max&&(s.max=n),i=!1)}i&&u.push({min:t,max:n})}};for(n=0;n r.duration?(function(){for(var r={},n=0;n rect").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(".scatterlayer .trace");n.selectAll(".point").call(o.setPointGroupScale,1,1),n.selectAll(".textpoint").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function g(e,r){var n=e.plotinfo,i=n.xaxis,l=n.yaxis,u=i._length,c=l._length,f=!!e.xr1,h=!!e.yr1,p=[];if(f){var d=a.simpleMap(e.xr0,i.r2l),v=a.simpleMap(e.xr1,i.r2l),g=d[1]-d[0],y=v[1]-v[0];p[0]=(d[0]*(1-r)+r*v[0]-d[0])/(d[1]-d[0])*u,p[2]=u*(1-r+r*y/g),i.range[0]=i.l2r(d[0]*(1-r)+r*v[0]),i.range[1]=i.l2r(d[1]*(1-r)+r*v[1])}else p[0]=0,p[2]=u;if(h){var m=a.simpleMap(e.yr0,l.r2l),x=a.simpleMap(e.yr1,l.r2l),b=m[1]-m[0],_=x[1]-x[0];p[1]=(m[1]*(1-r)+r*x[1]-m[1])/(m[0]-m[1])*c,p[3]=c*(1-r+r*_/b),l.range[0]=i.l2r(m[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(m[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=c;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=f?u/p[2]:1,T=h?c/p[3]:1,k=f?p[0]:0,A=h?p[1]:0,M=f?p[0]/p[2]*u:0,S=h?p[1]/p[3]*c:0,E=i._offset-M,L=l._offset-S;n.clipRect.call(o.setTranslate,k,A).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},951:function(t,e,r){"use strict";var n=r(73972).traceIs,i=r(4322);function a(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=a(t),i=n(t,"box-violin"),o=n(t._fullInput||{},"candlestick");return i&&!o&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}t.exports=function(t,e,r,s){r("autotypenumbers",s.autotypenumbersDflt),"-"===r("type",(s.splomStash||{}).type)&&(function(t,e){if("-"===t.type){var r,s=t._id,l=s.charAt(0);-1!==s.indexOf("scene")&&(s=l);var u=function(t,e,r){for(var n=0;n 0&&(i["_"+r+"axes"]||{})[e])return i;if((i[r+"axis"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+"0"])return i}}}(e,s,l);if(u)if("histogram"!==u.type||l!=={v:"y",h:"x"}[u.orientation||"v"]){var c=l+"calendar",f=u[c],h={noMultiCategory:!n(u,"cartesian")||n(u,"noMultiCategory")};if("box"===u.type&&u._hasPreCompStats&&l==={h:"x",v:"y"}[u.orientation||"v"]&&(h.noMultiCategory=!0),h.autotypenumbers=t.autotypenumbers,o(u,l)){var p=a(u),d=[];for(r=0;r 0?".":"")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}}))}e.manageCommandObserver=function(t,r,n,o){var s={},l=!0;r&&r._commandObserver&&(s=r._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var u=e.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(r&&r._commandObserver){if(u)return s;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,s}if(u){a(t,u,s.cache),s.check=function(){if(l){var e=a(t,u,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:u.type,prop:u.prop,traces:u.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var c=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],f=0;f 0&&i<0&&(i+=360);var s=(i-n)/4;return{type:"Polygon",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}t.exports=function(t){return new M(t)},S.plot=function(t,e,r,n){var i=this;if(n)return i.update(t,e,!0);i._geoCalcData=t,i._fullLayout=e;var a=e[this.id],o=[],s=!1;for(var l in w.layerNameToAdjective)if("frame"!==l&&a["show"+l]){s=!0;break}for(var u=!1,c=0;c 0&&o._module.calcGeoJSON(a,e)}if(!r){if(this.updateProjection(t,e))return;this.viewInitial&&this.scope===n.scope||this.saveViewInitial(n)}this.scope=n.scope,this.updateBaseLayers(e,n),this.updateDims(e,n),this.updateFx(e,n),d.generalUpdatePerTraceModule(this.graphDiv,this,t,n);var s=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=s.selectAll(".point"),this.dataPoints.text=s.selectAll("text"),this.dataPaths.line=s.selectAll(".js-line");var l=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=l.selectAll("path"),this._render()},S.updateProjection=function(t,e){var r=this.graphDiv,n=e[this.id],l=e._size,c=n.domain,f=n.projection,h=n.lonaxis,p=n.lataxis,d=h._ax,v=p._ax,y=this.projection=function(t){var e=t.projection,r=e.type,n=w.projNames[r];n="geo"+u.titleCase(n);for(var l=(i[n]||s[n])(),c=t._isSatellite?180*Math.acos(1/e.distance)/Math.PI:t._isClipped?w.lonaxisSpan[r]/2:null,f=["center","rotate","parallels","clipExtent"],h=function(t){return t?l:[]},p=0;p c*Math.PI/180}return!1},l.getPath=function(){return a().projection(l)},l.getBounds=function(t){return l.getPath().bounds(t)},l.precision(w.precision),t._isSatellite&&l.tilt(e.tilt).distance(e.distance),c&&l.clipAngle(c-w.clipPad),l}(n),m=[[l.l+l.w*c.x[0],l.t+l.h*(1-c.y[1])],[l.l+l.w*c.x[1],l.t+l.h*(1-c.y[0])]],x=n.center||{},b=f.rotation||{},_=h.range||[],T=p.range||[];if(n.fitbounds){d._length=m[1][0]-m[0][0],v._length=m[1][1]-m[0][1],d.range=g(r,d),v.range=g(r,v);var k=(d.range[0]+d.range[1])/2,A=(v.range[0]+v.range[1])/2;if(n._isScoped)x={lon:k,lat:A};else if(n._isClipped){x={lon:k,lat:A},b={lon:k,lat:A,roll:b.roll};var M=f.type,S=w.lonaxisSpan[M]/2||180,L=w.lataxisSpan[M]/2||90;_=[k-S,k+S],T=[A-L,A+L]}else x={lon:k,lat:A},b={lon:k,lat:b.lat,roll:b.roll}}y.center([x.lon-b.lon,x.lat-b.lat]).rotate([-b.lon,-b.lat,b.roll]).parallels(f.parallels);var C=E(_,T);y.fitExtent(m,C);var P=this.bounds=y.getBounds(C),O=this.fitScale=y.scale(),I=y.translate();if(n.fitbounds){var D=y.getBounds(E(d.range,v.range)),z=Math.min((P[1][0]-P[0][0])/(D[1][0]-D[0][0]),(P[1][1]-P[0][1])/(D[1][1]-D[0][1]));isFinite(z)?y.scale(z*O):u.warn("Something went wrong during"+this.id+"fitbounds computations.")}else y.scale(f.scale*O);var R=this.midPt=[(P[0][0]+P[1][0])/2,(P[0][1]+P[1][1])/2];if(y.translate([I[0]+(R[0]-I[0]),I[1]+(R[1]-I[1])]).clipExtent(P),n._isAlbersUsa){var F=y([x.lon,x.lat]),B=y.translate();y.translate([B[0]-(F[0]-B[0]),B[1]-(F[1]-B[1])])}},S.updateBaseLayers=function(t,e){var r=this,i=r.topojson,a=r.layers,o=r.basePaths;function s(t){return"lonaxis"===t||"lataxis"===t}function l(t){return Boolean(w.lineLayers[t])}function u(t){return Boolean(w.fillLayers[t])}var c=(this.hasChoropleth?w.layersForChoropleth:w.layers).filter((function(t){return l(t)||u(t)?e["show"+t]:!s(t)||e[t].showgrid})),p=r.framework.selectAll(".layer").data(c,String);p.exit().each((function(t){delete a[t],delete o[t],n.select(this).remove()})),p.enter().append("g").attr("class",(function(t){return"layer "+t})).each((function(t){var e=a[t]=n.select(this);"bg"===t?r.bgRect=e.append("rect").style("pointer-events","all"):s(t)?o[t]=e.append("path").style("fill","none"):"backplot"===t?e.append("g").classed("choroplethlayer",!0):"frontplot"===t?e.append("g").classed("scatterlayer",!0):l(t)?o[t]=e.append("path").style("fill","none").style("stroke-miterlimit",2):u(t)&&(o[t]=e.append("path").style("stroke","none"))})),p.order(),p.each((function(r){var n=o[r],a=w.layerNameToAdjective[r];"frame"===r?n.datum(w.sphereSVG):l(r)||u(r)?n.datum(A(i,i.objects[r])):s(r)&&n.datum(function(t,e,r){var n,i,a,o=e[t],s=w.scopeDefaults[e.scope];"lonaxis"===t?(n=s.lonaxisRange,i=s.lataxisRange,a=function(t,e){return[t,e]}):"lataxis"===t&&(n=s.lataxisRange,i=s.lonaxisRange,a=function(t,e){return[e,t]});var l={type:"linear",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};v.setConvert(l,r);var u=v.calcTicks(l);e.isScoped||"lonaxis"!==t||u.pop();for(var c=u.length,f=new Array(c),h=0;h -1&&b(n.event,i,[r.xaxis],[r.yaxis],r.id,c),s.indexOf("event")>-1&&p.click(i,n.event))}))}function f(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},S.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,i="clip"+r._uid+t.id;t.clipDef=r._clips.append("clipPath").attr("id",i),t.clipRect=t.clipDef.append("rect"),t.framework=n.select(t.container).append("g").attr("class","geo "+t.id).call(h.setClipUrl,i,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},v.setConvert(t.mockAxis,r)},S.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,i=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,"projection.scale":n.scale},e=t._isScoped?{"center.lon":r.lon,"center.lat":r.lat}:t._isClipped?{"projection.rotation.lon":i.lon,"projection.rotation.lat":i.lat}:{"center.lon":r.lon,"center.lat":r.lat,"projection.rotation.lon":i.lon},u.extendFlat(this.viewInitial,e)},S.render=function(t){this._hasMarkerAngles&&t?this.plot(this._geoCalcData,this._fullLayout,[],!0):this._render()},S._render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?c(r[0],r[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?"none":null}for(t in this.basePaths)this.basePaths[t].attr("d",r);for(t in this.dataPaths)this.dataPaths[t].attr("d",(function(t){return r(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr("display",i).attr("transform",n)}},44622:function(t,e,r){"use strict";var n=r(27659).AU,i=r(71828).counterRegex,a=r(69082),o="geo",s=i(o),l={};l[o]={valType:"subplotid",dflt:o,editType:"calc"},t.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:r(77519),supplyLayoutDefaults:r(82161),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s 0&&P<0&&(P+=360);var O,I,D,z=(C+P)/2;if(!p){var R=d?f.projRotate:[z,0,0];O=r("projection.rotation.lon",R[0]),r("projection.rotation.lat",R[1]),r("projection.rotation.roll",R[2]),r("showcoastlines",!d&&x)&&(r("coastlinecolor"),r("coastlinewidth")),r("showocean",!!x&&void 0)&&r("oceancolor")}p?(I=-96.6,D=38.7):(I=d?z:O,D=(L[0]+L[1])/2),r("center.lon",I),r("center.lat",D),v&&(r("projection.tilt"),r("projection.distance")),g&&r("projection.parallels",f.projParallels||[0,60]),r("projection.scale"),r("showland",!!x&&void 0)&&r("landcolor"),r("showlakes",!!x&&void 0)&&r("lakecolor"),r("showrivers",!!x&&void 0)&&(r("rivercolor"),r("riverwidth")),r("showcountries",d&&"usa"!==c&&x)&&(r("countrycolor"),r("countrywidth")),("usa"===c||"north america"===c&&50===u)&&(r("showsubunits",x),r("subunitcolor"),r("subunitwidth")),d||r("showframe",x)&&(r("framecolor"),r("framewidth")),r("bgcolor"),r("fitbounds")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):y?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}t.exports=function(t,e,r){i(t,e,r,{type:"geo",attributes:s,handleDefaults:u,fullData:r,partition:"y"})}},74455:function(t,e,r){"use strict";var n=r(39898),i=r(71828),a=r(73972),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},u={cursor:"auto"};function c(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],u=o._fullLayout,c=u[n],f={},h={};function p(t,e){f[n+"."+t]=i.nestedProperty(l,t).get(),a.call("_storeDirectGUIEdit",s,u._preGUI,f);var r=i.nestedProperty(c,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),h[n+"."+t]=e)}r(p),p("projection.scale",e.scale()/t.fitScale),p("fitbounds",!1),o.emit("plotly_relayout",h)}function h(t,e){var r=c(0,e);function i(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}return r.on("zoomstart",(function(){n.select(this).style(l)})).on("zoom",(function(){e.scale(n.event.scale).translate(n.event.translate),t.render(!0);var r=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":r[0],"geo.center.lat":r[1]})})).on("zoomend",(function(){n.select(this).style(u),f(t,e,i)})),r}function p(t,e){var r,i,a,o,s,h,p,d,v,g=c(0,e);function y(t){return e.invert(t)}function m(r){var n=e.rotate(),i=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",i[0]),r("center.lat",i[1])}return g.on("zoomstart",(function(){n.select(this).style(l),r=n.mouse(this),i=e.rotate(),a=e.translate(),o=i,s=y(r)})).on("zoom",(function(){if(h=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>2||Math.abs(n[1]-t[1])>2}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?y(h)&&(d=y(h),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=h),v=!0,t.render(!0);var l=e.rotate(),u=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":u[0],"geo.center.lat":u[1],"geo.projection.rotation.lon":-l[0]})})).on("zoomend",(function(){n.select(this).style(u),v&&f(t,e,m)})),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=c(0,e),h=function(t){for(var e=0,r=arguments.length,i=[];++e d?(a=(f>0?90:-90)-p,i=0):(a=Math.asin(f/d)*s-p,i=Math.sqrt(d*d-f*f));var v=180-a-2*p,y=(Math.atan2(h,c)-Math.atan2(u,i))*s,x=(Math.atan2(h,c)-Math.atan2(u,-i))*s;return g(r[0],r[1],a,y)<=g(r[0],r[1],v,x)?[a,y,r[2]]:[v,x,r[2]]}(T,r,E);isFinite(k[0])&&isFinite(k[1])&&isFinite(k[2])||(k=E),e.rotate(k),E=k}}else r=v(e,M=b);h.of(this,arguments)({type:"zoom"})})),A=h.of(this,arguments),p++||A({type:"zoomstart"})})).on("zoomend",(function(){var r;n.select(this).style(u),d.call(a,"zoom",null),r=h.of(this,arguments),--p||r({type:"zoomend"}),f(t,e,y)})).on("zoom.redraw",(function(){t.render(!0);var r=e.rotate();t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.projection.rotation.lon":-r[0],"geo.projection.rotation.lat":-r[1]})})),n.rebind(a,h,"on")}function v(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t,e,r,n){var i=y(r-t),a=y(n-e);return Math.sqrt(i*i+a*a)}function y(t){return(t%360+540)%360-180}function m(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),u=Math.sin(n);return i[a]=t[a]*l-t[s]*u,i[s]=t[s]*l+t[a]*u,i}function x(t,e){for(var r=0,n=0,i=t.length;nMath.abs(s)?(u.boxEnd[1]=u.boxStart[1]+Math.abs(a)*_*(s>=0?1:-1),u.boxEnd[1] l[3]&&(u.boxEnd[1]=l[3],u.boxEnd[0]=u.boxStart[0]+(l[3]-u.boxStart[1])/Math.abs(_))):(u.boxEnd[0]=u.boxStart[0]+Math.abs(s)/_*(a>=0?1:-1),u.boxEnd[0] l[2]&&(u.boxEnd[0]=l[2],u.boxEnd[1]=u.boxStart[1]+(l[2]-u.boxStart[0])*Math.abs(_)))}}else u.boxEnabled?(a=u.boxStart[0]!==u.boxEnd[0],s=u.boxStart[1]!==u.boxEnd[1],a||s?(a&&(g(0,u.boxStart[0],u.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,u.boxStart[1],u.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),u.boxEnabled=!1,u.boxInited=!1):u.boxInited&&(u.boxInited=!1);break;case"pan":u.boxEnabled=!1,u.boxInited=!1,e?(u.panning||(u.dragStart[0]=n,u.dragStart[1]=i),Math.abs(u.dragStart[0]-n) .999&&(g="turntable"):g="turntable")}else g="turntable";r("dragmode",g),r("hovermode",n.getDfltFromLayout("hovermode"))}t.exports=function(t,e,r){var i=e._basePlotModules.length>1;o(t,e,r,{type:c,attributes:l,handleDefaults:f,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},65500:function(t,e,r){"use strict";var n=r(77894),i=r(27670).Y,a=r(1426).extendFlat,o=r(71828).counterRegex;function s(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}t.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:i({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},13133:function(t,e,r){"use strict";var n=r(78614),i=["xaxis","yaxis","zaxis"];function a(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}a.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[i[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},t.exports=function(t){var e=new a;return e.merge(t),e}},96085:function(t,e,r){"use strict";t.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],u=0;u<3;++u){var c=s[a[u]];if(c._length=(r[u].hi-r[u].lo)*r[u].pixelsPerDataUnit/t.dataScale[u],Math.abs(c._length)===1/0||isNaN(c._length))l[u]=[];else{c._input_range=c.range.slice(),c.range[0]=r[u].lo/t.dataScale[u],c.range[1]=r[u].hi/t.dataScale[u],c._m=1/(t.dataScale[u]*r[u].pixelsPerDataUnit),c.range[0]===c.range[1]&&(c.range[0]-=1,c.range[1]+=1);var f=c.tickmode;if("auto"===c.tickmode){c.tickmode="linear";var h=c.nticks||i.constrain(c._length/40,4,9);n.autoTicks(c,Math.abs(c.range[1]-c.range[0])/h)}for(var p=n.calcTicks(c,{msUTC:!0}),d=0;d /g," "));l[u]=p,c.tickmode=f}}for(e.ticks=l,u=0;u<3;++u)for(o[u]=.5*(t.glplot.bounds[0][u]+t.glplot.bounds[1][u]),d=0;d<2;++d)e.bounds[d][u]=t.glplot.bounds[d][u];t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a r.deltaY?1.1:1/1.1,a=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*a.x,y:n*a.y,z:n*a.z})}i(t)}}),!!u&&{passive:!1}),t.glplot.canvas.addEventListener("mousemove",(function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit("plotly_relayouting",e)}})),t.staticMode||t.glplot.canvas.addEventListener("webglcontextlost",(function(r){e&&e.emit&&e.emit("plotly_webglcontextlost",{event:r,layer:t.id})}),!1)),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},k.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,i=e.container.getBoundingClientRect();r._fullLayout._calcInverseTransform(r);var a=r._fullLayout._invScaleX,o=r._fullLayout._invScaleY,s=i.width*a,l=i.height*o;n.setAttributeNS(null,"viewBox","0 0 "+s+" "+l),n.setAttributeNS(null,"width",s),n.setAttributeNS(null,"height",l),b(e),e.glplot.axes.update(e.axesOptions);for(var u=Object.keys(e.traces),c=null,h=e.glplot.selection,v=0;v ")):"isosurface"===t.type||"volume"===t.type?(k.valueLabel=p.hoverLabelText(e._mockAxis,e._mockAxis.d2l(h.traceCoordinate[3]),t.valuehoverformat),E.push("value: "+k.valueLabel),h.textLabel&&E.push(h.textLabel),x=E.join("
")):x=h.textLabel;var L={x:h.traceCoordinate[0],y:h.traceCoordinate[1],z:h.traceCoordinate[2],data:_._input,fullData:_,curveNumber:_.index,pointNumber:T};d.appendArrayPointValue(L,_,T),t._module.eventData&&(L=_._module.eventData(L,h,_,{},T));var C={points:[L]};if(e.fullSceneLayout.hovermode){var P=[];d.loneHover({trace:_,x:(.5+.5*m[0]/m[3])*s,y:(.5-.5*m[1]/m[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:x,name:c.name,color:d.castHoverOption(_,T,"bgcolor")||c.color,borderColor:d.castHoverOption(_,T,"bordercolor"),fontFamily:d.castHoverOption(_,T,"font.family"),fontSize:d.castHoverOption(_,T,"font.size"),fontColor:d.castHoverOption(_,T,"font.color"),nameLength:d.castHoverOption(_,T,"namelength"),textAlign:d.castHoverOption(_,T,"align"),hovertemplate:f.castOption(_,T,"hovertemplate"),hovertemplateLabels:f.extendFlat({},L,k),eventData:[L]},{container:n,gd:r,inOut_bbox:P}),L.bbox=P[0]}h.distance<5&&(h.buttons||w)?r.emit("plotly_click",C):r.emit("plotly_hover",C),this.oldEventData=C}else d.loneUnhover(n),this.oldEventData&&r.emit("plotly_unhover",this.oldEventData),this.oldEventData=void 0;e.drawAnnotations(e)},k.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):f.error("Catastrophic and unrecoverable WebGL error. Context lost.")};requestAnimationFrame(e)};var M=["xaxis","yaxis","zaxis"];function S(t,e,r){for(var n=t.fullSceneLayout,i=0;i<3;i++){var a=M[i],o=a.charAt(0),s=n[a],l=e[o],u=e[o+"calendar"],c=e["_"+o+"length"];if(f.isArrayOrTypedArray(l))for(var h,p=0;p<(c||l.length);p++)if(f.isArrayOrTypedArray(l[p]))for(var d=0;dy[1][o])y[0][o]=-1,y[1][o]=1;else{var O=y[1][o]-y[0][o];y[0][o]-=O/32,y[1][o]+=O/32}if(b=[y[0][o],y[1][o]],b=_(b,l),y[0][o]=b[0],y[1][o]=b[1],l.isReversed()){var I=y[0][o];y[0][o]=y[1][o],y[1][o]=I}}else b=l.range,y[0][o]=l.r2l(b[0]),y[1][o]=l.r2l(b[1]);y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),m[o]=y[1][o]-y[0][o],l.range=[y[0][o],y[1][o]],l.limitRange(),n.glplot.setBounds(o,{min:l.range[0]*p[o],max:l.range[1]*p[o]})}var D=c.aspectmode;if("cube"===D)g=[1,1,1];else if("manual"===D){var z=c.aspectratio;g=[z.x,z.y,z.z]}else{if("auto"!==D&&"data"!==D)throw new Error("scene.js aspectRatio was not one of the enumerated types");var R=[1,1,1];for(o=0;o<3;++o){var F=x[u=(l=c[M[o]]).type];R[o]=Math.pow(F.acc,1/F.count)/p[o]}g="data"===D||Math.max.apply(null,R)/Math.min.apply(null,R)<=4?R:[1,1,1]}c.aspectratio.x=f.aspectratio.x=g[0],c.aspectratio.y=f.aspectratio.y=g[1],c.aspectratio.z=f.aspectratio.z=g[2],n.glplot.setAspectratio(c.aspectratio),n.viewInitial.aspectratio||(n.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),n.viewInitial.aspectmode||(n.viewInitial.aspectmode=c.aspectmode);var B=c.domain||null,N=e._size||null;if(B&&N){var j=n.container.style;j.position="absolute",j.left=N.l+B.x[0]*N.w+"px",j.top=N.t+(1-B.y[1])*N.h+"px",j.width=N.w*(B.x[1]-B.x[0])+"px",j.height=N.h*(B.y[1]-B.y[0])+"px"}n.glplot.redraw()}},k.destroy=function(){var t=this;t.glplot&&(t.camera.mouseListener.enabled=!1,t.container.removeEventListener("wheel",t.camera.wheelListener),t.camera=null,t.glplot.dispose(),t.container.parentNode.removeChild(t.container),t.glplot=null)},k.getCamera=function(){var t,e=this;return e.camera.view.recalcMatrix(e.camera.view.lastT()),{up:{x:(t=e.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?"orthographic":"perspective"}}},k.setViewport=function(t){var e,r=this,n=t.camera;r.camera.lookAt.apply(this,[[(e=n).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),r.glplot.setAspectratio(t.aspectratio),"orthographic"===n.projection.type!==r.camera._ortho&&(r.glplot.redraw(),r.glplot.clearRGBA(),r.glplot.dispose(),r.initializeGLPlot())},k.isCameraChanged=function(t){var e=this.getCamera(),r=f.nestedProperty(t,this.id+".camera").get();function n(t,e,r,n){var i=["up","center","eye"],a=["x","y","z"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}var i=!1;if(void 0===r)i=!0;else{for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!n(e,r,a,o)){i=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(i=!0)}return i},k.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=f.nestedProperty(t,this.id+".aspectratio").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},k.saveLayout=function(t){var e,r,n,i,a,o,s=this,l=s.fullLayout,u=s.isCameraChanged(t),h=s.isAspectChanged(t),p=u||h;if(p){var d={};u&&(e=s.getCamera(),n=(r=f.nestedProperty(t,s.id+".camera")).get(),d[s.id+".camera"]=n),h&&(i=s.glplot.getAspectratio(),o=(a=f.nestedProperty(t,s.id+".aspectratio")).get(),d[s.id+".aspectratio"]=o),c.call("_storeDirectGUIEdit",t,l._preGUI,d),u&&(r.set(e),f.nestedProperty(l,s.id+".camera").set(e)),h&&(a.set(i),f.nestedProperty(l,s.id+".aspectratio").set(i),s.glplot.redraw())}return p},k.updateFx=function(t,e){var r=this,n=r.camera;if(n)if("orbit"===t)n.mode="orbit",n.keyBindingMode="rotate";else if("turntable"===t){n.up=[0,0,1],n.mode="turntable",n.keyBindingMode="rotate";var i=r.graphDiv,a=i._fullLayout,o=r.fullSceneLayout.camera,s=o.up.x,l=o.up.y,u=o.up.z;if(u/Math.sqrt(s*s+l*l+u*u)<.999){var h=r.id+".camera.up",p={x:0,y:0,z:1},d={};d[h]=p;var v=i.layout;c.call("_storeDirectGUIEdit",v,a._preGUI,d),o.up=p,f.nestedProperty(v,h).set(p)}}else n.keyBindingMode=t;r.fullSceneLayout.hovermode=e},k.toImage=function(t){var e=this;t||(t="png"),e.staticMode&&e.container.appendChild(n),e.glplot.redraw();var r=e.glplot.gl,i=r.drawingBufferWidth,a=r.drawingBufferHeight;r.bindFramebuffer(r.FRAMEBUFFER,null);var o=new Uint8Array(i*a*4);r.readPixels(0,0,i,a,r.RGBA,r.UNSIGNED_BYTE,o),function(t,e,r){for(var n=0,i=r-1;n0)for(var s=255/o,l=0;l<3;++l)t[a+l]=Math.min(s*t[a+l],255)}}(o,i,a);var s=document.createElement("canvas");s.width=i,s.height=a;var l,u=s.getContext("2d",{willReadFrequently:!0}),c=u.createImageData(i,a);switch(c.data.set(o),u.putImageData(c,0,0),t){case"jpeg":l=s.toDataURL("image/jpeg");break;case"webp":l=s.toDataURL("image/webp");break;default:l=s.toDataURL("image/png")}return e.staticMode&&e.container.removeChild(n),l},k.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[M[t]];p.setConvert(e,this.fullLayout),e.setScale=f.noop}},k.make4thDimension=function(){var t=this,e=t.graphDiv._fullLayout;t._mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},p.setConvert(t._mockAxis,e)},t.exports=T},90060:function(t){"use strict";t.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;a OpenStreetMap 1&&i.warn(d.multipleTokensErrorMsg),n[0]):(a.length&&i.log(["Listed mapbox access token(s)",a.join(","),"but did not use a Mapbox map style, ignoring token(s)."].join(" ")),"")}(t,a);n.accessToken=o;for(var l=0;l w/2){var T=m.split("|").join("
");b.text(T).attr("data-unformatted",T).call(f.convertToTspans,t),_=c.bBox(b.node())}b.attr("transform",a(-3,8-_.height)),x.insert("rect",".static-attribution").attr({x:-_.width-6,y:-_.height-3,width:_.width+6,height:_.height+3,fill:"rgba(255, 255, 255, 0.75)"});var k=1;_.width+6>w&&(k=w/(_.width+6));var A=[n.l+n.w*h.x[1],n.t+n.h*(1-h.y[0])];x.attr("transform",a(A[0],A[1])+o(k))}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[p],n=0;n0){for(var r=0;r 0}function c(t){var e={},r={};switch(t.type){case"circle":n.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":n.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity,"line-dasharray":t.line.dash});break;case"fill":n.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{"icon-image":i.icon+"-15","icon-size":i.iconsize/10,"text-field":i.text,"text-size":i.textfont.size,"text-anchor":o.anchor,"text-offset":o.offset,"symbol-placement":i.placement}),n.extendFlat(r,{"icon-color":t.color,"text-color":i.textfont.color,"text-opacity":t.opacity});break;case"raster":n.extendFlat(r,{"raster-fade-duration":0,"raster-opacity":t.opacity})}return{layout:e,paint:r}}l.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=u(t)},l.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&"image"===this.sourceType&&"image"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},l.needsNewSource=function(t){return this.sourceType!==t.sourcetype||JSON.stringify(this.source)!==JSON.stringify(t.source)||this.layerType!==t.type},l.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup["layout-"+this.index]},l.lookupBelow=function(){return this.subplot.belowLookup["layout-"+this.index]},l.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e=this.findFollowingMapboxLayerId(this.lookupBelow());null!==e&&this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,u(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};return"geojson"===r?e="data":"vector"===r?e="string"==typeof n?"url":"tiles":"raster"===r?(e="tiles",a.tileSize=256):"image"===r&&(e="url",a.coordinates=t.coordinates),a[e]=n,t.sourceattribution&&(a.attribution=i(t.sourceattribution)),a}(t);e.addSource(this.idSource,r)}},l.findFollowingMapboxLayerId=function(t){if("traces"===t)for(var e=this.subplot.getMapLayers(),r=0;r 1)for(r=0;r -1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf("event")>-1&&u.click(n,e.originalEvent)}}},b.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a=function(t,r){r.isRect?(t.range={})[e.id]=[u([r.xmin,r.ymin]),u([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(u)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{dragmode:t.dragmode,element:e.div,gd:n,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off("click",e.onClickInPanHandler),h(o)||f(o)?(r.dragPan.disable(),r.on("zoomstart",e.clearOutline),e.dragOptions.prepFn=function(t,r,n){p(t,r,n,e.dragOptions,o)},l.init(e.dragOptions)):(r.dragPan.enable(),r.off("zoomstart",e.clearOutline),e.div.onmousedown=null,e.div.ontouchstart=null,e.div.removeEventListener("touchstart",e.div._ontouchstart),e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on("click",e.onClickInPanHandler))}function u(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},b.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+"px",n.height=r.h*(e.y[1]-e.y[0])+"px",n.left=r.l+e.x[0]*r.w+"px",n.top=r.t+(1-e.y[1])*r.h+"px",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},b.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e =e.width-20?(a["text-anchor"]="start",a.x=5):(a["text-anchor"]="end",a.x=e._paper.attr("width")-7),r.attr(a);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),l=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",(function(){_.sendDataToCloud(t)}));else{var n=window.location.pathname.split("/"),i=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+i})}}(t,o),s.text(o.text()&&l.text()?" - ":"")}},_.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit("plotly_beforeexport");var r=n.select(t).append("div").attr("id","hiddenform").style("display","none"),i=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return i.append("input").attr({type:"text",name:"data"}).node().value=_.graphJson(t,!1,"keepdata"),i.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1}};var k=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],A=["year","month","dayMonth","dayMonthYear"];function M(t,e){var r=t._context.locale;r||(r="en-US");var n=!1,i={};function a(t){for(var r=!0,a=0;a 1&&D.length>1){for(s.getComponentMethod("grid","sizeDefaults")(u,l),o=0;o 15&&D.length>15&&0===l.shapes.length&&0===l.images.length,_.linkSubplots(h,l,f,n),_.cleanPlot(h,l,f,n);var N=!(!n._has||!n._has("gl2d")),j=!(!l._has||!l._has("gl2d")),U=!(!n._has||!n._has("cartesian"))||N,V=!(!l._has||!l._has("cartesian"))||j;U&&!V?n._bgLayer.remove():V&&!U&&(l._shouldCreateBgLayer=!0),n._zoomlayer&&!t._dragging&&d({_fullLayout:n}),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i 0){var f=1-2*s;n=Math.round(f*n),i=Math.round(f*i)}}var h=_.layoutAttributes.width.min,p=_.layoutAttributes.height.min;n 1,v=!e.height&&Math.abs(r.height-i)>1;(v||d)&&(d&&(r.width=n),v&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),_.sanitizeMargins(r)},_.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a,o,l=s.componentsRegistry,u=e._basePlotModules,f=s.subplotsRegistry.cartesian;for(i in l)(o=l[i]).includeBasePlot&&o.includeBasePlot(t,e);for(var h in u.length||u.push(f),e._has("cartesian")&&(s.getComponentMethod("grid","contentDefaults")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(c.subplotSort);for(a=0;a 1&&(r.l/=y,r.r/=y)}if(p){var m=(r.t+r.b)/p;m>1&&(r.t/=m,r.b/=m)}var x=void 0!==r.xl?r.xl:r.x,b=void 0!==r.xr?r.xr:r.x,w=void 0!==r.yt?r.yt:r.y,T=void 0!==r.yb?r.yb:r.y;d[e]={l:{val:x,size:r.l+g},r:{val:b,size:r.r+g},b:{val:T,size:r.b+g},t:{val:w,size:r.t+g}},v[e]=1}else delete d[e],delete v[e];if(!n._replotting)return _.doAutoMargin(t)}},_.doAutoMargin=function(t){var e=t._fullLayout,r=e.width,n=e.height;e._size||(e._size={}),P(e);var i=e._size,a=e.margin,l={t:0,b:0,l:0,r:0},u=c.extendFlat({},i),f=a.l,h=a.r,d=a.t,v=a.b,g=e._pushmargin,y=e._pushmarginIds,m=e.minreducedwidth,x=e.minreducedheight;if(!1!==a.autoexpand){for(var b in g)y[b]||delete g[b];var w=t._fullLayout._reservedMargin;for(var T in w)for(var k in w[T]){var A=w[T][k];l[k]=Math.max(l[k],A)}for(var M in g.base={l:{val:0,size:f},r:{val:1,size:h},t:{val:1,size:d},b:{val:0,size:v}},l){var S=0;for(var E in g)"base"!==E&&o(g[E][M].size)&&(S=g[E][M].size>S?g[E][M].size:S);var L=Math.max(0,a[M]-S);l[M]=Math.max(0,l[M]-L)}for(var C in g){var O=g[C].l||{},I=g[C].b||{},D=O.val,z=O.size,R=I.val,F=I.size,B=r-l.r-l.l,N=n-l.t-l.b;for(var j in g){if(o(z)&&g[j].r){var U=g[j].r.val,V=g[j].r.size;if(U>D){var H=(z*U+(V-B)*D)/(U-D),q=(V*(1-D)+(z-B)*(1-U))/(U-D);H+q>f+h&&(f=H,h=q)}}if(o(F)&&g[j].t){var G=g[j].t.val,Z=g[j].t.size;if(G>R){var Y=(F*G+(Z-N)*R)/(G-R),W=(Z*(1-R)+(F-N)*(1-G))/(G-R);Y+W>v+d&&(v=Y,d=W)}}}}}var X=c.constrain(r-a.l-a.r,2,m),J=c.constrain(n-a.t-a.b,2,x),K=Math.max(0,r-X),$=Math.max(0,n-J);if(K){var Q=(f+h)/K;Q>1&&(f/=Q,h/=Q)}if($){var tt=(v+d)/$;tt>1&&(v/=tt,d/=tt)}if(i.l=Math.round(f)+l.l,i.r=Math.round(h)+l.r,i.t=Math.round(d)+l.t,i.b=Math.round(v)+l.b,i.p=Math.round(a.pad),i.w=Math.round(r)-i.l-i.r,i.h=Math.round(n)-i.t-i.b,!e._replotting&&(_.didMarginChange(u,i)||function(t){if("_redrawFromAutoMarginCount"in t._fullLayout)return!1;var e=p.list(t,"",!0);for(var r in e)if(e[r].autoshift||e[r].shift)return!0;return!1}(t))){"_redrawFromAutoMarginCount"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var et=3*(1+Object.keys(y).length);if(e._redrawFromAutoMarginCount 0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){n=!0})),r.redraw&&t._transitionData._interruptCallbacks.push((function(){return s.call("redraw",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit("plotly_transitioninterrupted",[])}));var a=0,o=0;function l(){return a++,function(){var e;o++,n||o!==a||(e=i,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(r.redraw)return s.call("redraw",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])})).then(e)))}}r.runFn(l),setTimeout(l())}))}],a=c.syncOrAsync(i,t);return a&&a.then||(a=Promise.resolve()),a.then((function(){return t}))}_.didMarginChange=function(t,e){for(var r=0;r 1)return!0}return!1},_.graphJson=function(t,e,r,n,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&_.supplyDefaults(t);var o=i?t._fullData:t.data,s=i?t._fullLayout:t.layout,l=(t._transitionData||{})._frames;function u(t,e){if("function"==typeof t)return e?"_function_":null;if(c.isPlainObject(t)){var n,i={};return Object.keys(t).sort().forEach((function(a){if(-1===["_","["].indexOf(a.charAt(0)))if("function"!=typeof t[a]){if("keepdata"===r){if("src"===a.substr(a.length-3))return}else if("keepstream"===r){if("string"==typeof(n=t[a+"src"])&&n.indexOf(":")>0&&!c.isPlainObject(t.stream))return}else if("keepall"!==r&&"string"==typeof(n=t[a+"src"])&&n.indexOf(":")>0)return;i[a]=u(t[a],e)}else e&&(i[a]="_function")})),i}return Array.isArray(t)?t.map((function(t){return u(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var f={data:(o||[]).map((function(t){var r=u(t);return e&&delete r.fit,r}))};if(!e&&(f.layout=u(s),i)){var h=s._size;f.layout.computed={margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return l&&(f.frames=u(l)),a&&(f.config=u(t._context,!0)),"object"===n?f:JSON.stringify(f)},_.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r =0;a--)if(s[a].enabled){r._indexToPoints=s[a]._indexToPoints;break}n&&n.calc&&(o=n.calc(t,r))}Array.isArray(o)&&o[0]||(o=[{x:h,y:h}]),o[0].t||(o[0].t={}),o[0].trace=r,d[e]=o}}for(z(o,u,f),i=0;i 1e-10?t:0}function h(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a 0?r:1/0})),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:u,findXYatLength:function(t,e,r,n){var i=-e*r,a=e*e+1,o=2*(e*i-r),s=i*i+r*r-t*t,l=Math.sqrt(o*o-4*a*s),u=(-o+l)/(2*a),c=(-o-l)/(2*a);return[[u,e*u+i+n],[c,e*c+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return"M"+h(c(t,e,r,n),i,a).join("L")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t =90||i>90&&a>=450?1:s<=0&&u<=0?0:Math.max(s,u),[i<=180&&a>=180||i>180&&a>=540?-1:o>=0&&l>=0?0:Math.min(o,l),i<=270&&a>=270||i>270&&a>=630?-1:s>=0&&u>=0?0:Math.min(s,u),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(d),_=b[2]-b[0],w=b[3]-b[1],T=p/h,k=Math.abs(w/_);T>k?(v=h,x=(p-(g=h*k))/i.h/2,y=[s[0],s[1]],m=[f[0]+x,f[1]-x]):(g=p,x=(h-(v=p/k))/i.w/2,y=[s[0]+x,s[1]-x],m=[f[0],f[1]]),r.xLength2=v,r.yLength2=g,r.xDomain2=y,r.yDomain2=m;var A,M=r.xOffset2=i.l+i.w*y[0],S=r.yOffset2=i.t+i.h*(1-m[1]),E=r.radius=v/_,L=r.innerRadius=r.getHole(e)*E,C=r.cx=M-E*b[0],P=r.cy=S+E*b[3],O=r.cxx=C-M,I=r.cyy=P-S,D=a.side;"counterclockwise"===D?(A=D,D="top"):"clockwise"===D&&(A=D,D="bottom"),r.radialAxis=r.mockAxis(t,e,a,{_id:"x",side:D,_trueSide:A,domain:[L/i.w,E/i.w]}),r.angularAxis=r.mockAxis(t,e,o,{side:"right",domain:[0,Math.PI],autorange:!1}),r.doAutoRange(t,e),r.updateAngularAxis(t,e),r.updateRadialAxis(t,e),r.updateRadialAxisTitle(t,e),r.xaxis=r.mockCartesianAxis(t,e,{_id:"x",domain:y}),r.yaxis=r.mockCartesianAxis(t,e,{_id:"y",domain:m});var F=r.pathSubplot();r.clipPaths.forTraces.select("path").attr("d",F).attr("transform",l(O,I)),n.frontplot.attr("transform",l(M,S)).call(c.setClipUrl,r._hasClipOnAxisFalse?null:r.clipIds.forTraces,r.gd),n.bg.attr("d",F).attr("transform",l(C,P)).call(u.fill,e.bgcolor)},N.mockAxis=function(t,e,r,n){var i=o.extendFlat({},r,n);return d(i,e,t),i},N.mockCartesianAxis=function(t,e,r){var n=this,i=n.isSmith,a=r._id,s=o.extendFlat({type:"linear"},r);p(s,t);var l={x:[0,2],y:[1,3]};return s.setRange=function(){var t=n.sectorBBox,r=l[a],i=n.radialAxis._rl,o=(i[1]-i[0])/(1-n.getHole(e));s.range=[t[r[0]]*o,t[r[1]]*o]},s.isPtWithinRange="x"!==a||i?function(){return!0}:function(t){return n.isPtInside(t)},s.setRange(),s.setScale(),s},N.doAutoRange=function(t,e){var r=this,n=r.gd,i=r.radialAxis,a=r.getRadial(e);v(n,i);var o=i.range;a.range=o.slice(),a._input.range=o.slice(),i._rl=[i.r2l(o[0],null,"gregorian"),i.r2l(o[1],null,"gregorian")]},N.updateRadialAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getRadial(e),v=z(r.getSector(e)[0],360),g=r.radialAxis,y=c90&&v<=270&&(g.tickangle=180);var x=m?function(t){var e=I(r,C([t.x,0]));return l(e[0]-f,e[1]-p)}:function(t){return l(g.l2p(t.x)+c,0)},b=m?function(t){return O(r,t.x,-1/0,1/0)}:function(t){return r.pathArc(g.r2p(t.x)+c)},_=j(d);if(r.radialTickLayout!==_&&(i["radial-axis"].selectAll(".xtick").remove(),r.radialTickLayout=_),y){g.setScale();var w=0,T=m?(g.tickvals||[]).filter((function(t){return t>=0})).map((function(t){return h.tickText(g,t,!0,!1)})):h.calcTicks(g),k=m?T:h.clipEnds(g,T),A=h.getTickSigns(g)[2];m&&(("top"===g.ticks&&"bottom"===g.side||"bottom"===g.ticks&&"top"===g.side)&&(A=-A),"top"===g.ticks&&"top"===g.side&&(w=-g.ticklen),"bottom"===g.ticks&&"bottom"===g.side&&(w=g.ticklen)),h.drawTicks(n,g,{vals:T,layer:i["radial-axis"],path:h.makeTickPath(g,0,A),transFn:x,crisp:!1}),h.drawGrid(n,g,{vals:k,layer:i["radial-grid"],path:b,transFn:o.noop,crisp:!1}),h.drawLabels(n,g,{vals:T,layer:i["radial-axis"],transFn:x,labelFns:h.makeLabelFns(g,w)})}var M=r.radialAxisAngle=r.vangles?F(U(R(d.angle),r.vangles)):d.angle,S=l(f,p),E=S+s(-M);V(i["radial-axis"],y&&(d.showticklabels||d.ticks),{transform:E}),V(i["radial-grid"],y&&d.showgrid,{transform:m?"":S}),V(i["radial-line"].select("line"),y&&d.showline,{x1:m?-a:c,y1:0,x2:a,y2:0,transform:E}).attr("stroke-width",d.linewidth).call(u.stroke,d.linecolor)},N.updateRadialAxisTitle=function(t,e,r){if(!this.isSmith){var n=this,i=n.gd,a=n.radius,o=n.cx,s=n.cy,l=n.getRadial(e),u=n.id+"title",f=0;if(l.title){var h=c.bBox(n.layers["radial-axis"].node()).height,p=l.title.font.size,d=l.side;f="top"===d?p:"counterclockwise"===d?-(h+.4*p):h+.8*p}var v=void 0!==r?r:n.radialAxisAngle,g=R(v),y=Math.cos(g),m=Math.sin(g),b=o+a/2*y+f*m,_=s-a/2*m+f*y;n.layers["radial-axis-title"]=x.draw(i,u,{propContainer:l,propName:n.id+".radialaxis.title",placeholder:D(i,"Click to enter radial axis title"),attributes:{x:b,y:_,"text-anchor":"middle"},transform:{rotate:-v}})}},N.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,c=r.innerRadius,f=r.cx,p=r.cy,d=r.getAngular(e),v=r.angularAxis,g=r.isSmith;g||(r.fillViewInitialKey("angularaxis.rotation",d.rotation),v.setGeometry(),v.setScale());var y=g?function(t){var e=I(r,C([0,t.x]));return Math.atan2(e[0]-f,e[1]-p)-Math.PI/2}:function(t){return v.t2g(t.x)};"linear"===v.type&&"radians"===v.thetaunit&&(v.tick0=F(v.tick0),v.dtick=F(v.dtick));var m=function(t){return l(f+a*Math.cos(t),p-a*Math.sin(t))},x=g?function(t){var e=I(r,C([0,t.x]));return l(e[0],e[1])}:function(t){return m(y(t))},b=g?function(t){var e=I(r,C([0,t.x])),n=Math.atan2(e[0]-f,e[1]-p)-Math.PI/2;return l(e[0],e[1])+s(-F(n))}:function(t){var e=y(t);return m(e)+s(-F(e))},_=g?function(t){return P(r,t.x,0,1/0)}:function(t){var e=y(t),r=Math.cos(e),n=Math.sin(e);return"M"+[f+c*r,p-c*n]+"L"+[f+a*r,p-a*n]},w=h.makeLabelFns(v,0).labelStandoff,T={xFn:function(t){var e=y(t);return Math.cos(e)*w},yFn:function(t){var e=y(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(w+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*M)},anchorFn:function(t){var e=y(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},heightFn:function(t,e,r){var n=y(t);return-.5*(1+Math.sin(n))*r}},k=j(d);r.angularTickLayout!==k&&(i["angular-axis"].selectAll("."+v._id+"tick").remove(),r.angularTickLayout=k);var A,S=g?[1/0].concat(v.tickvals||[]).map((function(t){return h.tickText(v,t,!0,!1)})):h.calcTicks(v);if(g&&(S[0].text="∞",S[0].fontSize*=1.75),"linear"===e.gridshape?(A=S.map(y),o.angleDelta(A[0],A[1])<0&&(A=A.slice().reverse())):A=null,r.vangles=A,"category"===v.type&&(S=S.filter((function(t){return o.isAngleInsideSector(y(t),r.sectorInRad)}))),v.visible){var E="inside"===v.ticks?-1:1,L=(v.linewidth||1)/2;h.drawTicks(n,v,{vals:S,layer:i["angular-axis"],path:"M"+E*L+",0h"+E*v.ticklen,transFn:b,crisp:!1}),h.drawGrid(n,v,{vals:S,layer:i["angular-grid"],path:_,transFn:o.noop,crisp:!1}),h.drawLabels(n,v,{vals:S,layer:i["angular-axis"],repositionOnUpdate:!0,transFn:x,labelFns:T})}V(i["angular-line"].select("path"),d.showline,{d:r.pathSubplot(),transform:l(f,p)}).attr("stroke-width",d.linewidth).call(u.stroke,d.linecolor)},N.updateFx=function(t,e){this.gd._context.staticPlot||(!this.isSmith&&(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1)),this.updateHoverAndMainDrag(t))},N.updateHoverAndMainDrag=function(t){var e,r,s=this,u=s.isSmith,c=s.gd,f=s.layers,h=t._zoomlayer,p=S.MINZOOM,d=S.OFFEDGE,v=s.radius,x=s.innerRadius,T=s.cx,k=s.cy,A=s.cxx,M=s.cyy,L=s.sectorInRad,C=s.vangles,P=s.radialAxis,O=E.clampTiny,I=E.findXYatLength,D=E.findEnclosingVertexAngles,z=S.cornerHalfWidth,R=S.cornerLen/2,F=g.makeDragger(f,"path","maindrag",!1===t.dragmode?"none":"crosshair");n.select(F).attr("d",s.pathSubplot()).attr("transform",l(T,k)),F.onmousemove=function(t){m.hover(c,t,s.id),c._fullLayout._lasthover=F,c._fullLayout._hoversubplot=s.id},F.onmouseout=function(t){c._dragging||y.unhover(c,t)};var B,N,j,U,V,H,q,G,Z,Y={element:F,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function W(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return W(t-A,e-M)}function J(t,e){return Math.atan2(M-e,t-A)}function K(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function $(t,e){if(0===t)return s.pathSector(2*z);var r=R/t,n=e-r,i=e+r,a=Math.max(0,Math.min(t,v)),o=a-z,l=a+z;return"M"+K(o,n)+"A"+[o,o]+" 0,0,0 "+K(o,i)+"L"+K(l,i)+"A"+[l,l]+" 0,0,1 "+K(l,n)+"Z"}function Q(t,e,r){if(0===t)return s.pathSector(2*z);var n,i,a=K(t,e),o=K(t,r),l=O((a[0]+o[0])/2),u=O((a[1]+o[1])/2);if(l&&u){var c=u/l,f=-1/c,h=I(z,c,l,u);n=I(R,f,h[0][0],h[0][1]),i=I(R,f,h[1][0],h[1][1])}else{var p,d;u?(p=R,d=z):(p=z,d=R),n=[[l-p,u-d],[l+p,u-d]],i=[[l-p,u+d],[l+p,u+d]]}return"M"+n.join("L")+"L"+i.reverse().join("L")+"Z"}function tt(t,e){return e=Math.max(Math.min(e,v),x),t p?(t -1&&1===t&&_(e,c,[s.xaxis],[s.yaxis],s.id,Y),r.indexOf("event")>-1&&m.click(c,e,s.id)}Y.prepFn=function(t,n,a){var l=c._fullLayout.dragmode,f=F.getBoundingClientRect();c._fullLayout._calcInverseTransform(c);var p=c._fullLayout._invTransform;e=c._fullLayout._invScaleX,r=c._fullLayout._invScaleY;var d=o.apply3DTransform(p)(n-f.left,a-f.top);if(B=d[0],N=d[1],C){var y=E.findPolygonOffset(v,L[0],L[1],C);B+=A+y[0],N+=M+y[1]}switch(l){case"zoom":Y.clickFn=st,u||(Y.moveFn=C?it:rt,Y.doneFn=at,function(){j=null,U=null,V=s.pathSubplot(),H=!1;var t=c._fullLayout[s.id];q=i(t.bgcolor).getLuminance(),(G=g.makeZoombox(h,q,T,k,V)).attr("fill-rule","evenodd"),Z=g.makeCorners(h,T,k),w(c)}());break;case"select":case"lasso":b(t,n,a,Y,l)}},y.init(Y)},N.updateRadialDrag=function(t,e,r){var i=this,u=i.gd,c=i.layers,f=i.radius,h=i.innerRadius,p=i.cx,d=i.cy,v=i.radialAxis,m=S.radialDragBoxSize,x=m/2;if(v.visible){var b,_,T,M=R(i.radialAxisAngle),E=v._rl,L=E[0],C=E[1],P=E[r],O=.75*(E[1]-E[0])/(1-i.getHole(e))/f;r?(b=p+(f+x)*Math.cos(M),_=d-(f+x)*Math.sin(M),T="radialdrag"):(b=p+(h-x)*Math.cos(M),_=d-(h-x)*Math.sin(M),T="radialdrag-inner");var I,D,z,B=g.makeRectDragger(c,T,"crosshair",-x,-x,m,m),N={element:B,gd:u};!1===t.dragmode&&(N.dragmode=!1),V(n.select(B),v.visible&&h 0==(r?z>L:z n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*a},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case"angularaxis":!function(t,e){var r=t.type;if("linear"===r){var i=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return"degrees"===e?a(t):t}(i(t),e)},t.c2d=function(t,e){return s(function(t,e){return"degrees"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,i){var a,o,s=e[i],l=e._length,u=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&"linear"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(a=new Array(l),o=0;o 0?1:0}function r(t){var e=t[0],r=t[1];if(!isFinite(e)||!isFinite(r))return[1,0];var n=(e+1)*(e+1)+r*r;return[(e*e+r*r-1)/n,2*r/n]}function n(t,e){var r=e[0],n=e[1];return[r*t.radius+t.cx,-n*t.radius+t.cy]}function i(t,e){return e*t.radius}t.exports={smith:r,reactanceArc:function(t,e,a,o){var s=n(t,r([a,e])),l=s[0],u=s[1],c=n(t,r([o,e])),f=c[0],h=c[1];if(0===e)return["M"+l+","+u,"L"+f+","+h].join(" ");var p=i(t,1/Math.abs(e));return["M"+l+","+u,"A"+p+","+p+" 0 0,"+(e<0?1:0)+" "+f+","+h].join(" ")},resistanceArc:function(t,a,o,s){var l=i(t,1/(a+1)),u=n(t,r([a,o])),c=u[0],f=u[1],h=n(t,r([a,s])),p=h[0],d=h[1];if(e(o)!==e(s)){var v=n(t,r([a,0]));return["M"+c+","+f,"A"+l+","+l+" 0 0,"+(0 0){for(var n=[],i=0;i =c&&(h.min=0,d.min=0,g.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function v(t,e,r,n){var i=h[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o("uirevision",n.uirevision),e.type="linear";var p=o("color"),d=p!==i.color.dflt?p:r.font.color,v=e._name.charAt(0).toUpperCase(),g="Component "+v,y=o("title.text",g);e._hovertitle=y===g?y:v,a.coerceFont(o,"title.font",{family:r.font.family,size:a.bigFont(r.font.size),color:d}),o("min"),c(t,e,o,"linear"),l(t,e,o,"linear"),s(t,e,o,"linear"),u(t,e,o,{outerTicks:!0}),o("showticklabels")&&(a.coerceFont(o,"tickfont",{family:r.font.family,size:r.font.size,color:d}),o("tickangle"),o("tickformat")),f(t,e,o,{dfltColor:p,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o("hoverformat"),o("layer")}t.exports=function(t,e,r){o(t,e,r,{type:"ternary",attributes:h,handleDefaults:d,font:e.font,paper_bgcolor:e.paper_bgcolor})}},64380:function(t,e,r){"use strict";var n=r(39898),i=r(84267),a=r(73972),o=r(71828),s=o.strTranslate,l=o._,u=r(7901),c=r(91424),f=r(21994),h=r(1426).extendFlat,p=r(74875),d=r(89298),v=r(28569),g=r(30211),y=r(64505),m=y.freeMode,x=y.rectMode,b=r(92998),_=r(47322).prepSelect,w=r(47322).selectOnClick,T=r(47322).clearOutline,k=r(47322).clearSelectionsCache,A=r(85555);function M(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}t.exports=M;var S=M.prototype;S.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},S.plot=function(t,e){var r=this,n=e[r.id],i=e._size;r._hasClipOnAxisFalse=!1;for(var a=0;a E*b?i=(a=b)*E:a=(i=x)/E,o=y*i/x,l=m*a/b,r=e.l+e.w*v-i/2,n=e.t+e.h*(1-g)-a/2,p.x0=r,p.y0=n,p.w=i,p.h=a,p.sum=_,p.xaxis={type:"linear",range:[w+2*k-_,_-w-2*T],domain:[v-o/2,v+o/2],_id:"x"},f(p.xaxis,p.graphDiv._fullLayout),p.xaxis.setScale(),p.xaxis.isPtWithinRange=function(t){return t.a>=p.aaxis.range[0]&&t.a<=p.aaxis.range[1]&&t.b>=p.baxis.range[1]&&t.b<=p.baxis.range[0]&&t.c>=p.caxis.range[1]&&t.c<=p.caxis.range[0]},p.yaxis={type:"linear",range:[w,_-T-k],domain:[g-l/2,g+l/2],_id:"y"},f(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange=function(){return!0};var A=p.yaxis.domain[0],M=p.aaxis=h({},t.aaxis,{range:[w,_-T-k],side:"left",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+l*E],anchor:"free",position:0,_id:"y",_length:i});f(M,p.graphDiv._fullLayout),M.setScale();var S=p.baxis=h({},t.baxis,{range:[_-w-k,T],side:"bottom",domain:p.xaxis.domain,anchor:"free",position:0,_id:"x",_length:i});f(S,p.graphDiv._fullLayout),S.setScale();var L=p.caxis=h({},t.caxis,{range:[_-w-T,k],side:"right",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+l*E],anchor:"free",position:0,_id:"y",_length:i});f(L,p.graphDiv._fullLayout),L.setScale();var C="M"+r+","+(n+a)+"h"+i+"l-"+i/2+",-"+a+"Z";p.clipDef.select("path").attr("d",C),p.layers.plotbg.select("path").attr("d",C);var P="M0,"+a+"h"+i+"l-"+i/2+",-"+a+"Z";p.clipDefRelative.select("path").attr("d",P);var O=s(r,n);p.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",O),p.clipDefRelative.select("path").attr("transform",null);var I=s(r-S._offset,n+a);p.layers.baxis.attr("transform",I),p.layers.bgrid.attr("transform",I);var D=s(r+i/2,n)+"rotate(30)"+s(0,-M._offset);p.layers.aaxis.attr("transform",D),p.layers.agrid.attr("transform",D);var z=s(r+i/2,n)+"rotate(-30)"+s(0,-L._offset);p.layers.caxis.attr("transform",z),p.layers.cgrid.attr("transform",z),p.drawAxes(!0),p.layers.aline.select("path").attr("d",M.showline?"M"+r+","+(n+a)+"l"+i/2+",-"+a:"M0,0").call(u.stroke,M.linecolor||"#000").style("stroke-width",(M.linewidth||0)+"px"),p.layers.bline.select("path").attr("d",S.showline?"M"+r+","+(n+a)+"h"+i:"M0,0").call(u.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),p.layers.cline.select("path").attr("d",L.showline?"M"+(r+i/2)+","+n+"l"+i/2+","+a:"M0,0").call(u.stroke,L.linecolor||"#000").style("stroke-width",(L.linewidth||0)+"px"),p.graphDiv._context.staticPlot||p.initInteractions(),c.setClipUrl(p.layers.frontplot,p._hasClipOnAxisFalse?null:p.clipId,p.graphDiv)},S.drawAxes=function(t){var e=this,r=e.graphDiv,n=e.id.substr(7)+"title",i=e.layers,a=e.aaxis,o=e.baxis,s=e.caxis;if(e.drawAx(a),e.drawAx(o),e.drawAx(s),t){var u=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+("outside"===s.ticks?.87*s.ticklen:0)),c=(o.showticklabels?o.tickfont.size:0)+("outside"===o.ticks?o.ticklen:0)+3;i["a-title"]=b.draw(r,"a"+n,{propContainer:a,propName:e.id+".aaxis.title",placeholder:l(r,"Click to enter Component A title"),attributes:{x:e.x0+e.w/2,y:e.y0-a.title.font.size/3-u,"text-anchor":"middle"}}),i["b-title"]=b.draw(r,"b"+n,{propContainer:o,propName:e.id+".baxis.title",placeholder:l(r,"Click to enter Component B title"),attributes:{x:e.x0-c,y:e.y0+e.h+.83*o.title.font.size+c,"text-anchor":"middle"}}),i["c-title"]=b.draw(r,"c"+n,{propContainer:s,propName:e.id+".caxis.title",placeholder:l(r,"Click to enter Component C title"),attributes:{x:e.x0+e.w+c,y:e.y0+e.h+.83*s.title.font.size+c,"text-anchor":"middle"}})}},S.drawAx=function(t){var e,r=this,n=r.graphDiv,i=t._name,a=i.charAt(0),s=t._id,l=r.layers[i],u=a+"tickLayout",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);r[u]!==c&&(l.selectAll("."+s+"tick").remove(),r[u]=c),t.setScale();var f=d.calcTicks(t),h=d.clipEnds(t,f),p=d.makeTransTickFn(t),v=d.getTickSigns(t)[2],g=o.deg2rad(30),y=v*(t.linewidth||1)/2,m=v*t.ticklen,x=r.w,b=r.h,_="b"===a?"M0,"+y+"l"+Math.sin(g)*m+","+Math.cos(g)*m:"M"+y+",0l"+Math.cos(g)*m+","+-Math.sin(g)*m,w={a:"M0,0l"+b+",-"+x/2,b:"M0,0l-"+x/2+",-"+b,c:"M0,0l-"+b+","+x/2}[a];d.drawTicks(n,t,{vals:"inside"===t.ticks?h:f,layer:l,path:_,transFn:p,crisp:!1}),d.drawGrid(n,t,{vals:h,layer:r.layers[a+"grid"],path:w,transFn:p,crisp:!1}),d.drawLabels(n,t,{vals:f,layer:l,transFn:p,labelFns:d.makeLabelFns(t,0,30)})};var L=A.MINZOOM/2+.87,C="m-0.87,.5h"+L+"v3h-"+(L+5.2)+"l"+(L/2+2.6)+",-"+(.87*L+4.5)+"l2.6,1.5l-"+L/2+","+.87*L+"Z",P="m0.87,.5h-"+L+"v3h"+(L+5.2)+"l-"+(L/2+2.6)+",-"+(.87*L+4.5)+"l-2.6,1.5l"+L/2+","+.87*L+"Z",O="m0,1l"+L/2+","+.87*L+"l2.6,-1.5l-"+(L/2+2.6)+",-"+(.87*L+4.5)+"l-"+(L/2+2.6)+","+(.87*L+4.5)+"l2.6,1.5l"+L/2+",-"+.87*L+"Z",I=!0;function D(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}S.clearOutline=function(){k(this.dragOptions),T(this.dragOptions.gd)},S.initInteractions=function(){var t,e,r,n,f,h,p,d,y,b,T,k,M=this,S=M.layers.plotbg.select("path").node(),L=M.graphDiv,z=L._fullLayout._zoomlayer;function R(t){var e={};return e[M.id+".aaxis.min"]=t.a,e[M.id+".baxis.min"]=t.b,e[M.id+".caxis.min"]=t.c,e}function F(t,e){var r=L._fullLayout.clickmode;D(L),2===t&&(L.emit("plotly_doubleclick",null),a.call("_guiRelayout",L,R({a:0,b:0,c:0}))),r.indexOf("select")>-1&&1===t&&w(e,L,[M.xaxis],[M.yaxis],M.id,M.dragOptions),r.indexOf("event")>-1&&g.click(L,e,M.id)}function B(t,e){return 1-e/M.h}function N(t,e){return 1-(t+(M.h-e)/Math.sqrt(3))/M.w}function j(t,e){return(t-(M.h-e)/Math.sqrt(3))/M.w}function U(i,a){var o=r+i*t,s=n+a*e,l=Math.max(0,Math.min(1,B(0,n),B(0,s))),u=Math.max(0,Math.min(1,N(r,n),N(o,s))),c=Math.max(0,Math.min(1,j(r,n),j(o,s))),v=(l/2+c)*M.w,g=(1-l/2-u)*M.w,m=(v+g)/2,x=g-v,_=(1-l)*M.h,w=_-x/E;x .2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),k.transition().style("opacity",1).duration(200),b=!0),L.emit("plotly_relayouting",R(p))}function V(){D(L),p!==f&&(a.call("_guiRelayout",L,R(p)),I&&L.data&&L._context.showTips&&(o.notifier(l(L,"Double-click to zoom back out"),"long"),I=!1))}function H(t,e){var r=t/M.xaxis._m,n=e/M.yaxis._m,i=[(p={a:f.a-n,b:f.b+(r+n)/2,c:f.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a=i.indexOf(p.a),l=i.indexOf(p.b),u=i.indexOf(p.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),p={a:i[a],b:i[l],c:i[u]},e=(f.a-p.a)*M.yaxis._m,t=(f.c-p.c-f.b+p.b)*M.xaxis._m);var h=s(M.x0+t,M.y0+e);M.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",h);var d=s(-t,-e);M.clipDefRelative.select("path").attr("transform",d),M.aaxis.range=[p.a,M.sum-p.b-p.c],M.baxis.range=[M.sum-p.a-p.c,p.b],M.caxis.range=[M.sum-p.a-p.b,p.c],M.drawAxes(!1),M._hasClipOnAxisFalse&&M.plotContainer.select(".scatterlayer").selectAll(".trace").call(c.hideOutsideRangePoints,M),L.emit("plotly_relayouting",R(p))}function q(){a.call("_guiRelayout",L,R(p))}this.dragOptions={element:S,gd:L,plotinfo:{id:M.id,domain:L._fullLayout[M.id].domain,xaxis:M.xaxis,yaxis:M.yaxis},subplot:M.id,prepFn:function(a,l,c){M.dragOptions.xaxes=[M.xaxis],M.dragOptions.yaxes=[M.yaxis],t=L._fullLayout._invScaleX,e=L._fullLayout._invScaleY;var v=M.dragOptions.dragmode=L._fullLayout.dragmode;m(v)?M.dragOptions.minDrag=1:M.dragOptions.minDrag=void 0,"zoom"===v?(M.dragOptions.moveFn=U,M.dragOptions.clickFn=F,M.dragOptions.doneFn=V,function(t,e,a){var l=S.getBoundingClientRect();r=e-l.left,n=a-l.top,L._fullLayout._calcInverseTransform(L);var c=L._fullLayout._invTransform,v=o.apply3DTransform(c)(r,n);r=v[0],n=v[1],f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,h=M.aaxis.range[1]-f.a,d=i(M.graphDiv._fullLayout[M.id].bgcolor).getLuminance(),y="M0,"+M.h+"L"+M.w/2+", 0L"+M.w+","+M.h+"Z",b=!1,T=z.append("path").attr("class","zoombox").attr("transform",s(M.x0,M.y0)).style({fill:d>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",y),k=z.append("path").attr("class","zoombox-corners").attr("transform",s(M.x0,M.y0)).style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),M.clearOutline(L)}(0,l,c)):"pan"===v?(M.dragOptions.moveFn=H,M.dragOptions.clickFn=F,M.dragOptions.doneFn=q,f={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=f,M.clearOutline(L)):(x(v)||m(v))&&_(a,l,c,M.dragOptions,v)}},S.onmousemove=function(t){g.hover(L,t,M.id),L._fullLayout._lasthover=S,L._fullLayout._hoversubplot=M.id},S.onmouseout=function(t){L._dragging||v.unhover(L,t)},v.init(this.dragOptions)}},73972:function(t,e,r){"use strict";var n=r(47769),i=r(64213),a=r(75138),o=r(41965),s=r(24401).addStyleRule,l=r(1426),u=r(9012),c=r(10820),f=l.extendFlat,h=l.extendDeepAll;function p(t){var r=t.name,i=t.categories,a=t.meta;if(e.modules[r])n.log("Type "+r+" already registered");else{e.subplotsRegistry[t.basePlotModule.name]||function(t){var r=t.name;if(e.subplotsRegistry[r])n.log("Plot type "+r+" already registered.");else for(var i in y(t),e.subplotsRegistry[r]=t,e.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o={},l=0;l -1&&(f[p[r]].title={text:""});for(r=0;r ")?"":e.html(t).text()}));return e.remove(),r}(w)).replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&")).replace(c,"'"),i.isIE()&&(w=(w=(w=w.replace(/"/gi,"'")).replace(/(\('#)([^']*)('\))/gi,'("#$2")')).replace(/(\\')/gi,'"')),w}},75341:function(t,e,r){"use strict";var n=r(71828);t.exports=function(t,e){for(var r=0;r f+u||!n(c))}for(var p=0;p a))return e}return void 0!==r?r:t.dflt},e.coerceColor=function(t,e,r){return i(e).isValid()?e:void 0!==r?r:t.dflt},e.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},e.getValue=function(t,e){var r;return Array.isArray(t)?e 0?e+=r:c<0&&(e-=r)}return e}function D(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,_+(i-e)/(i-r)-1)}var z=t[f+"a"],R=t[h+"a"];v=Math.abs(z.r2c(z.range[1])-z.r2c(z.range[0]));var F=n.getDistanceFunction(i,p,d,(function(t){return(p(t)+d(t))/2}));if(n.getClosest(g,F,t),!1!==t.index&&g[t.index].p!==u){k||(L=function(t){return Math.min(A(t),t.p-m.bargroupwidth/2)},C=function(t){return Math.max(M(t),t.p+m.bargroupwidth/2)});var B=g[t.index],N=y.base?B.b+B.s:B.s;t[h+"0"]=t[h+"1"]=R.c2p(B[h],!0),t[h+"LabelVal"]=N;var j=m.extents[m.extents.round(B.p)];t[f+"0"]=z.c2p(x?L(B):j[0],!0),t[f+"1"]=z.c2p(x?C(B):j[1],!0);var U=void 0!==B.orig_p;return t[f+"LabelVal"]=U?B.orig_p:B.p,t.labelLabel=l(z,t[f+"LabelVal"],y[f+"hoverformat"]),t.valueLabel=l(R,t[h+"LabelVal"],y[h+"hoverformat"]),t.baseLabel=l(R,B.b,y[h+"hoverformat"]),t.spikeDistance=(function(t){var e=c,r=t.b,i=I(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(B)+function(t){return P(A(t),M(t),w)}(B))/2,t[f+"Spike"]=z.c2p(B.p,!0),o(B,y,t),t.hovertemplate=y.hovertemplate,t}}function f(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,i=s(t,e);return a.opacity(r)?r:a.opacity(n)&&i?n:void 0}t.exports={hoverPoints:function(t,e,r,n,a){var o=c(t,e,r,n,a);if(o){var s=o.cd,l=s[0].trace,u=s[o.index];return o.color=f(l,u),i.getComponentMethod("errorbars","hoverInfo")(u,l,o),[o]}},hoverOnBars:c,getTraceColor:f}},60822:function(t,e,r){"use strict";t.exports={attributes:r(1486),layoutAttributes:r(43641),supplyDefaults:r(90769).supplyDefaults,crossTraceDefaults:r(90769).crossTraceDefaults,supplyLayoutDefaults:r(13957),calc:r(92290),crossTraceCalc:r(11661).crossTraceCalc,colorbar:r(4898),arraysToCalcdata:r(75341),plot:r(17295).plot,style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(95423).hoverPoints,eventData:r(58065),selectPoints:r(81974),moduleType:"trace",name:"bar",basePlotModule:r(93612),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}},43641:function(t){"use strict";t.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},13957:function(t,e,r){"use strict";var n=r(73972),i=r(89298),a=r(71828),o=r(43641);t.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,u=!1,c=!1,f={},h=s("barmode"),p=0;p 0}function S(t){return"auto"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),i=Math.abs(Math.cos(r));return{x:t.width*i+t.height*n,y:t.width*n+t.height*i}}function L(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,u=a.anchor||"end",c="end"===u,f="start"===u,h=((a.leftToRight||0)+1)/2,p=1-h,d=i.width,v=i.height,g=Math.abs(e-t),y=Math.abs(n-r),m=g>2*_&&y>2*_?_:0;g-=2*m,y-=2*m;var x=S(l);"auto"!==l||d<=g&&v<=y||!(d>g||v>y)||(d>y||v>g)&&d .01?G:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?G(t):t>e?Math.ceil(t):Math.floor(t)};N=Z(N,j,R),j=Z(j,N,R),U=Z(U,V,!R),V=Z(V,U,!R)}var Y=A(a.ensureSingle(I,"path"),P,g,y);if(Y.style("vector-effect",O?"none":"non-scaling-stroke").attr("d",isNaN((j-N)*(V-U))||H&&t._context.staticPlot?"M0,0Z":"M"+N+","+U+"V"+V+"H"+j+"V"+U+"Z").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&F){var W=l.makePointStyleFns(f);l.singlePointStyle(u,Y,f,W,t)}!function(t,e,r,n,i,s,u,f,p,g,y){var w,T=e.xaxis,M=e.yaxis,C=t._fullLayout;function P(e,r,n){return a.ensureSingle(e,"text").text(r).attr({class:"bartext bartext-"+w,"text-anchor":"middle","data-notex":1}).call(l.font,n).call(o.convertToTspans,t)}var O=n[0].trace,I="h"===O.orientation,D=function(t,e,r,n,i){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,i){var o=e[0].trace,s=a.castOption(o,r,"texttemplate");if(!s)return"";var l,u,f,h,p="histogram"===o.type,d="waterfall"===o.type,v="funnel"===o.type,g="h"===o.orientation;function y(t){return c(h,h.c2l(t),!0).text}g?(l="y",u=i,f="x",h=n):(l="x",u=n,f="y",h=i);var m,x=e[r],_={};_.label=x.p,_.labelLabel=_[l+"Label"]=(m=x.p,c(u,u.c2l(m),!0).text);var w=a.castOption(o,x.i,"text");(0===w||w)&&(_.text=w),_.value=x.s,_.valueLabel=_[f+"Label"]=y(x.s);var T={};b(T,o,x.i),(p||void 0===T.x)&&(T.x=g?_.value:_.label),(p||void 0===T.y)&&(T.y=g?_.label:_.value),(p||void 0===T.xLabel)&&(T.xLabel=g?_.valueLabel:_.labelLabel),(p||void 0===T.yLabel)&&(T.yLabel=g?_.labelLabel:_.valueLabel),d&&(_.delta=+x.rawS||x.s,_.deltaLabel=y(_.delta),_.final=x.v,_.finalLabel=y(_.final),_.initial=_.final-_.delta,_.initialLabel=y(_.initial)),v&&(_.value=x.s,_.valueLabel=y(_.value),_.percentInitial=x.begR,_.percentInitialLabel=a.formatPercent(x.begR),_.percentPrevious=x.difR,_.percentPreviousLabel=a.formatPercent(x.difR),_.percentTotal=x.sumR,_.percenTotalLabel=a.formatPercent(x.sumR));var k=a.castOption(o,x.i,"customdata");return k&&(_.customdata=k),a.texttemplateString(s,_,t._d3locale,T,_,o._meta||{})}(t,e,r,n,i):s.textinfo?function(t,e,r,n){var i=t[0].trace,o="h"===i.orientation,s="waterfall"===i.type,l="funnel"===i.type;function u(t){return c(o?r:n,+t,!0).text}var f,h,p=i.textinfo,d=t[e],v=p.split("+"),g=[],y=function(t){return-1!==v.indexOf(t)};if(y("label")&&g.push((h=t[e].p,c(o?n:r,h,!0).text)),y("text")&&(0===(f=a.castOption(i,d.i,"text"))||f)&&g.push(f),s){var m=+d.rawS||d.s,x=d.v,b=x-m;y("initial")&&g.push(u(b)),y("delta")&&g.push(u(m)),y("final")&&g.push(u(x))}if(l){y("value")&&g.push(u(d.s));var _=0;y("percent initial")&&_++,y("percent previous")&&_++,y("percent total")&&_++;var w=_>1;y("percent initial")&&(f=a.formatPercent(d.begR),w&&(f+=" of initial"),g.push(f)),y("percent previous")&&(f=a.formatPercent(d.difR),w&&(f+=" of previous"),g.push(f)),y("percent total")&&(f=a.formatPercent(d.sumR),w&&(f+=" of total"),g.push(f))}return g.join("
")}(e,r,n,i):v.getValue(s.text,r),v.coerceString(m,o)}(C,n,i,T,M);w=function(t,e){var r=v.getValue(t.textposition,e);return v.coerceEnumerated(x,r)}(O,i);var z="stack"===g.mode||"relative"===g.mode,R=n[i],F=!z||R._outmost;if(D&&"none"!==w&&(!R.isBlank&&s!==u&&f!==p||"auto"!==w&&"inside"!==w)){var B=C.font,N=d.getBarColor(n[i],O),j=d.getInsideTextFont(O,i,B,N),U=d.getOutsideTextFont(O,i,B),V=r.datum();I?"log"===T.type&&V.s0<=0&&(s=T.range[0]0&&Z>0&&(G<=W&&Z<=X||G<=X&&Z<=W||(I?W>=G*(X/Z):X>=Z*(W/G)))?w="inside":(w="outside",H.remove(),H=null)):w="inside"),!H){var J=(H=P(r,D,Y=a.ensureUniformFontSize(t,"outside"===w?U:j))).attr("transform");if(H.attr("transform",""),G=(q=l.bBox(H.node())).width,Z=q.height,H.attr("transform",J),G<=0||Z<=0)return void H.remove()}var K,$=O.textangle;K="outside"===w?function(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,u=a.angle||0,c=i.width,f=i.height,h=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:h>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/f):Math.min(1,h/c));var v=S(u),g=E(i,v),y=(s?g.x:g.y)/2,m=(i.left+i.right)/2,x=(i.top+i.bottom)/2,b=(t+e)/2,w=(r+n)/2,T=0,A=0,M=s?k(e,t):k(r,n);return s?(b=e-M*o,T=M*y):(w=n+M*o,A=-M*y),{textX:m,textY:x,targetX:b,targetY:w,anchorX:T,anchorY:A,scale:d,rotate:v}}(s,u,f,p,q,{isHorizontal:I,constrained:"both"===O.constraintext||"outside"===O.constraintext,angle:$}):L(s,u,f,p,q,{isHorizontal:I,constrained:"both"===O.constraintext||"inside"===O.constraintext,angle:$,anchor:O.insidetextanchor}),K.fontSize=Y.size,h("histogram"===O.type?"bar":O.type,K,C),R.transform=K;var Q=A(H,C,g,y);a.setTransormAndDisplay(Q,K)}else r.select("text").remove()}(t,e,I,r,p,N,j,U,V,g,y),e.layerClipId&&l.hideOutsideRangePoint(u,I.select("text"),w,C,f.xcalendar,f.ycalendar)}));var U=!1===f.cliponaxis;l.setClipUrl(u,U?null:e.layerClipId,t)}));u.getComponentMethod("errorbars","plot")(t,I,e,g)},toMoveInsideBar:L}},81974:function(t){"use strict";function e(t,e,r,n,i){var a=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}t.exports=function(t,r){var n,i=t.cd,a=t.xaxis,o=t.yaxis,s=i[0].trace,l="funnel"===s.type,u="h"===s.orientation,c=[];if(!1===r)for(n=0;n 1||0===i.bargap&&0===i.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")})),e.selectAll("g.points").each((function(e){d(n.select(this),e[0].trace,t)})),s.getComponentMethod("errorbars","style")(e)},styleTextPoints:v,styleOnSelect:function(t,e,r){var i=e[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll("path"),e),function(t,e,r){t.each((function(t){var i,s=n.select(this);if(t.selected){i=o.ensureUniformFontSize(r,g(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(i.color=l),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll("text"),e,r)}(r,i,t):(d(r,i,t),s.getComponentMethod("errorbars","style")(r))},getInsideTextFont:m,getOutsideTextFont:x,getBarColor:_,resizeText:l}},98340:function(t,e,r){"use strict";var n=r(7901),i=r(52075).hasColorscale,a=r(1586),o=r(71828).coercePattern;t.exports=function(t,e,r,s,l){var u=r("marker.color",s),c=i(t,"marker");c&&a(t,e,l,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),i(t,"marker.line")&&a(t,e,l,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width"),r("marker.opacity"),o(r,"marker.pattern",u,c),r("selected.marker.color"),r("unselected.marker.color")}},72597:function(t,e,r){"use strict";var n=r(39898),i=r(71828);function a(t){return"_"+t+"Text_minsize"}t.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=a(t),i=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o g.point"}e.selectAll(s).each((function(t){var e=t.transform;if(e){e.scale=l&&e.hide?0:o/e.fontSize;var r=n.select(this).select("text");i.setTransormAndDisplay(r,e)}}))}}}},55023:function(t,e,r){"use strict";var n=r(5386).fF,i=r(1426).extendFlat,a=r(81245),o=r(1486);t.exports={r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},74692:function(t,e,r){"use strict";var n=r(52075).hasColorscale,i=r(78803),a=r(75341),o=r(11661).setGroupPositions,s=r(66279),l=r(73972).traceIs,u=r(71828).extendFlat;t.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,u=r[o].angularaxis,c=l.makeCalcdata(e,"r"),f=u.makeCalcdata(e,"theta"),h=e._length,p=new Array(h),d=c,v=f,g=0;g h.range[1]&&(x+=Math.PI),n.getClosest(u,(function(t){return v(m,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/y)-1+(t.rp1-m)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var b=u[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=i.extendFlat({},b,{r:b.s,theta:b.p});return o(b,c,t),s(_,c,f,t),t.hovertemplate=c.hovertemplate,t.color=a(c,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign="left"),[t]}}},23381:function(t,e,r){"use strict";t.exports={moduleType:"trace",name:"barpolar",basePlotModule:r(23580),categories:["polar","bar","showLegend"],attributes:r(55023),layoutAttributes:r(40151),supplyDefaults:r(6135),supplyLayoutDefaults:r(19860),calc:r(74692).calc,crossTraceCalc:r(74692).crossTraceCalc,plot:r(60173),colorbar:r(4898),formatLabels:r(98608),style:r(16688).style,styleOnSelect:r(16688).styleOnSelect,hoverPoints:r(27379),selectPoints:r(81974),meta:{}}},40151:function(t){"use strict";t.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}},19860:function(t,e,r){"use strict";var n=r(71828),i=r(40151);t.exports=function(t,e,r){var a,o={};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l=0;l 0?(u=o,c=l):(u=l,c=o);var f=[s.findEnclosingVertexAngles(u,t.vangles)[0],(u+c)/2,s.findEnclosingVertexAngles(c,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,u,c,f,e,r)}:function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),d=e.layers.frontplot.select("g.barlayer");a.makeTraceGroups(d,r,"trace bars").each((function(){var r=n.select(this),s=a.ensureSingle(r,"g","points").selectAll("g.point").data(a.identity);s.enter().append("g").style("vector-effect",l?"none":"non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),s.exit().remove(),s.each((function(t){var e,r=n.select(this),o=t.rp0=f.c2p(t.s0),s=t.rp1=f.c2p(t.s1),l=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(i(o)&&i(s)&&i(l)&&i(d)&&o!==s&&l!==d){var v=f.c2g(t.s1),g=(l+d)/2;t.ct=[u.c2p(v*Math.cos(g)),c.c2p(v*Math.sin(g))],e=p(o,s,l,d)}else e="M0,0Z";a.ensureSingle(r,"path").attr("d",e)})),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},53522:function(t,e,r){"use strict";var n=r(82196),i=r(1486),a=r(22399),o=r(12663).axisHoverFormat,s=r(5386).fF,l=r(1426).extendFlat,u=n.marker,c=u.line;t.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o("x"),yhoverformat:o("y"),name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},sdmultiple:{valType:"number",min:0,editType:"calc",dflt:1},sizemode:{valType:"enumerated",values:["quartiles","sd"],editType:"calc",dflt:"quartiles"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:l({},u.symbol,{arrayOk:!1,editType:"plot"}),opacity:l({},u.opacity,{arrayOk:!1,dflt:1,editType:"style"}),angle:l({},u.angle,{arrayOk:!1,editType:"calc"}),size:l({},u.size,{arrayOk:!1,editType:"calc"}),color:l({},u.color,{arrayOk:!1,editType:"style"}),line:{color:l({},c.color,{arrayOk:!1,dflt:a.defaultLine,editType:"style"}),width:l({},c.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},showwhiskers:{valType:"boolean",editType:"calc"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:"style"},unselected:{marker:n.unselected.marker,editType:"style"},text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),hovertemplate:s({}),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"}}},48518:function(t,e,r){"use strict";var n=r(92770),i=r(89298),a=r(42973),o=r(71828),s=r(50606).BADNUM,l=o._;t.exports=function(t,e){var r,u,m,x,b,_,w,T=t._fullLayout,k=i.getFromId(t,e.xaxis||"x"),A=i.getFromId(t,e.yaxis||"y"),M=[],S="violin"===e.type?"_numViolins":"_numBoxes";"h"===e.orientation?(m=k,x="x",b=A,_="y",w=!!e.yperiodalignment):(m=A,x="y",b=k,_="x",w=!!e.xperiodalignment);var E,L,C,P,O,I,D=function(t,e,r,i){var s,l=e+"0"in t;if(e in t||l&&"d"+e in t){var u=r.makeCalcdata(t,e);return[a(t,r,e,u).vals,u]}s=l?t[e+"0"]:"name"in t&&("category"===r.type||n(t.name)&&-1!==["linear","log"].indexOf(r.type)||o.isDateTime(t.name)&&"date"===r.type)?t.name:i;for(var c="multicategory"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+"calendar"]),f=t._length,h=new Array(f),p=0;p E.uf};if(e._hasPreCompStats){var U=e[x],V=function(t){return m.d2c((e[t]||[])[r])},H=1/0,q=-1/0;for(r=0;r =E.q1&&E.q3>=E.med){var Z=V("lowerfence");E.lf=Z!==s&&Z<=E.q1?Z:p(E,C,P);var Y=V("upperfence");E.uf=Y!==s&&Y>=E.q3?Y:d(E,C,P);var W=V("mean");E.mean=W!==s?W:P?o.mean(C,P):(E.q1+E.q3)/2;var X=V("sd");E.sd=W!==s&&X>=0?X:P?o.stdev(C,P,E.mean):E.q3-E.q1,E.lo=v(E),E.uo=g(E);var J=V("notchspan");J=J!==s&&J>0?J:y(E,P),E.ln=E.med-J,E.un=E.med+J;var K=E.lf,$=E.uf;e.boxpoints&&C.length&&(K=Math.min(K,C[0]),$=Math.max($,C[P-1])),e.notched&&(K=Math.min(K,E.ln),$=Math.max($,E.un)),E.min=K,E.max=$}else{var Q;o.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+E.q1,"median = "+E.med,"q3 = "+E.q3].join("\n")),Q=E.med!==s?E.med:E.q1!==s?E.q3!==s?(E.q1+E.q3)/2:E.q1:E.q3!==s?E.q3:0,E.med=Q,E.q1=E.q3=Q,E.lf=E.uf=Q,E.mean=E.sd=Q,E.ln=E.un=Q,E.min=E.max=Q}H=Math.min(H,E.min),q=Math.max(q,E.max),E.pts2=L.filter(j),M.push(E)}}e._extremes[m._id]=i.findExtremes(m,[H,q],{padded:!0})}else{var tt=m.makeCalcdata(e,x),et=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i =0&&it