From 7da3efdf54b0c60b4f3271ad51be10862f326b74 Mon Sep 17 00:00:00 2001
From: iguazio-cicd <102164049+iguazio-cicd@users.noreply.github.com>
Date: Tue, 8 Oct 2024 16:18:29 +0300
Subject: [PATCH] Automatically generated by github-worflow[bot] for commit:
6dd4ded (#385)
---
README.md | 40 +
catalog.json | 2 +-
.../2.6.0/src/batch_inference_v2.ipynb | 2255 ++++++++++++++++
.../2.6.0/src/batch_inference_v2.py | 253 ++
.../2.6.0/src/function.yaml | 128 +
.../batch_inference_v2/2.6.0/src/item.yaml | 32 +
.../2.6.0/src/requirements.txt | 5 +
.../2.6.0/src/test_batch_inference_v2.py | 255 ++
.../2.6.0/static/batch_inference_v2.html | 393 +++
.../2.6.0/static/documentation.html | 280 ++
.../2.6.0/static/example.html | 2312 +++++++++++++++++
.../2.6.0/static/function.html | 150 ++
.../batch_inference_v2/2.6.0/static/item.html | 54 +
.../2.6.0/static/source.html | 275 ++
.../latest/src/batch_inference_v2.ipynb | 1826 +++++++------
.../latest/src/batch_inference_v2.py | 37 +-
.../latest/src/function.yaml | 106 +-
.../batch_inference_v2/latest/src/item.yaml | 6 +-
.../latest/src/test_batch_inference_v2.py | 71 +-
.../latest/static/batch_inference_v2.html | 37 +-
.../latest/static/documentation.html | 30 +-
.../latest/static/example.html | 1630 +++++++-----
.../latest/static/function.html | 106 +-
.../latest/static/item.html | 6 +-
.../latest/static/source.html | 37 +-
functions/development/catalog.json | 2 +-
functions/development/tags.json | 2 +-
27 files changed, 8525 insertions(+), 1805 deletions(-)
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.ipynb
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.py
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/function.yaml
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/item.yaml
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/requirements.txt
create mode 100644 functions/development/batch_inference_v2/2.6.0/src/test_batch_inference_v2.py
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/batch_inference_v2.html
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/documentation.html
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/example.html
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/function.html
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/item.html
create mode 100644 functions/development/batch_inference_v2/2.6.0/static/source.html
diff --git a/README.md b/README.md
index 9cb51c6a..361bb231 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,43 @@
+### Change log [2024-10-08 12:37:38]
+1. Item Updated: `v2_model_server` (from version: `1.2.0` to `1.2.0`)
+2. Item Updated: `translate` (from version: `0.1.0` to `0.1.0`)
+3. Item Updated: `text_to_audio_generator` (from version: `1.2.0` to `1.2.0`)
+4. Item Updated: `gen_class_data` (from version: `1.2.0` to `1.2.0`)
+5. Item Updated: `feature_selection` (from version: `1.5.0` to `1.5.0`)
+6. Item Updated: `arc_to_parquet` (from version: `1.4.1` to `1.4.1`)
+7. Item Updated: `azureml_serving` (from version: `1.1.0` to `1.1.0`)
+8. Item Updated: `describe_dask` (from version: `1.1.0` to `1.1.0`)
+9. Item Updated: `question_answering` (from version: `0.4.0` to `0.4.0`)
+10. Item Updated: `transcribe` (from version: `1.1.0` to `1.1.0`)
+11. Item Updated: `sklearn_classifier_dask` (from version: `1.1.1` to `1.1.1`)
+12. Item Updated: `pyannote_audio` (from version: `1.2.0` to `1.2.0`)
+13. Item Updated: `pii_recognizer` (from version: `0.3.0` to `0.3.0`)
+14. Item Updated: `silero_vad` (from version: `1.3.0` to `1.3.0`)
+15. Item Updated: `test_classifier` (from version: `1.1.0` to `1.1.0`)
+16. Item Updated: `batch_inference_v2` (from version: `2.6.0` to `2.6.0`)
+17. Item Updated: `open_archive` (from version: `1.1.0` to `1.1.0`)
+18. Item Updated: `hugging_face_serving` (from version: `1.1.0` to `1.1.0`)
+19. Item Updated: `batch_inference` (from version: `1.7.0` to `1.7.0`)
+20. Item Updated: `sklearn_classifier` (from version: `1.1.1` to `1.1.1`)
+21. Item Updated: `aggregate` (from version: `1.3.0` to `1.3.0`)
+22. Item Updated: `model_monitoring_batch` (from version: `1.1.0` to `1.1.0`)
+23. Item Updated: `validate_great_expectations` (from version: `1.1.0` to `1.1.0`)
+24. Item Updated: `structured_data_generator` (from version: `1.5.0` to `1.5.0`)
+25. Item Updated: `describe_spark` (from version: `1.1.0` to `1.1.0`)
+26. Item Updated: `onnx_utils` (from version: `1.2.0` to `1.2.0`)
+27. Item Updated: `v2_model_tester` (from version: `1.1.0` to `1.1.0`)
+28. Item Updated: `model_server_tester` (from version: `1.1.0` to `1.1.0`)
+29. Item Updated: `send_email` (from version: `1.2.0` to `1.2.0`)
+30. Item Updated: `auto_trainer` (from version: `1.7.0` to `1.7.0`)
+31. Item Updated: `azureml_utils` (from version: `1.3.0` to `1.3.0`)
+32. Item Updated: `load_dataset` (from version: `1.2.0` to `1.2.0`)
+33. Item Updated: `tf2_serving` (from version: `1.1.0` to `1.1.0`)
+34. Item Updated: `describe` (from version: `1.3.0` to `1.3.0`)
+35. Item Updated: `mlflow_utils` (from version: `1.0.0` to `1.0.0`)
+36. Item Updated: `model_server` (from version: `1.1.0` to `1.1.0`)
+37. Item Updated: `noise_reduction` (from version: `1.0.0` to `1.0.0`)
+38. Item Updated: `github_utils` (from version: `1.1.0` to `1.1.0`)
+
### Change log [2024-09-26 07:15:58]
1. Item Updated: `v2_model_server` (from version: `1.2.0` to `1.2.0`)
2. Item Updated: `translate` (from version: `0.1.0` to `0.1.0`)
diff --git a/catalog.json b/catalog.json
index d16b35a8..8474c9ce 100644
--- a/catalog.json
+++ b/catalog.json
@@ -1 +1 @@
-{"functions": {"development": {"tf2_serving": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "tf2-serving", "platformVersion": "", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.0"}}, "load_dataset": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "load-dataset", "platformVersion": "", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "load-dataset", "platformVersion": "3.5.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_server_tester": {"latest": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server-tester", "platformVersion": "", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "feature_selection": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "feature-selection", "platformVersion": "2.10.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "aggregate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "aggregate", "platformVersion": "3.0.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.7.1", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.2"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "describe": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-07:14-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.9.2": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-26:10-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "describe", "platformVersion": "2.10.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "describe", "platformVersion": "3.5.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server", "platformVersion": "", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_monitoring_batch": {"latest": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-monitoring-batch", "platformVersion": "", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "describe_spark": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "describe-spark", "platformVersion": "", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "gen_class_data": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.10.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "gen_class_data", "platformVersion": "3.0.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "gen_class_data", "platformVersion": "3.5.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "open_archive": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "open-archive", "platformVersion": "", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "send_email": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "send-email", "platformVersion": "", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "send-email", "platformVersion": "3.5.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_tester": {"latest": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-tester", "platformVersion": "", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "arc_to_parquet": {"latest": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.4.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "arc-to-parquet", "platformVersion": "2.10.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "github_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "github-utils", "platformVersion": "", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-server", "platformVersion": "", "spec": {"filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": [], "customFields": {"default_class": "ClassifierModel"}}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "onnx_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "0.10.2": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.8.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.1"}, "0.10.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.1.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-10-25:00-15", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "onnx_utils", "platformVersion": "", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-10-25:00-15", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.10.1", "onnxruntime~=1.8.1", "onnxoptimizer~=0.2.0", "onnxmltools~=1.9.0", "tf2onnx~=1.9.0"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "azureml_utils": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}, "0.9.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.3"}, "1.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.2.0", "test_valid": false}, "0.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.0.1"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.1.0"}, "0.9.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.4"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.9.0"}, "0.9.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-04-20:15-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "0.9.5"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}}, "auto_trainer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.0.6": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.6"}, "0.10.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.10.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.3"}, "0.10.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "0.10.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.0.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.2"}, "1.6.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.6.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "1.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "1.0.1"}, "1.0.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.4"}, "1.7.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.3.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "azureml_serving": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}}, "batch_inference": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.2.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference ( also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.0"}}, "hugging_face_serving": {"latest": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}}, "validate_great_expectations": {"latest": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}}, "transcribe": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": false}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}}, "question_answering": {"latest": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.2.0"}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.3.0"}, "0.3.1": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.3.1"}, "0.4.0": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}}, "pii_recognizer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.2.0", "test_valid": false}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.1.0", "test_valid": false}}, "batch_inference_v2": {"latest": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.8.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.8.0"}, "2.3.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.3.0"}, "2.1.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.1.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "2.0.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "2.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.9.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc16", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.9.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "2.2.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.2.0"}}, "translate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": true}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}}, "structured_data_generator": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "GenAI"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.4.0"}, "1.3.1": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.1"}, "1.0.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.0"}}, "text_to_audio_generator": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.0.0", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.1.0", "test_valid": true}}, "silero_vad": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "PyTorch", "Audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.2.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}}, "pyannote_audio": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "Huggingface", "Audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.1.0"}}, "noise_reduction": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}}, "mlflow_utils": {"latest": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}}}, "master": {"tf2_serving": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "tf2-serving", "platformVersion": "", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.0"}}, "load_dataset": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "load-dataset", "platformVersion": "", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "load-dataset", "platformVersion": "3.5.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_server_tester": {"latest": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server-tester", "platformVersion": "", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "feature_selection": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "feature-selection", "platformVersion": "2.10.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "aggregate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "aggregate", "platformVersion": "3.0.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "describe": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-07:14-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.9.2": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-26:10-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "describe", "platformVersion": "2.10.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "describe", "platformVersion": "3.5.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server", "platformVersion": "", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_monitoring_batch": {"latest": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-monitoring-batch", "platformVersion": "", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "describe_spark": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "describe-spark", "platformVersion": "", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "gen_class_data": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.10.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "gen_class_data", "platformVersion": "3.0.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "gen_class_data", "platformVersion": "3.5.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "open_archive": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "open-archive", "platformVersion": "", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "send_email": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "send-email", "platformVersion": "", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "send-email", "platformVersion": "3.5.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_tester": {"latest": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-tester", "platformVersion": "", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "arc_to_parquet": {"latest": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.4.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "arc-to-parquet", "platformVersion": "2.10.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "github_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "github-utils", "platformVersion": "", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-server", "platformVersion": "", "spec": {"filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": [], "customFields": {"default_class": "ClassifierModel"}}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "onnx_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "0.10.2": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.1.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.10.1", "onnxruntime~=1.8.1", "onnxoptimizer~=0.2.0", "onnxmltools~=1.9.0", "tf2onnx~=1.9.0"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "azureml_utils": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.2.0", "test_valid": false}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.1.0"}, "0.9.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.4"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.9.0"}, "0.9.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-04-20:15-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "0.9.5"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}}, "auto_trainer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.0.7": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.7"}, "1.0.6": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.6"}, "0.10.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.10.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.3"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.0.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.5"}, "1.6.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.6.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.3.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "azureml_serving": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}}, "batch_inference": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.2.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference ( also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.3.0"}}, "hugging_face_serving": {"latest": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}}, "validate_great_expectations": {"latest": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}}, "question_answering": {"latest": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.2.0"}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.3.0"}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.1.0"}, "0.3.1": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.3.1"}, "0.4.0": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}}, "transcribe": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": false}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}}, "pii_recognizer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.2.0", "test_valid": false}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.1.0", "test_valid": false}, "0.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.0.1"}}, "batch_inference_v2": {"latest": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.8.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.8.0"}, "2.4.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.4.0"}, "2.1.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.1.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "2.0.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "2.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.9.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc16", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.9.0"}, "2.2.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.2.0"}}, "translate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": true}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}}, "structured_data_generator": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.4.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.0"}}, "text_to_audio_generator": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.0.0", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.1.0", "test_valid": true}}, "silero_vad": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.2.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}}, "pyannote_audio": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.1.0"}}, "mlflow_utils": {"latest": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}}, "noise_reduction": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}}}}}
\ No newline at end of file
+{"functions": {"development": {"tf2_serving": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "tf2-serving", "platformVersion": "", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.0"}}, "load_dataset": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "load-dataset", "platformVersion": "", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "load-dataset", "platformVersion": "3.5.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_server_tester": {"latest": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server-tester", "platformVersion": "", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "feature_selection": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "feature-selection", "platformVersion": "2.10.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "aggregate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "aggregate", "platformVersion": "3.0.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.7.1", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.2"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "describe": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-07:14-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.9.2": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-26:10-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "describe", "platformVersion": "2.10.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "describe", "platformVersion": "3.5.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server", "platformVersion": "", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_monitoring_batch": {"latest": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-monitoring-batch", "platformVersion": "", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "describe_spark": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "describe-spark", "platformVersion": "", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "gen_class_data": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.10.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "gen_class_data", "platformVersion": "3.0.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "gen_class_data", "platformVersion": "3.5.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "open_archive": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "open-archive", "platformVersion": "", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "send_email": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "send-email", "platformVersion": "", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "send-email", "platformVersion": "3.5.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_tester": {"latest": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-tester", "platformVersion": "", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "arc_to_parquet": {"latest": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.4.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "arc-to-parquet", "platformVersion": "2.10.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "github_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "github-utils", "platformVersion": "", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-server", "platformVersion": "", "spec": {"filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": [], "customFields": {"default_class": "ClassifierModel"}}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "onnx_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "0.10.2": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.8.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.1"}, "0.10.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.1.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-10-25:00-15", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "onnx_utils", "platformVersion": "", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-10-25:00-15", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.10.1", "onnxruntime~=1.8.1", "onnxoptimizer~=0.2.0", "onnxmltools~=1.9.0", "tf2onnx~=1.9.0"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "azureml_utils": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}, "0.9.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.3"}, "1.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.2.0", "test_valid": false}, "0.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.0.1"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.1.0"}, "0.9.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.4"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.9.0"}, "0.9.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-04-20:15-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "0.9.5"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}}, "auto_trainer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.0.6": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.6"}, "0.10.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.10.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.3"}, "0.10.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "0.10.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.0.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.2"}, "1.6.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.6.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "1.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "1.0.1"}, "1.0.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.4"}, "1.7.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.3.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "azureml_serving": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}}, "batch_inference": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.2.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference ( also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.0"}}, "hugging_face_serving": {"latest": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}}, "validate_great_expectations": {"latest": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}}, "transcribe": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": false}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}}, "question_answering": {"latest": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.2.0"}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.3.0"}, "0.3.1": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.3.1"}, "0.4.0": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}}, "pii_recognizer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.2.0", "test_valid": false}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.1.0", "test_valid": false}}, "batch_inference_v2": {"latest": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc51", "name": "batch_inference_v2", "platformVersion": "3.6.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.6.0"}, "1.8.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.8.0"}, "2.3.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.3.0"}, "2.1.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.1.0"}, "2.6.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc51", "name": "batch_inference_v2", "platformVersion": "3.6.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.6.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "2.0.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "2.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.9.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc16", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.9.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "2.2.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.2.0"}}, "translate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": true}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}}, "structured_data_generator": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "GenAI"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.4.0"}, "1.3.1": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.1"}, "1.0.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.0"}}, "text_to_audio_generator": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.0.0", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.1.0", "test_valid": true}}, "silero_vad": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "PyTorch", "Audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.2.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}}, "pyannote_audio": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "Huggingface", "Audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.1.0"}}, "noise_reduction": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}}, "mlflow_utils": {"latest": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}}}, "master": {"tf2_serving": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "tf2-serving", "platformVersion": "", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "tf2-serving", "platformVersion": "3.5.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "tf2 image classification server", "doc": "", "example": "tf2_serving.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "tf2-serving", "platformVersion": "3.2.0", "spec": {"filename": "tf2_serving.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": ["requests", "pillow", "tensorflow>=2.1"]}, "url": "", "version": "0.9.0"}}, "load_dataset": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "load-dataset", "platformVersion": "3.5.5", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "load-dataset", "platformVersion": "", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "load-dataset", "platformVersion": "3.5.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "load a toy dataset from scikit-learn", "doc": "README.md", "example": "load_dataset.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "load-dataset", "platformVersion": "3.2.0", "spec": {"filename": "load_dataset.py", "handler": "load_dataset", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_server_tester": {"latest": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server-tester", "platformVersion": "", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server-tester", "platformVersion": "3.5.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring", "model-serving"], "description": "test model servers", "doc": "", "example": "model_server_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server-tester", "platformVersion": "3.2.0", "spec": {"filename": "model_server_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "feature_selection": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "1.4.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.4", "name": "feature-selection", "platformVersion": "3.6.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "feature-selection", "platformVersion": "2.10.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.9.0", "name": "feature-selection", "platformVersion": "3.2.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection/feature_selection", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Select features through multiple Statistical and Model filters", "doc": "", "example": "feature_selection.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "orz"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "feature-selection", "platformVersion": "3.5.0", "spec": {"filename": "feature_selection.py", "handler": "feature_selection", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "aggregate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.2", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-05-19:22-31", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "aggregate", "platformVersion": "3.0.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "aggregate", "platformVersion": "3.5.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "aggregate", "platformVersion": "3.2.0", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Rolling aggregation over Metrics and Lables according to specifications", "doc": "", "example": "aggregate.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avia"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "aggregate", "platformVersion": "3.5.4", "spec": {"filename": "aggregate.py", "handler": "aggregate", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "describe": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-07:14-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.9.2": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-04-26:10-20", "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "describe", "platformVersion": "2.10.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "describe", "platformVersion": "3.5.0", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Iguazio"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe", "platformVersion": "3.2.0", "spec": {"filename": "describe.py", "handler": "summarize", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "describe and visualizes dataset stats", "doc": "", "example": "describe.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Davids"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.0", "name": "describe", "platformVersion": "3.5.3", "spec": {"filename": "describe.py", "handler": "analyze", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-server", "platformVersion": "", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-server", "platformVersion": "3.5.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-server", "platformVersion": "3.2.0", "spec": {"filename": "model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "nuclio:serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "model_monitoring_batch": {"latest": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "model-monitoring-batch", "platformVersion": "", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "model-monitoring-batch", "platformVersion": "3.5.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["monitoring"], "description": "", "doc": "", "example": "model_monitoring_batch.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "model-monitoring-batch", "platformVersion": "3.2.0", "spec": {"filename": "model_monitoring_batch.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "describe_spark": {"latest": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.1"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "describe-spark", "platformVersion": "", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "describe-spark", "platformVersion": "3.5.0", "spec": {"filename": "describe_spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-analysis"], "description": "", "doc": "", "example": "describe_spark.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "describe-spark", "platformVersion": "3.2.0", "spec": {"filename": "describe-spark.py", "handler": "describe_spark", "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "gen_class_data": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.10.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.10.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "gen_class_data", "platformVersion": "3.5.3", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.6.2", "name": "gen_class_data", "platformVersion": "3.0.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "gen_class_data", "platformVersion": "3.5.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Create a binary classification sample dataset and save.", "doc": "", "example": "gen_class_data.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "Daniel"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "gen_class_data", "platformVersion": "3.2.0", "spec": {"filename": "gen_class_data.py", "handler": "gen_class_data", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "open_archive": {"latest": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "open-archive", "platformVersion": "", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "open-archive", "platformVersion": "3.5.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["data-preparation"], "description": "Open a file/object archive into a target directory", "doc": "", "example": "open_archive.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "open-archive", "platformVersion": "3.2.0", "spec": {"filename": "open_archive.py", "handler": "open_archive", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "send_email": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "send-email", "platformVersion": "3.5.3", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "send-email", "platformVersion": "", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "send-email", "platformVersion": "3.5.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Send Email messages through SMTP server", "doc": "", "example": "send_email.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "saarc"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "send-email", "platformVersion": "3.2.0", "spec": {"filename": "send_email.py", "handler": "send_email", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_tester": {"latest": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-tester", "platformVersion": "", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-tester", "platformVersion": "3.5.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-testing", "machine-learning"], "description": "test v2 model servers", "doc": "", "example": "v2_model_tester.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-tester", "platformVersion": "3.2.0", "spec": {"filename": "v2_model_tester.py", "handler": "model_server_tester", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "arc_to_parquet": {"latest": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.4.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "avi"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "arc-to-parquet", "platformVersion": "3.5.4", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.1"}, "1.2.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.2.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-05-19:22-04", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.5.4", "name": "arc-to-parquet", "platformVersion": "2.10.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "arc-to-parquet", "platformVersion": "3.5.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["etl"], "description": "retrieve remote archive, open and save as parquet", "doc": "", "example": "arc_to_parquet.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yjb"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "arc-to-parquet", "platformVersion": "3.2.0", "spec": {"filename": "arc_to_parquet.py", "handler": "arc_to_parquet", "image": "mlrun/ml-base", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "github_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-05-19:22-41", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "github-utils", "platformVersion": "", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "github-utils", "platformVersion": "3.5.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "add comments to github pull request", "doc": "", "example": "github_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "github-utils", "platformVersion": "3.2.0", "spec": {"filename": "github_utils.py", "handler": "run_summary_comment", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "v2_model_server": {"latest": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-05-19:23-13", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "v2-model-server", "platformVersion": "", "spec": {"filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": [], "customFields": {"default_class": "ClassifierModel"}}, "url": "", "version": "0.0.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "v2-model-server", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "generic sklearn model server", "doc": "", "example": "v2_model_server.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "yaronh", "framework": "sklearn"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "v2-model-server", "platformVersion": "3.2.0", "spec": {"customFields": {"default_class": "ClassifierModel"}, "filename": "v2_model_server.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": []}, "url": "", "version": "0.9.0"}}, "onnx_utils": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "0.10.2": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/mlrun", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.2.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.13.0", "onnxruntime~=1.14.0", "onnxoptimizer~=0.3.0", "onnxmltools~=1.11.0", "tf2onnx~=1.13.0"]}, "url": "", "version": "1.1.1"}, "0.8.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.8.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "onnx_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": ["onnx~=1.10.1", "onnxruntime~=1.8.1", "onnxoptimizer~=0.2.0", "onnxmltools~=1.9.0", "tf2onnx~=1.9.0"]}, "url": "", "version": "1.1.0"}, "0.9.0": {"apiVersion": "v1", "categories": ["utils"], "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.", "doc": "", "example": "onnx_utils.ipynb", "generationDate": "2021-11-18:12-28", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.8.0", "name": "onnx_utils", "platformVersion": "3.2.0", "spec": {"filename": "onnx_utils.py", "handler": "to_onnx", "image": "mlrun/ml-models", "kind": "job", "requirements": []}, "url": "", "version": "0.9.0"}}, "azureml_utils": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.2.0", "test_valid": false}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_utils", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["python -m pip install pip==22.1.2", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "1.1.0"}, "0.9.4": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0", "plotly~=5.4"]}, "url": "", "version": "0.9.4"}, "0.9.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-11-13:00-15", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "commands": null, "image": "", "kind": "job", "requirements": ["azureml-core==1.33.0", "azureml-train-automl-client==1.33.0"]}, "url": "", "version": "0.9.0"}, "0.9.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2021-04-20:15-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "", "name": "azureml_utils", "platformVersion": "", "spec": {"filename": "azureml_utils.py", "handler": "train", "extra_spec": {"build": {"commands": ["python -m pip install pip==21.2.4", "apt-get update && apt-get install -y --no-install-recommends git"], "with_mlrun": true, "auto_build": true}, "allow_empty_resources": true}, "image": "python:3.7.9-slim", "kind": "job", "requirements": ["azureml-core==1.40.0", "azureml-train-automl-client==1.40.0", "plotly~=5.4"]}, "url": "", "version": "0.9.5"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.", "doc": "", "example": "azureml_utils.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "azureml_utils", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "commands": ["apt-get update && apt-get install -y --no-install-recommends git", "apt install -y liblttng-ust0"], "with_mlrun": true}}, "filename": "azureml_utils.py", "handler": "train", "image": "python:3.9-bullseye", "kind": "job", "requirements": ["azureml-core==1.54.0.post1", "azureml-train-automl-client==1.54.0.post1", "plotly~=5.4"]}, "url": "", "version": "1.3.0", "test_valid": true}}, "auto_trainer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.0.7": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.7"}, "1.0.6": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.6"}, "0.10.2": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-02-06:10-18", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.2"}, "0.10.3": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "0.10.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "", "kind": "job", "requirements": []}, "url": "", "version": "0.10.3"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.4.0"}, "1.0.5": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-04-26:10-43", "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.0.0", "name": "auto_trainer", "platformVersion": "", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.0.5"}, "1.6.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.6.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-training"], "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.", "doc": "", "example": "auto_trainer.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.3.0", "name": "auto_trainer", "platformVersion": "3.5.0", "spec": {"filename": "auto_trainer.py", "handler": "train", "image": "mlrun/mlrun", "kind": "job", "requirements": []}, "url": "", "version": "1.3.0"}}, "azureml_serving": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "model-serving"], "description": "AzureML serving function", "doc": "", "example": "azureml_serving.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "azureml_serving", "platformVersion": "3.5.0", "spec": {"customFields": {"default_class": "mlrun.frameworks.sklearn.PickleModelServer"}, "filename": "azureml_serving.py", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["azureml-automl-runtime~=1.38.1"]}, "url": "", "version": "1.1.0"}}, "batch_inference": {"latest": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.4.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.2.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "1.1.1": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.1"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "1.7.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.1", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.7.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference ( also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": true, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": ["scikit-learn", "plotly"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["utils"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference.ipynb", "generationDate": "2022-08-28:17-25", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.2.0", "name": "batch_inference", "platformVersion": "3.5.0", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference.py", "handler": "infer", "image": "mlrun/ml-models", "kind": "job", "requirements": null}, "url": "", "version": "1.3.0"}}, "hugging_face_serving": {"latest": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}, "1.0.0": {"apiVersion": "v1", "categories": ["model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["huggingface", "genai", "model-serving", "machine-learning"], "description": "Generic Hugging Face model server.", "doc": "", "example": "hugging_face_serving.ipynb", "generationDate": "2022-09-05:17-00", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "hugging_face_serving", "platformVersion": "", "spec": {"customFields": {"default_class": "HuggingFaceModelServer"}, "filename": "hugging_face_serving.py", "handler": "handler", "image": "mlrun/ml-models", "kind": "serving", "requirements": ["transformers==4.21.3", "tensorflow==2.9.2"]}, "url": "", "version": "1.1.0", "test_valid": false}}, "validate_great_expectations": {"latest": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["data-validation", "data-analysis"], "description": "Validate a dataset using Great Expectations", "doc": "", "example": "validate_great_expectations.ipynb", "generationDate": "2022-04-26:12-28", "hidden": false, "icon": "", "labels": {"author": "nicks", "framework": "great-expectations"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.1.0", "name": "validate-great-expectations", "platformVersion": "3.5.2", "spec": {"filename": "validate_great_expectations.py", "handler": "validate_expectations", "image": "mlrun/mlrun", "kind": "job", "requirements": ["great-expectations==0.15.41"]}, "url": "", "version": "1.1.0"}}, "question_answering": {"latest": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.2.0"}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.3.0"}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": "transformers torch tqdm"}, "url": "", "version": "0.1.0"}, "0.3.1": {"apiVersion": "v1", "categories": ["machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.3.1"}, "0.4.0": {"apiVersion": "v1", "categories": ["genai", "huggingface", "machine-learning"], "description": "GenAI approach of question answering on a given data", "doc": "", "example": "question_answering.ipynb", "generationDate": "2023-08-07:11-30", "hidden": false, "icon": "", "labels": {"author": "yonish"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "question_answering", "platformVersion": "3.5.0", "spec": {"filename": "question_answering.py", "handler": "answer_questions", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "torch", "tqdm"]}, "url": "", "version": "0.4.0"}}, "transcribe": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.0.0"}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": false}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["openai-whisper", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "genai", "huggingface", "machine-learning"], "description": "Transcribe audio files into text files", "doc": "", "example": "transcribe.ipynb", "generationDate": "2023-07-13:11-20", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "transcribe", "platformVersion": "3.5.3", "spec": {"filename": "transcribe.py", "handler": "transcribe", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "tqdm", "torchaudio", "torch", "accelerate"]}, "url": "", "version": "1.1.0"}}, "pii_recognizer": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.2.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.2.0", "test_valid": false}, "0.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "NLP"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.3.0", "test_valid": false}, "0.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.1.0", "test_valid": false}, "0.0.1": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation"], "description": "This function is used to recognize PII in a directory of text files", "doc": "", "example": "pii_recognizer.ipynb", "generationDate": "2023-08-15:10-24", "hidden": false, "icon": "", "labels": {"author": "pgw"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.4.0", "name": "pii-recognizer", "platformVersion": "3.5.3", "spec": {"filename": "pii_recognizer.py", "handler": "recognize_pii", "image": "mlrun/mlrun", "kind": "job", "requirements": ["nltk", "pandas", "presidio-anonymizer", "presidio-analyzer", "torch", "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653", "st-annotated-text", "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"]}, "url": "", "version": "0.0.1"}}, "batch_inference_v2": {"latest": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.8.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc13", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.8.0"}, "2.4.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.4.0"}, "2.1.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.1.0"}, "1.6.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.6.0"}, "2.0.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc9", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.5.0"}, "2.5.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.5.0"}, "1.9.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0-rc16", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "1.9.0"}, "2.2.0": {"apiVersion": "v1", "categories": ["utils", "data-analysis", "monitoring"], "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.", "doc": "", "example": "batch_inference_v2.ipynb", "generationDate": "2023-08-07:12-25", "hidden": false, "icon": "", "labels": {"author": "eyald"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.0", "name": "batch_inference_v2", "platformVersion": "3.5.3", "spec": {"extra_spec": {"allow_empty_resources": true, "build": {"auto_build": false, "with_mlrun": false}}, "filename": "batch_inference_v2.py", "handler": "infer", "image": "mlrun/mlrun", "kind": "job", "requirements": null}, "url": "", "version": "2.2.0"}}, "translate": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "huggingface", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.1.0", "test_valid": true}, "0.0.1": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.1", "test_valid": true}, "0.0.2": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "deep-learning", "NLP"], "description": "Translate text files from one language to another", "doc": "", "example": "translate.ipynb", "generationDate": "2023-12-05:17-20", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "translate", "platformVersion": "3.5.3", "spec": {"filename": "translate.py", "handler": "translate", "image": "mlrun/mlrun", "kind": "job", "requirements": ["transformers", "sentencepiece", "torch", "tqdm"]}, "url": "", "version": "0.0.2", "test_valid": true}}, "structured_data_generator": {"latest": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.4.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.4.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.5.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.6.1", "name": "structured_data_generator", "platformVersion": "3.5.5", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.5.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["machine-learning", "data-preparation", "data-generation", "genai"], "description": "GenAI approach of generating structured data according to a given schema", "doc": "", "example": "structured_data_generator.ipynb", "generationDate": "2023-12-14:10-50", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "structured_data_generator", "platformVersion": "3.5.0", "spec": {"filename": "structured_data_generator.py", "handler": "generate_data", "image": "mlrun/mlrun", "kind": "job", "requirements": ["langchain", "tqdm"]}, "url": "", "version": "1.3.0"}}, "text_to_audio_generator": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.2.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning", "pytorch"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.2.0", "test_valid": true}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.0.0", "test_valid": true}, "1.1.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Generate audio file from text using different speakers", "doc": "", "example": "text_to_audio_generator.ipynb", "generationDate": "2023-12-03:15-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.1", "name": "text_to_audio_generator", "platformVersion": "3.5.3", "spec": {"filename": "text_to_audio_generator.py", "handler": "generate_multi_speakers_audio", "image": "mlrun/mlrun", "kind": "job", "requirements": ["bark", "torchaudio"]}, "url": "", "version": "1.1.0", "test_valid": true}}, "silero_vad": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.2.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.1.0"}, "1.3.0": {"apiVersion": "v1", "categories": ["deep-learning", "pytorch", "audio"], "description": "Silero VAD (Voice Activity Detection) functions.", "doc": "", "example": "silero_vad.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "silero_vad", "platformVersion": "3.5.3", "spec": {"filename": "silero_vad.py", "handler": "detect_voice", "image": "mlrun/mlrun", "kind": "job", "requirements": ["torch", "torchaudio", "tqdm", "onnxruntime"]}, "url": "", "version": "1.3.0"}}, "pyannote_audio": {"latest": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.2.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.2.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.0.0"}, "1.1.0": {"apiVersion": "v1", "categories": ["deep-learning", "huggingface", "audio"], "description": "pyannote's speech diarization of audio files", "doc": "", "example": "pyannote_audio.ipynb", "generationDate": "2023-12-03:14-30", "hidden": false, "icon": "", "labels": {"author": "guyl"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.5.2", "name": "pyannote-audio", "platformVersion": "3.5.3", "spec": {"filename": "pyannote_audio.py", "handler": "diarize", "image": "mlrun/mlrun-gpu", "kind": "job", "requirements": ["pyannote.audio", "pyannote.core", "torchaudio", "tqdm"]}, "url": "", "version": "1.1.0"}}, "mlflow_utils": {"latest": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["genai", "model-serving", "machine-learning"], "description": "Mlflow model server, and additional utils.", "doc": "", "example": "mlflow_utils.ipynb", "generationDate": "2024-05-23:12-00", "hidden": false, "icon": "", "labels": {"author": "zeevr"}, "maintainers": [], "marketplaceType": "", "mlrunVersion": "1.7.0-rc17", "name": "mlflow_utils", "platformVersion": "", "spec": {"customFields": {"default_class": "MLFlowModelServer"}, "filename": "mlflow_utils.py", "handler": "handler", "image": "mlrun/mlrun", "kind": "serving", "requirements": ["mlflow==2.12.2", "lightgbm", "xgboost"]}, "url": "", "version": "1.0.0"}}, "noise_reduction": {"latest": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}, "1.0.0": {"apiVersion": "v1", "categories": ["data-preparation", "machine-learning"], "description": "Reduce noise from audio files", "doc": "", "example": "noise_reduction.ipynb", "generationDate": "2024-03-04:17-30", "hidden": false, "icon": "", "labels": {"author": "yonatans"}, "maintainers": [], "mlrunVersion": "1.5.2", "name": "noise-reduction", "platformVersion": "3.5.3", "spec": {"filename": "noise_reduction.py", "handler": "reduce_noise", "image": "mlrun/mlrun", "kind": "job", "requirements": ["librosa", "noisereduce", "deepfilternet", "torchaudio>=2.1.2"]}, "url": "", "version": "1.0.0"}}}}}
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.ipynb b/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.ipynb
new file mode 100644
index 00000000..7f369fa5
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.ipynb
@@ -0,0 +1,2255 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "# Batch Inference V2\n",
+ "\n",
+ "A function for inferring given input through a given model while producing a **Result Set** and applying monitoring analysis.\n",
+ "\n",
+ "In this notebook we will go over the function's docs and outputs and see an end-to-end example of running it.\n",
+ "\n",
+ "1. [Documentation](#chapter1)\n",
+ "2. [Results Prediction](#chapter2)\n",
+ "3. [End-to-end Demo](#chapter3)\n",
+ "4. [Data Drift Analysis](#chapter4)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ " \n",
+ "## 1. Documentation\n",
+ "\n",
+ "Perform a prediction on a given dataset with the given model. Using the default histogram data drift application, can perform drift analysis between the sample set\n",
+ "statistics stored in the model to the current input data. The drift rule in this case is the value per-feature mean of the TVD\n",
+ "and Hellinger scores. When §, this function\n",
+ "either creates or update an existing model endpoint record (depends on the provided `endpoint_id`).\n",
+ "\n",
+ "At the moment, this function is supported for `mlrun>=1.5.0` versions."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ },
+ "tags": []
+ },
+ "source": [
+ "### 1.1. Parameters:\n",
+ "#### 1.1.1 Batch Infer Parameters:\n",
+ "* **context**: `mlrun.MLClientCtx`\n",
+ "\n",
+ " An MLRun context.\n",
+ " \n",
+ "* **dataset**: `Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray]`\n",
+ " \n",
+ " The dataset to infer through the model.\n",
+ " * Can be passed in `inputs` as a dataset artifact / Feature vector URI.\n",
+ " * Or, in `parameters` as a list, dictionary or numpy array.\n",
+ " \n",
+ "* **model_path**: `Union[str, mlrun.DataItem]`\n",
+ " \n",
+ " Model store uri (should start with store://). Provided as an input (DataItem). To generate a valid model store URI, please log the model before running this function. If `endpoint_id` of existing model endpoint is provided, make sure that it has a similar model store path, otherwise the drift analysis won't be triggered.\n",
+ " \n",
+ "* **drop_columns**: `Union[str, List[str], int, List[int]]` = `None`\n",
+ " \n",
+ " A string / integer or a list of strings / integers that represent the column names / indices to drop. When the dataset is a list or a numpy array this parameter must be represented by integers.\n",
+ " \n",
+ "* **label_columns**: `Union[str, List[str]]` = `None`\n",
+ " \n",
+ " The target label(s) of the column(s) in the dataset. These names will be used as the column names for the predictions. The label column can be accessed from the model object, or the feature vector provided if available. The default name is `\"predicted_label_i\"` for the `i` column.\n",
+ "\n",
+ "* **feature_columns**: `Union[str, List[str]]` = `None`\n",
+ " \n",
+ " List of feature columns that will be used to build the dataframe when dataset is\n",
+ " from type list or numpy array.\n",
+ "\n",
+ "* **log_result_set**: `str` = `True`\n",
+ " \n",
+ " Whether to log the result set - a DataFrame of the given inputs concatenated with the predictions. Defaulted to `True`.\n",
+ "\n",
+ "* **result_set_name**: `str` = `\"prediction\"`\n",
+ " \n",
+ " The db key to set name of the prediction result and the filename. Defaulted to `\"prediction\"`.\n",
+ "\n",
+ "* **batch_id**: `str` = `None`\n",
+ "\n",
+ " The ID of the given batch (inference dataset). If `None`, it will be generated. Will be logged as a result of the run.\n",
+ " \n",
+ "\n",
+ "* **artifacts_tag**: `str` = `\"\"`\n",
+ " \n",
+ " Tag to use for all the artifacts resulted from the function. Defaulted to no tag.\n",
+ " \n",
+ " \n",
+ " \n",
+ "#### 1.1.2 Drift Analysis Parameters:\n",
+ "\n",
+ "* **perform_drift_analysis**: `bool` = `None`\n",
+ " \n",
+ " Whether to perform drift analysis between the sample set of the model object to the\n",
+ " dataset given. By default, None, which means it will perform drift analysis if the\n",
+ " model already has feature stats that are considered as a reference sample set.\n",
+ " Performing drift analysis on a new endpoint id will generate a new model endpoint\n",
+ " record.\n",
+ "\n",
+ "* **endpoint_id**: `str` = `\"\"`\n",
+ " \n",
+ " Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id\n",
+ " will be used either to perform the analysis on existing model endpoint or to\n",
+ " generate a new model endpoint record.\n",
+ " \n",
+ "#### 1.1.3 New Model Endpoint Parameters:\n",
+ " \n",
+ "* **model_endpoint_name**: `str` = `\"batch-infer\"`\n",
+ " \n",
+ " If a new model endpoint is generated, the model name will be presented under this endpoint.\n",
+ "\n",
+ " \n",
+ "* **model_endpoint_sample_set**: `Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray]` = `None`\n",
+ " \n",
+ " A sample dataset to give to compare the inputs in the drift analysis. Can be provided as an input or as a parameter. The default chosen sample\n",
+ " set will always be the one who is set in the model artifact itself.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### 1.2. Outputs\n",
+ "\n",
+ "The outputs are split to two actions the functions can perform:\n",
+ "* [**Results Prediction**](#chapter3) - Will log:\n",
+ " * A dataset artifact named by the `result_set_name` parameter.\n",
+ " * A `str` result named `\"batch_id\"` of the given / generated batch ID.\n",
+ "\n",
+ "* [**Data Drift Analysis**](#chapter4) - Will log:\n",
+ " * A `plotly` artifact named `\"data_drift_table\"` with a visualization of the drifts results and histograms.\n",
+ " * A json artifact named `\"features_drift_results\"` with all the features metric values.\n",
+ "\n",
+ "For more details, see the next chapters."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ " \n",
+ "## 2. Results Prediction\n",
+ "\n",
+ "The result set is a concatenated dataset of the inputs ($X$) provided and the predictions ($Y$) yielded by the model, so it will be $X | Y$.\n",
+ "\n",
+ "For example, if the `dataset` given as inputs was:\n",
+ "\n",
+ "| x1 | x2 | x3 | x4 | x5 |\n",
+ "|-----|-----|-----|-----|-----|\n",
+ "| ... | ... | ... | ... | ... |\n",
+ "| ... | ... | ... | ... | ... |\n",
+ "| ... | ... | ... | ... | ... |\n",
+ "\n",
+ "And the outputs yielded by the model's prediction was:\n",
+ "\n",
+ "| y1 | y2 |\n",
+ "|-----|-----|\n",
+ "| ... | ... |\n",
+ "| ... | ... |\n",
+ "| ... | ... |\n",
+ "\n",
+ "Then the result set will be:\n",
+ "\n",
+ "| x1 | x2 | x3 | x4 | x5 | y1 | y2 |\n",
+ "|-----|-----|-----|-----|-----|-----|-----|\n",
+ "| ... | ... | ... | ... | ... | ... | ... |\n",
+ "| ... | ... | ... | ... | ... | ... | ... |\n",
+ "| ... | ... | ... | ... | ... | ... | ... |\n",
+ "\n",
+ "In case the parameter `log_result_set` is `True`, the outputs of the results prediction will be:\n",
+ "* The result set as described above.\n",
+ "* The batch ID result - `batch_id`: `str` - a hashing result that is given by the user or generated randomly in case it was not provided to represent the batch that was being inferred.\n",
+ "\n",
+ " ```python\n",
+ " {\n",
+ " \"batch_id\": \"884a0cb00d8ae16d132dd8259aac29aa78f50a9245d0e4bd58cfbf77\",\n",
+ " }\n",
+ " ```\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ " \n",
+ "## 3. End-to-end Demo\n",
+ "\n",
+ "We will see an end-to-end example that follows the steps below:\n",
+ "1. Generate data.\n",
+ "2. Train a model.\n",
+ "3. Infer data through the model using `batch_predict` and review the outputs."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### 3.1. Code review\n",
+ "\n",
+ "We are using a very simple example of training a decision tree on a binary classification problem. For that we wrote two functions:\n",
+ "* `generate_data` - Generate a binary classification data. The data will be split into a *training set* and *data for prediction*. The data for prediction will be drifted in half of its features to showcase the plot later on.\n",
+ "* `train` - Train a decision tree classifier on a given data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:23:13,060 [info] Loading project from path: {\"path\":\"./\",\"project_name\":\"batch-infer-demo\",\"user_project\":false}\n",
+ "> 2024-10-08 10:23:28,490 [info] Project loaded successfully: {\"path\":\"./\",\"project_name\":\"batch-infer-demo\",\"stored_in_db\":true}\n"
+ ]
+ }
+ ],
+ "source": [
+ "import mlrun\n",
+ "\n",
+ "# Create MLRun project\n",
+ "project_name = \"batch-infer-demo\"\n",
+ "project = mlrun.get_or_create_project(project_name, context=\"./\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# mlrun: start-code"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# upload environment variables from env file if exists\n",
+ "import os\n",
+ "\n",
+ "# Specify path\n",
+ "path = \"/tmp/examples_ci.env\"\n",
+ "\n",
+ "if os.path.exists(path):\n",
+ " env_dict = mlrun.set_env_from_file(path, return_dict=True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "\n",
+ "from sklearn.datasets import make_classification\n",
+ "from sklearn.tree import DecisionTreeClassifier\n",
+ "\n",
+ "from mlrun.frameworks.sklearn import apply_mlrun\n",
+ "\n",
+ "\n",
+ "def generate_data(n_samples: int = 5000, n_features: int = 20):\n",
+ " # Generate a classification data:\n",
+ " x, y = make_classification(\n",
+ " n_samples=n_samples, n_features=n_features, n_classes=2\n",
+ " )\n",
+ "\n",
+ " # Split the data into a training set and a prediction set:\n",
+ " x_train, x_prediction = x[: n_samples // 2], x[n_samples // 2 :]\n",
+ " y_train = y[: n_samples // 2]\n",
+ " \n",
+ " # Randomly drift some features:\n",
+ " x_prediction += (\n",
+ " np.random.uniform(low=2, high=4, size=x_train.shape) * \n",
+ " np.random.randint(low=0, high=2, size=x_train.shape[1], dtype=int)\n",
+ " )\n",
+ " \n",
+ " # Initialize dataframes:\n",
+ " features = [f\"feature_{i}\" for i in range(n_features)]\n",
+ " training_set = pd.DataFrame(data=x_train, columns=features)\n",
+ " training_set.insert(\n",
+ " loc=n_features, column=\"label\", value=y_train, allow_duplicates=True\n",
+ " )\n",
+ " prediction_set = pd.DataFrame(data=x_prediction, columns=features)\n",
+ "\n",
+ " return training_set, prediction_set\n",
+ "\n",
+ "\n",
+ "def train(training_set: pd.DataFrame):\n",
+ " # Get the data into x, y:\n",
+ " labels = pd.DataFrame(training_set[\"label\"])\n",
+ " training_set.drop(columns=[\"label\"], inplace=True)\n",
+ "\n",
+ " # Initialize a model:\n",
+ " model = DecisionTreeClassifier()\n",
+ "\n",
+ " # Apply MLRun:\n",
+ " apply_mlrun(model=model, model_name=\"model\")\n",
+ "\n",
+ " # Train:\n",
+ " model.fit(training_set, labels)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# mlrun: end-code"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### 3.2. Run the Example with MLRun\n",
+ "\n",
+ "First, we will prepare our MLRun functions:\n",
+ "1. We will use `mlrun.code_to_function` to turn this demo notebook into an MLRun function we can run.\n",
+ "2. We will use `mlrun.import_function` to import the `batch_predict` function ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# Create an MLRun function to run the notebook:\n",
+ "demo_function = mlrun.code_to_function(name=\"batch-inference-demo\", kind=\"job\")\n",
+ "\n",
+ "# Import the `batch_inference_v2` function from the functions hub:\n",
+ "batch_inference_function = mlrun.import_function('hub://batch_inference_v2')\n",
+ "# you can import the function from the current directory as well: \n",
+ "# batch_inference_function = mlrun.import_function(\"function.yaml\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "Now, we will follow the demo steps as discussed above:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:23:40,584 [error] error getting build status: details: MLRunNotFoundError('Function tag not found batch-infer-demo/batch-inference-demo'), caused by: 404 Client Error: Not Found for url: http://mlrun-api:8080/api/v1/build/status?name=batch-inference-demo&project=batch-infer-demo&tag=&logs=no&offset=0&last_log_timestamp=0.0&verbose=no\n",
+ "> 2024-10-08 10:23:40,586 [info] Storing function: {\"db\":\"http://mlrun-api:8080\",\"name\":\"batch-inference-demo-generate-data\",\"uid\":\"4f68ba3fd9084e3e941ab3872ceb3635\"}\n",
+ "> 2024-10-08 10:23:40,881 [info] Job is running in the background, pod: batch-inference-demo-generate-data-52w8s\n",
+ "> 2024-10-08 10:23:46,954 [info] To track results use the CLI: {\"info_cmd\":\"mlrun get run 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo\",\"logs_cmd\":\"mlrun logs 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo\"}\n",
+ "> 2024-10-08 10:23:46,954 [info] Or click for UI: {\"ui_url\":\"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/4f68ba3fd9084e3e941ab3872ceb3635/overview\"}\n",
+ "> 2024-10-08 10:23:46,955 [info] Run execution finished: {\"name\":\"batch-inference-demo-generate-data\",\"status\":\"completed\"}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "
\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " project \n",
+ " uid \n",
+ " iter \n",
+ " start \n",
+ " state \n",
+ " kind \n",
+ " name \n",
+ " labels \n",
+ " inputs \n",
+ " parameters \n",
+ " results \n",
+ " artifacts \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " batch-infer-demo \n",
+ " \n",
+ " 0 \n",
+ " Oct 08 10:23:44 \n",
+ " completed \n",
+ " run \n",
+ " batch-inference-demo-generate-data \n",
+ " v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-demo-generate-data-52w8s
\n",
+ " \n",
+ " \n",
+ " \n",
+ " training_set
prediction_set
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " > to track results use the .show() or .logs() methods or click here to open in UI "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:23:52,384 [info] Run execution finished: {\"name\":\"batch-inference-demo-generate-data\",\"status\":\"completed\"}\n",
+ "> 2024-10-08 10:23:52,434 [info] Storing function: {\"db\":\"http://mlrun-api:8080\",\"name\":\"batch-inference-demo-train\",\"uid\":\"1102e4aea9424149837a81aa214b9489\"}\n",
+ "> 2024-10-08 10:23:52,714 [info] Job is running in the background, pod: batch-inference-demo-train-ldclf\n",
+ "> 2024-10-08 10:23:58,683 [info] To track results use the CLI: {\"info_cmd\":\"mlrun get run 1102e4aea9424149837a81aa214b9489 -p batch-infer-demo\",\"logs_cmd\":\"mlrun logs 1102e4aea9424149837a81aa214b9489 -p batch-infer-demo\"}\n",
+ "> 2024-10-08 10:23:58,684 [info] Or click for UI: {\"ui_url\":\"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/1102e4aea9424149837a81aa214b9489/overview\"}\n",
+ "> 2024-10-08 10:23:58,684 [info] Run execution finished: {\"name\":\"batch-inference-demo-train\",\"status\":\"completed\"}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " project \n",
+ " uid \n",
+ " iter \n",
+ " start \n",
+ " state \n",
+ " kind \n",
+ " name \n",
+ " labels \n",
+ " inputs \n",
+ " parameters \n",
+ " results \n",
+ " artifacts \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " batch-infer-demo \n",
+ " \n",
+ " 0 \n",
+ " Oct 08 10:23:56 \n",
+ " completed \n",
+ " run \n",
+ " batch-inference-demo-train \n",
+ " v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-demo-train-ldclf
\n",
+ " training_set
\n",
+ " \n",
+ " \n",
+ " model
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " > to track results use the .show() or .logs() methods or click here to open in UI "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:24:01,923 [info] Run execution finished: {\"name\":\"batch-inference-demo-train\",\"status\":\"completed\"}\n",
+ "> 2024-10-08 10:24:01,953 [info] Storing function: {\"db\":\"http://mlrun-api:8080\",\"name\":\"batch-inference-v2-infer\",\"uid\":\"27dd151299ff42bc9301ed268bab8b5b\"}\n",
+ "> 2024-10-08 10:24:02,241 [info] Job is running in the background, pod: batch-inference-v2-infer-lt4w9\n",
+ "> 2024-10-08 10:24:06,348 [info] Loading model...\n",
+ "> 2024-10-08 10:24:07,569 [info] Loading data...\n",
+ "> 2024-10-08 10:24:07,631 [info] Calculating prediction...\n",
+ "> 2024-10-08 10:24:07,636 [info] Logging result set (x | prediction)...\n",
+ "> 2024-10-08 10:24:08,468 [info] To track results use the CLI: {\"info_cmd\":\"mlrun get run 27dd151299ff42bc9301ed268bab8b5b -p batch-infer-demo\",\"logs_cmd\":\"mlrun logs 27dd151299ff42bc9301ed268bab8b5b -p batch-infer-demo\"}\n",
+ "> 2024-10-08 10:24:08,469 [info] Or click for UI: {\"ui_url\":\"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/27dd151299ff42bc9301ed268bab8b5b/overview\"}\n",
+ "> 2024-10-08 10:24:08,469 [info] Run execution finished: {\"name\":\"batch-inference-v2-infer\",\"status\":\"completed\"}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " project \n",
+ " uid \n",
+ " iter \n",
+ " start \n",
+ " state \n",
+ " kind \n",
+ " name \n",
+ " labels \n",
+ " inputs \n",
+ " parameters \n",
+ " results \n",
+ " artifacts \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " batch-infer-demo \n",
+ " \n",
+ " 0 \n",
+ " Oct 08 10:24:06 \n",
+ " completed \n",
+ " run \n",
+ " batch-inference-v2-infer \n",
+ " v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-v2-infer-lt4w9
\n",
+ " dataset
\n",
+ " model_path=store://models/batch-infer-demo/model:latest@1102e4aea9424149837a81aa214b9489
label_columns=label
perform_drift_analysis=False
\n",
+ " batch_id=bdf589be041d04464671f41842278989c9f1ca72dcd5e3ed5cdf5495
\n",
+ " prediction
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " > to track results use the .show() or .logs() methods or click here to open in UI "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:24:12,530 [info] Run execution finished: {\"name\":\"batch-inference-v2-infer\",\"status\":\"completed\"}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# 1. Generate data:\n",
+ "generate_data_run = demo_function.run(\n",
+ " handler=\"generate_data\",\n",
+ " returns=[\"training_set : dataset\", \"prediction_set : dataset\"],\n",
+ ")\n",
+ "\n",
+ "# 2. Train a model:\n",
+ "train_run = demo_function.run(\n",
+ " handler=\"train\",\n",
+ " inputs={\"training_set\": generate_data_run.outputs[\"training_set\"]},\n",
+ ")\n",
+ "\n",
+ "# 3. Perform batch prediction:\n",
+ "batch_inference_run = batch_inference_function.run(\n",
+ " handler=\"infer\",\n",
+ " inputs={\"dataset\": generate_data_run.outputs[\"prediction_set\"]},\n",
+ " params={\n",
+ " \"model_path\": train_run.outputs[\"model\"],\n",
+ " \"label_columns\": \"label\",\n",
+ " \"perform_drift_analysis\": False,\n",
+ " },\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### 3.3. Review Outputs\n",
+ "\n",
+ "We will review the outputs as explained in the notebook above."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "#### 3.3.1. Results Prediction\n",
+ "\n",
+ "First we will showcase the **Result Set**. As we didn't send any name, it's default name will be `\"prediction\"`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " feature_0 \n",
+ " feature_1 \n",
+ " feature_2 \n",
+ " feature_3 \n",
+ " feature_4 \n",
+ " feature_5 \n",
+ " feature_6 \n",
+ " feature_7 \n",
+ " feature_8 \n",
+ " feature_9 \n",
+ " ... \n",
+ " feature_11 \n",
+ " feature_12 \n",
+ " feature_13 \n",
+ " feature_14 \n",
+ " feature_15 \n",
+ " feature_16 \n",
+ " feature_17 \n",
+ " feature_18 \n",
+ " feature_19 \n",
+ " label \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 6.301344 \n",
+ " 0.270723 \n",
+ " 0.810890 \n",
+ " 1.916672 \n",
+ " 1.480180 \n",
+ " -1.111209 \n",
+ " 3.623056 \n",
+ " 2.151706 \n",
+ " -0.581654 \n",
+ " 0.469363 \n",
+ " ... \n",
+ " 1.162767 \n",
+ " 1.631004 \n",
+ " -0.382130 \n",
+ " 1.307247 \n",
+ " -0.851273 \n",
+ " 3.321264 \n",
+ " 0.697387 \n",
+ " 2.381824 \n",
+ " -0.070941 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 1.482197 \n",
+ " -1.242443 \n",
+ " 0.837535 \n",
+ " 2.904502 \n",
+ " -1.605309 \n",
+ " 0.632422 \n",
+ " 2.955928 \n",
+ " -0.693749 \n",
+ " -0.326387 \n",
+ " -0.897179 \n",
+ " ... \n",
+ " 4.941789 \n",
+ " 4.033131 \n",
+ " -0.009700 \n",
+ " -0.585573 \n",
+ " -1.503230 \n",
+ " 1.074927 \n",
+ " 0.803923 \n",
+ " 3.804727 \n",
+ " -0.028967 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 3.493216 \n",
+ " 0.731723 \n",
+ " -2.769300 \n",
+ " 1.533892 \n",
+ " -1.341591 \n",
+ " 2.544158 \n",
+ " 2.855936 \n",
+ " 0.826364 \n",
+ " -1.093561 \n",
+ " 0.303124 \n",
+ " ... \n",
+ " 0.848919 \n",
+ " 1.783395 \n",
+ " -0.644753 \n",
+ " 1.994629 \n",
+ " 2.166190 \n",
+ " 4.072446 \n",
+ " 2.121466 \n",
+ " 3.146668 \n",
+ " 1.574255 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 1.243322 \n",
+ " -1.185999 \n",
+ " 1.510705 \n",
+ " 2.280017 \n",
+ " -0.139123 \n",
+ " -1.333367 \n",
+ " 4.703854 \n",
+ " -1.238155 \n",
+ " 0.659352 \n",
+ " -0.514514 \n",
+ " ... \n",
+ " 2.731269 \n",
+ " 3.631489 \n",
+ " 0.175608 \n",
+ " 0.754273 \n",
+ " -0.783163 \n",
+ " 4.356327 \n",
+ " 0.350378 \n",
+ " 3.347941 \n",
+ " -1.111401 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 3.368511 \n",
+ " 0.294880 \n",
+ " 1.098486 \n",
+ " 2.401271 \n",
+ " 1.178792 \n",
+ " 0.050650 \n",
+ " 1.631508 \n",
+ " 0.915017 \n",
+ " 0.002918 \n",
+ " -0.217509 \n",
+ " ... \n",
+ " 3.671178 \n",
+ " 2.873755 \n",
+ " 0.352395 \n",
+ " -1.290841 \n",
+ " -0.773709 \n",
+ " 1.938640 \n",
+ " 0.776364 \n",
+ " 3.676751 \n",
+ " 0.867656 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 2495 \n",
+ " 2.006662 \n",
+ " -0.377155 \n",
+ " -0.674967 \n",
+ " 3.425157 \n",
+ " 0.774268 \n",
+ " -0.288493 \n",
+ " 3.312510 \n",
+ " -0.935283 \n",
+ " 0.898680 \n",
+ " 1.028747 \n",
+ " ... \n",
+ " 1.511337 \n",
+ " 2.026637 \n",
+ " -1.371283 \n",
+ " -0.162678 \n",
+ " 2.033294 \n",
+ " 0.387519 \n",
+ " -1.778998 \n",
+ " 4.347185 \n",
+ " 0.066542 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2496 \n",
+ " 4.624801 \n",
+ " -0.435007 \n",
+ " -1.340297 \n",
+ " 3.709764 \n",
+ " 1.303919 \n",
+ " -0.913823 \n",
+ " 2.927538 \n",
+ " 1.808688 \n",
+ " -0.461729 \n",
+ " -0.309318 \n",
+ " ... \n",
+ " 4.194667 \n",
+ " 0.308783 \n",
+ " -0.455863 \n",
+ " 0.333040 \n",
+ " 0.302472 \n",
+ " 0.571399 \n",
+ " -0.664472 \n",
+ " 3.399752 \n",
+ " 1.068366 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2497 \n",
+ " 5.299738 \n",
+ " 1.273677 \n",
+ " -1.801943 \n",
+ " 3.892334 \n",
+ " 1.255739 \n",
+ " 0.095366 \n",
+ " 2.051728 \n",
+ " 1.577475 \n",
+ " -0.348716 \n",
+ " 0.714247 \n",
+ " ... \n",
+ " 2.760161 \n",
+ " 4.798985 \n",
+ " 0.862472 \n",
+ " -1.737803 \n",
+ " 1.263144 \n",
+ " 3.620031 \n",
+ " -0.426575 \n",
+ " 3.938336 \n",
+ " -0.700078 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 2498 \n",
+ " 0.866703 \n",
+ " -1.056071 \n",
+ " 1.670582 \n",
+ " 2.334009 \n",
+ " -1.333572 \n",
+ " -0.048753 \n",
+ " 2.157949 \n",
+ " -0.995259 \n",
+ " -0.026593 \n",
+ " 1.162342 \n",
+ " ... \n",
+ " 2.564957 \n",
+ " 2.874556 \n",
+ " 0.443551 \n",
+ " 1.508644 \n",
+ " -1.702975 \n",
+ " 4.317128 \n",
+ " -1.488132 \n",
+ " 3.223802 \n",
+ " 0.036243 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2499 \n",
+ " 2.827924 \n",
+ " -0.391928 \n",
+ " 0.139046 \n",
+ " 0.273091 \n",
+ " -1.208622 \n",
+ " -0.401865 \n",
+ " 2.850371 \n",
+ " 0.857199 \n",
+ " -1.050983 \n",
+ " 1.923212 \n",
+ " ... \n",
+ " 4.897142 \n",
+ " 2.617614 \n",
+ " 1.056777 \n",
+ " 1.459342 \n",
+ " -0.002913 \n",
+ " 2.095362 \n",
+ " 0.309448 \n",
+ " 3.965130 \n",
+ " -0.366275 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2500 rows × 21 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " feature_0 feature_1 feature_2 feature_3 feature_4 feature_5 \\\n",
+ "0 6.301344 0.270723 0.810890 1.916672 1.480180 -1.111209 \n",
+ "1 1.482197 -1.242443 0.837535 2.904502 -1.605309 0.632422 \n",
+ "2 3.493216 0.731723 -2.769300 1.533892 -1.341591 2.544158 \n",
+ "3 1.243322 -1.185999 1.510705 2.280017 -0.139123 -1.333367 \n",
+ "4 3.368511 0.294880 1.098486 2.401271 1.178792 0.050650 \n",
+ "... ... ... ... ... ... ... \n",
+ "2495 2.006662 -0.377155 -0.674967 3.425157 0.774268 -0.288493 \n",
+ "2496 4.624801 -0.435007 -1.340297 3.709764 1.303919 -0.913823 \n",
+ "2497 5.299738 1.273677 -1.801943 3.892334 1.255739 0.095366 \n",
+ "2498 0.866703 -1.056071 1.670582 2.334009 -1.333572 -0.048753 \n",
+ "2499 2.827924 -0.391928 0.139046 0.273091 -1.208622 -0.401865 \n",
+ "\n",
+ " feature_6 feature_7 feature_8 feature_9 ... feature_11 feature_12 \\\n",
+ "0 3.623056 2.151706 -0.581654 0.469363 ... 1.162767 1.631004 \n",
+ "1 2.955928 -0.693749 -0.326387 -0.897179 ... 4.941789 4.033131 \n",
+ "2 2.855936 0.826364 -1.093561 0.303124 ... 0.848919 1.783395 \n",
+ "3 4.703854 -1.238155 0.659352 -0.514514 ... 2.731269 3.631489 \n",
+ "4 1.631508 0.915017 0.002918 -0.217509 ... 3.671178 2.873755 \n",
+ "... ... ... ... ... ... ... ... \n",
+ "2495 3.312510 -0.935283 0.898680 1.028747 ... 1.511337 2.026637 \n",
+ "2496 2.927538 1.808688 -0.461729 -0.309318 ... 4.194667 0.308783 \n",
+ "2497 2.051728 1.577475 -0.348716 0.714247 ... 2.760161 4.798985 \n",
+ "2498 2.157949 -0.995259 -0.026593 1.162342 ... 2.564957 2.874556 \n",
+ "2499 2.850371 0.857199 -1.050983 1.923212 ... 4.897142 2.617614 \n",
+ "\n",
+ " feature_13 feature_14 feature_15 feature_16 feature_17 feature_18 \\\n",
+ "0 -0.382130 1.307247 -0.851273 3.321264 0.697387 2.381824 \n",
+ "1 -0.009700 -0.585573 -1.503230 1.074927 0.803923 3.804727 \n",
+ "2 -0.644753 1.994629 2.166190 4.072446 2.121466 3.146668 \n",
+ "3 0.175608 0.754273 -0.783163 4.356327 0.350378 3.347941 \n",
+ "4 0.352395 -1.290841 -0.773709 1.938640 0.776364 3.676751 \n",
+ "... ... ... ... ... ... ... \n",
+ "2495 -1.371283 -0.162678 2.033294 0.387519 -1.778998 4.347185 \n",
+ "2496 -0.455863 0.333040 0.302472 0.571399 -0.664472 3.399752 \n",
+ "2497 0.862472 -1.737803 1.263144 3.620031 -0.426575 3.938336 \n",
+ "2498 0.443551 1.508644 -1.702975 4.317128 -1.488132 3.223802 \n",
+ "2499 1.056777 1.459342 -0.002913 2.095362 0.309448 3.965130 \n",
+ "\n",
+ " feature_19 label \n",
+ "0 -0.070941 1 \n",
+ "1 -0.028967 0 \n",
+ "2 1.574255 1 \n",
+ "3 -1.111401 1 \n",
+ "4 0.867656 1 \n",
+ "... ... ... \n",
+ "2495 0.066542 0 \n",
+ "2496 1.068366 0 \n",
+ "2497 -0.700078 1 \n",
+ "2498 0.036243 0 \n",
+ "2499 -0.366275 1 \n",
+ "\n",
+ "[2500 rows x 21 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "batch_inference_run.artifact(\"prediction\").as_df()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " \n",
+ "## 4. Data Drift Analysis\n",
+ "\n",
+ "The data drift analysis in this demo is based on the histogram data drift application, and it is done per feature using two distance measure metrics for probability distributions.\n",
+ "\n",
+ "Let us mark our sample set as $S$ and our inputs as $I$. We will look at one feature $x$ out of $n$ features. Assuming the histograms of feature $x$ is split into 20 bins: $b_1,b_2,...,b_{20}$, we will match the feature $x$ histogram of the inputs $I$ ($x_I$) into the same bins (meaning to $x_S$) and compare their distributions using:\n",
+ "\n",
+ "* Total Variance Distance: $TVD(x_S,x_I) = \\frac{1}{2}\\sum_{b_1}^{b_{20}} {|x_S - x_I|}$\n",
+ "* Hellinger Distance: $H(x_S,x_I) = \\sqrt{1-{\\sum_{b_1}^{b_{20}}\\sqrt{x_S \\cdot x_I}}}$\n",
+ "\n",
+ "Our **rule** then is calculating for each $x\\in S: \\frac{H(x_S,x_I)+TVD(x_S,x_I)}{2} < $ given thresholds.\n",
+ "\n",
+ "The outputs of the analysis will be:\n",
+ "* **Drift table plot** - The results are presented in a `plotly` table artifact named `\"drift_table_plot\"` that shows each feature's statistics and its TVD, Hellinger and KLD (Kullback–Leibler divergence) results as follows:\n",
+ "\n",
+ "| | Count | | Mean | | Std | | Min | | Max | | Tvd | Hellinger | Kld | Histograms |\n",
+ "| ------ | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | --- | --------- | --- |------------|\n",
+ "| | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | | | | |\n",
+ "| **x1** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
+ "| **x2** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
+ "| **x3** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
+ "\n",
+ "* **Features drift results** - A rule metric per feature dictionary is saved in a json file named `\"features_drift_results\"` where each key is a feature and its value is the feature's metric value: `Dict[str, float]`\n",
+ "\n",
+ " ```python\n",
+ " {\n",
+ " \"x1\": 0.12,\n",
+ " \"x2\": 0.345,\n",
+ " \"x3\": 0.00678,\n",
+ " ...\n",
+ " }\n",
+ " ```\n",
+ "\n",
+ "* In addition, two results are being added to summarize the drift analysis:\n",
+ "\n",
+ " * `drift_status`: `bool` - A boolean value indicating whether a drift was found.\n",
+ " * `drift_metric`: `float` - The mean of all the features drift metric value (the rule above):\n",
+ " for $n$ features and metric rule $M(x_S,x_I)=\\frac{H(x_S,x_I)+TVD(x_S,x_I)}{2}$, `drift_metric` $=\\frac{1}{n}\\sum_{x\\in S}M(x_S,x_I)$\n",
+ "\n",
+ " ```python\n",
+ " {\n",
+ " \"drift_status\": True,\n",
+ " \"drift_metric\": 0.81234\n",
+ " }\n",
+ " ```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 4.1. Enable Model Monitoring\n",
+ "\n",
+ "To calculate data drift and generate artifact results, we first need to define the model monitoring configuration. Next, we will deploy the model monitoring infrastructure, which includes the default histogram-based data drift application.\n",
+ "\n",
+ "In this demo, we will use V3IO resources, but you can also provide your own. For more information on supported resources, please visit https://docs.mlrun.org/en/latest/model-monitoring/index.html#selecting-the-streaming-and-tsdb-platforms"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 4.1.1 Set credentials and deploy model monitoring infrastructure "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "project.set_model_monitoring_credentials(\n",
+ " endpoint_store_connection=\"v3io\",\n",
+ " tsdb_connection=\"v3io\",\n",
+ " stream_path=\"v3io\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:24:25,053 [warning] enable_model_monitoring: 'base_period' < 10 minutes is not supported in production environments: {\"project\":\"batch-infer-demo\"}\n",
+ "2024-10-08 10:24:30 (info) Deploying function\n",
+ "2024-10-08 10:24:30 (info) Building\n",
+ "2024-10-08 10:24:30 (info) Staging files and preparing base images\n",
+ "2024-10-08 10:24:30 (warn) Using user provided base image, runtime interpreter version is provided by the base image\n",
+ "2024-10-08 10:24:30 (info) Building processor image\n",
+ "2024-10-08 10:26:01 (info) Build complete\n",
+ "2024-10-08 10:26:11 (info) Function deploy complete\n",
+ "2024-10-08 10:24:25 (info) Deploying function\n",
+ "2024-10-08 10:24:25 (info) Building\n",
+ "2024-10-08 10:24:25 (info) Staging files and preparing base images\n",
+ "2024-10-08 10:24:25 (warn) Using user provided base image, runtime interpreter version is provided by the base image\n",
+ "2024-10-08 10:24:25 (info) Building processor image\n",
+ "2024-10-08 10:26:06 (info) Build complete\n",
+ "2024-10-08 10:27:07 (info) Function deploy complete\n",
+ "2024-10-08 10:24:26 (info) Deploying function\n",
+ "2024-10-08 10:24:26 (info) Building\n",
+ "2024-10-08 10:24:28 (info) Staging files and preparing base images\n",
+ "2024-10-08 10:24:28 (warn) Using user provided base image, runtime interpreter version is provided by the base image\n",
+ "2024-10-08 10:24:28 (info) Building processor image\n",
+ "2024-10-08 10:26:01 (info) Build complete\n",
+ "2024-10-08 10:26:10 (info) Function deploy complete\n",
+ "2024-10-08 10:24:32 (info) Deploying function\n",
+ "2024-10-08 10:24:32 (info) Building\n",
+ "2024-10-08 10:24:32 (info) Staging files and preparing base images\n",
+ "2024-10-08 10:24:32 (warn) Using user provided base image, runtime interpreter version is provided by the base image\n",
+ "2024-10-08 10:24:32 (info) Building processor image\n",
+ "2024-10-08 10:26:01 (info) Build complete\n",
+ "2024-10-08 10:26:12 (info) Function deploy complete\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Deploy model monitoring infrastructure\n",
+ "project.enable_model_monitoring(wait_for_deployment=True, base_period=1)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 4.1.2 Rerun batch infer with model monitoring"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:27:29,954 [info] Storing function: {\"db\":\"http://mlrun-api:8080\",\"name\":\"batch-inference-v2-infer\",\"uid\":\"ca26cf51bb984354aa2b6c42540af1f7\"}\n",
+ "> 2024-10-08 10:27:30,317 [info] Job is running in the background, pod: batch-inference-v2-infer-qmszk\n",
+ "> 2024-10-08 10:27:34,169 [info] Loading model...\n",
+ "> 2024-10-08 10:27:35,237 [info] Loading data...\n",
+ "> 2024-10-08 10:27:35,277 [info] Calculating prediction...\n",
+ "> 2024-10-08 10:27:35,281 [info] Logging result set (x | prediction)...\n",
+ "> 2024-10-08 10:27:35,773 [info] Performing drift analysis...\n",
+ "> 2024-10-08 10:27:37,335 [info] Bumping model endpoint last request time (EP without serving): {\"bumped_last_request\":\"2024-10-08T10:29:35.991331+00:00\",\"current_request\":\"2024-10-08T10:27:35.991331+00:00\",\"endpoint_id\":\"cc285767a39c0455d050a8c0d7b0421c19394aba\",\"last_request\":\"2024-10-08T10:27:35.806824+00:00\",\"project\":\"batch-infer-demo\"}\n",
+ "> 2024-10-08 10:27:37,586 [info] To track results use the CLI: {\"info_cmd\":\"mlrun get run ca26cf51bb984354aa2b6c42540af1f7 -p batch-infer-demo\",\"logs_cmd\":\"mlrun logs ca26cf51bb984354aa2b6c42540af1f7 -p batch-infer-demo\"}\n",
+ "> 2024-10-08 10:27:37,586 [info] Or click for UI: {\"ui_url\":\"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/ca26cf51bb984354aa2b6c42540af1f7/overview\"}\n",
+ "> 2024-10-08 10:27:37,587 [info] Run execution finished: {\"name\":\"batch-inference-v2-infer\",\"status\":\"completed\"}\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " project \n",
+ " uid \n",
+ " iter \n",
+ " start \n",
+ " state \n",
+ " kind \n",
+ " name \n",
+ " labels \n",
+ " inputs \n",
+ " parameters \n",
+ " results \n",
+ " artifacts \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " batch-infer-demo \n",
+ " \n",
+ " 0 \n",
+ " Oct 08 10:27:34 \n",
+ " completed \n",
+ " run \n",
+ " batch-inference-v2-infer \n",
+ " v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-v2-infer-qmszk
\n",
+ " dataset
\n",
+ " model_path=store://models/batch-infer-demo/model:latest@1102e4aea9424149837a81aa214b9489
label_columns=label
perform_drift_analysis=True
model_endpoint_name=my_cool_endpoint
\n",
+ " batch_id=286df90faa9d3edf774974db7b6d601c5412caad635bccb56e7e8598
\n",
+ " prediction
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n",
+ "
\n",
+ " \n",
+ " \n",
+ "
\n",
+ "
\n"
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ " > to track results use the .show() or .logs() methods or click here to open in UI "
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "> 2024-10-08 10:27:41,580 [info] Run execution finished: {\"name\":\"batch-inference-v2-infer\",\"status\":\"completed\"}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Perform batch prediction, this time enable drift analysis\n",
+ "batch_inference_run = batch_inference_function.run(\n",
+ " handler=\"infer\",\n",
+ " inputs={\"dataset\": generate_data_run.outputs[\"prediction_set\"]},\n",
+ " params={\n",
+ " \"model_path\": train_run.outputs[\"model\"],\n",
+ " \"label_columns\": \"label\",\n",
+ " \"perform_drift_analysis\": True,\n",
+ " \"model_endpoint_name\": \"my_cool_endpoint\" # a display name for the model endpoint\n",
+ " },\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 4.2 Overview drift results\n",
+ "\n",
+ "Please note that all results are available in the UI, including time-based metrics and drift results for each model endpoint."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 4.2.1 List artifacts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Wait until the monitoring application is triggered\n",
+ "import time\n",
+ "time.sleep(60)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Retrieve the model endpoint\n",
+ "from mlrun.model_monitoring.api import get_or_create_model_endpoint\n",
+ "endpoint = get_or_create_model_endpoint(project=project.name, model_endpoint_name=\"my_cool_endpoint\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Validate that the artifacts were logged in the project\n",
+ "artifacts = project.list_artifacts(\n",
+ " labels={\n",
+ " \"mlrun/producer-type\": \"model-monitoring-app\",\n",
+ " \"mlrun/app-name\": \"histogram-data-drift\",\n",
+ " \"mlrun/endpoint-id\": endpoint.metadata.uid,\n",
+ " }\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[{'kind': 'plotly',\n",
+ " 'metadata': {'key': 'drift_table_plot',\n",
+ " 'project': 'batch-infer-demo',\n",
+ " 'iter': 0,\n",
+ " 'tree': '0f9bc30c-e223-4161-a4b3-7ea93a2b200d',\n",
+ " 'hash': 'a9cbb5cd3532a7de394134c94d7ffabcf337e25f',\n",
+ " 'uid': 'ffab65fdff6bfb6b1e53003f6f135a39d94933fc',\n",
+ " 'updated': '2024-10-08 10:29:12.088626+00:00',\n",
+ " 'labels': {'mlrun/runner-pod': 'nuclio-batch-infer-demo-histogram-data-drift-5bcfd66559-c58k5',\n",
+ " 'mlrun/producer-type': 'model-monitoring-app',\n",
+ " 'mlrun/app-name': 'histogram-data-drift',\n",
+ " 'mlrun/endpoint-id': 'cc285767a39c0455d050a8c0d7b0421c19394aba'},\n",
+ " 'created': '2024-10-08 10:29:12.088665+00:00',\n",
+ " 'tag': 'latest'},\n",
+ " 'spec': {'target_path': 'v3io:///projects/batch-infer-demo/artifacts/drift_table_plot.html',\n",
+ " 'viewer': 'plotly',\n",
+ " 'size': 4637273,\n",
+ " 'license': '',\n",
+ " 'producer': {'kind': 'project',\n",
+ " 'name': 'batch-infer-demo',\n",
+ " 'tag': '0f9bc30c-e223-4161-a4b3-7ea93a2b200d',\n",
+ " 'owner': 'eyald'},\n",
+ " 'format': 'html',\n",
+ " 'db_key': 'drift_table_plot'},\n",
+ " 'status': {'state': 'created'},\n",
+ " 'project': 'batch-infer-demo'},\n",
+ " {'kind': 'artifact',\n",
+ " 'metadata': {'key': 'features_drift_results',\n",
+ " 'project': 'batch-infer-demo',\n",
+ " 'iter': 0,\n",
+ " 'tree': '8636f959-4738-4c36-9e86-1fbb2a30cb7c',\n",
+ " 'hash': '8021f8f05337970dfaf19803f7c106efca3cefae',\n",
+ " 'uid': 'a0a361f92fb9aa0d70bf3c0b8373eeff97b8d86a',\n",
+ " 'updated': '2024-10-08 10:29:10.747465+00:00',\n",
+ " 'labels': {'mlrun/runner-pod': 'nuclio-batch-infer-demo-histogram-data-drift-5bcfd66559-c58k5',\n",
+ " 'mlrun/producer-type': 'model-monitoring-app',\n",
+ " 'mlrun/app-name': 'histogram-data-drift',\n",
+ " 'mlrun/endpoint-id': 'cc285767a39c0455d050a8c0d7b0421c19394aba'},\n",
+ " 'created': '2024-10-08 10:29:10.747499+00:00',\n",
+ " 'tag': 'latest'},\n",
+ " 'spec': {'target_path': 'v3io:///projects/batch-infer-demo/artifacts/features_drift_results.json',\n",
+ " 'size': 530,\n",
+ " 'license': '',\n",
+ " 'producer': {'kind': 'project',\n",
+ " 'name': 'batch-infer-demo',\n",
+ " 'tag': '8636f959-4738-4c36-9e86-1fbb2a30cb7c',\n",
+ " 'owner': 'eyald'},\n",
+ " 'format': 'json',\n",
+ " 'db_key': 'features_drift_results'},\n",
+ " 'status': {'state': 'created'},\n",
+ " 'project': 'batch-infer-demo'}]"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "artifacts"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 4.2.2 Plot artifacts"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "application/json": {
+ "feature_0": 0.7336360498,
+ "feature_1": 0.0459120955,
+ "feature_10": 0.8124099352,
+ "feature_11": 0.8177975596,
+ "feature_12": 0.8067873269,
+ "feature_13": 0.0513085564,
+ "feature_14": 0.046995995,
+ "feature_15": 0.0521889377,
+ "feature_16": 0.8121401627,
+ "feature_17": 0.0425954299,
+ "feature_18": 0.8065110892,
+ "feature_19": 0.0484492788,
+ "feature_2": 0.0501409889,
+ "feature_3": 0.8066579327,
+ "feature_4": 0.0530308426,
+ "feature_5": 0.0578513223,
+ "feature_6": 0.811285755,
+ "feature_7": 0.0573444896,
+ "feature_8": 0.0431253397,
+ "feature_9": 0.0356434105,
+ "label": 0.5794195799
+ },
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "application/json": {
+ "expanded": false,
+ "root": "root"
+ }
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot the drift results per feature and label\n",
+ "features_drift_results_artifact = project.get_artifact(\"features_drift_results\")\n",
+ "features_drift_results_artifact.to_dataitem().show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ "\n",
+ " \n",
+ "\n",
+ ""
+ ],
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot the drift table artifact\n",
+ "drift_table_plot_artifact = project.get_artifact(\"drift_table_plot\")\n",
+ "drift_table_plot_artifact.to_dataitem().show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "mlrun-extended",
+ "language": "python",
+ "name": "conda-env-mlrun-extended-py"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.18"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.py b/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.py
new file mode 100644
index 00000000..78f9a709
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/batch_inference_v2.py
@@ -0,0 +1,253 @@
+# Copyright 2023 Iguazio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from inspect import signature
+from typing import Any, Dict, List, Union, Optional
+import mlrun
+
+try:
+ import mlrun.model_monitoring.api
+except ModuleNotFoundError:
+ raise mlrun.errors.MLRunNotFoundError(
+ f"Please update your `mlrun` version to >=1.5.0 or use an "
+ f"older version of the batch inference function."
+ )
+
+import numpy as np
+import pandas as pd
+from mlrun.frameworks.auto_mlrun import AutoMLRun
+
+
+def _prepare_result_set(x: pd.DataFrame, label_columns: List[str], y_pred: np.ndarray) -> pd.DataFrame:
+ """
+ Set default label column names and validate given names to prepare the result set - a concatenation of the inputs
+ (x) and the model predictions (y_pred).
+
+ :param x: The inputs.
+ :param label_columns: A list of strings representing the target column names to add to the predictions. Default name
+ will be used in case the list is empty (predicted_label_{i}).
+ :param y_pred: The model predictions on the inputs.
+
+ :returns: The result set.
+
+ raises MLRunInvalidArgumentError: If the labels columns amount do not match the outputs or if one of the label
+ column already exists in the dataset.
+ """
+ # Prepare default target columns names if not provided:
+ prediction_columns_amount = 1 if len(y_pred.shape) == 1 else y_pred.shape[1]
+ if len(label_columns) == 0:
+ # Add default label column names:
+ if prediction_columns_amount == 1:
+ label_columns = ["predicted_label"]
+ else:
+ label_columns = [
+ f"predicted_label_{i}" for i in range(prediction_columns_amount)
+ ]
+
+ # Validate the label columns:
+ if prediction_columns_amount != len(label_columns):
+ # No equality between provided label column names and outputs amount:
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The number of predicted labels: {prediction_columns_amount} "
+ f"is not equal to the given label columns: {len(label_columns)}"
+ )
+ common_labels = set(label_columns) & set(x.columns.tolist())
+ if common_labels:
+ # Label column exist in the original inputs:
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The labels: {common_labels} are already existed in the given dataset."
+ )
+
+ return pd.concat(
+ [x, pd.DataFrame(y_pred, columns=label_columns, index=x.index)], axis=1
+ )
+
+
+def _get_sample_set_statistics_parameters(context: mlrun.MLClientCtx,
+ model_endpoint_sample_set: Union[
+ mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray],
+ model_artifact_feature_stats: dict,
+ feature_columns: Optional[List],
+ drop_columns: Optional[List],
+ label_columns: Optional[List]) -> Dict[str, Any]:
+ statics_input_full_dict = dict(sample_set=model_endpoint_sample_set,
+ model_artifact_feature_stats=model_artifact_feature_stats,
+ sample_set_columns=feature_columns,
+ sample_set_drop_columns=drop_columns,
+ sample_set_label_columns=label_columns)
+ get_sample_statics_function = mlrun.model_monitoring.api.get_sample_set_statistics
+ statics_function_input_dict = signature(get_sample_statics_function).parameters
+ # As a result of changes to input parameters in the mlrun-get_sample_set_statistics function,
+ # we will now send only the parameters it expects.
+ statistics_input_filtered = {key: statics_input_full_dict[key] for key in statics_function_input_dict}
+ if len(statistics_input_filtered) != len(statics_function_input_dict):
+ context.logger.warning(f"get_sample_set_statistics is in an older version; "
+ "some parameters will not be sent to the function."
+ f" Expected input: {list(statics_function_input_dict.keys())},"
+ f" actual input: {list(statistics_input_filtered.keys())}")
+ return statistics_input_filtered
+
+
+def infer(
+ context: mlrun.MLClientCtx,
+ dataset: Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray],
+ model_path: Union[str, mlrun.DataItem],
+ drop_columns: Union[str, List[str], int, List[int]] = None,
+ label_columns: Union[str, List[str]] = None,
+ feature_columns: Union[str, List[str]] = None,
+ log_result_set: bool = True,
+ result_set_name: str = "prediction",
+ batch_id: str = None,
+ artifacts_tag: str = "",
+ # Drift analysis parameters
+ perform_drift_analysis: bool = None,
+ endpoint_id: str = "",
+ # The following model endpoint parameters are relevant only if:
+ # perform drift analysis is not disabled
+ # a new model endpoint record is going to be generated
+ model_endpoint_name: str = "batch-infer",
+ model_endpoint_sample_set: Union[
+ mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray
+ ] = None,
+ **predict_kwargs: Dict[str, Any],
+):
+ """
+ Perform a prediction on the provided dataset using the specified model.
+ Ensure that the model has already been logged under the current project.
+
+ If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis parameter to True.
+ This will create a new model endpoint record under the specified model_endpoint_name.
+ Additionally, ensure that model monitoring is enabled at the project level by calling the
+ project.enable_model_monitoring() function. You can also apply monitoring to an existing model by providing its
+ endpoint id or name, and the monitoring tools will be applied to that endpoint.
+
+ At the moment, this function is supported for `mlrun>=1.5.0` versions.
+
+ :param context: MLRun context.
+ :param dataset: The dataset to infer through the model. Provided as an input (DataItem)
+ that represents Dataset artifact / Feature vector URI.
+ If using MLRun SDK, `dataset` can also be provided as a list, dictionary or
+ numpy array.
+ :param model_path: Model store uri (should start with store://). Provided as an input (DataItem).
+ If using MLRun SDK, `model_path` can also be provided as a parameter (string).
+ To generate a valid model store URI, please log the model before running this function.
+ If `endpoint_id` of existing model endpoint is provided, make sure
+ that it has a similar model store path, otherwise the drift analysis
+ won't be triggered.
+ :param drop_columns: A string / integer or a list of strings / integers that represent the column names
+ / indices to drop. When the dataset is a list or a numpy array this parameter must
+ be represented by integers.
+ :param label_columns: The target label(s) of the column(s) in the dataset for Regression or
+ Classification tasks. The label column can be accessed from the model object, or
+ the feature vector provided if available.
+ :param feature_columns: List of feature columns that will be used to build the dataframe when dataset is
+ from type list or numpy array.
+ :param log_result_set: Whether to log the result set - a DataFrame of the given inputs concatenated with
+ the predictions. Defaulted to True.
+ :param result_set_name: The db key to set name of the prediction result and the filename. Defaulted to
+ 'prediction'.
+ :param batch_id: The ID of the given batch (inference dataset). If `None`, it will be generated.
+ Will be logged as a result of the run.
+ :param artifacts_tag: Tag to use for prediction set result artifact.
+ :param perform_drift_analysis: Whether to perform drift analysis between the sample set of the model object to the
+ dataset given. By default, None, which means it will perform drift analysis if the
+ model already has feature stats that are considered as a reference sample set.
+ Performing drift analysis on a new endpoint id will generate a new model endpoint
+ record.
+ :param endpoint_id: Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id
+ will be used either to perform the analysis on existing model endpoint or to
+ generate a new model endpoint record.
+ :param model_endpoint_name: If a new model endpoint is generated, the model name will be presented under this
+ endpoint.
+ :param model_endpoint_sample_set: A sample dataset to give to compare the inputs in the drift analysis.
+ Can be provided as an input (DataItem) or as a parameter (e.g. string, list, DataFrame).
+ The default chosen sample set will always be the one who is set in the model artifact itself.
+
+ raises MLRunInvalidArgumentError: if both `model_path` and `endpoint_id` are not provided
+ """
+
+ # Loading the model:
+ context.logger.info(f"Loading model...")
+ if isinstance(model_path, mlrun.DataItem):
+ model_path = model_path.artifact_url
+ if not mlrun.datastore.is_store_uri(model_path):
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The provided model path ({model_path}) is invalid - should start with `store://`. "
+ f"Please make sure that you have logged the model using `project.log_model()` "
+ f"which generates a unique store uri for the logged model."
+ )
+ model_handler = AutoMLRun.load_model(model_path=model_path, context=context)
+
+ if label_columns is None:
+ label_columns = [
+ output.name for output in model_handler._model_artifact.spec.outputs
+ ]
+
+ if feature_columns is None:
+ feature_columns = [
+ input.name for input in model_handler._model_artifact.spec.inputs
+ ]
+
+ # Get dataset by object, URL or by FeatureVector:
+ context.logger.info(f"Loading data...")
+ x, label_columns = mlrun.model_monitoring.api.read_dataset_as_dataframe(
+ dataset=dataset,
+ feature_columns=feature_columns,
+ label_columns=label_columns,
+ drop_columns=drop_columns,
+ )
+
+ # Predict:
+ context.logger.info(f"Calculating prediction...")
+ y_pred = model_handler.model.predict(x, **predict_kwargs)
+
+ # Prepare the result set:
+ result_set = _prepare_result_set(x=x, label_columns=label_columns, y_pred=y_pred)
+
+ # Check for logging the result set:
+ if log_result_set:
+ mlrun.model_monitoring.api.log_result(
+ context=context,
+ result_set_name=result_set_name,
+ result_set=result_set,
+ artifacts_tag=artifacts_tag,
+ batch_id=batch_id,
+ )
+
+ # Check for performing drift analysis
+ if (
+ perform_drift_analysis is None
+ and model_handler._model_artifact.spec.feature_stats is not None
+ ):
+ perform_drift_analysis = True
+ if perform_drift_analysis:
+ context.logger.info("Performing drift analysis...")
+ # Get the sample set statistics (either from the sample set or from the statistics logged with the model)
+ statistics_input_filtered = _get_sample_set_statistics_parameters(
+ context=context,
+ model_endpoint_sample_set=model_endpoint_sample_set,
+ model_artifact_feature_stats=model_handler._model_artifact.spec.feature_stats,
+ feature_columns=feature_columns,
+ drop_columns=drop_columns,
+ label_columns=label_columns)
+ sample_set_statistics = mlrun.model_monitoring.api.get_sample_set_statistics(**statistics_input_filtered)
+ mlrun.model_monitoring.api.record_results(
+ project=context.project,
+ context=context,
+ endpoint_id=endpoint_id,
+ model_path=model_path,
+ model_endpoint_name=model_endpoint_name,
+ infer_results_df=result_set.copy(),
+ sample_set_statistics=sample_set_statistics,
+ )
diff --git a/functions/development/batch_inference_v2/2.6.0/src/function.yaml b/functions/development/batch_inference_v2/2.6.0/src/function.yaml
new file mode 100644
index 00000000..0db7b636
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/function.yaml
@@ -0,0 +1,128 @@
+kind: job
+verbose: false
+spec:
+ entry_points:
+ infer:
+ has_kwargs: true
+ lineno: 102
+ has_varargs: false
+ doc: 'Perform a prediction on the provided dataset using the specified model.
+
+ Ensure that the model has already been logged under the current project.
+
+
+ If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis
+ parameter to True.
+
+ This will create a new model endpoint record under the specified model_endpoint_name.
+
+ Additionally, ensure that model monitoring is enabled at the project level
+ by calling the
+
+ project.enable_model_monitoring() function. You can also apply monitoring
+ to an existing model by providing its
+
+ endpoint id or name, and the monitoring tools will be applied to that endpoint.
+
+
+ At the moment, this function is supported for `mlrun>=1.5.0` versions.'
+ parameters:
+ - name: context
+ type: MLClientCtx
+ doc: MLRun context.
+ - name: dataset
+ type: Union[DataItem, list, dict, DataFrame, Series, ndarray]
+ doc: The dataset to infer through the model. Provided as an input (DataItem)
+ that represents Dataset artifact / Feature vector URI. If using MLRun SDK,
+ `dataset` can also be provided as a list, dictionary or numpy array.
+ - name: model_path
+ type: Union[str, DataItem]
+ doc: Model store uri (should start with store://). Provided as an input (DataItem).
+ If using MLRun SDK, `model_path` can also be provided as a parameter (string).
+ To generate a valid model store URI, please log the model before running
+ this function. If `endpoint_id` of existing model endpoint is provided,
+ make sure that it has a similar model store path, otherwise the drift analysis
+ won't be triggered.
+ - name: drop_columns
+ type: Union[str, List[str], int, List[int]]
+ doc: A string / integer or a list of strings / integers that represent the
+ column names / indices to drop. When the dataset is a list or a numpy array
+ this parameter must be represented by integers.
+ default: null
+ - name: label_columns
+ type: Union[str, List[str]]
+ doc: The target label(s) of the column(s) in the dataset for Regression or
+ Classification tasks. The label column can be accessed from the model object,
+ or the feature vector provided if available.
+ default: null
+ - name: feature_columns
+ type: Union[str, List[str]]
+ doc: List of feature columns that will be used to build the dataframe when
+ dataset is from type list or numpy array.
+ default: null
+ - name: log_result_set
+ type: bool
+ doc: Whether to log the result set - a DataFrame of the given inputs concatenated
+ with the predictions. Defaulted to True.
+ default: true
+ - name: result_set_name
+ type: str
+ doc: The db key to set name of the prediction result and the filename. Defaulted
+ to 'prediction'.
+ default: prediction
+ - name: batch_id
+ type: str
+ doc: The ID of the given batch (inference dataset). If `None`, it will be
+ generated. Will be logged as a result of the run.
+ default: null
+ - name: artifacts_tag
+ type: str
+ doc: Tag to use for prediction set result artifact.
+ default: ''
+ - name: perform_drift_analysis
+ type: bool
+ doc: Whether to perform drift analysis between the sample set of the model
+ object to the dataset given. By default, None, which means it will perform
+ drift analysis if the model already has feature stats that are considered
+ as a reference sample set. Performing drift analysis on a new endpoint id
+ will generate a new model endpoint record.
+ default: null
+ - name: endpoint_id
+ type: str
+ doc: Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id
+ will be used either to perform the analysis on existing model endpoint or
+ to generate a new model endpoint record.
+ default: ''
+ - name: model_endpoint_name
+ type: str
+ doc: If a new model endpoint is generated, the model name will be presented
+ under this endpoint.
+ default: batch-infer
+ - name: model_endpoint_sample_set
+ type: Union[DataItem, list, dict, DataFrame, Series, ndarray]
+ doc: A sample dataset to give to compare the inputs in the drift analysis.
+ Can be provided as an input (DataItem) or as a parameter (e.g. string, list,
+ DataFrame). The default chosen sample set will always be the one who is
+ set in the model artifact itself.
+ default: null
+ name: infer
+ description: Batch inference (also knows as prediction) for the common ML frameworks
+ (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.
+ allow_empty_resources: true
+ build:
+ with_mlrun: false
+ code_origin: ''
+ functionSourceCode: IyBDb3B5cmlnaHQgMjAyMyBJZ3VhemlvCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIGluc3BlY3QgaW1wb3J0IHNpZ25hdHVyZQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBVbmlvbiwgT3B0aW9uYWwKaW1wb3J0IG1scnVuCgp0cnk6CiAgICBpbXBvcnQgbWxydW4ubW9kZWxfbW9uaXRvcmluZy5hcGkKZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CiAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5Ob3RGb3VuZEVycm9yKAogICAgICAgIGYiUGxlYXNlIHVwZGF0ZSB5b3VyIGBtbHJ1bmAgdmVyc2lvbiB0byA+PTEuNS4wIG9yIHVzZSBhbiAiCiAgICAgICAgZiJvbGRlciB2ZXJzaW9uIG9mIHRoZSBiYXRjaCBpbmZlcmVuY2UgZnVuY3Rpb24uIgogICAgKQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBtbHJ1bi5mcmFtZXdvcmtzLmF1dG9fbWxydW4gaW1wb3J0IEF1dG9NTFJ1bgoKCmRlZiBfcHJlcGFyZV9yZXN1bHRfc2V0KHg6IHBkLkRhdGFGcmFtZSwgbGFiZWxfY29sdW1uczogTGlzdFtzdHJdLCB5X3ByZWQ6IG5wLm5kYXJyYXkpIC0+IHBkLkRhdGFGcmFtZToKICAgICIiIgogICAgU2V0IGRlZmF1bHQgbGFiZWwgY29sdW1uIG5hbWVzIGFuZCB2YWxpZGF0ZSBnaXZlbiBuYW1lcyB0byBwcmVwYXJlIHRoZSByZXN1bHQgc2V0IC0gYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBpbnB1dHMKICAgICh4KSBhbmQgdGhlIG1vZGVsIHByZWRpY3Rpb25zICh5X3ByZWQpLgoKICAgIDpwYXJhbSB4OiAgICAgICAgICAgICBUaGUgaW5wdXRzLgogICAgOnBhcmFtIGxhYmVsX2NvbHVtbnM6IEEgbGlzdCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGNvbHVtbiBuYW1lcyB0byBhZGQgdG8gdGhlIHByZWRpY3Rpb25zLiBEZWZhdWx0IG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgaW4gY2FzZSB0aGUgbGlzdCBpcyBlbXB0eSAocHJlZGljdGVkX2xhYmVsX3tpfSkuCiAgICA6cGFyYW0geV9wcmVkOiAgICAgICAgVGhlIG1vZGVsIHByZWRpY3Rpb25zIG9uIHRoZSBpbnB1dHMuCgogICAgOnJldHVybnM6IFRoZSByZXN1bHQgc2V0LgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBJZiB0aGUgbGFiZWxzIGNvbHVtbnMgYW1vdW50IGRvIG5vdCBtYXRjaCB0aGUgb3V0cHV0cyBvciBpZiBvbmUgb2YgdGhlIGxhYmVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGF0YXNldC4KICAgICIiIgogICAgIyBQcmVwYXJlIGRlZmF1bHQgdGFyZ2V0IGNvbHVtbnMgbmFtZXMgaWYgbm90IHByb3ZpZGVkOgogICAgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCA9IDEgaWYgbGVuKHlfcHJlZC5zaGFwZSkgPT0gMSBlbHNlIHlfcHJlZC5zaGFwZVsxXQogICAgaWYgbGVuKGxhYmVsX2NvbHVtbnMpID09IDA6CiAgICAgICAgIyBBZGQgZGVmYXVsdCBsYWJlbCBjb2x1bW4gbmFtZXM6CiAgICAgICAgaWYgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCA9PSAxOgogICAgICAgICAgICBsYWJlbF9jb2x1bW5zID0gWyJwcmVkaWN0ZWRfbGFiZWwiXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnMgPSBbCiAgICAgICAgICAgICAgICBmInByZWRpY3RlZF9sYWJlbF97aX0iIGZvciBpIGluIHJhbmdlKHByZWRpY3Rpb25fY29sdW1uc19hbW91bnQpCiAgICAgICAgICAgIF0KCiAgICAjIFZhbGlkYXRlIHRoZSBsYWJlbCBjb2x1bW5zOgogICAgaWYgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCAhPSBsZW4obGFiZWxfY29sdW1ucyk6CiAgICAgICAgIyBObyBlcXVhbGl0eSBiZXR3ZWVuIHByb3ZpZGVkIGxhYmVsIGNvbHVtbiBuYW1lcyBhbmQgb3V0cHV0cyBhbW91bnQ6CiAgICAgICAgcmFpc2UgbWxydW4uZXJyb3JzLk1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgIGYiVGhlIG51bWJlciBvZiBwcmVkaWN0ZWQgbGFiZWxzOiB7cHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudH0gIgogICAgICAgICAgICBmImlzIG5vdCBlcXVhbCB0byB0aGUgZ2l2ZW4gbGFiZWwgY29sdW1uczoge2xlbihsYWJlbF9jb2x1bW5zKX0iCiAgICAgICAgKQogICAgY29tbW9uX2xhYmVscyA9IHNldChsYWJlbF9jb2x1bW5zKSAmIHNldCh4LmNvbHVtbnMudG9saXN0KCkpCiAgICBpZiBjb21tb25fbGFiZWxzOgogICAgICAgICMgTGFiZWwgY29sdW1uIGV4aXN0IGluIHRoZSBvcmlnaW5hbCBpbnB1dHM6CiAgICAgICAgcmFpc2UgbWxydW4uZXJyb3JzLk1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgIGYiVGhlIGxhYmVsczoge2NvbW1vbl9sYWJlbHN9IGFyZSBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIGdpdmVuIGRhdGFzZXQuIgogICAgICAgICkKCiAgICByZXR1cm4gcGQuY29uY2F0KAogICAgICAgIFt4LCBwZC5EYXRhRnJhbWUoeV9wcmVkLCBjb2x1bW5zPWxhYmVsX2NvbHVtbnMsIGluZGV4PXguaW5kZXgpXSwgYXhpcz0xCiAgICApCgoKZGVmIF9nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzX3BhcmFtZXRlcnMoY29udGV4dDogbWxydW4uTUxDbGllbnRDdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2VuZHBvaW50X3NhbXBsZV9zZXQ6IFVuaW9uWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxydW4uRGF0YUl0ZW0sIGxpc3QsIGRpY3QsIHBkLkRhdGFGcmFtZSwgcGQuU2VyaWVzLCBucC5uZGFycmF5XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0czogZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9jb2x1bW5zOiBPcHRpb25hbFtMaXN0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9jb2x1bW5zOiBPcHRpb25hbFtMaXN0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxfY29sdW1uczogT3B0aW9uYWxbTGlzdF0pIC0+IERpY3Rbc3RyLCBBbnldOgogICAgc3RhdGljc19pbnB1dF9mdWxsX2RpY3QgPSBkaWN0KHNhbXBsZV9zZXQ9bW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9hcnRpZmFjdF9mZWF0dXJlX3N0YXRzPW1vZGVsX2FydGlmYWN0X2ZlYXR1cmVfc3RhdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3NldF9jb2x1bW5zPWZlYXR1cmVfY29sdW1ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfc2V0X2Ryb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3NldF9sYWJlbF9jb2x1bW5zPWxhYmVsX2NvbHVtbnMpCiAgICBnZXRfc2FtcGxlX3N0YXRpY3NfZnVuY3Rpb24gPSBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzCiAgICBzdGF0aWNzX2Z1bmN0aW9uX2lucHV0X2RpY3QgPSBzaWduYXR1cmUoZ2V0X3NhbXBsZV9zdGF0aWNzX2Z1bmN0aW9uKS5wYXJhbWV0ZXJzCiAgICAjICBBcyBhIHJlc3VsdCBvZiBjaGFuZ2VzIHRvIGlucHV0IHBhcmFtZXRlcnMgaW4gdGhlIG1scnVuLWdldF9zYW1wbGVfc2V0X3N0YXRpc3RpY3MgZnVuY3Rpb24sCiAgICAjICB3ZSB3aWxsIG5vdyBzZW5kIG9ubHkgdGhlIHBhcmFtZXRlcnMgaXQgZXhwZWN0cy4KICAgIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQgPSB7a2V5OiBzdGF0aWNzX2lucHV0X2Z1bGxfZGljdFtrZXldIGZvciBrZXkgaW4gc3RhdGljc19mdW5jdGlvbl9pbnB1dF9kaWN0fQogICAgaWYgbGVuKHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQpICE9IGxlbihzdGF0aWNzX2Z1bmN0aW9uX2lucHV0X2RpY3QpOgogICAgICAgIGNvbnRleHQubG9nZ2VyLndhcm5pbmcoZiJnZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzIGlzIGluIGFuIG9sZGVyIHZlcnNpb247ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21lIHBhcmFtZXRlcnMgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgZnVuY3Rpb24uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiIgRXhwZWN0ZWQgaW5wdXQ6IHtsaXN0KHN0YXRpY3NfZnVuY3Rpb25faW5wdXRfZGljdC5rZXlzKCkpfSwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIiBhY3R1YWwgaW5wdXQ6IHtsaXN0KHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQua2V5cygpKX0iKQogICAgcmV0dXJuIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQKCgpkZWYgaW5mZXIoCiAgICAgICAgY29udGV4dDogbWxydW4uTUxDbGllbnRDdHgsCiAgICAgICAgZGF0YXNldDogVW5pb25bbWxydW4uRGF0YUl0ZW0sIGxpc3QsIGRpY3QsIHBkLkRhdGFGcmFtZSwgcGQuU2VyaWVzLCBucC5uZGFycmF5XSwKICAgICAgICBtb2RlbF9wYXRoOiBVbmlvbltzdHIsIG1scnVuLkRhdGFJdGVtXSwKICAgICAgICBkcm9wX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdLCBpbnQsIExpc3RbaW50XV0gPSBOb25lLAogICAgICAgIGxhYmVsX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdXSA9IE5vbmUsCiAgICAgICAgZmVhdHVyZV9jb2x1bW5zOiBVbmlvbltzdHIsIExpc3Rbc3RyXV0gPSBOb25lLAogICAgICAgIGxvZ19yZXN1bHRfc2V0OiBib29sID0gVHJ1ZSwKICAgICAgICByZXN1bHRfc2V0X25hbWU6IHN0ciA9ICJwcmVkaWN0aW9uIiwKICAgICAgICBiYXRjaF9pZDogc3RyID0gTm9uZSwKICAgICAgICBhcnRpZmFjdHNfdGFnOiBzdHIgPSAiIiwKICAgICAgICAjIERyaWZ0IGFuYWx5c2lzIHBhcmFtZXRlcnMKICAgICAgICBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzOiBib29sID0gTm9uZSwKICAgICAgICBlbmRwb2ludF9pZDogc3RyID0gIiIsCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIG1vZGVsIGVuZHBvaW50IHBhcmFtZXRlcnMgYXJlIHJlbGV2YW50IG9ubHkgaWY6CiAgICAgICAgIyBwZXJmb3JtIGRyaWZ0IGFuYWx5c2lzIGlzIG5vdCBkaXNhYmxlZAogICAgICAgICMgYSBuZXcgbW9kZWwgZW5kcG9pbnQgcmVjb3JkIGlzIGdvaW5nIHRvIGJlIGdlbmVyYXRlZAogICAgICAgIG1vZGVsX2VuZHBvaW50X25hbWU6IHN0ciA9ICJiYXRjaC1pbmZlciIsCiAgICAgICAgbW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldDogVW5pb25bCiAgICAgICAgICAgIG1scnVuLkRhdGFJdGVtLCBsaXN0LCBkaWN0LCBwZC5EYXRhRnJhbWUsIHBkLlNlcmllcywgbnAubmRhcnJheQogICAgICAgIF0gPSBOb25lLAogICAgICAgICoqcHJlZGljdF9rd2FyZ3M6IERpY3Rbc3RyLCBBbnldLAopOgogICAgIiIiCiAgICBQZXJmb3JtIGEgcHJlZGljdGlvbiBvbiB0aGUgcHJvdmlkZWQgZGF0YXNldCB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGVsLgogICAgRW5zdXJlIHRoYXQgdGhlIG1vZGVsIGhhcyBhbHJlYWR5IGJlZW4gbG9nZ2VkIHVuZGVyIHRoZSBjdXJyZW50IHByb2plY3QuCgogICAgSWYgeW91IHdpc2ggdG8gYXBwbHkgbW9uaXRvcmluZyB0b29scyAoZS5nLiwgZHJpZnQgYW5hbHlzaXMpLCBzZXQgdGhlIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgcGFyYW1ldGVyIHRvIFRydWUuCiAgICBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50IHJlY29yZCB1bmRlciB0aGUgc3BlY2lmaWVkIG1vZGVsX2VuZHBvaW50X25hbWUuCiAgICBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IG1vZGVsIG1vbml0b3JpbmcgaXMgZW5hYmxlZCBhdCB0aGUgcHJvamVjdCBsZXZlbCBieSBjYWxsaW5nIHRoZQogICAgcHJvamVjdC5lbmFibGVfbW9kZWxfbW9uaXRvcmluZygpIGZ1bmN0aW9uLiBZb3UgY2FuIGFsc28gYXBwbHkgbW9uaXRvcmluZyB0byBhbiBleGlzdGluZyBtb2RlbCBieSBwcm92aWRpbmcgaXRzCiAgICBlbmRwb2ludCBpZCBvciBuYW1lLCBhbmQgdGhlIG1vbml0b3JpbmcgdG9vbHMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoYXQgZW5kcG9pbnQuCgogICAgQXQgdGhlIG1vbWVudCwgdGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIGBtbHJ1bj49MS41LjBgIHZlcnNpb25zLgoKICAgIDpwYXJhbSBjb250ZXh0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUnVuIGNvbnRleHQuCiAgICA6cGFyYW0gZGF0YXNldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YXNldCB0byBpbmZlciB0aHJvdWdoIHRoZSBtb2RlbC4gUHJvdmlkZWQgYXMgYW4gaW5wdXQgKERhdGFJdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCByZXByZXNlbnRzIERhdGFzZXQgYXJ0aWZhY3QgLyBGZWF0dXJlIHZlY3RvciBVUkkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1c2luZyBNTFJ1biBTREssIGBkYXRhc2V0YCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhcyBhIGxpc3QsIGRpY3Rpb25hcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXB5IGFycmF5LgogICAgOnBhcmFtIG1vZGVsX3BhdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwgc3RvcmUgdXJpIChzaG91bGQgc3RhcnQgd2l0aCBzdG9yZTovLykuIFByb3ZpZGVkIGFzIGFuIGlucHV0IChEYXRhSXRlbSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1c2luZyBNTFJ1biBTREssIGBtb2RlbF9wYXRoYCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhcyBhIHBhcmFtZXRlciAoc3RyaW5nKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGdlbmVyYXRlIGEgdmFsaWQgbW9kZWwgc3RvcmUgVVJJLCBwbGVhc2UgbG9nIHRoZSBtb2RlbCBiZWZvcmUgcnVubmluZyB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYGVuZHBvaW50X2lkYCBvZiBleGlzdGluZyBtb2RlbCBlbmRwb2ludCBpcyBwcm92aWRlZCwgbWFrZSBzdXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGl0IGhhcyBhIHNpbWlsYXIgbW9kZWwgc3RvcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSBkcmlmdCBhbmFseXNpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29uJ3QgYmUgdHJpZ2dlcmVkLgogICAgOnBhcmFtIGRyb3BfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgLyBpbnRlZ2VyIG9yIGEgbGlzdCBvZiBzdHJpbmdzIC8gaW50ZWdlcnMgdGhhdCByZXByZXNlbnQgdGhlIGNvbHVtbiBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBpbmRpY2VzIHRvIGRyb3AuIFdoZW4gdGhlIGRhdGFzZXQgaXMgYSBsaXN0IG9yIGEgbnVtcHkgYXJyYXkgdGhpcyBwYXJhbWV0ZXIgbXVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMuCiAgICA6cGFyYW0gbGFiZWxfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGxhYmVsKHMpIG9mIHRoZSBjb2x1bW4ocykgaW4gdGhlIGRhdGFzZXQgZm9yIFJlZ3Jlc3Npb24gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzaWZpY2F0aW9uIHRhc2tzLiBUaGUgbGFiZWwgY29sdW1uIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBtb2RlbCBvYmplY3QsIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSB2ZWN0b3IgcHJvdmlkZWQgaWYgYXZhaWxhYmxlLgogICAgOnBhcmFtIGZlYXR1cmVfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmZWF0dXJlIGNvbHVtbnMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIGRhdGFmcmFtZSB3aGVuIGRhdGFzZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdHlwZSBsaXN0IG9yIG51bXB5IGFycmF5LgogICAgOnBhcmFtIGxvZ19yZXN1bHRfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgV2hldGhlciB0byBsb2cgdGhlIHJlc3VsdCBzZXQgLSBhIERhdGFGcmFtZSBvZiB0aGUgZ2l2ZW4gaW5wdXRzIGNvbmNhdGVuYXRlZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJlZGljdGlvbnMuIERlZmF1bHRlZCB0byBUcnVlLgogICAgOnBhcmFtIHJlc3VsdF9zZXRfbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRiIGtleSB0byBzZXQgbmFtZSBvZiB0aGUgcHJlZGljdGlvbiByZXN1bHQgYW5kIHRoZSBmaWxlbmFtZS4gRGVmYXVsdGVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlZGljdGlvbicuCiAgICA6cGFyYW0gYmF0Y2hfaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSUQgb2YgdGhlIGdpdmVuIGJhdGNoIChpbmZlcmVuY2UgZGF0YXNldCkuIElmIGBOb25lYCwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxsIGJlIGxvZ2dlZCBhcyBhIHJlc3VsdCBvZiB0aGUgcnVuLgogICAgOnBhcmFtIGFydGlmYWN0c190YWc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFnIHRvIHVzZSBmb3IgcHJlZGljdGlvbiBzZXQgcmVzdWx0IGFydGlmYWN0LgogICAgOnBhcmFtIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXM6ICAgICAgICAgICAgICAgICAgV2hldGhlciB0byBwZXJmb3JtIGRyaWZ0IGFuYWx5c2lzIGJldHdlZW4gdGhlIHNhbXBsZSBzZXQgb2YgdGhlIG1vZGVsIG9iamVjdCB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgZ2l2ZW4uIEJ5IGRlZmF1bHQsIE5vbmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBkcmlmdCBhbmFseXNpcyBpZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGFscmVhZHkgaGFzIGZlYXR1cmUgc3RhdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBhcyBhIHJlZmVyZW5jZSBzYW1wbGUgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWluZyBkcmlmdCBhbmFseXNpcyBvbiBhIG5ldyBlbmRwb2ludCBpZCB3aWxsIGdlbmVyYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuCiAgICA6cGFyYW0gZW5kcG9pbnRfaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbCBlbmRwb2ludCB1bmlxdWUgSUQuIElmIGBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzYCB3YXMgc2V0LCB0aGUgZW5kcG9pbnRfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdXNlZCBlaXRoZXIgdG8gcGVyZm9ybSB0aGUgYW5hbHlzaXMgb24gZXhpc3RpbmcgbW9kZWwgZW5kcG9pbnQgb3IgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50IHJlY29yZC4KICAgIDpwYXJhbSBtb2RlbF9lbmRwb2ludF9uYW1lOiAgICAgICAgICAgICAgICAgICAgIElmIGEgbmV3IG1vZGVsIGVuZHBvaW50IGlzIGdlbmVyYXRlZCwgdGhlIG1vZGVsIG5hbWUgd2lsbCBiZSBwcmVzZW50ZWQgdW5kZXIgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuCiAgICA6cGFyYW0gbW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldDogICAgICAgICAgICAgICBBIHNhbXBsZSBkYXRhc2V0IHRvIGdpdmUgdG8gY29tcGFyZSB0aGUgaW5wdXRzIGluIHRoZSBkcmlmdCBhbmFseXNpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBwcm92aWRlZCBhcyBhbiBpbnB1dCAoRGF0YUl0ZW0pIG9yIGFzIGEgcGFyYW1ldGVyIChlLmcuIHN0cmluZywgbGlzdCwgRGF0YUZyYW1lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNob3NlbiBzYW1wbGUgc2V0IHdpbGwgYWx3YXlzIGJlIHRoZSBvbmUgd2hvIGlzIHNldCBpbiB0aGUgbW9kZWwgYXJ0aWZhY3QgaXRzZWxmLgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBpZiBib3RoIGBtb2RlbF9wYXRoYCBhbmQgYGVuZHBvaW50X2lkYCBhcmUgbm90IHByb3ZpZGVkCiAgICAiIiIKCiAgICAjIExvYWRpbmcgdGhlIG1vZGVsOgogICAgY29udGV4dC5sb2dnZXIuaW5mbyhmIkxvYWRpbmcgbW9kZWwuLi4iKQogICAgaWYgaXNpbnN0YW5jZShtb2RlbF9wYXRoLCBtbHJ1bi5EYXRhSXRlbSk6CiAgICAgICAgbW9kZWxfcGF0aCA9IG1vZGVsX3BhdGguYXJ0aWZhY3RfdXJsCiAgICBpZiBub3QgbWxydW4uZGF0YXN0b3JlLmlzX3N0b3JlX3VyaShtb2RlbF9wYXRoKToKICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgZiJUaGUgcHJvdmlkZWQgbW9kZWwgcGF0aCAoe21vZGVsX3BhdGh9KSBpcyBpbnZhbGlkIC0gc2hvdWxkIHN0YXJ0IHdpdGggYHN0b3JlOi8vYC4gIgogICAgICAgICAgICBmIlBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBsb2dnZWQgdGhlIG1vZGVsIHVzaW5nIGBwcm9qZWN0LmxvZ19tb2RlbCgpYCAiCiAgICAgICAgICAgIGYid2hpY2ggZ2VuZXJhdGVzIGEgdW5pcXVlIHN0b3JlIHVyaSBmb3IgdGhlIGxvZ2dlZCBtb2RlbC4iCiAgICAgICAgKQogICAgbW9kZWxfaGFuZGxlciA9IEF1dG9NTFJ1bi5sb2FkX21vZGVsKG1vZGVsX3BhdGg9bW9kZWxfcGF0aCwgY29udGV4dD1jb250ZXh0KQoKICAgIGlmIGxhYmVsX2NvbHVtbnMgaXMgTm9uZToKICAgICAgICBsYWJlbF9jb2x1bW5zID0gWwogICAgICAgICAgICBvdXRwdXQubmFtZSBmb3Igb3V0cHV0IGluIG1vZGVsX2hhbmRsZXIuX21vZGVsX2FydGlmYWN0LnNwZWMub3V0cHV0cwogICAgICAgIF0KCiAgICBpZiBmZWF0dXJlX2NvbHVtbnMgaXMgTm9uZToKICAgICAgICBmZWF0dXJlX2NvbHVtbnMgPSBbCiAgICAgICAgICAgIGlucHV0Lm5hbWUgZm9yIGlucHV0IGluIG1vZGVsX2hhbmRsZXIuX21vZGVsX2FydGlmYWN0LnNwZWMuaW5wdXRzCiAgICAgICAgXQoKICAgICMgR2V0IGRhdGFzZXQgYnkgb2JqZWN0LCBVUkwgb3IgYnkgRmVhdHVyZVZlY3RvcjoKICAgIGNvbnRleHQubG9nZ2VyLmluZm8oZiJMb2FkaW5nIGRhdGEuLi4iKQogICAgeCwgbGFiZWxfY29sdW1ucyA9IG1scnVuLm1vZGVsX21vbml0b3JpbmcuYXBpLnJlYWRfZGF0YXNldF9hc19kYXRhZnJhbWUoCiAgICAgICAgZGF0YXNldD1kYXRhc2V0LAogICAgICAgIGZlYXR1cmVfY29sdW1ucz1mZWF0dXJlX2NvbHVtbnMsCiAgICAgICAgbGFiZWxfY29sdW1ucz1sYWJlbF9jb2x1bW5zLAogICAgICAgIGRyb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICApCgogICAgIyBQcmVkaWN0OgogICAgY29udGV4dC5sb2dnZXIuaW5mbyhmIkNhbGN1bGF0aW5nIHByZWRpY3Rpb24uLi4iKQogICAgeV9wcmVkID0gbW9kZWxfaGFuZGxlci5tb2RlbC5wcmVkaWN0KHgsICoqcHJlZGljdF9rd2FyZ3MpCgogICAgIyBQcmVwYXJlIHRoZSByZXN1bHQgc2V0OgogICAgcmVzdWx0X3NldCA9IF9wcmVwYXJlX3Jlc3VsdF9zZXQoeD14LCBsYWJlbF9jb2x1bW5zPWxhYmVsX2NvbHVtbnMsIHlfcHJlZD15X3ByZWQpCgogICAgIyBDaGVjayBmb3IgbG9nZ2luZyB0aGUgcmVzdWx0IHNldDoKICAgIGlmIGxvZ19yZXN1bHRfc2V0OgogICAgICAgIG1scnVuLm1vZGVsX21vbml0b3JpbmcuYXBpLmxvZ19yZXN1bHQoCiAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCwKICAgICAgICAgICAgcmVzdWx0X3NldF9uYW1lPXJlc3VsdF9zZXRfbmFtZSwKICAgICAgICAgICAgcmVzdWx0X3NldD1yZXN1bHRfc2V0LAogICAgICAgICAgICBhcnRpZmFjdHNfdGFnPWFydGlmYWN0c190YWcsCiAgICAgICAgICAgIGJhdGNoX2lkPWJhdGNoX2lkLAogICAgICAgICkKCiAgICAjIENoZWNrIGZvciBwZXJmb3JtaW5nIGRyaWZ0IGFuYWx5c2lzCiAgICBpZiAoCiAgICAgICAgICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgaXMgTm9uZQogICAgICAgICAgICBhbmQgbW9kZWxfaGFuZGxlci5fbW9kZWxfYXJ0aWZhY3Quc3BlYy5mZWF0dXJlX3N0YXRzIGlzIG5vdCBOb25lCiAgICApOgogICAgICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgPSBUcnVlCiAgICBpZiBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzOgogICAgICAgIGNvbnRleHQubG9nZ2VyLmluZm8oIlBlcmZvcm1pbmcgZHJpZnQgYW5hbHlzaXMuLi4iKQogICAgICAgICMgR2V0IHRoZSBzYW1wbGUgc2V0IHN0YXRpc3RpY3MgKGVpdGhlciBmcm9tIHRoZSBzYW1wbGUgc2V0IG9yIGZyb20gdGhlIHN0YXRpc3RpY3MgbG9nZ2VkIHdpdGggdGhlIG1vZGVsKQogICAgICAgIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQgPSBfZ2V0X3NhbXBsZV9zZXRfc3RhdGlzdGljc19wYXJhbWV0ZXJzKAogICAgICAgICAgICBjb250ZXh0PWNvbnRleHQsCiAgICAgICAgICAgIG1vZGVsX2VuZHBvaW50X3NhbXBsZV9zZXQ9bW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldCwKICAgICAgICAgICAgbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0cz1tb2RlbF9oYW5kbGVyLl9tb2RlbF9hcnRpZmFjdC5zcGVjLmZlYXR1cmVfc3RhdHMsCiAgICAgICAgICAgIGZlYXR1cmVfY29sdW1ucz1mZWF0dXJlX2NvbHVtbnMsCiAgICAgICAgICAgIGRyb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnM9bGFiZWxfY29sdW1ucykKICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3MgPSBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzKCoqc3RhdGlzdGljc19pbnB1dF9maWx0ZXJlZCkKICAgICAgICBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5yZWNvcmRfcmVzdWx0cygKICAgICAgICAgICAgcHJvamVjdD1jb250ZXh0LnByb2plY3QsCiAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCwKICAgICAgICAgICAgZW5kcG9pbnRfaWQ9ZW5kcG9pbnRfaWQsCiAgICAgICAgICAgIG1vZGVsX3BhdGg9bW9kZWxfcGF0aCwKICAgICAgICAgICAgbW9kZWxfZW5kcG9pbnRfbmFtZT1tb2RlbF9lbmRwb2ludF9uYW1lLAogICAgICAgICAgICBpbmZlcl9yZXN1bHRzX2RmPXJlc3VsdF9zZXQuY29weSgpLAogICAgICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3M9c2FtcGxlX3NldF9zdGF0aXN0aWNzLAogICAgICAgICkK
+ origin_filename: ''
+ auto_build: false
+ default_handler: infer
+ image: mlrun/mlrun
+ disable_auto_mount: false
+ command: ''
+metadata:
+ tag: ''
+ categories:
+ - utils
+ - data-analysis
+ - monitoring
+ name: batch-inference-v2
diff --git a/functions/development/batch_inference_v2/2.6.0/src/item.yaml b/functions/development/batch_inference_v2/2.6.0/src/item.yaml
new file mode 100644
index 00000000..e995c770
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/item.yaml
@@ -0,0 +1,32 @@
+apiVersion: v1
+categories:
+- utils
+- data-analysis
+- monitoring
+description: Batch inference (also knows as prediction) for the common ML frameworks
+ (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.
+doc: ''
+example: batch_inference_v2.ipynb
+generationDate: 2023-08-07:12-25
+hidden: false
+icon: ''
+labels:
+ author: eyald
+maintainers: []
+marketplaceType: ''
+mlrunVersion: 1.7.0-rc51
+name: batch_inference_v2
+platformVersion: 3.6.0
+spec:
+ extra_spec:
+ allow_empty_resources: true
+ build:
+ auto_build: false
+ with_mlrun: false
+ filename: batch_inference_v2.py
+ handler: infer
+ image: mlrun/mlrun
+ kind: job
+ requirements: null
+url: ''
+version: 2.6.0
diff --git a/functions/development/batch_inference_v2/2.6.0/src/requirements.txt b/functions/development/batch_inference_v2/2.6.0/src/requirements.txt
new file mode 100644
index 00000000..c9fd306e
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/requirements.txt
@@ -0,0 +1,5 @@
+numpy
+pandas
+scikit-learn
+plotly
+xgboost
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/src/test_batch_inference_v2.py b/functions/development/batch_inference_v2/2.6.0/src/test_batch_inference_v2.py
new file mode 100644
index 00000000..6fa657a0
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/src/test_batch_inference_v2.py
@@ -0,0 +1,255 @@
+# Copyright 2019 Iguazio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import os
+import pickle
+import time
+import uuid
+import numpy as np
+import pandas as pd
+import pytest
+from sklearn.datasets import make_classification
+from sklearn.tree import DecisionTreeClassifier
+import datetime
+from sklearn.model_selection import train_test_split
+from xgboost import XGBClassifier
+from mlrun.frameworks.sklearn import apply_mlrun
+from mlrun.projects import get_or_create_project
+import mlrun
+import mlrun.common.schemas
+from batch_inference_v2 import infer
+import shutil
+from mlrun.model_monitoring.api import get_or_create_model_endpoint
+REQUIRED_ENV_VARS = [
+ "MLRUN_DBPATH",
+ "V3IO_USERNAME",
+ "V3IO_API",
+ "V3IO_ACCESS_KEY",
+]
+
+def _validate_environment_variables() -> bool:
+ """
+ Checks that all required Environment variables are set.
+ """
+ environment_keys = os.environ.keys()
+ return all(key in environment_keys for key in REQUIRED_ENV_VARS)
+
+
+def generate_data(n_samples: int = 5000, n_features: int = 20):
+ # Generate a classification data:
+ x, y = make_classification(n_samples=n_samples, n_features=n_features, n_classes=2)
+
+ # Split the data into a training set and a prediction set:
+ x_train, x_prediction = x[: n_samples // 2], x[n_samples // 2:]
+ y_train = y[: n_samples // 2]
+
+ # Randomly drift some features:
+ x_prediction += np.random.uniform(
+ low=2, high=4, size=x_train.shape
+ ) * np.random.randint(low=0, high=2, size=x_train.shape[1], dtype=int)
+
+ # Initialize dataframes:
+ features = [f"feature_{i}" for i in range(n_features)]
+ training_set = pd.DataFrame(data=x_train, columns=features)
+ training_set.insert(
+ loc=n_features, column="target_label", value=y_train, allow_duplicates=True
+ )
+ prediction_set = pd.DataFrame(data=x_prediction, columns=features)
+
+ return training_set, prediction_set
+
+
+def train(training_set: pd.DataFrame):
+ # Get the data into x, y:
+ labels = pd.DataFrame(training_set["target_label"])
+ training_set.drop(columns=["target_label"], inplace=True)
+
+ # Initialize a model:
+ model = DecisionTreeClassifier()
+
+ # Apply MLRun:
+ apply_mlrun(model=model, model_name="model")
+
+ # Train:
+ model.fit(training_set, labels)
+
+
+def assert_batch_predict(n_features, batch_inference_run, with_monitoring=False, project_name="batch-infer-test"):
+ # Check the logged results:
+ assert "batch_id" in batch_inference_run.status.results
+ assert len(batch_inference_run.status.artifacts) == 1
+ assert len(batch_inference_run.artifact("prediction").as_df().columns) == n_features + 1
+ if with_monitoring:
+ # Check that the drift analysis was performed:
+ time.sleep(60)
+ # Retrieve the model endpoint
+ project = get_or_create_project(project_name)
+ endpoint = get_or_create_model_endpoint(project=project.name, model_endpoint_name="my_cool_endpoint")
+
+ # Validate that the artifacts were logged in the project
+ artifacts = project.list_artifacts(
+ labels={
+ "mlrun/producer-type": "model-monitoring-app",
+ "mlrun/app-name": "histogram-data-drift",
+ "mlrun/endpoint-id": endpoint.metadata.uid,
+ }
+ )
+
+ assert len(artifacts) == 2
+
+ # Validate that the model endpoint has been updated as expected
+ assert endpoint.status.current_stats
+ assert endpoint.status.drift_status
+
+
+@pytest.mark.skipif(
+ condition=not _validate_environment_variables(),
+ reason="Project's environment variables are not set",
+)
+def test_batch_predict():
+ project = get_or_create_project(
+ "batch-infer-test", context="./", user_project=True
+ )
+ # Configure test:
+ n_samples = 5000
+ n_features = 20
+
+ # Create the function and run:
+ test_function = mlrun.code_to_function(filename=__file__, kind="job")
+ generate_data_run = test_function.run(
+ handler="generate_data",
+ params={"n_samples": n_samples, "n_features": n_features},
+ returns=["training_set : dataset", "prediction_set : dataset"],
+ local=True,
+ )
+ train_run = test_function.run(
+ handler="train",
+ inputs={"training_set": generate_data_run.outputs["training_set"]},
+ local=True,
+ )
+
+ batch_predict_function = mlrun.import_function("function.yaml")
+ batch_inference_run = batch_predict_function.run(
+ handler="infer",
+ inputs={"dataset": generate_data_run.outputs["prediction_set"]},
+ params={
+ "model_path": train_run.outputs["model"],
+ "label_columns": "target_label",
+ "perform_drift_analysis": False,
+ },
+ local=True,
+ )
+
+ # Check the logged results:
+ assert_batch_predict(n_features=n_features, batch_inference_run=batch_inference_run)
+
+ # Enable model monitoring
+ project.set_model_monitoring_credentials(
+ endpoint_store_connection="v3io",
+ tsdb_connection="v3io",
+ stream_path="v3io")
+
+ # Deploy model monitoring infrastructure
+ project.enable_model_monitoring(wait_for_deployment=True, base_period=1)
+
+ # Wait until the monitoring application is triggered
+ import time
+ time.sleep(60)
+
+ # Check the logged results:
+ assert_batch_predict(n_features=n_features, batch_inference_run=batch_inference_run, with_monitoring=True)
+
+ # Clean resources
+ _delete_project(project=project.metadata.name)
+
+
+@pytest.mark.skipif(
+ condition=not _validate_environment_variables(),
+ reason="Project's environment variables are not set",
+)
+class TestBatchInferUnitTests:
+ @classmethod
+ def setup_class(cls):
+ cls.project_name = "batch-infer-v2-unit-test"
+ cls.infer_artifact_path = "./infer_test_result/"
+
+ def setup_method(self):
+ self.project = get_or_create_project(self.project_name)
+ current_datetime = datetime.datetime.now()
+ datetime_str = current_datetime.strftime("%Y%m%d_%H%M%S")
+ mlrun.runtimes.utils.global_context.set(None)
+ self.context = mlrun.get_or_create_ctx(datetime_str, project=self.project.metadata.name, upload_artifacts=True)
+ self.context.artifact_path = self.infer_artifact_path
+
+ def teardown_method(self):
+ mlrun.get_run_db().delete_project(
+ self.project.metadata.name,
+ deletion_strategy=mlrun.common.schemas.DeletionStrategy.cascade,
+ )
+ if os.path.exists(self.infer_artifact_path):
+ shutil.rmtree(self.infer_artifact_path)
+
+ def _get_model_endpoint_sample_set(self, sample_type, n_features: int = 20):
+ data = generate_data(n_samples=4, n_features=n_features)[0]
+ if sample_type == mlrun.DataItem:
+ artifact = self.project.log_dataset("infer_sample", df=data)
+ return artifact.to_dataitem()
+ elif sample_type == list:
+ return data.values.tolist()
+ elif sample_type == dict:
+ return data.to_dict(orient='list')
+ elif sample_type == pd.DataFrame:
+ return data
+ elif sample_type == np.ndarray:
+ return data.values
+
+ @pytest.mark.parametrize("sample_type", [mlrun.DataItem, list, dict, pd.DataFrame, np.ndarray])
+ def test_infer_sample_types(self, sample_type):
+ n_features = 10
+ training_set, prediction_set = generate_data(n_features=n_features)
+ clf = XGBClassifier(n_estimators=2, max_depth=2, learning_rate=1, objective="binary:logistic")
+ x, y = prediction_set, training_set['target_label']
+ x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, test_size=0.2, random_state=0)
+ clf.fit(x_train, y_train)
+ train_set_to_log = x_train.join(y_train)
+ model = self.project.log_model(f"model-{uuid.uuid4()}", body=pickle.dumps(clf),
+ model_file=f"model-{uuid.uuid4()}.pkl", framework="xgboost",
+ training_set=train_set_to_log, label_column="target_label")
+
+ dataset = self.project.log_dataset(f"dataset-{uuid.uuid4()}", df=x_test)
+ z_test = train_set_to_log * 5
+ model_endpoint_sample_set = self.project.log_dataset(f"model-endpoint-sample-set{uuid.uuid4()}", df=z_test)
+
+ sample = self._get_model_endpoint_sample_set(
+ sample_type=sample_type, n_features=n_features)
+ infer(context=self.context,
+ dataset=dataset.to_dataitem().as_df(), model_path=model.uri,
+ model_endpoint_sample_set=sample,
+ feature_columns=list(model_endpoint_sample_set.to_dataitem().as_df().columns),
+ label_columns="target_label",
+ model_endpoint_name=f"model-endpoint-name-{uuid.uuid4()}",
+ trigger_monitoring_job=True,
+ perform_drift_analysis=True)
+ # a workaround until ML-4636 will be solved.
+ batch_inference_run = self.project.list_runs(name=self.context.name).to_objects()[0]
+ mlrun.get_run_db().update_run(updates={"status.state": "completed"}, uid=batch_inference_run.uid())
+ assert_batch_predict(n_features=n_features, batch_inference_run=batch_inference_run, project_name=self.project_name)
+
+
+def _delete_project(project: str):
+ mlrun.get_run_db().delete_project(
+ project,
+ deletion_strategy=mlrun.common.schemas.DeletionStrategy.cascading,
+ )
diff --git a/functions/development/batch_inference_v2/2.6.0/static/batch_inference_v2.html b/functions/development/batch_inference_v2/2.6.0/static/batch_inference_v2.html
new file mode 100644
index 00000000..f3639fc8
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/batch_inference_v2.html
@@ -0,0 +1,393 @@
+
+
+
+
+
+
+
+batch_inference_v2.batch_inference_v2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle navigation sidebar
+
+
+
+
+Toggle in-page Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Source code for batch_inference_v2.batch_inference_v2
+# Copyright 2023 Iguazio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from inspect import signature
+from typing import Any , Dict , List , Union , Optional
+import mlrun
+
+try :
+ import mlrun.model_monitoring.api
+except ModuleNotFoundError :
+ raise mlrun . errors . MLRunNotFoundError (
+ f "Please update your `mlrun` version to >=1.5.0 or use an "
+ f "older version of the batch inference function."
+ )
+
+import numpy as np
+import pandas as pd
+from mlrun.frameworks.auto_mlrun import AutoMLRun
+
+
+def _prepare_result_set ( x : pd . DataFrame , label_columns : List [ str ], y_pred : np . ndarray ) -> pd . DataFrame :
+ """
+ Set default label column names and validate given names to prepare the result set - a concatenation of the inputs
+ (x) and the model predictions (y_pred).
+
+ :param x: The inputs.
+ :param label_columns: A list of strings representing the target column names to add to the predictions. Default name
+ will be used in case the list is empty (predicted_label_{i}).
+ :param y_pred: The model predictions on the inputs.
+
+ :returns: The result set.
+
+ raises MLRunInvalidArgumentError: If the labels columns amount do not match the outputs or if one of the label
+ column already exists in the dataset.
+ """
+ # Prepare default target columns names if not provided:
+ prediction_columns_amount = 1 if len ( y_pred . shape ) == 1 else y_pred . shape [ 1 ]
+ if len ( label_columns ) == 0 :
+ # Add default label column names:
+ if prediction_columns_amount == 1 :
+ label_columns = [ "predicted_label" ]
+ else :
+ label_columns = [
+ f "predicted_label_ { i } " for i in range ( prediction_columns_amount )
+ ]
+
+ # Validate the label columns:
+ if prediction_columns_amount != len ( label_columns ):
+ # No equality between provided label column names and outputs amount:
+ raise mlrun . errors . MLRunInvalidArgumentError (
+ f "The number of predicted labels: { prediction_columns_amount } "
+ f "is not equal to the given label columns: { len ( label_columns ) } "
+ )
+ common_labels = set ( label_columns ) & set ( x . columns . tolist ())
+ if common_labels :
+ # Label column exist in the original inputs:
+ raise mlrun . errors . MLRunInvalidArgumentError (
+ f "The labels: { common_labels } are already existed in the given dataset."
+ )
+
+ return pd . concat (
+ [ x , pd . DataFrame ( y_pred , columns = label_columns , index = x . index )], axis = 1
+ )
+
+
+def _get_sample_set_statistics_parameters ( context : mlrun . MLClientCtx ,
+ model_endpoint_sample_set : Union [
+ mlrun . DataItem , list , dict , pd . DataFrame , pd . Series , np . ndarray ],
+ model_artifact_feature_stats : dict ,
+ feature_columns : Optional [ List ],
+ drop_columns : Optional [ List ],
+ label_columns : Optional [ List ]) -> Dict [ str , Any ]:
+ statics_input_full_dict = dict ( sample_set = model_endpoint_sample_set ,
+ model_artifact_feature_stats = model_artifact_feature_stats ,
+ sample_set_columns = feature_columns ,
+ sample_set_drop_columns = drop_columns ,
+ sample_set_label_columns = label_columns )
+ get_sample_statics_function = mlrun . model_monitoring . api . get_sample_set_statistics
+ statics_function_input_dict = signature ( get_sample_statics_function ) . parameters
+ # As a result of changes to input parameters in the mlrun-get_sample_set_statistics function,
+ # we will now send only the parameters it expects.
+ statistics_input_filtered = { key : statics_input_full_dict [ key ] for key in statics_function_input_dict }
+ if len ( statistics_input_filtered ) != len ( statics_function_input_dict ):
+ context . logger . warning ( f "get_sample_set_statistics is in an older version; "
+ "some parameters will not be sent to the function."
+ f " Expected input: { list ( statics_function_input_dict . keys ()) } ,"
+ f " actual input: { list ( statistics_input_filtered . keys ()) } " )
+ return statistics_input_filtered
+
+
+[docs] def infer (
+
context : mlrun . MLClientCtx ,
+
dataset : Union [ mlrun . DataItem , list , dict , pd . DataFrame , pd . Series , np . ndarray ],
+
model_path : Union [ str , mlrun . DataItem ],
+
drop_columns : Union [ str , List [ str ], int , List [ int ]] = None ,
+
label_columns : Union [ str , List [ str ]] = None ,
+
feature_columns : Union [ str , List [ str ]] = None ,
+
log_result_set : bool = True ,
+
result_set_name : str = "prediction" ,
+
batch_id : str = None ,
+
artifacts_tag : str = "" ,
+
# Drift analysis parameters
+
perform_drift_analysis : bool = None ,
+
endpoint_id : str = "" ,
+
# The following model endpoint parameters are relevant only if:
+
# perform drift analysis is not disabled
+
# a new model endpoint record is going to be generated
+
model_endpoint_name : str = "batch-infer" ,
+
model_endpoint_sample_set : Union [
+
mlrun . DataItem , list , dict , pd . DataFrame , pd . Series , np . ndarray
+
] = None ,
+
** predict_kwargs : Dict [ str , Any ],
+
):
+
"""
+
Perform a prediction on the provided dataset using the specified model.
+
Ensure that the model has already been logged under the current project.
+
+
If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis parameter to True.
+
This will create a new model endpoint record under the specified model_endpoint_name.
+
Additionally, ensure that model monitoring is enabled at the project level by calling the
+
project.enable_model_monitoring() function. You can also apply monitoring to an existing model by providing its
+
endpoint id or name, and the monitoring tools will be applied to that endpoint.
+
+
At the moment, this function is supported for `mlrun>=1.5.0` versions.
+
+
:param context: MLRun context.
+
:param dataset: The dataset to infer through the model. Provided as an input (DataItem)
+
that represents Dataset artifact / Feature vector URI.
+
If using MLRun SDK, `dataset` can also be provided as a list, dictionary or
+
numpy array.
+
:param model_path: Model store uri (should start with store://). Provided as an input (DataItem).
+
If using MLRun SDK, `model_path` can also be provided as a parameter (string).
+
To generate a valid model store URI, please log the model before running this function.
+
If `endpoint_id` of existing model endpoint is provided, make sure
+
that it has a similar model store path, otherwise the drift analysis
+
won't be triggered.
+
:param drop_columns: A string / integer or a list of strings / integers that represent the column names
+
/ indices to drop. When the dataset is a list or a numpy array this parameter must
+
be represented by integers.
+
:param label_columns: The target label(s) of the column(s) in the dataset for Regression or
+
Classification tasks. The label column can be accessed from the model object, or
+
the feature vector provided if available.
+
:param feature_columns: List of feature columns that will be used to build the dataframe when dataset is
+
from type list or numpy array.
+
:param log_result_set: Whether to log the result set - a DataFrame of the given inputs concatenated with
+
the predictions. Defaulted to True.
+
:param result_set_name: The db key to set name of the prediction result and the filename. Defaulted to
+
'prediction'.
+
:param batch_id: The ID of the given batch (inference dataset). If `None`, it will be generated.
+
Will be logged as a result of the run.
+
:param artifacts_tag: Tag to use for prediction set result artifact.
+
:param perform_drift_analysis: Whether to perform drift analysis between the sample set of the model object to the
+
dataset given. By default, None, which means it will perform drift analysis if the
+
model already has feature stats that are considered as a reference sample set.
+
Performing drift analysis on a new endpoint id will generate a new model endpoint
+
record.
+
:param endpoint_id: Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id
+
will be used either to perform the analysis on existing model endpoint or to
+
generate a new model endpoint record.
+
:param model_endpoint_name: If a new model endpoint is generated, the model name will be presented under this
+
endpoint.
+
:param model_endpoint_sample_set: A sample dataset to give to compare the inputs in the drift analysis.
+
Can be provided as an input (DataItem) or as a parameter (e.g. string, list, DataFrame).
+
The default chosen sample set will always be the one who is set in the model artifact itself.
+
+
raises MLRunInvalidArgumentError: if both `model_path` and `endpoint_id` are not provided
+
"""
+
+
# Loading the model:
+
context . logger . info ( f "Loading model..." )
+
if isinstance ( model_path , mlrun . DataItem ):
+
model_path = model_path . artifact_url
+
if not mlrun . datastore . is_store_uri ( model_path ):
+
raise mlrun . errors . MLRunInvalidArgumentError (
+
f "The provided model path ( { model_path } ) is invalid - should start with `store://`. "
+
f "Please make sure that you have logged the model using `project.log_model()` "
+
f "which generates a unique store uri for the logged model."
+
)
+
model_handler = AutoMLRun . load_model ( model_path = model_path , context = context )
+
+
if label_columns is None :
+
label_columns = [
+
output . name for output in model_handler . _model_artifact . spec . outputs
+
]
+
+
if feature_columns is None :
+
feature_columns = [
+
input . name for input in model_handler . _model_artifact . spec . inputs
+
]
+
+
# Get dataset by object, URL or by FeatureVector:
+
context . logger . info ( f "Loading data..." )
+
x , label_columns = mlrun . model_monitoring . api . read_dataset_as_dataframe (
+
dataset = dataset ,
+
feature_columns = feature_columns ,
+
label_columns = label_columns ,
+
drop_columns = drop_columns ,
+
)
+
+
# Predict:
+
context . logger . info ( f "Calculating prediction..." )
+
y_pred = model_handler . model . predict ( x , ** predict_kwargs )
+
+
# Prepare the result set:
+
result_set = _prepare_result_set ( x = x , label_columns = label_columns , y_pred = y_pred )
+
+
# Check for logging the result set:
+
if log_result_set :
+
mlrun . model_monitoring . api . log_result (
+
context = context ,
+
result_set_name = result_set_name ,
+
result_set = result_set ,
+
artifacts_tag = artifacts_tag ,
+
batch_id = batch_id ,
+
)
+
+
# Check for performing drift analysis
+
if (
+
perform_drift_analysis is None
+
and model_handler . _model_artifact . spec . feature_stats is not None
+
):
+
perform_drift_analysis = True
+
if perform_drift_analysis :
+
context . logger . info ( "Performing drift analysis..." )
+
# Get the sample set statistics (either from the sample set or from the statistics logged with the model)
+
statistics_input_filtered = _get_sample_set_statistics_parameters (
+
context = context ,
+
model_endpoint_sample_set = model_endpoint_sample_set ,
+
model_artifact_feature_stats = model_handler . _model_artifact . spec . feature_stats ,
+
feature_columns = feature_columns ,
+
drop_columns = drop_columns ,
+
label_columns = label_columns )
+
sample_set_statistics = mlrun . model_monitoring . api . get_sample_set_statistics ( ** statistics_input_filtered )
+
mlrun . model_monitoring . api . record_results (
+
project = context . project ,
+
context = context ,
+
endpoint_id = endpoint_id ,
+
model_path = model_path ,
+
model_endpoint_name = model_endpoint_name ,
+
infer_results_df = result_set . copy (),
+
sample_set_statistics = sample_set_statistics ,
+
)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/static/documentation.html b/functions/development/batch_inference_v2/2.6.0/static/documentation.html
new file mode 100644
index 00000000..4a3120a0
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/documentation.html
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+batch_inference_v2 package
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle navigation sidebar
+
+
+
+
+Toggle in-page Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
batch_inference_v2 package
+
+
+
+
+
+
+batch_inference_v2 package
+
+
+batch_inference_v2.batch_inference_v2 module
+
+
+batch_inference_v2.batch_inference_v2. infer ( context : mlrun.execution.MLClientCtx , dataset : Union [ mlrun.datastore.base.DataItem , list , dict , pandas.core.frame.DataFrame , pandas.core.series.Series , numpy.ndarray ] , model_path : Union [ str , mlrun.datastore.base.DataItem ] , drop_columns : Optional [ Union [ str , List [ str ] , int , List [ int ] ] ] = None , label_columns : Optional [ Union [ str , List [ str ] ] ] = None , feature_columns : Optional [ Union [ str , List [ str ] ] ] = None , log_result_set : bool = True , result_set_name : str = 'prediction' , batch_id : Optional [ str ] = None , artifacts_tag : str = '' , perform_drift_analysis : Optional [ bool ] = None , endpoint_id : str = '' , model_endpoint_name : str = 'batch-infer' , model_endpoint_sample_set : Optional [ Union [ mlrun.datastore.base.DataItem , list , dict , pandas.core.frame.DataFrame , pandas.core.series.Series , numpy.ndarray ] ] = None , ** predict_kwargs : Dict [ str , Any ] ) [source]
+Perform a prediction on the provided dataset using the specified model.
+Ensure that the model has already been logged under the current project.
+If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis parameter to True.
+This will create a new model endpoint record under the specified model_endpoint_name.
+Additionally, ensure that model monitoring is enabled at the project level by calling the
+project.enable_model_monitoring() function. You can also apply monitoring to an existing model by providing its
+endpoint id or name, and the monitoring tools will be applied to that endpoint.
+At the moment, this function is supported for mlrun>=1.5.0 versions.
+
+Parameters
+
+context – MLRun context.
+dataset – The dataset to infer through the model. Provided as an input (DataItem)
+that represents Dataset artifact / Feature vector URI.
+If using MLRun SDK, dataset can also be provided as a list, dictionary or
+numpy array.
+model_path – Model store uri (should start with store://). Provided as an input (DataItem).
+If using MLRun SDK, model_path can also be provided as a parameter (string).
+To generate a valid model store URI, please log the model before running this function.
+If endpoint_id of existing model endpoint is provided, make sure
+that it has a similar model store path, otherwise the drift analysis
+won’t be triggered.
+drop_columns – A string / integer or a list of strings / integers that represent the column names
+/ indices to drop. When the dataset is a list or a numpy array this parameter must
+be represented by integers.
+label_columns – The target label(s) of the column(s) in the dataset for Regression or
+Classification tasks. The label column can be accessed from the model object, or
+the feature vector provided if available.
+feature_columns – List of feature columns that will be used to build the dataframe when dataset is
+from type list or numpy array.
+log_result_set – Whether to log the result set - a DataFrame of the given inputs concatenated with
+the predictions. Defaulted to True.
+result_set_name – The db key to set name of the prediction result and the filename. Defaulted to
+‘prediction’.
+batch_id – The ID of the given batch (inference dataset). If None , it will be generated.
+Will be logged as a result of the run.
+artifacts_tag – Tag to use for prediction set result artifact.
+perform_drift_analysis – Whether to perform drift analysis between the sample set of the model object to the
+dataset given. By default, None, which means it will perform drift analysis if the
+model already has feature stats that are considered as a reference sample set.
+Performing drift analysis on a new endpoint id will generate a new model endpoint
+record.
+endpoint_id – Model endpoint unique ID. If perform_drift_analysis was set, the endpoint_id
+will be used either to perform the analysis on existing model endpoint or to
+generate a new model endpoint record.
+model_endpoint_name – If a new model endpoint is generated, the model name will be presented under this
+endpoint.
+model_endpoint_sample_set – A sample dataset to give to compare the inputs in the drift analysis.
+Can be provided as an input (DataItem) or as a parameter (e.g. string, list, DataFrame).
+The default chosen sample set will always be the one who is set in the model artifact itself.
+
+
+
+raises MLRunInvalidArgumentError: if both model_path and endpoint_id are not provided
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/static/example.html b/functions/development/batch_inference_v2/2.6.0/static/example.html
new file mode 100644
index 00000000..91bf1f3d
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/example.html
@@ -0,0 +1,2312 @@
+
+
+
+
+
+
+
+Batch Inference V2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Toggle navigation sidebar
+
+
+
+
+Toggle in-page Table of Contents
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Batch Inference V2
+
+
+
+
+
+
+Batch Inference V2
+A function for inferring given input through a given model while producing a Result Set and applying monitoring analysis.
+In this notebook we will go over the function’s docs and outputs and see an end-to-end example of running it.
+
+Documentation
+Results Prediction
+End-to-end Demo
+Data Drift Analysis
+
+
+
+1. Documentation
+Perform a prediction on a given dataset with the given model. Using the default histogram data drift application, can perform drift analysis between the sample set
+statistics stored in the model to the current input data. The drift rule in this case is the value per-feature mean of the TVD
+and Hellinger scores. When §, this function
+either creates or update an existing model endpoint record (depends on the provided endpoint_id
).
+At the moment, this function is supported for mlrun>=1.5.0
versions.
+
+1.1. Parameters:
+
+1.1.1 Batch Infer Parameters:
+
+context : mlrun.MLClientCtx
+An MLRun context.
+
+dataset : Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray]
+The dataset to infer through the model.
+
+Can be passed in inputs
as a dataset artifact / Feature vector URI.
+Or, in parameters
as a list, dictionary or numpy array.
+
+
+model_path : Union[str, mlrun.DataItem]
+Model store uri (should start with store://). Provided as an input (DataItem). To generate a valid model store URI, please log the model before running this function. If endpoint_id
of existing model endpoint is provided, make sure that it has a similar model store path, otherwise the drift analysis won’t be triggered.
+
+drop_columns : Union[str, List[str], int, List[int]]
= None
+A string / integer or a list of strings / integers that represent the column names / indices to drop. When the dataset is a list or a numpy array this parameter must be represented by integers.
+
+label_columns : Union[str, List[str]]
= None
+The target label(s) of the column(s) in the dataset. These names will be used as the column names for the predictions. The label column can be accessed from the model object, or the feature vector provided if available. The default name is "predicted_label_i"
for the i
column.
+
+feature_columns : Union[str, List[str]]
= None
+List of feature columns that will be used to build the dataframe when dataset is
+from type list or numpy array.
+
+log_result_set : str
= True
+Whether to log the result set - a DataFrame of the given inputs concatenated with the predictions. Defaulted to True
.
+
+result_set_name : str
= "prediction"
+The db key to set name of the prediction result and the filename. Defaulted to "prediction"
.
+
+batch_id : str
= None
+The ID of the given batch (inference dataset). If None
, it will be generated. Will be logged as a result of the run.
+
+artifacts_tag : str
= ""
+Tag to use for all the artifacts resulted from the function. Defaulted to no tag.
+
+
+
+
+1.1.2 Drift Analysis Parameters:
+
+perform_drift_analysis : bool
= None
+Whether to perform drift analysis between the sample set of the model object to the
+dataset given. By default, None, which means it will perform drift analysis if the
+model already has feature stats that are considered as a reference sample set.
+Performing drift analysis on a new endpoint id will generate a new model endpoint
+record.
+
+endpoint_id : str
= ""
+Model endpoint unique ID. If perform_drift_analysis
was set, the endpoint_id
+will be used either to perform the analysis on existing model endpoint or to
+generate a new model endpoint record.
+
+
+
+
+1.1.3 New Model Endpoint Parameters:
+
+model_endpoint_name : str
= "batch-infer"
+If a new model endpoint is generated, the model name will be presented under this endpoint.
+
+model_endpoint_sample_set : Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray]
= None
+A sample dataset to give to compare the inputs in the drift analysis. Can be provided as an input or as a parameter. The default chosen sample
+set will always be the one who is set in the model artifact itself.
+
+
+
+
+
+1.2. Outputs
+The outputs are split to two actions the functions can perform:
+
+For more details, see the next chapters.
+
+
+
+
+2. Results Prediction
+The result set is a concatenated dataset of the inputs ($X$) provided and the predictions ($Y$) yielded by the model, so it will be $X | Y$.
+For example, if the dataset
given as inputs was:
+
+
+x1
+x2
+x3
+x4
+x5
+
+
+
+…
+…
+…
+…
+…
+
+…
+…
+…
+…
+…
+
+…
+…
+…
+…
+…
+
+
+
+And the outputs yielded by the model’s prediction was:
+
+
+y1
+y2
+
+
+
+…
+…
+
+…
+…
+
+…
+…
+
+
+
+Then the result set will be:
+
+
+x1
+x2
+x3
+x4
+x5
+y1
+y2
+
+
+
+…
+…
+…
+…
+…
+…
+…
+
+…
+…
+…
+…
+…
+…
+…
+
+…
+…
+…
+…
+…
+…
+…
+
+
+
+In case the parameter log_result_set
is True
, the outputs of the results prediction will be:
+
+The result set as described above.
+The batch ID result - batch_id
: str
- a hashing result that is given by the user or generated randomly in case it was not provided to represent the batch that was being inferred.
+{
+ "batch_id" : "884a0cb00d8ae16d132dd8259aac29aa78f50a9245d0e4bd58cfbf77" ,
+}
+
+
+
+
+
+
+
+3. End-to-end Demo
+We will see an end-to-end example that follows the steps below:
+
+Generate data.
+Train a model.
+Infer data through the model using batch_predict
and review the outputs.
+
+
+3.1. Code review
+We are using a very simple example of training a decision tree on a binary classification problem. For that we wrote two functions:
+
+generate_data
- Generate a binary classification data. The data will be split into a training set and data for prediction . The data for prediction will be drifted in half of its features to showcase the plot later on.
+train
- Train a decision tree classifier on a given data.
+
+
+
+
+
> 2024-10-08 10:23:13,060 [info] Loading project from path: {"path":"./","project_name":"batch-infer-demo","user_project":false}
+> 2024-10-08 10:23:28,490 [info] Project loaded successfully: {"path":"./","project_name":"batch-infer-demo","stored_in_db":true}
+
+
+
+
+
+
+
+
+
+
+3.2. Run the Example with MLRun
+First, we will prepare our MLRun functions:
+
+We will use mlrun.code_to_function
to turn this demo notebook into an MLRun function we can run.
+We will use mlrun.import_function
to import the batch_predict
function .
+
+
+Now, we will follow the demo steps as discussed above:
+
+
+
+
> 2024-10-08 10:23:40,584 [error] error getting build status: details: MLRunNotFoundError('Function tag not found batch-infer-demo/batch-inference-demo'), caused by: 404 Client Error: Not Found for url: http://mlrun-api:8080/api/v1/build/status?name=batch-inference-demo&project=batch-infer-demo&tag=&logs=no&offset=0&last_log_timestamp=0.0&verbose=no
+> 2024-10-08 10:23:40,586 [info] Storing function: {"db":"http://mlrun-api:8080","name":"batch-inference-demo-generate-data","uid":"4f68ba3fd9084e3e941ab3872ceb3635"}
+> 2024-10-08 10:23:40,881 [info] Job is running in the background, pod: batch-inference-demo-generate-data-52w8s
+> 2024-10-08 10:23:46,954 [info] To track results use the CLI: {"info_cmd":"mlrun get run 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo","logs_cmd":"mlrun logs 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo"}
+> 2024-10-08 10:23:46,954 [info] Or click for UI: {"ui_url":"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/4f68ba3fd9084e3e941ab3872ceb3635/overview"}
+> 2024-10-08 10:23:46,955 [info] Run execution finished: {"name":"batch-inference-demo-generate-data","status":"completed"}
+
+
+
+
+
+
+
+
+
+project
+uid
+iter
+start
+state
+kind
+name
+labels
+inputs
+parameters
+results
+artifacts
+
+
+
+
+batch-infer-demo
+
+0
+Oct 08 10:23:44
+completed
+run
+batch-inference-demo-generate-data
+v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-demo-generate-data-52w8s
+
+
+
+training_set
prediction_set
+
+
+
+
+
+
+
+
+
+
+
> to track results use the .show() or .logs() methods or click here to open in UI > 2024-10-08 10:23:52,384 [info] Run execution finished: {"name":"batch-inference-demo-generate-data","status":"completed"}
+> 2024-10-08 10:23:52,434 [info] Storing function: {"db":"http://mlrun-api:8080","name":"batch-inference-demo-train","uid":"1102e4aea9424149837a81aa214b9489"}
+> 2024-10-08 10:23:52,714 [info] Job is running in the background, pod: batch-inference-demo-train-ldclf
+> 2024-10-08 10:23:58,683 [info] To track results use the CLI: {"info_cmd":"mlrun get run 1102e4aea9424149837a81aa214b9489 -p batch-infer-demo","logs_cmd":"mlrun logs 1102e4aea9424149837a81aa214b9489 -p batch-infer-demo"}
+> 2024-10-08 10:23:58,684 [info] Or click for UI: {"ui_url":"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/1102e4aea9424149837a81aa214b9489/overview"}
+> 2024-10-08 10:23:58,684 [info] Run execution finished: {"name":"batch-inference-demo-train","status":"completed"}
+
+
+
+
+
+
+
+
+
+project
+uid
+iter
+start
+state
+kind
+name
+labels
+inputs
+parameters
+results
+artifacts
+
+
+
+
+batch-infer-demo
+
+0
+Oct 08 10:23:56
+completed
+run
+batch-inference-demo-train
+v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-demo-train-ldclf
+training_set
+
+
+model
+
+
+
+
+
+
+
+
+
+
+
> to track results use the .show() or .logs() methods or click here to open in UI > 2024-10-08 10:24:01,923 [info] Run execution finished: {"name":"batch-inference-demo-train","status":"completed"}
+> 2024-10-08 10:24:01,953 [info] Storing function: {"db":"http://mlrun-api:8080","name":"batch-inference-v2-infer","uid":"27dd151299ff42bc9301ed268bab8b5b"}
+> 2024-10-08 10:24:02,241 [info] Job is running in the background, pod: batch-inference-v2-infer-lt4w9
+> 2024-10-08 10:24:06,348 [info] Loading model...
+> 2024-10-08 10:24:07,569 [info] Loading data...
+> 2024-10-08 10:24:07,631 [info] Calculating prediction...
+> 2024-10-08 10:24:07,636 [info] Logging result set (x | prediction)...
+> 2024-10-08 10:24:08,468 [info] To track results use the CLI: {"info_cmd":"mlrun get run 27dd151299ff42bc9301ed268bab8b5b -p batch-infer-demo","logs_cmd":"mlrun logs 27dd151299ff42bc9301ed268bab8b5b -p batch-infer-demo"}
+> 2024-10-08 10:24:08,469 [info] Or click for UI: {"ui_url":"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/27dd151299ff42bc9301ed268bab8b5b/overview"}
+> 2024-10-08 10:24:08,469 [info] Run execution finished: {"name":"batch-inference-v2-infer","status":"completed"}
+
+
+
+
+
+
+
+
+
+project
+uid
+iter
+start
+state
+kind
+name
+labels
+inputs
+parameters
+results
+artifacts
+
+
+
+
+batch-infer-demo
+
+0
+Oct 08 10:24:06
+completed
+run
+batch-inference-v2-infer
+v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-v2-infer-lt4w9
+dataset
+model_path=store://models/batch-infer-demo/model:latest@1102e4aea9424149837a81aa214b9489
label_columns=label
perform_drift_analysis=False
+batch_id=bdf589be041d04464671f41842278989c9f1ca72dcd5e3ed5cdf5495
+prediction
+
+
+
+
+
+
+
+
+
+
+
> to track results use the .show() or .logs() methods or click here to open in UI > 2024-10-08 10:24:12,530 [info] Run execution finished: {"name":"batch-inference-v2-infer","status":"completed"}
+
+
+
+
+
+
+3.3. Review Outputs
+We will review the outputs as explained in the notebook above.
+
+3.3.1. Results Prediction
+First we will showcase the Result Set . As we didn’t send any name, it’s default name will be "prediction"
:
+
+
+
+
+
+
+
+
+
+feature_0
+feature_1
+feature_2
+feature_3
+feature_4
+feature_5
+feature_6
+feature_7
+feature_8
+feature_9
+...
+feature_11
+feature_12
+feature_13
+feature_14
+feature_15
+feature_16
+feature_17
+feature_18
+feature_19
+label
+
+
+
+
+0
+6.301344
+0.270723
+0.810890
+1.916672
+1.480180
+-1.111209
+3.623056
+2.151706
+-0.581654
+0.469363
+...
+1.162767
+1.631004
+-0.382130
+1.307247
+-0.851273
+3.321264
+0.697387
+2.381824
+-0.070941
+1
+
+
+1
+1.482197
+-1.242443
+0.837535
+2.904502
+-1.605309
+0.632422
+2.955928
+-0.693749
+-0.326387
+-0.897179
+...
+4.941789
+4.033131
+-0.009700
+-0.585573
+-1.503230
+1.074927
+0.803923
+3.804727
+-0.028967
+0
+
+
+2
+3.493216
+0.731723
+-2.769300
+1.533892
+-1.341591
+2.544158
+2.855936
+0.826364
+-1.093561
+0.303124
+...
+0.848919
+1.783395
+-0.644753
+1.994629
+2.166190
+4.072446
+2.121466
+3.146668
+1.574255
+1
+
+
+3
+1.243322
+-1.185999
+1.510705
+2.280017
+-0.139123
+-1.333367
+4.703854
+-1.238155
+0.659352
+-0.514514
+...
+2.731269
+3.631489
+0.175608
+0.754273
+-0.783163
+4.356327
+0.350378
+3.347941
+-1.111401
+1
+
+
+4
+3.368511
+0.294880
+1.098486
+2.401271
+1.178792
+0.050650
+1.631508
+0.915017
+0.002918
+-0.217509
+...
+3.671178
+2.873755
+0.352395
+-1.290841
+-0.773709
+1.938640
+0.776364
+3.676751
+0.867656
+1
+
+
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+...
+
+
+2495
+2.006662
+-0.377155
+-0.674967
+3.425157
+0.774268
+-0.288493
+3.312510
+-0.935283
+0.898680
+1.028747
+...
+1.511337
+2.026637
+-1.371283
+-0.162678
+2.033294
+0.387519
+-1.778998
+4.347185
+0.066542
+0
+
+
+2496
+4.624801
+-0.435007
+-1.340297
+3.709764
+1.303919
+-0.913823
+2.927538
+1.808688
+-0.461729
+-0.309318
+...
+4.194667
+0.308783
+-0.455863
+0.333040
+0.302472
+0.571399
+-0.664472
+3.399752
+1.068366
+0
+
+
+2497
+5.299738
+1.273677
+-1.801943
+3.892334
+1.255739
+0.095366
+2.051728
+1.577475
+-0.348716
+0.714247
+...
+2.760161
+4.798985
+0.862472
+-1.737803
+1.263144
+3.620031
+-0.426575
+3.938336
+-0.700078
+1
+
+
+2498
+0.866703
+-1.056071
+1.670582
+2.334009
+-1.333572
+-0.048753
+2.157949
+-0.995259
+-0.026593
+1.162342
+...
+2.564957
+2.874556
+0.443551
+1.508644
+-1.702975
+4.317128
+-1.488132
+3.223802
+0.036243
+0
+
+
+2499
+2.827924
+-0.391928
+0.139046
+0.273091
+-1.208622
+-0.401865
+2.850371
+0.857199
+-1.050983
+1.923212
+...
+4.897142
+2.617614
+1.056777
+1.459342
+-0.002913
+2.095362
+0.309448
+3.965130
+-0.366275
+1
+
+
+
+
2500 rows × 21 columns
+
+
+
+
+
+
+
+4. Data Drift Analysis
+The data drift analysis in this demo is based on the histogram data drift application, and it is done per feature using two distance measure metrics for probability distributions.
+Let us mark our sample set as $S$ and our inputs as $I$. We will look at one feature $x$ out of $n$ features. Assuming the histograms of feature $x$ is split into 20 bins: $b_1,b_2,…,b_{20}$, we will match the feature $x$ histogram of the inputs $I$ ($x_I$) into the same bins (meaning to $x_S$) and compare their distributions using:
+
+Total Variance Distance: $TVD(x_S,x_I) = \frac{1}{2}\sum_{b_1}^{b_{20}} {|x_S - x_I|}$
+Hellinger Distance: $H(x_S,x_I) = \sqrt{1-{\sum_{b_1}^{b_{20}}\sqrt{x_S \cdot x_I}}}$
+
+Our rule then is calculating for each $x\in S: \frac{H(x_S,x_I)+TVD(x_S,x_I)}{2} < $ given thresholds.
+The outputs of the analysis will be:
+
+
+
+
+Count
+
+Mean
+
+Std
+
+Min
+
+Max
+
+Tvd
+Hellinger
+Kld
+Histograms
+
+
+
+
+Sample
+Input
+Sample
+Input
+Sample
+Input
+Sample
+Input
+Sample
+Input
+
+
+
+
+
+x1
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+
+x2
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+
+x3
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+…
+
+
+
+
+Features drift results - A rule metric per feature dictionary is saved in a json file named "features_drift_results"
where each key is a feature and its value is the feature’s metric value: Dict[str, float]
+{
+ "x1" : 0.12 ,
+ "x2" : 0.345 ,
+ "x3" : 0.00678 ,
+ ...
+}
+
+
+
+In addition, two results are being added to summarize the drift analysis:
+
+drift_status
: bool
- A boolean value indicating whether a drift was found.
+drift_metric
: float
- The mean of all the features drift metric value (the rule above):
+for $n$ features and metric rule $M(x_S,x_I)=\frac{H(x_S,x_I)+TVD(x_S,x_I)}{2}$, drift_metric
$=\frac{1}{n}\sum_{x\in S}M(x_S,x_I)$
+
+{
+ "drift_status" : True ,
+ "drift_metric" : 0.81234
+}
+
+
+
+
+
+
+4.1. Enable Model Monitoring
+To calculate data drift and generate artifact results, we first need to define the model monitoring configuration. Next, we will deploy the model monitoring infrastructure, which includes the default histogram-based data drift application.
+In this demo, we will use V3IO resources, but you can also provide your own. For more information on supported resources, please visit https://docs.mlrun.org/en/latest/model-monitoring/index.html#selecting-the-streaming-and-tsdb-platforms
+
+4.1.1 Set credentials and deploy model monitoring infrastructure
+
+
+
+
+
> 2024-10-08 10:24:25,053 [warning] enable_model_monitoring: 'base_period' < 10 minutes is not supported in production environments: {"project":"batch-infer-demo"}
+2024-10-08 10:24:30 (info) Deploying function
+2024-10-08 10:24:30 (info) Building
+2024-10-08 10:24:30 (info) Staging files and preparing base images
+2024-10-08 10:24:30 (warn) Using user provided base image, runtime interpreter version is provided by the base image
+2024-10-08 10:24:30 (info) Building processor image
+2024-10-08 10:26:01 (info) Build complete
+2024-10-08 10:26:11 (info) Function deploy complete
+2024-10-08 10:24:25 (info) Deploying function
+2024-10-08 10:24:25 (info) Building
+2024-10-08 10:24:25 (info) Staging files and preparing base images
+2024-10-08 10:24:25 (warn) Using user provided base image, runtime interpreter version is provided by the base image
+2024-10-08 10:24:25 (info) Building processor image
+2024-10-08 10:26:06 (info) Build complete
+2024-10-08 10:27:07 (info) Function deploy complete
+2024-10-08 10:24:26 (info) Deploying function
+2024-10-08 10:24:26 (info) Building
+2024-10-08 10:24:28 (info) Staging files and preparing base images
+2024-10-08 10:24:28 (warn) Using user provided base image, runtime interpreter version is provided by the base image
+2024-10-08 10:24:28 (info) Building processor image
+2024-10-08 10:26:01 (info) Build complete
+2024-10-08 10:26:10 (info) Function deploy complete
+2024-10-08 10:24:32 (info) Deploying function
+2024-10-08 10:24:32 (info) Building
+2024-10-08 10:24:32 (info) Staging files and preparing base images
+2024-10-08 10:24:32 (warn) Using user provided base image, runtime interpreter version is provided by the base image
+2024-10-08 10:24:32 (info) Building processor image
+2024-10-08 10:26:01 (info) Build complete
+2024-10-08 10:26:12 (info) Function deploy complete
+
+
+
+
+
+
+4.1.2 Rerun batch infer with model monitoring
+
+
+
+
> 2024-10-08 10:27:29,954 [info] Storing function: {"db":"http://mlrun-api:8080","name":"batch-inference-v2-infer","uid":"ca26cf51bb984354aa2b6c42540af1f7"}
+> 2024-10-08 10:27:30,317 [info] Job is running in the background, pod: batch-inference-v2-infer-qmszk
+> 2024-10-08 10:27:34,169 [info] Loading model...
+> 2024-10-08 10:27:35,237 [info] Loading data...
+> 2024-10-08 10:27:35,277 [info] Calculating prediction...
+> 2024-10-08 10:27:35,281 [info] Logging result set (x | prediction)...
+> 2024-10-08 10:27:35,773 [info] Performing drift analysis...
+> 2024-10-08 10:27:37,335 [info] Bumping model endpoint last request time (EP without serving): {"bumped_last_request":"2024-10-08T10:29:35.991331+00:00","current_request":"2024-10-08T10:27:35.991331+00:00","endpoint_id":"cc285767a39c0455d050a8c0d7b0421c19394aba","last_request":"2024-10-08T10:27:35.806824+00:00","project":"batch-infer-demo"}
+> 2024-10-08 10:27:37,586 [info] To track results use the CLI: {"info_cmd":"mlrun get run ca26cf51bb984354aa2b6c42540af1f7 -p batch-infer-demo","logs_cmd":"mlrun logs ca26cf51bb984354aa2b6c42540af1f7 -p batch-infer-demo"}
+> 2024-10-08 10:27:37,586 [info] Or click for UI: {"ui_url":"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/ca26cf51bb984354aa2b6c42540af1f7/overview"}
+> 2024-10-08 10:27:37,587 [info] Run execution finished: {"name":"batch-inference-v2-infer","status":"completed"}
+
+
+
+
+
+
+
+
+
+project
+uid
+iter
+start
+state
+kind
+name
+labels
+inputs
+parameters
+results
+artifacts
+
+
+
+
+batch-infer-demo
+
+0
+Oct 08 10:27:34
+completed
+run
+batch-inference-v2-infer
+v3io_user=eyald
kind=job
owner=eyald
mlrun/client_version=1.7.0-rc51
mlrun/client_python_version=3.9.18
host=batch-inference-v2-infer-qmszk
+dataset
+model_path=store://models/batch-infer-demo/model:latest@1102e4aea9424149837a81aa214b9489
label_columns=label
perform_drift_analysis=True
model_endpoint_name=my_cool_endpoint
+batch_id=286df90faa9d3edf774974db7b6d601c5412caad635bccb56e7e8598
+prediction
+
+
+
+
+
+
+
+
+
+
+
> to track results use the .show() or .logs() methods or click here to open in UI > 2024-10-08 10:27:41,580 [info] Run execution finished: {"name":"batch-inference-v2-infer","status":"completed"}
+
+
+
+
+
+
+
+4.2 Overview drift results
+Please note that all results are available in the UI, including time-based metrics and drift results for each model endpoint.
+
+4.2.1 List artifacts
+
+
+
+
+
+
+
[{'kind': 'plotly',
+ 'metadata': {'key': 'drift_table_plot',
+ 'project': 'batch-infer-demo',
+ 'iter': 0,
+ 'tree': '0f9bc30c-e223-4161-a4b3-7ea93a2b200d',
+ 'hash': 'a9cbb5cd3532a7de394134c94d7ffabcf337e25f',
+ 'uid': 'ffab65fdff6bfb6b1e53003f6f135a39d94933fc',
+ 'updated': '2024-10-08 10:29:12.088626+00:00',
+ 'labels': {'mlrun/runner-pod': 'nuclio-batch-infer-demo-histogram-data-drift-5bcfd66559-c58k5',
+ 'mlrun/producer-type': 'model-monitoring-app',
+ 'mlrun/app-name': 'histogram-data-drift',
+ 'mlrun/endpoint-id': 'cc285767a39c0455d050a8c0d7b0421c19394aba'},
+ 'created': '2024-10-08 10:29:12.088665+00:00',
+ 'tag': 'latest'},
+ 'spec': {'target_path': 'v3io:///projects/batch-infer-demo/artifacts/drift_table_plot.html',
+ 'viewer': 'plotly',
+ 'size': 4637273,
+ 'license': '',
+ 'producer': {'kind': 'project',
+ 'name': 'batch-infer-demo',
+ 'tag': '0f9bc30c-e223-4161-a4b3-7ea93a2b200d',
+ 'owner': 'eyald'},
+ 'format': 'html',
+ 'db_key': 'drift_table_plot'},
+ 'status': {'state': 'created'},
+ 'project': 'batch-infer-demo'},
+ {'kind': 'artifact',
+ 'metadata': {'key': 'features_drift_results',
+ 'project': 'batch-infer-demo',
+ 'iter': 0,
+ 'tree': '8636f959-4738-4c36-9e86-1fbb2a30cb7c',
+ 'hash': '8021f8f05337970dfaf19803f7c106efca3cefae',
+ 'uid': 'a0a361f92fb9aa0d70bf3c0b8373eeff97b8d86a',
+ 'updated': '2024-10-08 10:29:10.747465+00:00',
+ 'labels': {'mlrun/runner-pod': 'nuclio-batch-infer-demo-histogram-data-drift-5bcfd66559-c58k5',
+ 'mlrun/producer-type': 'model-monitoring-app',
+ 'mlrun/app-name': 'histogram-data-drift',
+ 'mlrun/endpoint-id': 'cc285767a39c0455d050a8c0d7b0421c19394aba'},
+ 'created': '2024-10-08 10:29:10.747499+00:00',
+ 'tag': 'latest'},
+ 'spec': {'target_path': 'v3io:///projects/batch-infer-demo/artifacts/features_drift_results.json',
+ 'size': 530,
+ 'license': '',
+ 'producer': {'kind': 'project',
+ 'name': 'batch-infer-demo',
+ 'tag': '8636f959-4738-4c36-9e86-1fbb2a30cb7c',
+ 'owner': 'eyald'},
+ 'format': 'json',
+ 'db_key': 'features_drift_results'},
+ 'status': {'state': 'created'},
+ 'project': 'batch-infer-demo'}]
+
+
+
+
+
+
+4.2.2 Plot artifacts
+
+
+
+
<IPython.core.display.JSON object>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/static/function.html b/functions/development/batch_inference_v2/2.6.0/static/function.html
new file mode 100644
index 00000000..f6938063
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/function.html
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+
+
+
+ Source
+
+
+
+
+
+
+kind: job
+verbose: false
+spec:
+ entry_points:
+ infer:
+ has_kwargs: true
+ lineno: 102
+ has_varargs: false
+ doc: 'Perform a prediction on the provided dataset using the specified model.
+
+ Ensure that the model has already been logged under the current project.
+
+
+ If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis
+ parameter to True.
+
+ This will create a new model endpoint record under the specified model_endpoint_name.
+
+ Additionally, ensure that model monitoring is enabled at the project level
+ by calling the
+
+ project.enable_model_monitoring() function. You can also apply monitoring
+ to an existing model by providing its
+
+ endpoint id or name, and the monitoring tools will be applied to that endpoint.
+
+
+ At the moment, this function is supported for `mlrun>=1.5.0` versions.'
+ parameters:
+ - name: context
+ type: MLClientCtx
+ doc: MLRun context.
+ - name: dataset
+ type: Union[DataItem, list, dict, DataFrame, Series, ndarray]
+ doc: The dataset to infer through the model. Provided as an input (DataItem)
+ that represents Dataset artifact / Feature vector URI. If using MLRun SDK,
+ `dataset` can also be provided as a list, dictionary or numpy array.
+ - name: model_path
+ type: Union[str, DataItem]
+ doc: Model store uri (should start with store://). Provided as an input (DataItem).
+ If using MLRun SDK, `model_path` can also be provided as a parameter (string).
+ To generate a valid model store URI, please log the model before running
+ this function. If `endpoint_id` of existing model endpoint is provided,
+ make sure that it has a similar model store path, otherwise the drift analysis
+ won't be triggered.
+ - name: drop_columns
+ type: Union[str, List[str], int, List[int]]
+ doc: A string / integer or a list of strings / integers that represent the
+ column names / indices to drop. When the dataset is a list or a numpy array
+ this parameter must be represented by integers.
+ default: null
+ - name: label_columns
+ type: Union[str, List[str]]
+ doc: The target label(s) of the column(s) in the dataset for Regression or
+ Classification tasks. The label column can be accessed from the model object,
+ or the feature vector provided if available.
+ default: null
+ - name: feature_columns
+ type: Union[str, List[str]]
+ doc: List of feature columns that will be used to build the dataframe when
+ dataset is from type list or numpy array.
+ default: null
+ - name: log_result_set
+ type: bool
+ doc: Whether to log the result set - a DataFrame of the given inputs concatenated
+ with the predictions. Defaulted to True.
+ default: true
+ - name: result_set_name
+ type: str
+ doc: The db key to set name of the prediction result and the filename. Defaulted
+ to 'prediction'.
+ default: prediction
+ - name: batch_id
+ type: str
+ doc: The ID of the given batch (inference dataset). If `None`, it will be
+ generated. Will be logged as a result of the run.
+ default: null
+ - name: artifacts_tag
+ type: str
+ doc: Tag to use for prediction set result artifact.
+ default: ''
+ - name: perform_drift_analysis
+ type: bool
+ doc: Whether to perform drift analysis between the sample set of the model
+ object to the dataset given. By default, None, which means it will perform
+ drift analysis if the model already has feature stats that are considered
+ as a reference sample set. Performing drift analysis on a new endpoint id
+ will generate a new model endpoint record.
+ default: null
+ - name: endpoint_id
+ type: str
+ doc: Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id
+ will be used either to perform the analysis on existing model endpoint or
+ to generate a new model endpoint record.
+ default: ''
+ - name: model_endpoint_name
+ type: str
+ doc: If a new model endpoint is generated, the model name will be presented
+ under this endpoint.
+ default: batch-infer
+ - name: model_endpoint_sample_set
+ type: Union[DataItem, list, dict, DataFrame, Series, ndarray]
+ doc: A sample dataset to give to compare the inputs in the drift analysis.
+ Can be provided as an input (DataItem) or as a parameter (e.g. string, list,
+ DataFrame). The default chosen sample set will always be the one who is
+ set in the model artifact itself.
+ default: null
+ name: infer
+ description: Batch inference (also knows as prediction) for the common ML frameworks
+ (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.
+ allow_empty_resources: true
+ build:
+ with_mlrun: false
+ code_origin: ''
+ functionSourceCode: IyBDb3B5cmlnaHQgMjAyMyBJZ3VhemlvCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgpmcm9tIGluc3BlY3QgaW1wb3J0IHNpZ25hdHVyZQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBVbmlvbiwgT3B0aW9uYWwKaW1wb3J0IG1scnVuCgp0cnk6CiAgICBpbXBvcnQgbWxydW4ubW9kZWxfbW9uaXRvcmluZy5hcGkKZXhjZXB0IE1vZHVsZU5vdEZvdW5kRXJyb3I6CiAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5Ob3RGb3VuZEVycm9yKAogICAgICAgIGYiUGxlYXNlIHVwZGF0ZSB5b3VyIGBtbHJ1bmAgdmVyc2lvbiB0byA+PTEuNS4wIG9yIHVzZSBhbiAiCiAgICAgICAgZiJvbGRlciB2ZXJzaW9uIG9mIHRoZSBiYXRjaCBpbmZlcmVuY2UgZnVuY3Rpb24uIgogICAgKQoKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBtbHJ1bi5mcmFtZXdvcmtzLmF1dG9fbWxydW4gaW1wb3J0IEF1dG9NTFJ1bgoKCmRlZiBfcHJlcGFyZV9yZXN1bHRfc2V0KHg6IHBkLkRhdGFGcmFtZSwgbGFiZWxfY29sdW1uczogTGlzdFtzdHJdLCB5X3ByZWQ6IG5wLm5kYXJyYXkpIC0+IHBkLkRhdGFGcmFtZToKICAgICIiIgogICAgU2V0IGRlZmF1bHQgbGFiZWwgY29sdW1uIG5hbWVzIGFuZCB2YWxpZGF0ZSBnaXZlbiBuYW1lcyB0byBwcmVwYXJlIHRoZSByZXN1bHQgc2V0IC0gYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBpbnB1dHMKICAgICh4KSBhbmQgdGhlIG1vZGVsIHByZWRpY3Rpb25zICh5X3ByZWQpLgoKICAgIDpwYXJhbSB4OiAgICAgICAgICAgICBUaGUgaW5wdXRzLgogICAgOnBhcmFtIGxhYmVsX2NvbHVtbnM6IEEgbGlzdCBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdGFyZ2V0IGNvbHVtbiBuYW1lcyB0byBhZGQgdG8gdGhlIHByZWRpY3Rpb25zLiBEZWZhdWx0IG5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgaW4gY2FzZSB0aGUgbGlzdCBpcyBlbXB0eSAocHJlZGljdGVkX2xhYmVsX3tpfSkuCiAgICA6cGFyYW0geV9wcmVkOiAgICAgICAgVGhlIG1vZGVsIHByZWRpY3Rpb25zIG9uIHRoZSBpbnB1dHMuCgogICAgOnJldHVybnM6IFRoZSByZXN1bHQgc2V0LgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBJZiB0aGUgbGFiZWxzIGNvbHVtbnMgYW1vdW50IGRvIG5vdCBtYXRjaCB0aGUgb3V0cHV0cyBvciBpZiBvbmUgb2YgdGhlIGxhYmVsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGF0YXNldC4KICAgICIiIgogICAgIyBQcmVwYXJlIGRlZmF1bHQgdGFyZ2V0IGNvbHVtbnMgbmFtZXMgaWYgbm90IHByb3ZpZGVkOgogICAgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCA9IDEgaWYgbGVuKHlfcHJlZC5zaGFwZSkgPT0gMSBlbHNlIHlfcHJlZC5zaGFwZVsxXQogICAgaWYgbGVuKGxhYmVsX2NvbHVtbnMpID09IDA6CiAgICAgICAgIyBBZGQgZGVmYXVsdCBsYWJlbCBjb2x1bW4gbmFtZXM6CiAgICAgICAgaWYgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCA9PSAxOgogICAgICAgICAgICBsYWJlbF9jb2x1bW5zID0gWyJwcmVkaWN0ZWRfbGFiZWwiXQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnMgPSBbCiAgICAgICAgICAgICAgICBmInByZWRpY3RlZF9sYWJlbF97aX0iIGZvciBpIGluIHJhbmdlKHByZWRpY3Rpb25fY29sdW1uc19hbW91bnQpCiAgICAgICAgICAgIF0KCiAgICAjIFZhbGlkYXRlIHRoZSBsYWJlbCBjb2x1bW5zOgogICAgaWYgcHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCAhPSBsZW4obGFiZWxfY29sdW1ucyk6CiAgICAgICAgIyBObyBlcXVhbGl0eSBiZXR3ZWVuIHByb3ZpZGVkIGxhYmVsIGNvbHVtbiBuYW1lcyBhbmQgb3V0cHV0cyBhbW91bnQ6CiAgICAgICAgcmFpc2UgbWxydW4uZXJyb3JzLk1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgIGYiVGhlIG51bWJlciBvZiBwcmVkaWN0ZWQgbGFiZWxzOiB7cHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudH0gIgogICAgICAgICAgICBmImlzIG5vdCBlcXVhbCB0byB0aGUgZ2l2ZW4gbGFiZWwgY29sdW1uczoge2xlbihsYWJlbF9jb2x1bW5zKX0iCiAgICAgICAgKQogICAgY29tbW9uX2xhYmVscyA9IHNldChsYWJlbF9jb2x1bW5zKSAmIHNldCh4LmNvbHVtbnMudG9saXN0KCkpCiAgICBpZiBjb21tb25fbGFiZWxzOgogICAgICAgICMgTGFiZWwgY29sdW1uIGV4aXN0IGluIHRoZSBvcmlnaW5hbCBpbnB1dHM6CiAgICAgICAgcmFpc2UgbWxydW4uZXJyb3JzLk1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgIGYiVGhlIGxhYmVsczoge2NvbW1vbl9sYWJlbHN9IGFyZSBhbHJlYWR5IGV4aXN0ZWQgaW4gdGhlIGdpdmVuIGRhdGFzZXQuIgogICAgICAgICkKCiAgICByZXR1cm4gcGQuY29uY2F0KAogICAgICAgIFt4LCBwZC5EYXRhRnJhbWUoeV9wcmVkLCBjb2x1bW5zPWxhYmVsX2NvbHVtbnMsIGluZGV4PXguaW5kZXgpXSwgYXhpcz0xCiAgICApCgoKZGVmIF9nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzX3BhcmFtZXRlcnMoY29udGV4dDogbWxydW4uTUxDbGllbnRDdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2VuZHBvaW50X3NhbXBsZV9zZXQ6IFVuaW9uWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWxydW4uRGF0YUl0ZW0sIGxpc3QsIGRpY3QsIHBkLkRhdGFGcmFtZSwgcGQuU2VyaWVzLCBucC5uZGFycmF5XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0czogZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZV9jb2x1bW5zOiBPcHRpb25hbFtMaXN0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcF9jb2x1bW5zOiBPcHRpb25hbFtMaXN0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxfY29sdW1uczogT3B0aW9uYWxbTGlzdF0pIC0+IERpY3Rbc3RyLCBBbnldOgogICAgc3RhdGljc19pbnB1dF9mdWxsX2RpY3QgPSBkaWN0KHNhbXBsZV9zZXQ9bW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9hcnRpZmFjdF9mZWF0dXJlX3N0YXRzPW1vZGVsX2FydGlmYWN0X2ZlYXR1cmVfc3RhdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3NldF9jb2x1bW5zPWZlYXR1cmVfY29sdW1ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVfc2V0X2Ryb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlX3NldF9sYWJlbF9jb2x1bW5zPWxhYmVsX2NvbHVtbnMpCiAgICBnZXRfc2FtcGxlX3N0YXRpY3NfZnVuY3Rpb24gPSBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzCiAgICBzdGF0aWNzX2Z1bmN0aW9uX2lucHV0X2RpY3QgPSBzaWduYXR1cmUoZ2V0X3NhbXBsZV9zdGF0aWNzX2Z1bmN0aW9uKS5wYXJhbWV0ZXJzCiAgICAjICBBcyBhIHJlc3VsdCBvZiBjaGFuZ2VzIHRvIGlucHV0IHBhcmFtZXRlcnMgaW4gdGhlIG1scnVuLWdldF9zYW1wbGVfc2V0X3N0YXRpc3RpY3MgZnVuY3Rpb24sCiAgICAjICB3ZSB3aWxsIG5vdyBzZW5kIG9ubHkgdGhlIHBhcmFtZXRlcnMgaXQgZXhwZWN0cy4KICAgIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQgPSB7a2V5OiBzdGF0aWNzX2lucHV0X2Z1bGxfZGljdFtrZXldIGZvciBrZXkgaW4gc3RhdGljc19mdW5jdGlvbl9pbnB1dF9kaWN0fQogICAgaWYgbGVuKHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQpICE9IGxlbihzdGF0aWNzX2Z1bmN0aW9uX2lucHV0X2RpY3QpOgogICAgICAgIGNvbnRleHQubG9nZ2VyLndhcm5pbmcoZiJnZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzIGlzIGluIGFuIG9sZGVyIHZlcnNpb247ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21lIHBhcmFtZXRlcnMgd2lsbCBub3QgYmUgc2VudCB0byB0aGUgZnVuY3Rpb24uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiIgRXhwZWN0ZWQgaW5wdXQ6IHtsaXN0KHN0YXRpY3NfZnVuY3Rpb25faW5wdXRfZGljdC5rZXlzKCkpfSwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmIiBhY3R1YWwgaW5wdXQ6IHtsaXN0KHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQua2V5cygpKX0iKQogICAgcmV0dXJuIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQKCgpkZWYgaW5mZXIoCiAgICAgICAgY29udGV4dDogbWxydW4uTUxDbGllbnRDdHgsCiAgICAgICAgZGF0YXNldDogVW5pb25bbWxydW4uRGF0YUl0ZW0sIGxpc3QsIGRpY3QsIHBkLkRhdGFGcmFtZSwgcGQuU2VyaWVzLCBucC5uZGFycmF5XSwKICAgICAgICBtb2RlbF9wYXRoOiBVbmlvbltzdHIsIG1scnVuLkRhdGFJdGVtXSwKICAgICAgICBkcm9wX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdLCBpbnQsIExpc3RbaW50XV0gPSBOb25lLAogICAgICAgIGxhYmVsX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdXSA9IE5vbmUsCiAgICAgICAgZmVhdHVyZV9jb2x1bW5zOiBVbmlvbltzdHIsIExpc3Rbc3RyXV0gPSBOb25lLAogICAgICAgIGxvZ19yZXN1bHRfc2V0OiBib29sID0gVHJ1ZSwKICAgICAgICByZXN1bHRfc2V0X25hbWU6IHN0ciA9ICJwcmVkaWN0aW9uIiwKICAgICAgICBiYXRjaF9pZDogc3RyID0gTm9uZSwKICAgICAgICBhcnRpZmFjdHNfdGFnOiBzdHIgPSAiIiwKICAgICAgICAjIERyaWZ0IGFuYWx5c2lzIHBhcmFtZXRlcnMKICAgICAgICBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzOiBib29sID0gTm9uZSwKICAgICAgICBlbmRwb2ludF9pZDogc3RyID0gIiIsCiAgICAgICAgIyBUaGUgZm9sbG93aW5nIG1vZGVsIGVuZHBvaW50IHBhcmFtZXRlcnMgYXJlIHJlbGV2YW50IG9ubHkgaWY6CiAgICAgICAgIyBwZXJmb3JtIGRyaWZ0IGFuYWx5c2lzIGlzIG5vdCBkaXNhYmxlZAogICAgICAgICMgYSBuZXcgbW9kZWwgZW5kcG9pbnQgcmVjb3JkIGlzIGdvaW5nIHRvIGJlIGdlbmVyYXRlZAogICAgICAgIG1vZGVsX2VuZHBvaW50X25hbWU6IHN0ciA9ICJiYXRjaC1pbmZlciIsCiAgICAgICAgbW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldDogVW5pb25bCiAgICAgICAgICAgIG1scnVuLkRhdGFJdGVtLCBsaXN0LCBkaWN0LCBwZC5EYXRhRnJhbWUsIHBkLlNlcmllcywgbnAubmRhcnJheQogICAgICAgIF0gPSBOb25lLAogICAgICAgICoqcHJlZGljdF9rd2FyZ3M6IERpY3Rbc3RyLCBBbnldLAopOgogICAgIiIiCiAgICBQZXJmb3JtIGEgcHJlZGljdGlvbiBvbiB0aGUgcHJvdmlkZWQgZGF0YXNldCB1c2luZyB0aGUgc3BlY2lmaWVkIG1vZGVsLgogICAgRW5zdXJlIHRoYXQgdGhlIG1vZGVsIGhhcyBhbHJlYWR5IGJlZW4gbG9nZ2VkIHVuZGVyIHRoZSBjdXJyZW50IHByb2plY3QuCgogICAgSWYgeW91IHdpc2ggdG8gYXBwbHkgbW9uaXRvcmluZyB0b29scyAoZS5nLiwgZHJpZnQgYW5hbHlzaXMpLCBzZXQgdGhlIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgcGFyYW1ldGVyIHRvIFRydWUuCiAgICBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50IHJlY29yZCB1bmRlciB0aGUgc3BlY2lmaWVkIG1vZGVsX2VuZHBvaW50X25hbWUuCiAgICBBZGRpdGlvbmFsbHksIGVuc3VyZSB0aGF0IG1vZGVsIG1vbml0b3JpbmcgaXMgZW5hYmxlZCBhdCB0aGUgcHJvamVjdCBsZXZlbCBieSBjYWxsaW5nIHRoZQogICAgcHJvamVjdC5lbmFibGVfbW9kZWxfbW9uaXRvcmluZygpIGZ1bmN0aW9uLiBZb3UgY2FuIGFsc28gYXBwbHkgbW9uaXRvcmluZyB0byBhbiBleGlzdGluZyBtb2RlbCBieSBwcm92aWRpbmcgaXRzCiAgICBlbmRwb2ludCBpZCBvciBuYW1lLCBhbmQgdGhlIG1vbml0b3JpbmcgdG9vbHMgd2lsbCBiZSBhcHBsaWVkIHRvIHRoYXQgZW5kcG9pbnQuCgogICAgQXQgdGhlIG1vbWVudCwgdGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIGBtbHJ1bj49MS41LjBgIHZlcnNpb25zLgoKICAgIDpwYXJhbSBjb250ZXh0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1MUnVuIGNvbnRleHQuCiAgICA6cGFyYW0gZGF0YXNldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YXNldCB0byBpbmZlciB0aHJvdWdoIHRoZSBtb2RlbC4gUHJvdmlkZWQgYXMgYW4gaW5wdXQgKERhdGFJdGVtKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCByZXByZXNlbnRzIERhdGFzZXQgYXJ0aWZhY3QgLyBGZWF0dXJlIHZlY3RvciBVUkkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1c2luZyBNTFJ1biBTREssIGBkYXRhc2V0YCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhcyBhIGxpc3QsIGRpY3Rpb25hcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXB5IGFycmF5LgogICAgOnBhcmFtIG1vZGVsX3BhdGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZWwgc3RvcmUgdXJpIChzaG91bGQgc3RhcnQgd2l0aCBzdG9yZTovLykuIFByb3ZpZGVkIGFzIGFuIGlucHV0IChEYXRhSXRlbSkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB1c2luZyBNTFJ1biBTREssIGBtb2RlbF9wYXRoYCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhcyBhIHBhcmFtZXRlciAoc3RyaW5nKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvIGdlbmVyYXRlIGEgdmFsaWQgbW9kZWwgc3RvcmUgVVJJLCBwbGVhc2UgbG9nIHRoZSBtb2RlbCBiZWZvcmUgcnVubmluZyB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgYGVuZHBvaW50X2lkYCBvZiBleGlzdGluZyBtb2RlbCBlbmRwb2ludCBpcyBwcm92aWRlZCwgbWFrZSBzdXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGl0IGhhcyBhIHNpbWlsYXIgbW9kZWwgc3RvcmUgcGF0aCwgb3RoZXJ3aXNlIHRoZSBkcmlmdCBhbmFseXNpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29uJ3QgYmUgdHJpZ2dlcmVkLgogICAgOnBhcmFtIGRyb3BfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgLyBpbnRlZ2VyIG9yIGEgbGlzdCBvZiBzdHJpbmdzIC8gaW50ZWdlcnMgdGhhdCByZXByZXNlbnQgdGhlIGNvbHVtbiBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBpbmRpY2VzIHRvIGRyb3AuIFdoZW4gdGhlIGRhdGFzZXQgaXMgYSBsaXN0IG9yIGEgbnVtcHkgYXJyYXkgdGhpcyBwYXJhbWV0ZXIgbXVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMuCiAgICA6cGFyYW0gbGFiZWxfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdGFyZ2V0IGxhYmVsKHMpIG9mIHRoZSBjb2x1bW4ocykgaW4gdGhlIGRhdGFzZXQgZm9yIFJlZ3Jlc3Npb24gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzaWZpY2F0aW9uIHRhc2tzLiBUaGUgbGFiZWwgY29sdW1uIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBtb2RlbCBvYmplY3QsIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSB2ZWN0b3IgcHJvdmlkZWQgaWYgYXZhaWxhYmxlLgogICAgOnBhcmFtIGZlYXR1cmVfY29sdW1uczogICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBmZWF0dXJlIGNvbHVtbnMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIGRhdGFmcmFtZSB3aGVuIGRhdGFzZXQgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdHlwZSBsaXN0IG9yIG51bXB5IGFycmF5LgogICAgOnBhcmFtIGxvZ19yZXN1bHRfc2V0OiAgICAgICAgICAgICAgICAgICAgICAgICAgV2hldGhlciB0byBsb2cgdGhlIHJlc3VsdCBzZXQgLSBhIERhdGFGcmFtZSBvZiB0aGUgZ2l2ZW4gaW5wdXRzIGNvbmNhdGVuYXRlZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJlZGljdGlvbnMuIERlZmF1bHRlZCB0byBUcnVlLgogICAgOnBhcmFtIHJlc3VsdF9zZXRfbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGRiIGtleSB0byBzZXQgbmFtZSBvZiB0aGUgcHJlZGljdGlvbiByZXN1bHQgYW5kIHRoZSBmaWxlbmFtZS4gRGVmYXVsdGVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlZGljdGlvbicuCiAgICA6cGFyYW0gYmF0Y2hfaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgSUQgb2YgdGhlIGdpdmVuIGJhdGNoIChpbmZlcmVuY2UgZGF0YXNldCkuIElmIGBOb25lYCwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxsIGJlIGxvZ2dlZCBhcyBhIHJlc3VsdCBvZiB0aGUgcnVuLgogICAgOnBhcmFtIGFydGlmYWN0c190YWc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFnIHRvIHVzZSBmb3IgcHJlZGljdGlvbiBzZXQgcmVzdWx0IGFydGlmYWN0LgogICAgOnBhcmFtIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXM6ICAgICAgICAgICAgICAgICAgV2hldGhlciB0byBwZXJmb3JtIGRyaWZ0IGFuYWx5c2lzIGJldHdlZW4gdGhlIHNhbXBsZSBzZXQgb2YgdGhlIG1vZGVsIG9iamVjdCB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgZ2l2ZW4uIEJ5IGRlZmF1bHQsIE5vbmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBkcmlmdCBhbmFseXNpcyBpZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGFscmVhZHkgaGFzIGZlYXR1cmUgc3RhdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBhcyBhIHJlZmVyZW5jZSBzYW1wbGUgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVyZm9ybWluZyBkcmlmdCBhbmFseXNpcyBvbiBhIG5ldyBlbmRwb2ludCBpZCB3aWxsIGdlbmVyYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuCiAgICA6cGFyYW0gZW5kcG9pbnRfaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb2RlbCBlbmRwb2ludCB1bmlxdWUgSUQuIElmIGBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzYCB3YXMgc2V0LCB0aGUgZW5kcG9pbnRfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdXNlZCBlaXRoZXIgdG8gcGVyZm9ybSB0aGUgYW5hbHlzaXMgb24gZXhpc3RpbmcgbW9kZWwgZW5kcG9pbnQgb3IgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlIGEgbmV3IG1vZGVsIGVuZHBvaW50IHJlY29yZC4KICAgIDpwYXJhbSBtb2RlbF9lbmRwb2ludF9uYW1lOiAgICAgICAgICAgICAgICAgICAgIElmIGEgbmV3IG1vZGVsIGVuZHBvaW50IGlzIGdlbmVyYXRlZCwgdGhlIG1vZGVsIG5hbWUgd2lsbCBiZSBwcmVzZW50ZWQgdW5kZXIgdGhpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQuCiAgICA6cGFyYW0gbW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldDogICAgICAgICAgICAgICBBIHNhbXBsZSBkYXRhc2V0IHRvIGdpdmUgdG8gY29tcGFyZSB0aGUgaW5wdXRzIGluIHRoZSBkcmlmdCBhbmFseXNpcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbiBiZSBwcm92aWRlZCBhcyBhbiBpbnB1dCAoRGF0YUl0ZW0pIG9yIGFzIGEgcGFyYW1ldGVyIChlLmcuIHN0cmluZywgbGlzdCwgRGF0YUZyYW1lKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGNob3NlbiBzYW1wbGUgc2V0IHdpbGwgYWx3YXlzIGJlIHRoZSBvbmUgd2hvIGlzIHNldCBpbiB0aGUgbW9kZWwgYXJ0aWZhY3QgaXRzZWxmLgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBpZiBib3RoIGBtb2RlbF9wYXRoYCBhbmQgYGVuZHBvaW50X2lkYCBhcmUgbm90IHByb3ZpZGVkCiAgICAiIiIKCiAgICAjIExvYWRpbmcgdGhlIG1vZGVsOgogICAgY29udGV4dC5sb2dnZXIuaW5mbyhmIkxvYWRpbmcgbW9kZWwuLi4iKQogICAgaWYgaXNpbnN0YW5jZShtb2RlbF9wYXRoLCBtbHJ1bi5EYXRhSXRlbSk6CiAgICAgICAgbW9kZWxfcGF0aCA9IG1vZGVsX3BhdGguYXJ0aWZhY3RfdXJsCiAgICBpZiBub3QgbWxydW4uZGF0YXN0b3JlLmlzX3N0b3JlX3VyaShtb2RlbF9wYXRoKToKICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgZiJUaGUgcHJvdmlkZWQgbW9kZWwgcGF0aCAoe21vZGVsX3BhdGh9KSBpcyBpbnZhbGlkIC0gc2hvdWxkIHN0YXJ0IHdpdGggYHN0b3JlOi8vYC4gIgogICAgICAgICAgICBmIlBsZWFzZSBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBsb2dnZWQgdGhlIG1vZGVsIHVzaW5nIGBwcm9qZWN0LmxvZ19tb2RlbCgpYCAiCiAgICAgICAgICAgIGYid2hpY2ggZ2VuZXJhdGVzIGEgdW5pcXVlIHN0b3JlIHVyaSBmb3IgdGhlIGxvZ2dlZCBtb2RlbC4iCiAgICAgICAgKQogICAgbW9kZWxfaGFuZGxlciA9IEF1dG9NTFJ1bi5sb2FkX21vZGVsKG1vZGVsX3BhdGg9bW9kZWxfcGF0aCwgY29udGV4dD1jb250ZXh0KQoKICAgIGlmIGxhYmVsX2NvbHVtbnMgaXMgTm9uZToKICAgICAgICBsYWJlbF9jb2x1bW5zID0gWwogICAgICAgICAgICBvdXRwdXQubmFtZSBmb3Igb3V0cHV0IGluIG1vZGVsX2hhbmRsZXIuX21vZGVsX2FydGlmYWN0LnNwZWMub3V0cHV0cwogICAgICAgIF0KCiAgICBpZiBmZWF0dXJlX2NvbHVtbnMgaXMgTm9uZToKICAgICAgICBmZWF0dXJlX2NvbHVtbnMgPSBbCiAgICAgICAgICAgIGlucHV0Lm5hbWUgZm9yIGlucHV0IGluIG1vZGVsX2hhbmRsZXIuX21vZGVsX2FydGlmYWN0LnNwZWMuaW5wdXRzCiAgICAgICAgXQoKICAgICMgR2V0IGRhdGFzZXQgYnkgb2JqZWN0LCBVUkwgb3IgYnkgRmVhdHVyZVZlY3RvcjoKICAgIGNvbnRleHQubG9nZ2VyLmluZm8oZiJMb2FkaW5nIGRhdGEuLi4iKQogICAgeCwgbGFiZWxfY29sdW1ucyA9IG1scnVuLm1vZGVsX21vbml0b3JpbmcuYXBpLnJlYWRfZGF0YXNldF9hc19kYXRhZnJhbWUoCiAgICAgICAgZGF0YXNldD1kYXRhc2V0LAogICAgICAgIGZlYXR1cmVfY29sdW1ucz1mZWF0dXJlX2NvbHVtbnMsCiAgICAgICAgbGFiZWxfY29sdW1ucz1sYWJlbF9jb2x1bW5zLAogICAgICAgIGRyb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICApCgogICAgIyBQcmVkaWN0OgogICAgY29udGV4dC5sb2dnZXIuaW5mbyhmIkNhbGN1bGF0aW5nIHByZWRpY3Rpb24uLi4iKQogICAgeV9wcmVkID0gbW9kZWxfaGFuZGxlci5tb2RlbC5wcmVkaWN0KHgsICoqcHJlZGljdF9rd2FyZ3MpCgogICAgIyBQcmVwYXJlIHRoZSByZXN1bHQgc2V0OgogICAgcmVzdWx0X3NldCA9IF9wcmVwYXJlX3Jlc3VsdF9zZXQoeD14LCBsYWJlbF9jb2x1bW5zPWxhYmVsX2NvbHVtbnMsIHlfcHJlZD15X3ByZWQpCgogICAgIyBDaGVjayBmb3IgbG9nZ2luZyB0aGUgcmVzdWx0IHNldDoKICAgIGlmIGxvZ19yZXN1bHRfc2V0OgogICAgICAgIG1scnVuLm1vZGVsX21vbml0b3JpbmcuYXBpLmxvZ19yZXN1bHQoCiAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCwKICAgICAgICAgICAgcmVzdWx0X3NldF9uYW1lPXJlc3VsdF9zZXRfbmFtZSwKICAgICAgICAgICAgcmVzdWx0X3NldD1yZXN1bHRfc2V0LAogICAgICAgICAgICBhcnRpZmFjdHNfdGFnPWFydGlmYWN0c190YWcsCiAgICAgICAgICAgIGJhdGNoX2lkPWJhdGNoX2lkLAogICAgICAgICkKCiAgICAjIENoZWNrIGZvciBwZXJmb3JtaW5nIGRyaWZ0IGFuYWx5c2lzCiAgICBpZiAoCiAgICAgICAgICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgaXMgTm9uZQogICAgICAgICAgICBhbmQgbW9kZWxfaGFuZGxlci5fbW9kZWxfYXJ0aWZhY3Quc3BlYy5mZWF0dXJlX3N0YXRzIGlzIG5vdCBOb25lCiAgICApOgogICAgICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgPSBUcnVlCiAgICBpZiBwZXJmb3JtX2RyaWZ0X2FuYWx5c2lzOgogICAgICAgIGNvbnRleHQubG9nZ2VyLmluZm8oIlBlcmZvcm1pbmcgZHJpZnQgYW5hbHlzaXMuLi4iKQogICAgICAgICMgR2V0IHRoZSBzYW1wbGUgc2V0IHN0YXRpc3RpY3MgKGVpdGhlciBmcm9tIHRoZSBzYW1wbGUgc2V0IG9yIGZyb20gdGhlIHN0YXRpc3RpY3MgbG9nZ2VkIHdpdGggdGhlIG1vZGVsKQogICAgICAgIHN0YXRpc3RpY3NfaW5wdXRfZmlsdGVyZWQgPSBfZ2V0X3NhbXBsZV9zZXRfc3RhdGlzdGljc19wYXJhbWV0ZXJzKAogICAgICAgICAgICBjb250ZXh0PWNvbnRleHQsCiAgICAgICAgICAgIG1vZGVsX2VuZHBvaW50X3NhbXBsZV9zZXQ9bW9kZWxfZW5kcG9pbnRfc2FtcGxlX3NldCwKICAgICAgICAgICAgbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0cz1tb2RlbF9oYW5kbGVyLl9tb2RlbF9hcnRpZmFjdC5zcGVjLmZlYXR1cmVfc3RhdHMsCiAgICAgICAgICAgIGZlYXR1cmVfY29sdW1ucz1mZWF0dXJlX2NvbHVtbnMsCiAgICAgICAgICAgIGRyb3BfY29sdW1ucz1kcm9wX2NvbHVtbnMsCiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnM9bGFiZWxfY29sdW1ucykKICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3MgPSBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzKCoqc3RhdGlzdGljc19pbnB1dF9maWx0ZXJlZCkKICAgICAgICBtbHJ1bi5tb2RlbF9tb25pdG9yaW5nLmFwaS5yZWNvcmRfcmVzdWx0cygKICAgICAgICAgICAgcHJvamVjdD1jb250ZXh0LnByb2plY3QsCiAgICAgICAgICAgIGNvbnRleHQ9Y29udGV4dCwKICAgICAgICAgICAgZW5kcG9pbnRfaWQ9ZW5kcG9pbnRfaWQsCiAgICAgICAgICAgIG1vZGVsX3BhdGg9bW9kZWxfcGF0aCwKICAgICAgICAgICAgbW9kZWxfZW5kcG9pbnRfbmFtZT1tb2RlbF9lbmRwb2ludF9uYW1lLAogICAgICAgICAgICBpbmZlcl9yZXN1bHRzX2RmPXJlc3VsdF9zZXQuY29weSgpLAogICAgICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3M9c2FtcGxlX3NldF9zdGF0aXN0aWNzLAogICAgICAgICkK
+ origin_filename: ''
+ auto_build: false
+ default_handler: infer
+ image: mlrun/mlrun
+ disable_auto_mount: false
+ command: ''
+metadata:
+ tag: ''
+ categories:
+ - utils
+ - data-analysis
+ - monitoring
+ name: batch-inference-v2
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/static/item.html b/functions/development/batch_inference_v2/2.6.0/static/item.html
new file mode 100644
index 00000000..d857a2c1
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/item.html
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+ Source
+
+
+
+
+
+
+apiVersion: v1
+categories:
+- utils
+- data-analysis
+- monitoring
+description: Batch inference (also knows as prediction) for the common ML frameworks
+ (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.
+doc: ''
+example: batch_inference_v2.ipynb
+generationDate: 2023-08-07:12-25
+hidden: false
+icon: ''
+labels:
+ author: eyald
+maintainers: []
+marketplaceType: ''
+mlrunVersion: 1.7.0-rc51
+name: batch_inference_v2
+platformVersion: 3.6.0
+spec:
+ extra_spec:
+ allow_empty_resources: true
+ build:
+ auto_build: false
+ with_mlrun: false
+ filename: batch_inference_v2.py
+ handler: infer
+ image: mlrun/mlrun
+ kind: job
+ requirements: null
+url: ''
+version: 2.6.0
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/2.6.0/static/source.html b/functions/development/batch_inference_v2/2.6.0/static/source.html
new file mode 100644
index 00000000..880ca8be
--- /dev/null
+++ b/functions/development/batch_inference_v2/2.6.0/static/source.html
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+ Source
+
+
+
+
+
+
+# Copyright 2023 Iguazio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from inspect import signature
+from typing import Any, Dict, List, Union, Optional
+import mlrun
+
+try:
+ import mlrun.model_monitoring.api
+except ModuleNotFoundError:
+ raise mlrun.errors.MLRunNotFoundError(
+ f"Please update your `mlrun` version to >=1.5.0 or use an "
+ f"older version of the batch inference function."
+ )
+
+import numpy as np
+import pandas as pd
+from mlrun.frameworks.auto_mlrun import AutoMLRun
+
+
+def _prepare_result_set(x: pd.DataFrame, label_columns: List[str], y_pred: np.ndarray) -> pd.DataFrame:
+ """
+ Set default label column names and validate given names to prepare the result set - a concatenation of the inputs
+ (x) and the model predictions (y_pred).
+
+ :param x: The inputs.
+ :param label_columns: A list of strings representing the target column names to add to the predictions. Default name
+ will be used in case the list is empty (predicted_label_{i}).
+ :param y_pred: The model predictions on the inputs.
+
+ :returns: The result set.
+
+ raises MLRunInvalidArgumentError: If the labels columns amount do not match the outputs or if one of the label
+ column already exists in the dataset.
+ """
+ # Prepare default target columns names if not provided:
+ prediction_columns_amount = 1 if len(y_pred.shape) == 1 else y_pred.shape[1]
+ if len(label_columns) == 0:
+ # Add default label column names:
+ if prediction_columns_amount == 1:
+ label_columns = ["predicted_label"]
+ else:
+ label_columns = [
+ f"predicted_label_{i}" for i in range(prediction_columns_amount)
+ ]
+
+ # Validate the label columns:
+ if prediction_columns_amount != len(label_columns):
+ # No equality between provided label column names and outputs amount:
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The number of predicted labels: {prediction_columns_amount} "
+ f"is not equal to the given label columns: {len(label_columns)}"
+ )
+ common_labels = set(label_columns) & set(x.columns.tolist())
+ if common_labels:
+ # Label column exist in the original inputs:
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The labels: {common_labels} are already existed in the given dataset."
+ )
+
+ return pd.concat(
+ [x, pd.DataFrame(y_pred, columns=label_columns, index=x.index)], axis=1
+ )
+
+
+def _get_sample_set_statistics_parameters(context: mlrun.MLClientCtx,
+ model_endpoint_sample_set: Union[
+ mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray],
+ model_artifact_feature_stats: dict,
+ feature_columns: Optional[List],
+ drop_columns: Optional[List],
+ label_columns: Optional[List]) -> Dict[str, Any]:
+ statics_input_full_dict = dict(sample_set=model_endpoint_sample_set,
+ model_artifact_feature_stats=model_artifact_feature_stats,
+ sample_set_columns=feature_columns,
+ sample_set_drop_columns=drop_columns,
+ sample_set_label_columns=label_columns)
+ get_sample_statics_function = mlrun.model_monitoring.api.get_sample_set_statistics
+ statics_function_input_dict = signature(get_sample_statics_function).parameters
+ # As a result of changes to input parameters in the mlrun-get_sample_set_statistics function,
+ # we will now send only the parameters it expects.
+ statistics_input_filtered = {key: statics_input_full_dict[key] for key in statics_function_input_dict}
+ if len(statistics_input_filtered) != len(statics_function_input_dict):
+ context.logger.warning(f"get_sample_set_statistics is in an older version; "
+ "some parameters will not be sent to the function."
+ f" Expected input: {list(statics_function_input_dict.keys())},"
+ f" actual input: {list(statistics_input_filtered.keys())}")
+ return statistics_input_filtered
+
+
+def infer(
+ context: mlrun.MLClientCtx,
+ dataset: Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray],
+ model_path: Union[str, mlrun.DataItem],
+ drop_columns: Union[str, List[str], int, List[int]] = None,
+ label_columns: Union[str, List[str]] = None,
+ feature_columns: Union[str, List[str]] = None,
+ log_result_set: bool = True,
+ result_set_name: str = "prediction",
+ batch_id: str = None,
+ artifacts_tag: str = "",
+ # Drift analysis parameters
+ perform_drift_analysis: bool = None,
+ endpoint_id: str = "",
+ # The following model endpoint parameters are relevant only if:
+ # perform drift analysis is not disabled
+ # a new model endpoint record is going to be generated
+ model_endpoint_name: str = "batch-infer",
+ model_endpoint_sample_set: Union[
+ mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray
+ ] = None,
+ **predict_kwargs: Dict[str, Any],
+):
+ """
+ Perform a prediction on the provided dataset using the specified model.
+ Ensure that the model has already been logged under the current project.
+
+ If you wish to apply monitoring tools (e.g., drift analysis), set the perform_drift_analysis parameter to True.
+ This will create a new model endpoint record under the specified model_endpoint_name.
+ Additionally, ensure that model monitoring is enabled at the project level by calling the
+ project.enable_model_monitoring() function. You can also apply monitoring to an existing model by providing its
+ endpoint id or name, and the monitoring tools will be applied to that endpoint.
+
+ At the moment, this function is supported for `mlrun>=1.5.0` versions.
+
+ :param context: MLRun context.
+ :param dataset: The dataset to infer through the model. Provided as an input (DataItem)
+ that represents Dataset artifact / Feature vector URI.
+ If using MLRun SDK, `dataset` can also be provided as a list, dictionary or
+ numpy array.
+ :param model_path: Model store uri (should start with store://). Provided as an input (DataItem).
+ If using MLRun SDK, `model_path` can also be provided as a parameter (string).
+ To generate a valid model store URI, please log the model before running this function.
+ If `endpoint_id` of existing model endpoint is provided, make sure
+ that it has a similar model store path, otherwise the drift analysis
+ won't be triggered.
+ :param drop_columns: A string / integer or a list of strings / integers that represent the column names
+ / indices to drop. When the dataset is a list or a numpy array this parameter must
+ be represented by integers.
+ :param label_columns: The target label(s) of the column(s) in the dataset for Regression or
+ Classification tasks. The label column can be accessed from the model object, or
+ the feature vector provided if available.
+ :param feature_columns: List of feature columns that will be used to build the dataframe when dataset is
+ from type list or numpy array.
+ :param log_result_set: Whether to log the result set - a DataFrame of the given inputs concatenated with
+ the predictions. Defaulted to True.
+ :param result_set_name: The db key to set name of the prediction result and the filename. Defaulted to
+ 'prediction'.
+ :param batch_id: The ID of the given batch (inference dataset). If `None`, it will be generated.
+ Will be logged as a result of the run.
+ :param artifacts_tag: Tag to use for prediction set result artifact.
+ :param perform_drift_analysis: Whether to perform drift analysis between the sample set of the model object to the
+ dataset given. By default, None, which means it will perform drift analysis if the
+ model already has feature stats that are considered as a reference sample set.
+ Performing drift analysis on a new endpoint id will generate a new model endpoint
+ record.
+ :param endpoint_id: Model endpoint unique ID. If `perform_drift_analysis` was set, the endpoint_id
+ will be used either to perform the analysis on existing model endpoint or to
+ generate a new model endpoint record.
+ :param model_endpoint_name: If a new model endpoint is generated, the model name will be presented under this
+ endpoint.
+ :param model_endpoint_sample_set: A sample dataset to give to compare the inputs in the drift analysis.
+ Can be provided as an input (DataItem) or as a parameter (e.g. string, list, DataFrame).
+ The default chosen sample set will always be the one who is set in the model artifact itself.
+
+ raises MLRunInvalidArgumentError: if both `model_path` and `endpoint_id` are not provided
+ """
+
+ # Loading the model:
+ context.logger.info(f"Loading model...")
+ if isinstance(model_path, mlrun.DataItem):
+ model_path = model_path.artifact_url
+ if not mlrun.datastore.is_store_uri(model_path):
+ raise mlrun.errors.MLRunInvalidArgumentError(
+ f"The provided model path ({model_path}) is invalid - should start with `store://`. "
+ f"Please make sure that you have logged the model using `project.log_model()` "
+ f"which generates a unique store uri for the logged model."
+ )
+ model_handler = AutoMLRun.load_model(model_path=model_path, context=context)
+
+ if label_columns is None:
+ label_columns = [
+ output.name for output in model_handler._model_artifact.spec.outputs
+ ]
+
+ if feature_columns is None:
+ feature_columns = [
+ input.name for input in model_handler._model_artifact.spec.inputs
+ ]
+
+ # Get dataset by object, URL or by FeatureVector:
+ context.logger.info(f"Loading data...")
+ x, label_columns = mlrun.model_monitoring.api.read_dataset_as_dataframe(
+ dataset=dataset,
+ feature_columns=feature_columns,
+ label_columns=label_columns,
+ drop_columns=drop_columns,
+ )
+
+ # Predict:
+ context.logger.info(f"Calculating prediction...")
+ y_pred = model_handler.model.predict(x, **predict_kwargs)
+
+ # Prepare the result set:
+ result_set = _prepare_result_set(x=x, label_columns=label_columns, y_pred=y_pred)
+
+ # Check for logging the result set:
+ if log_result_set:
+ mlrun.model_monitoring.api.log_result(
+ context=context,
+ result_set_name=result_set_name,
+ result_set=result_set,
+ artifacts_tag=artifacts_tag,
+ batch_id=batch_id,
+ )
+
+ # Check for performing drift analysis
+ if (
+ perform_drift_analysis is None
+ and model_handler._model_artifact.spec.feature_stats is not None
+ ):
+ perform_drift_analysis = True
+ if perform_drift_analysis:
+ context.logger.info("Performing drift analysis...")
+ # Get the sample set statistics (either from the sample set or from the statistics logged with the model)
+ statistics_input_filtered = _get_sample_set_statistics_parameters(
+ context=context,
+ model_endpoint_sample_set=model_endpoint_sample_set,
+ model_artifact_feature_stats=model_handler._model_artifact.spec.feature_stats,
+ feature_columns=feature_columns,
+ drop_columns=drop_columns,
+ label_columns=label_columns)
+ sample_set_statistics = mlrun.model_monitoring.api.get_sample_set_statistics(**statistics_input_filtered)
+ mlrun.model_monitoring.api.record_results(
+ project=context.project,
+ context=context,
+ endpoint_id=endpoint_id,
+ model_path=model_path,
+ model_endpoint_name=model_endpoint_name,
+ infer_results_df=result_set.copy(),
+ sample_set_statistics=sample_set_statistics,
+ )
+
+
+
+
+
\ No newline at end of file
diff --git a/functions/development/batch_inference_v2/latest/src/batch_inference_v2.ipynb b/functions/development/batch_inference_v2/latest/src/batch_inference_v2.ipynb
index bb59221f..7f369fa5 100644
--- a/functions/development/batch_inference_v2/latest/src/batch_inference_v2.ipynb
+++ b/functions/development/batch_inference_v2/latest/src/batch_inference_v2.ipynb
@@ -10,14 +10,14 @@
"source": [
"# Batch Inference V2\n",
"\n",
- "A function for inferring given input through a given model while producing a **Result Set** and performing **Data Drift Analysis**.\n",
+ "A function for inferring given input through a given model while producing a **Result Set** and applying monitoring analysis.\n",
"\n",
"In this notebook we will go over the function's docs and outputs and see an end-to-end example of running it.\n",
"\n",
"1. [Documentation](#chapter1)\n",
"2. [Results Prediction](#chapter2)\n",
- "3. [Data Drift Analysis](#chapter3)\n",
- "4. [End-to-end Demo](#chapter4)"
+ "3. [End-to-end Demo](#chapter3)\n",
+ "4. [Data Drift Analysis](#chapter4)"
]
},
{
@@ -31,9 +31,9 @@
" \n",
"## 1. Documentation\n",
"\n",
- "Perform a prediction on a given dataset with the given model. Can perform drift analysis between the sample set\n",
- "statistics stored in the model to the current input data. The drift rule is the value per-feature mean of the TVD\n",
- "and Hellinger scores according to the thresholds configures here. When performing drift analysis, this function\n",
+ "Perform a prediction on a given dataset with the given model. Using the default histogram data drift application, can perform drift analysis between the sample set\n",
+ "statistics stored in the model to the current input data. The drift rule in this case is the value per-feature mean of the TVD\n",
+ "and Hellinger scores. When §, this function\n",
"either creates or update an existing model endpoint record (depends on the provided `endpoint_id`).\n",
"\n",
"At the moment, this function is supported for `mlrun>=1.5.0` versions."
@@ -104,19 +104,7 @@
" dataset given. By default, None, which means it will perform drift analysis if the\n",
" model already has feature stats that are considered as a reference sample set.\n",
" Performing drift analysis on a new endpoint id will generate a new model endpoint\n",
- " record. Please note that in order to trigger the drift analysis job, you need to\n",
- " set `trigger_monitoring_job=True`. Otherwise, the drift analysis will be triggered\n",
- " only as part the scheduled monitoring job (if exist in the current project) or\n",
- " if triggered manually by the user.\n",
- " \n",
- "* **trigger_monitoring_job**: `bool` = `False`\n",
- "\n",
- " Whether to trigger the batch drift analysis after the infer job.\n",
- "\n",
- "* **batch_image_job**: `str` = `mlrun/mlrun`\n",
- "\n",
- " The image that will be used for the monitoring batch job analysis. By default,\n",
- " the image is mlrun/mlrun\n",
+ " record.\n",
"\n",
"* **endpoint_id**: `str` = `\"\"`\n",
" \n",
@@ -130,13 +118,6 @@
" \n",
" If a new model endpoint is generated, the model name will be presented under this endpoint.\n",
"\n",
- "* **model_endpoint_drift_threshold**: `float` = `0.7`\n",
- " \n",
- " The threshold of which to mark drifts. Defaulted to 0.7.\n",
- "\n",
- "* **model_endpoint_possible_drift_threshold**: `float` = `0.5`\n",
- " \n",
- " The threshold of which to mark possible drifts. Defaulted to 0.5.\n",
" \n",
"* **model_endpoint_sample_set**: `Union[mlrun.DataItem, list, dict, pd.DataFrame, pd.Series, np.ndarray]` = `None`\n",
" \n",
@@ -155,15 +136,13 @@
"### 1.2. Outputs\n",
"\n",
"The outputs are split to two actions the functions can perform:\n",
- "* [**Results Prediction**](#chapter2) - Will log:\n",
+ "* [**Results Prediction**](#chapter3) - Will log:\n",
" * A dataset artifact named by the `result_set_name` parameter.\n",
" * A `str` result named `\"batch_id\"` of the given / generated batch ID.\n",
"\n",
- "* [**Data Drift Analysis**](#chapter3) - Will log:\n",
+ "* [**Data Drift Analysis**](#chapter4) - Will log:\n",
" * A `plotly` artifact named `\"data_drift_table\"` with a visualization of the drifts results and histograms.\n",
" * A json artifact named `\"features_drift_results\"` with all the features metric values.\n",
- " * A `bool` result named `\"drift_status\"` of the overall drift status (`True` if there was a drift and `False` otherwise).\n",
- " * A `float` result named `\"drift_score\"` of the overall drift metric score.\n",
"\n",
"For more details, see the next chapters."
]
@@ -225,62 +204,7 @@
},
"source": [
" \n",
- "## 3. Data Drift Analysis\n",
- "\n",
- "The data drift analysis is done per feature using two distance measure metrics for probability distributions.\n",
- "\n",
- "Let us mark our sample set as $S$ and our inputs as $I$. We will look at one feature $x$ out of $n$ features. Assuming the histograms of feature $x$ is split into 20 bins: $b_1,b_2,...,b_{20}$, we will match the feature $x$ histogram of the inputs $I$ ($x_I$) into the same bins (meaning to $x_S$) and compare their distributions using:\n",
- "\n",
- "* Total Variance Distance: $TVD(x_S,x_I) = \\frac{1}{2}\\sum_{b_1}^{b_{20}} {|x_S - x_I|}$\n",
- "* Hellinger Distance: $H(x_S,x_I) = \\sqrt{1-{\\sum_{b_1}^{b_{20}}\\sqrt{x_S \\cdot x_I}}}$\n",
- "\n",
- "Our **rule** then is calculating for each $x\\in S: \\frac{H(x_S,x_I)+TVD(x_S,x_I)}{2} < $ given thresholds.\n",
- "\n",
- "The outputs of the analysis will be:\n",
- "* **Drift table plot** - The results are presented in a `plotly` table artifact named `\"drift_table_plot\"` that shows each feature's statistics and its TVD, Hellinger and KLD (Kullback–Leibler divergence) results as follows:\n",
- "\n",
- "| | Count | | Mean | | Std | | Min | | Max | | Tvd | Hellinger | Kld | Histograms |\n",
- "| ------ | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | --- | --------- | --- |------------|\n",
- "| | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | **Sample** | **Input** | | | | |\n",
- "| **x1** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
- "| **x2** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
- "| **x3** | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |\n",
- "\n",
- "* **Features drift results** - A rule metric per feature dictionary is saved in a json file named `\"features_drift_results\"` where each key is a feature and its value is the feature's metric value: `Dict[str, float]`\n",
- "\n",
- " ```python\n",
- " {\n",
- " \"x1\": 0.12,\n",
- " \"x2\": 0.345,\n",
- " \"x3\": 0.00678,\n",
- " ...\n",
- " }\n",
- " ```\n",
- "\n",
- "* In addition, two results are being added to summarize the drift analysis:\n",
- "\n",
- " * `drift_status`: `bool` - A boolean value indicating whether a drift was found.\n",
- " * `drift_metric`: `float` - The mean of all the features drift metric value (the rule above):\n",
- " for $n$ features and metric rule $M(x_S,x_I)=\\frac{H(x_S,x_I)+TVD(x_S,x_I)}{2}$, `drift_metric` $=\\frac{1}{n}\\sum_{x\\in S}M(x_S,x_I)$\n",
- "\n",
- " ```python\n",
- " {\n",
- " \"drift_status\": True,\n",
- " \"drift_metric\": 0.81234\n",
- " }\n",
- " ```"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "pycharm": {
- "name": "#%% md\n"
- }
- },
- "source": [
- " \n",
- "## 4. End-to-end Demo\n",
+ "## 3. End-to-end Demo\n",
"\n",
"We will see an end-to-end example that follows the steps below:\n",
"1. Generate data.\n",
@@ -296,7 +220,7 @@
}
},
"source": [
- "### 4.1. Code review\n",
+ "### 3.1. Code review\n",
"\n",
"We are using a very simple example of training a decision tree on a binary classification problem. For that we wrote two functions:\n",
"* `generate_data` - Generate a binary classification data. The data will be split into a *training set* and *data for prediction*. The data for prediction will be drifted in half of its features to showcase the plot later on.\n",
@@ -312,10 +236,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "> 2023-08-29 11:13:44,649 [warning] Failed resolving version info. Ignoring and using defaults\n",
- "> 2023-08-29 11:13:46,598 [warning] Server or client version is unstable. Assuming compatible: {'server_version': '0.0.0+image-test', 'client_version': '0.0.0+unstable'}\n",
- "> 2023-08-29 11:13:46,667 [info] Loading project from path: {'project_name': 'batch-infer-demo', 'path': './'}\n",
- "> 2023-08-29 11:14:02,192 [info] Project loaded successfully: {'project_name': 'batch-infer-demo', 'path': './', 'stored_in_db': True}\n"
+ "> 2024-10-08 10:23:13,060 [info] Loading project from path: {\"path\":\"./\",\"project_name\":\"batch-infer-demo\",\"user_project\":false}\n",
+ "> 2024-10-08 10:23:28,490 [info] Project loaded successfully: {\"path\":\"./\",\"project_name\":\"batch-infer-demo\",\"stored_in_db\":true}\n"
]
}
],
@@ -332,6 +254,9 @@
"execution_count": 2,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
@@ -346,6 +271,9 @@
"execution_count": 3,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
@@ -367,6 +295,9 @@
"execution_count": 4,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
@@ -429,6 +360,9 @@
"execution_count": 5,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
@@ -446,7 +380,7 @@
}
},
"source": [
- "### 4.2. Run the Example with MLRun\n",
+ "### 3.2. Run the Example with MLRun\n",
"\n",
"First, we will prepare our MLRun functions:\n",
"1. We will use `mlrun.code_to_function` to turn this demo notebook into an MLRun function we can run.\n",
@@ -458,19 +392,14 @@
"execution_count": 6,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "> 2023-08-29 11:14:04,182 [warning] Failed to add git metadata, ignore if path is not part of a git repo.: {'path': './', 'error': '/User/EYAL'}\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"# Create an MLRun function to run the notebook:\n",
"demo_function = mlrun.code_to_function(name=\"batch-inference-demo\", kind=\"job\")\n",
@@ -494,9 +423,12 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 7,
"metadata": {
"collapsed": false,
+ "jupyter": {
+ "outputs_hidden": false
+ },
"pycharm": {
"name": "#%%\n"
}
@@ -506,8 +438,12 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "> 2023-08-29 11:14:42,198 [warning] artifact/output path is not defined or is local and relative, artifacts will not be visible in the UI: {'output_path': './'}\n",
- "> 2023-08-29 11:14:42,198 [info] Storing function: {'name': 'batch-inference-demo-generate-data', 'uid': 'd04e9f978132472695774f01b2becb6c', 'db': None}\n"
+ "> 2024-10-08 10:23:40,584 [error] error getting build status: details: MLRunNotFoundError('Function tag not found batch-infer-demo/batch-inference-demo'), caused by: 404 Client Error: Not Found for url: http://mlrun-api:8080/api/v1/build/status?name=batch-inference-demo&project=batch-infer-demo&tag=&logs=no&offset=0&last_log_timestamp=0.0&verbose=no\n",
+ "> 2024-10-08 10:23:40,586 [info] Storing function: {\"db\":\"http://mlrun-api:8080\",\"name\":\"batch-inference-demo-generate-data\",\"uid\":\"4f68ba3fd9084e3e941ab3872ceb3635\"}\n",
+ "> 2024-10-08 10:23:40,881 [info] Job is running in the background, pod: batch-inference-demo-generate-data-52w8s\n",
+ "> 2024-10-08 10:23:46,954 [info] To track results use the CLI: {\"info_cmd\":\"mlrun get run 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo\",\"logs_cmd\":\"mlrun logs 4f68ba3fd9084e3e941ab3872ceb3635 -p batch-infer-demo\"}\n",
+ "> 2024-10-08 10:23:46,954 [info] Or click for UI: {\"ui_url\":\"https://dashboard.default-tenant.app.vmdev57.lab.iguazeng.com/mlprojects/batch-infer-demo/jobs/monitor/4f68ba3fd9084e3e941ab3872ceb3635/overview\"}\n",
+ "> 2024-10-08 10:23:46,955 [info] Run execution finished: {\"name\":\"batch-inference-demo-generate-data\",\"status\":\"completed\"}\n"
]
},
{
@@ -602,9 +538,14 @@
"}\n",
"function expandPanel(el) {\n",
" const panelName = \"#\" + el.getAttribute('paneName');\n",
- " console.log(el.title);\n",
"\n",
- " document.querySelector(panelName + \"-title\").innerHTML = el.title\n",
+ " // Get the base URL of the current notebook\n",
+ " var baseUrl = window.location.origin;\n",
+ "\n",
+ " // Construct the full URL\n",
+ " var fullUrl = new URL(el.title, baseUrl).href;\n",
+ "\n",
+ " document.querySelector(panelName + \"-title\").innerHTML = fullUrl\n",
" iframe = document.querySelector(panelName + \"-body\");\n",
"\n",
" const tblcss = `\n",
"
\n",
+ "/*! For license information please see plotly.min.js.LICENSE.txt */\n",
+ "!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.Plotly=e():t.Plotly=e()}(self,(function(){return function(){var t={6713:function(t,e,r){\"use strict\";var n=r(34809),i={\"X,X div\":'direction:ltr;font-family:\"Open Sans\",verdana,arial,sans-serif;margin:0;padding:0;',\"X input,X button\":'font-family:\"Open Sans\",verdana,arial,sans-serif;',\"X input:focus,X button:focus\":\"outline:none;\",\"X a\":\"text-decoration:none;\",\"X a:hover\":\"text-decoration:none;\",\"X .crisp\":\"shape-rendering:crispEdges;\",\"X .user-select-none\":\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\"X svg\":\"overflow:hidden;\",\"X svg a\":\"fill:#447adb;\",\"X svg a:hover\":\"fill:#3c6dc5;\",\"X .main-svg\":\"position:absolute;top:0;left:0;pointer-events:none;\",\"X .main-svg .draglayer\":\"pointer-events:all;\",\"X .cursor-default\":\"cursor:default;\",\"X .cursor-pointer\":\"cursor:pointer;\",\"X .cursor-crosshair\":\"cursor:crosshair;\",\"X .cursor-move\":\"cursor:move;\",\"X .cursor-col-resize\":\"cursor:col-resize;\",\"X .cursor-row-resize\":\"cursor:row-resize;\",\"X .cursor-ns-resize\":\"cursor:ns-resize;\",\"X .cursor-ew-resize\":\"cursor:ew-resize;\",\"X .cursor-sw-resize\":\"cursor:sw-resize;\",\"X .cursor-s-resize\":\"cursor:s-resize;\",\"X .cursor-se-resize\":\"cursor:se-resize;\",\"X .cursor-w-resize\":\"cursor:w-resize;\",\"X .cursor-e-resize\":\"cursor:e-resize;\",\"X .cursor-nw-resize\":\"cursor:nw-resize;\",\"X .cursor-n-resize\":\"cursor:n-resize;\",\"X .cursor-ne-resize\":\"cursor:ne-resize;\",\"X .cursor-grab\":\"cursor:-webkit-grab;cursor:grab;\",\"X .modebar\":\"position:absolute;top:2px;right:2px;\",\"X .ease-bg\":\"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\",\"X .modebar--hover>:not(.watermark)\":\"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\",\"X:hover .modebar--hover .modebar-group\":\"opacity:1;\",\"X .modebar-group\":\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\"X .modebar-btn\":\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\",\"X .modebar-btn svg\":\"position:relative;top:2px;\",\"X .modebar.vertical\":\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\"X .modebar.vertical svg\":\"top:-1px;\",\"X .modebar.vertical .modebar-group\":\"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\"X .modebar.vertical .modebar-group .modebar-btn\":\"display:block;text-align:center;\",\"X [data-title]:before,X [data-title]:after\":\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\"X [data-title]:hover:before,X [data-title]:hover:after\":\"display:block;opacity:1;\",\"X [data-title]:before\":'content:\"\";position:absolute;background:rgba(0,0,0,0);border:6px solid rgba(0,0,0,0);z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;',\"X [data-title]:after\":\"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\"X .vertical [data-title]:before,X .vertical [data-title]:after\":\"top:0%;right:200%;\",\"X .vertical [data-title]:before\":\"border:6px solid rgba(0,0,0,0);border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",Y:'font-family:\"Open Sans\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;',\"Y p\":\"margin:0;\",\"Y .notifier-note\":\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\"Y .notifier-close\":\"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\"Y .notifier-close:hover\":\"color:#444;text-decoration:none;cursor:pointer;\"};for(var a in i){var o=a.replace(/^,/,\" ,\").replace(/X/g,\".js-plotly-plot .plotly\").replace(/Y/g,\".plotly-notifier\");n.addStyleRule(o,i[a])}},14187:function(t,e,r){\"use strict\";t.exports=r(47908)},20273:function(t,e,r){\"use strict\";t.exports=r(58218)},6457:function(t,e,r){\"use strict\";t.exports=r(89362)},15849:function(t,e,r){\"use strict\";t.exports=r(53794)},38847:function(t,e,r){\"use strict\";t.exports=r(29698)},7659:function(t,e,r){\"use strict\";t.exports=r(51252)},60089:function(t,e,r){\"use strict\";t.exports=r(48050)},22084:function(t,e,r){\"use strict\";t.exports=r(58075)},35892:function(t,e,r){\"use strict\";t.exports=r(9419)},81204:function(t,e,r){\"use strict\";t.exports=r(28128)},55857:function(t,e,r){\"use strict\";t.exports=r(47050)},12862:function(t,e,r){\"use strict\";t.exports=r(91405)},97629:function(t,e,r){\"use strict\";t.exports=r(34406)},67549:function(t,e,r){\"use strict\";t.exports=r(17430)},2660:function(t,e,r){\"use strict\";t.exports=r(91995)},86071:function(t,e,r){\"use strict\";t.exports=r(81264)},66200:function(t,e,r){\"use strict\";t.exports=r(42849)},53446:function(t,e,r){\"use strict\";t.exports=r(52213)},86899:function(t,e,r){\"use strict\";t.exports=r(91132)},13430:function(t,e,r){\"use strict\";t.exports=r(50453)},21548:function(t,e,r){\"use strict\";t.exports=r(29251)},53939:function(t,e,r){\"use strict\";t.exports=r(72892)},1902:function(t,e,r){\"use strict\";t.exports=r(74461)},29096:function(t,e,r){\"use strict\";t.exports=r(66143)},23820:function(t,e,r){\"use strict\";t.exports=r(81955)},82017:function(t,e,r){\"use strict\";t.exports=r(36858)},113:function(t,e,r){\"use strict\";t.exports=r(92106)},20260:function(t,e,r){\"use strict\";var n=r(67549);n.register([r(20273),r(15849),r(21548),r(1902),r(29096),r(23820),r(12862),r(1639),r(10067),r(53446),r(31014),r(113),r(78170),r(8202),r(92382),r(82017),r(86899),r(54357),r(66903),r(90594),r(71680),r(7412),r(55857),r(784),r(74221),r(22084),r(44001),r(97281),r(12345),r(53939),r(29117),r(5410),r(5057),r(81204),r(86071),r(14226),r(35892),r(2660),r(96599),r(28573),r(76832),r(60089),r(51469),r(97629),r(27700),r(7659),r(11780),r(27195),r(6457),r(84639),r(14187),r(66200),r(13430),r(90590),r(38847)]),t.exports=n},28573:function(t,e,r){\"use strict\";t.exports=r(25638)},90594:function(t,e,r){\"use strict\";t.exports=r(75297)},7412:function(t,e,r){\"use strict\";t.exports=r(58859)},27700:function(t,e,r){\"use strict\";t.exports=r(12683)},5410:function(t,e,r){\"use strict\";t.exports=r(6305)},29117:function(t,e,r){\"use strict\";t.exports=r(83910)},78170:function(t,e,r){\"use strict\";t.exports=r(49913)},12345:function(t,e,r){\"use strict\";t.exports=r(15186)},96599:function(t,e,r){\"use strict\";t.exports=r(71760)},54357:function(t,e,r){\"use strict\";t.exports=r(17822)},51469:function(t,e,r){\"use strict\";t.exports=r(56534)},74221:function(t,e,r){\"use strict\";t.exports=r(18070)},44001:function(t,e,r){\"use strict\";t.exports=r(52378)},14226:function(t,e,r){\"use strict\";t.exports=r(30929)},5057:function(t,e,r){\"use strict\";t.exports=r(83866)},11780:function(t,e,r){\"use strict\";t.exports=r(66939)},27195:function(t,e,r){\"use strict\";t.exports=r(23748)},84639:function(t,e,r){\"use strict\";t.exports=r(73304)},1639:function(t,e,r){\"use strict\";t.exports=r(12864)},90590:function(t,e,r){\"use strict\";t.exports=r(99855)},97281:function(t,e,r){\"use strict\";t.exports=r(91450)},784:function(t,e,r){\"use strict\";t.exports=r(51943)},8202:function(t,e,r){\"use strict\";t.exports=r(80809)},66903:function(t,e,r){\"use strict\";t.exports=r(95984)},76832:function(t,e,r){\"use strict\";t.exports=r(51671)},92382:function(t,e,r){\"use strict\";t.exports=r(47181)},10067:function(t,e,r){\"use strict\";t.exports=r(37276)},71680:function(t,e,r){\"use strict\";t.exports=r(75703)},31014:function(t,e,r){\"use strict\";t.exports=r(38261)},11645:function(t){\"use strict\";t.exports=[{path:\"\",backoff:0},{path:\"M-2.4,-3V3L0.6,0Z\",backoff:.6},{path:\"M-3.7,-2.5V2.5L1.3,0Z\",backoff:1.3},{path:\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\",backoff:1.55},{path:\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\",backoff:1.6},{path:\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\",backoff:2},{path:\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\",backoff:0,noRotate:!0},{path:\"M2,2V-2H-2V2Z\",backoff:0,noRotate:!0}]},50222:function(t,e,r){\"use strict\";var n=r(11645),i=r(80337),a=r(54826),o=r(78032).templatedArray;r(35081),t.exports=o(\"annotation\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},text:{valType:\"string\",editType:\"calc+arraydraw\"},textangle:{valType:\"angle\",dflt:0,editType:\"calc+arraydraw\"},font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),width:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},height:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"center\",editType:\"arraydraw\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"arraydraw\"},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},borderpad:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},arrowcolor:{valType:\"color\",editType:\"arraydraw\"},arrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},startarrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},arrowside:{valType:\"flaglist\",flags:[\"end\",\"start\"],extras:[\"none\"],dflt:\"end\",editType:\"arraydraw\"},arrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},startarrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},arrowwidth:{valType:\"number\",min:.1,editType:\"calc+arraydraw\"},standoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},startstandoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},ax:{valType:\"any\",editType:\"calc+arraydraw\"},ay:{valType:\"any\",editType:\"calc+arraydraw\"},axref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.x.toString()],editType:\"calc\"},ayref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.y.toString()],editType:\"calc\"},xref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.x.toString()],editType:\"calc\"},x:{valType:\"any\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},xshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.y.toString()],editType:\"calc\"},y:{valType:\"any\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},clicktoshow:{valType:\"enumerated\",values:[!1,\"onoff\",\"onout\"],dflt:!1,editType:\"arraydraw\"},xclick:{valType:\"any\",editType:\"arraydraw\"},yclick:{valType:\"any\",editType:\"arraydraw\"},hovertext:{valType:\"string\",editType:\"arraydraw\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",editType:\"arraydraw\"},font:i({editType:\"arraydraw\"}),editType:\"arraydraw\"},captureevents:{valType:\"boolean\",editType:\"arraydraw\"},editType:\"calc\",_deprecated:{ref:{valType:\"string\",editType:\"calc\"}}})},60317:function(t,e,r){\"use strict\";var n=r(34809),i=r(29714),a=r(3377).draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach((function(e){var r=i.getFromId(t,e.xref),n=i.getFromId(t,e.yref),a=i.getRefType(e.xref),o=i.getRefType(e.yref);e._extremes={},\"range\"===a&&s(e,r),\"range\"===o&&s(e,n)}))}function s(t,e){var r,n=e._id,a=n.charAt(0),o=t[a],s=t[\"a\"+a],l=t[a+\"ref\"],c=t[\"a\"+a+\"ref\"],u=t[\"_\"+a+\"padplus\"],h=t[\"_\"+a+\"padminus\"],f={x:1,y:-1}[a]*t[a+\"shift\"],p=3*t.arrowsize*t.arrowwidth||0,d=p+f,m=p-f,g=3*t.startarrowsize*t.arrowwidth||0,y=g+f,v=g-f;if(c===l){var x=i.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:m}),_=i.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(u,y),ppadminus:Math.max(h,v)});r={min:[x.min[0],_.min[0]],max:[x.max[0],_.max[0]]}}else y=s?y+s:y,v=s?v-s:v,r=i.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(u,d,y),ppadminus:Math.max(h,m,v)});t._extremes[n]=r}t.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([a,o],t)}},6035:function(t,e,r){\"use strict\";var n=r(34809),i=r(33626),a=r(78032).arrayEditor;function o(t,e){var r,n,i,a,o,l,c,u=t._fullLayout.annotations,h=[],f=[],p=[],d=(e||[]).length;for(r=0;r0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),c=l.on,u=l.off.concat(l.explicitOff),h={},f=t._fullLayout.annotations;if(c.length||u.length){for(r=0;r2/3?\"right\":\"center\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var W=!1,Y=[\"x\",\"y\"],X=0;X1)&&(nt===rt?((pt=it.r2fraction(e[\"a\"+et]))<0||pt>1)&&(W=!0):W=!0),$=it._offset+it.r2p(e[et]),Q=.5}else{var dt=\"domain\"===ft;\"x\"===et?(K=e[et],$=dt?it._offset+it._length*K:$=T.l+T.w*K):(K=1-e[et],$=dt?it._offset+it._length*K:$=T.t+T.h*K),Q=e.showarrow?.5:K}if(e.showarrow){ht.head=$;var mt=e[\"a\"+et];if(tt=ot*H(.5,e.xanchor)-st*H(.5,e.yanchor),nt===rt){var gt=l.getRefType(nt);\"domain\"===gt?(\"y\"===et&&(mt=1-mt),ht.tail=it._offset+it._length*mt):\"paper\"===gt?\"y\"===et?(mt=1-mt,ht.tail=T.t+T.h*mt):ht.tail=T.l+T.w*mt:ht.tail=it._offset+it.r2p(mt),J=tt}else ht.tail=$+mt,J=tt+mt;ht.text=ht.tail+tt;var yt=w[\"x\"===et?\"width\":\"height\"];if(\"paper\"===rt&&(ht.head=o.constrain(ht.head,1,yt-1)),\"pixel\"===nt){var vt=-Math.max(ht.tail-3,ht.text),xt=Math.min(ht.tail+3,ht.text)-yt;vt>0?(ht.tail+=vt,ht.text+=vt):xt>0&&(ht.tail-=xt,ht.text-=xt)}ht.tail+=ut,ht.head+=ut}else J=tt=lt*H(Q,ct),ht.text=$+tt;ht.text+=ut,tt+=ut,J+=ut,e[\"_\"+et+\"padplus\"]=lt/2+J,e[\"_\"+et+\"padminus\"]=lt/2-J,e[\"_\"+et+\"size\"]=lt,e[\"_\"+et+\"shift\"]=tt}if(W)R.remove();else{var _t=0,bt=0;if(\"left\"!==e.align&&(_t=(A-_)*(\"center\"===e.align?.5:1)),\"top\"!==e.valign&&(bt=(D-b)*(\"middle\"===e.valign?.5:1)),h)n.select(\"svg\").attr({x:N+_t-1,y:N+bt}).call(u.setClipUrl,U?C:null,t);else{var wt=N+bt-m.top,Tt=N+_t-m.left;G.call(f.positionText,Tt,wt).call(u.setClipUrl,U?C:null,t)}V.select(\"rect\").call(u.setRect,N,N,A,D),j.call(u.setRect,F/2,F/2,B-F,q-F),R.call(u.setTranslate,Math.round(L.x.text-B/2),Math.round(L.y.text-q/2)),z.attr({transform:\"rotate(\"+I+\",\"+L.x.text+\",\"+L.y.text+\")\"});var kt,At=function(r,n){P.selectAll(\".annotation-arrow-g\").remove();var l=L.x.head,h=L.y.head,f=L.x.tail+r,p=L.y.tail+n,m=L.x.text+r,_=L.y.text+n,b=o.rotationXYMatrix(I,m,_),w=o.apply2DTransform(b),A=o.apply2DTransform2(b),C=+j.attr(\"width\"),O=+j.attr(\"height\"),D=m-.5*C,F=D+C,B=_-.5*O,N=B+O,U=[[D,B,D,N],[D,N,F,N],[F,N,F,B],[F,B,D,B]].map(A);if(!U.reduce((function(t,e){return t^!!o.segmentsIntersect(l,h,l+1e6,h+1e6,e[0],e[1],e[2],e[3])}),!1)){U.forEach((function(t){var e=o.segmentsIntersect(f,p,l,h,t[0],t[1],t[2],t[3]);e&&(f=e.x,p=e.y)}));var V=e.arrowwidth,q=e.arrowcolor,H=e.arrowside,G=P.append(\"g\").style({opacity:c.opacity(q)}).classed(\"annotation-arrow-g\",!0),Z=G.append(\"path\").attr(\"d\",\"M\"+f+\",\"+p+\"L\"+l+\",\"+h).style(\"stroke-width\",V+\"px\").call(c.stroke,c.rgb(q));if(g(Z,H,e),k.annotationPosition&&Z.node().parentNode&&!a){var W=l,Y=h;if(e.standoff){var X=Math.sqrt(Math.pow(l-f,2)+Math.pow(h-p,2));W+=e.standoff*(f-l)/X,Y+=e.standoff*(p-h)/X}var $,J,K=G.append(\"path\").classed(\"annotation-arrow\",!0).classed(\"anndrag\",!0).classed(\"cursor-move\",!0).attr({d:\"M3,3H-3V-3H3ZM0,0L\"+(f-W)+\",\"+(p-Y),transform:s(W,Y)}).style(\"stroke-width\",V+6+\"px\").call(c.stroke,\"rgba(0,0,0,0)\").call(c.fill,\"rgba(0,0,0,0)\");d.init({element:K.node(),gd:t,prepFn:function(){var t=u.getTranslate(R);$=t.x,J=t.y,y&&y.autorange&&M(y._name+\".autorange\",!0),x&&x.autorange&&M(x._name+\".autorange\",!0)},moveFn:function(t,r){var n=w($,J),i=n[0]+t,a=n[1]+r;R.call(u.setTranslate,i,a),S(\"x\",v(y,t,\"x\",T,e)),S(\"y\",v(x,r,\"y\",T,e)),e.axref===e.xref&&S(\"ax\",v(y,t,\"ax\",T,e)),e.ayref===e.yref&&S(\"ay\",v(x,r,\"ay\",T,e)),G.attr(\"transform\",s(t,r)),z.attr({transform:\"rotate(\"+I+\",\"+i+\",\"+a+\")\"})},doneFn:function(){i.call(\"_guiRelayout\",t,E());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}};e.showarrow&&At(0,0),O&&d.init({element:R.node(),gd:t,prepFn:function(){kt=z.attr(\"transform\")},moveFn:function(t,r){var n=\"pointer\";if(e.showarrow)e.axref===e.xref?S(\"ax\",v(y,t,\"ax\",T,e)):S(\"ax\",e.ax+t),e.ayref===e.yref?S(\"ay\",v(x,r,\"ay\",T.w,e)):S(\"ay\",e.ay+r),At(t,r);else{if(a)return;var i,o;if(y)i=v(y,t,\"x\",T,e);else{var l=e._xsize/T.w,c=e.x+(e._xshift-e.xshift)/T.w-l/2;i=d.align(c+t/T.w,l,0,1,e.xanchor)}if(x)o=v(x,r,\"y\",T,e);else{var u=e._ysize/T.h,h=e.y-(e._yshift+e.yshift)/T.h-u/2;o=d.align(h-r/T.h,u,0,1,e.yanchor)}S(\"x\",i),S(\"y\",o),y&&x||(n=d.getCursor(y?.5:i,x?.5:o,e.xanchor,e.yanchor))}z.attr({transform:s(t,r)+kt}),p(R,n)},clickFn:function(r,n){e.captureevents&&t.emit(\"plotly_clickannotation\",Z(n))},doneFn:function(){p(R),i.call(\"_guiRelayout\",t,E());var e=document.querySelector(\".js-notes-box-panel\");e&&e.redraw(e.selectedObj)}})}}}t.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(\".annotation\").remove();for(var r=0;r=0,x=e.indexOf(\"end\")>=0,_=d.backoff*g+r.standoff,b=m.backoff*y+r.startstandoff;if(\"line\"===p.nodeName){o={x:+t.attr(\"x1\"),y:+t.attr(\"y1\")},u={x:+t.attr(\"x2\"),y:+t.attr(\"y2\")};var w=o.x-u.x,T=o.y-u.y;if(f=(h=Math.atan2(T,w))+Math.PI,_&&b&&_+b>Math.sqrt(w*w+T*T))return void O();if(_){if(_*_>w*w+T*T)return void O();var k=_*Math.cos(h),A=_*Math.sin(h);u.x+=k,u.y+=A,t.attr({x2:u.x,y2:u.y})}if(b){if(b*b>w*w+T*T)return void O();var M=b*Math.cos(h),S=b*Math.sin(h);o.x-=M,o.y-=S,t.attr({x1:o.x,y1:o.y})}}else if(\"path\"===p.nodeName){var E=p.getTotalLength(),C=\"\";if(E<_+b)return void O();var L=p.getPointAtLength(0),I=p.getPointAtLength(.1);h=Math.atan2(L.y-I.y,L.x-I.x),o=p.getPointAtLength(Math.min(b,E)),C=\"0px,\"+b+\"px,\";var P=p.getPointAtLength(E),z=p.getPointAtLength(E-.1);f=Math.atan2(P.y-z.y,P.x-z.x),u=p.getPointAtLength(Math.max(0,E-_)),C+=E-(C?b+_:_)+\"px,\"+E+\"px\",t.style(\"stroke-dasharray\",C)}function O(){t.style(\"stroke-dasharray\",\"0px,100px\")}function D(e,a,o,u){e.path&&(e.noRotate&&(o=0),n.select(p.parentNode).append(\"path\").attr({class:t.attr(\"class\"),d:e.path,transform:c(a.x,a.y)+l(180*o/Math.PI)+s(u)}).style({fill:i.rgb(r.arrowcolor),\"stroke-width\":0}))}v&&D(m,o,h,y),x&&D(d,u,f,g)}},3599:function(t,e,r){\"use strict\";var n=r(3377),i=r(6035);t.exports={moduleType:\"component\",name:\"annotations\",layoutAttributes:r(50222),supplyLayoutDefaults:r(63737),includeBasePlot:r(20706)(\"annotations\"),calcAutorange:r(60317),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:r(59741)}},38239:function(t,e,r){\"use strict\";var n=r(50222),i=r(13582).overrideAll,a=r(78032).templatedArray;t.exports=i(a(\"annotation\",{visible:n.visible,x:{valType:\"any\"},y:{valType:\"any\"},z:{valType:\"any\"},ax:{valType:\"number\"},ay:{valType:\"number\"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),\"calc\",\"from-root\")},47979:function(t,e,r){\"use strict\";var n=r(34809),i=r(29714);function a(t,e){var r=e.fullSceneLayout.domain,a=e.fullLayout._size,o={pdata:null,type:\"linear\",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset=a.l+r.x[0]*a.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset=a.t+(1-r.y[1])*a.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}t.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r1){c=!0;break}}c?t.fullLayout._infolayer.select(\".annotation-\"+t.id+'[data-index=\"'+s+'\"]').remove():(l._pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},83348:function(t,e,r){\"use strict\";var n=r(33626),i=r(34809);t.exports={moduleType:\"component\",name:\"annotations3d\",schema:{subplots:{scene:{annotations:r(38239)}}},layoutAttributes:r(38239),handleDefaults:r(34232),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(r)for(var a=r.attrRegex,o=Object.keys(t),s=0;s=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+\", \"+Math.round(255*n[1])+\", \"+Math.round(255*n[2]);return a?\"rgba(\"+s+\", \"+n[3]+\")\":\"rgb(\"+s+\")\"}o.tinyRGB=function(t){var e=t.toRgb();return\"rgb(\"+Math.round(e.r)+\", \"+Math.round(e.g)+\", \"+Math.round(e.b)+\")\"},o.rgb=function(t){return o.tinyRGB(n(t))},o.opacity=function(t){return t?n(t).getAlpha():0},o.addOpacity=function(t,e){var r=n(t).toRgb();return\"rgba(\"+Math.round(r.r)+\", \"+Math.round(r.g)+\", \"+Math.round(r.b)+\", \"+e+\")\"},o.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var i=n(e||c).toRgb(),a=1===i.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},o.interpolate=function(t,e,r){var i=n(t).toRgb(),a=n(e).toRgb(),o={r:r*i.r+(1-r)*a.r,g:r*i.g+(1-r)*a.g,b:r*i.b+(1-r)*a.b};return n(o).toRgbString()},o.contrast=function(t,e,r){var i=n(t);return 1!==i.getAlpha()&&(i=n(o.combine(t,c))),(i.isDark()?e?i.lighten(e):c:r?i.darken(r):l).toString()},o.stroke=function(t,e){var r=n(e);t.style({stroke:o.tinyRGB(r),\"stroke-opacity\":r.getAlpha()})},o.fill=function(t,e){var r=n(e);t.style({fill:o.tinyRGB(r),\"fill-opacity\":r.getAlpha()})},o.clean=function(t){if(t&&\"object\"==typeof t){var e,r,n,i,s=Object.keys(t);for(e=0;e0?n>=l:n<=l));i++)n>u&&n0?n>=l:n<=l));i++)n>r[0]&&n1){var pt=Math.pow(10,Math.floor(Math.log(ft)/Math.LN10));ut*=pt*c.roundUp(ft/pt,[2,5,10]),(Math.abs(Z.start)/Z.size+1e-6)%1<2e-6&&(lt.tick0=0)}lt.dtick=ut}lt.domain=o?[ot+P/B.h,ot+Q-P/B.h]:[ot+I/B.w,ot+Q-I/B.w],lt.setScale(),t.attr(\"transform\",u(Math.round(B.l),Math.round(B.t)));var dt,mt=t.select(\".\"+A.cbtitleunshift).attr(\"transform\",u(-Math.round(B.l),-Math.round(B.t))),gt=lt.ticklabelposition,yt=lt.title.font.size,vt=t.select(\".\"+A.cbaxis),xt=0,_t=0;function bt(n,i){var a={propContainer:lt,propName:e._propPrefix+\"title\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:F._dfltTitle.colorbar,containerGroup:t.select(\".\"+A.cbtitle)},o=\"h\"===n.charAt(0)?n.substr(1):\"h\"+n;t.selectAll(\".\"+o+\",.\"+o+\"-math-group\").remove(),m.draw(r,n,h(a,i||{}))}return c.syncOrAsync([a.previousPromises,function(){var t,e;(o&&ct||!o&&!ct)&&(\"top\"===V&&(t=I+B.l+tt*z,e=P+B.t+et*(1-ot-Q)+3+.75*yt),\"bottom\"===V&&(t=I+B.l+tt*z,e=P+B.t+et*(1-ot)-3-.25*yt),\"right\"===V&&(e=P+B.t+et*O+3+.75*yt,t=I+B.l+tt*ot),bt(lt._id+\"title\",{attributes:{x:t,y:e,\"text-anchor\":o?\"start\":\"middle\"}}))},function(){if(!o&&!ct||o&&ct){var a,l=t.select(\".\"+A.cbtitle),h=l.select(\"text\"),f=[-M/2,M/2],d=l.select(\".h\"+lt._id+\"title-math-group\").node(),m=15.6;if(h.node()&&(m=parseInt(h.node().style.fontSize,10)*w),d?(a=p.bBox(d),_t=a.width,(xt=a.height)>m&&(f[1]-=(xt-m)/2)):h.node()&&!h.classed(A.jsPlaceholder)&&(a=p.bBox(h.node()),_t=a.width,xt=a.height),o){if(xt){if(xt+=5,\"top\"===V)lt.domain[1]-=xt/B.h,f[1]*=-1;else{lt.domain[0]+=xt/B.h;var y=g.lineCount(h);f[1]+=(1-y)*m}l.attr(\"transform\",u(f[0],f[1])),lt.setScale()}}else _t&&(\"right\"===V&&(lt.domain[0]+=(_t+yt/2)/B.w),l.attr(\"transform\",u(f[0],f[1])),lt.setScale())}t.selectAll(\".\"+A.cbfills+\",.\"+A.cblines).attr(\"transform\",o?u(0,Math.round(B.h*(1-lt.domain[1]))):u(Math.round(B.w*lt.domain[0]),0)),vt.attr(\"transform\",o?u(0,Math.round(-B.t)):u(Math.round(-B.l),0));var v=t.select(\".\"+A.cbfills).selectAll(\"rect.\"+A.cbfill).attr(\"style\",\"\").data(Y);v.enter().append(\"rect\").classed(A.cbfill,!0).attr(\"style\",\"\"),v.exit().remove();var x=q.map(lt.c2p).map(Math.round).sort((function(t,e){return t-e}));v.each((function(t,a){var s=[0===a?q[0]:(Y[a]+Y[a-1])/2,a===Y.length-1?q[1]:(Y[a]+Y[a+1])/2].map(lt.c2p).map(Math.round);o&&(s[1]=c.constrain(s[1]+(s[1]>s[0])?1:-1,x[0],x[1]));var l=n.select(this).attr(o?\"x\":\"y\",rt).attr(o?\"y\":\"x\",n.min(s)).attr(o?\"width\":\"height\",Math.max($,2)).attr(o?\"height\":\"width\",Math.max(n.max(s)-n.min(s),2));if(e._fillgradient)p.gradient(l,r,e._id,o?\"vertical\":\"horizontalreversed\",e._fillgradient,\"fill\");else{var u=G(t).replace(\"e-\",\"\");l.attr(\"fill\",i(u).toHexString())}}));var _=t.select(\".\"+A.cblines).selectAll(\"path.\"+A.cbline).data(j.color&&j.width?X:[]);_.enter().append(\"path\").classed(A.cbline,!0),_.exit().remove(),_.each((function(t){var e=rt,r=Math.round(lt.c2p(t))+j.width/2%1;n.select(this).attr(\"d\",\"M\"+(o?e+\",\"+r:r+\",\"+e)+(o?\"h\":\"v\")+$).call(p.lineGroupStyle,j.width,H(t),j.dash)})),vt.selectAll(\"g.\"+lt._id+\"tick,path\").remove();var b=rt+$+(M||0)/2-(\"outside\"===e.ticks?1:0),T=s.calcTicks(lt),k=s.getTickSigns(lt)[2];return s.drawTicks(r,lt,{vals:\"inside\"===lt.ticks?s.clipEnds(lt,T):T,layer:vt,path:s.makeTickPath(lt,b,k),transFn:s.makeTransTickFn(lt)}),s.drawLabels(r,lt,{vals:T,layer:vt,transFn:s.makeTransTickLabelFn(lt),labelFns:s.makeLabelFns(lt,b)})},function(){if(o&&!ct||!o&&ct){var t,i,a=lt.position||0,s=lt._offset+lt._length/2;if(\"right\"===V)i=s,t=B.l+tt*a+10+yt*(lt.showticklabels?1:.5);else if(t=s,\"bottom\"===V&&(i=B.t+et*a+10+(-1===gt.indexOf(\"inside\")?lt.tickfont.size:0)+(\"intside\"!==lt.ticks&&e.ticklen||0)),\"top\"===V){var l=U.text.split(\" \").length;i=B.t+et*a+10-$-w*yt*l}bt((o?\"h\":\"v\")+lt._id+\"title\",{avoid:{selection:n.select(r).selectAll(\"g.\"+lt._id+\"tick\"),side:V,offsetTop:o?0:B.t,offsetLeft:o?B.l:0,maxShift:o?F.width:F.height},attributes:{x:t,y:i,\"text-anchor\":\"middle\"},transform:{rotate:o?-90:0,offset:0}})}},a.previousPromises,function(){var n,s=$+M/2;-1===gt.indexOf(\"inside\")&&(n=p.bBox(vt.node()),s+=o?n.width:n.height),dt=mt.select(\"text\");var c=0,h=o&&\"top\"===V,m=!o&&\"right\"===V,g=0;if(dt.node()&&!dt.classed(A.jsPlaceholder)){var v,x=mt.select(\".h\"+lt._id+\"title-math-group\").node();x&&(o&&ct||!o&&!ct)?(c=(n=p.bBox(x)).width,v=n.height):(c=(n=p.bBox(mt.node())).right-B.l-(o?rt:st),v=n.bottom-B.t-(o?st:rt),o||\"top\"!==V||(s+=n.height,g=n.height)),m&&(dt.attr(\"transform\",u(c/2+yt/2,0)),c*=2),s=Math.max(s,o?c:v)}var _=2*(o?I:P)+s+S+M/2,w=0;!o&&U.text&&\"bottom\"===L&&O<=0&&(_+=w=_/2,g+=w),F._hColorbarMoveTitle=w,F._hColorbarMoveCBTitle=g;var N=S+M,j=(o?rt:st)-N/2-(o?I:0),q=(o?st:rt)-(o?K:P+g-w);t.select(\".\"+A.cbbg).attr(\"x\",j).attr(\"y\",q).attr(o?\"width\":\"height\",Math.max(_-w,2)).attr(o?\"height\":\"width\",Math.max(K+N,2)).call(d.fill,E).call(d.stroke,e.bordercolor).style(\"stroke-width\",S);var H=m?Math.max(c-10,0):0;t.selectAll(\".\"+A.cboutline).attr(\"x\",(o?rt:st+I)+H).attr(\"y\",(o?st+P-K:rt)+(h?xt:0)).attr(o?\"width\":\"height\",Math.max($,2)).attr(o?\"height\":\"width\",Math.max(K-(o?2*P+xt:2*I+H),2)).call(d.stroke,e.outlinecolor).style({fill:\"none\",\"stroke-width\":M});var G=o?nt*_:0,Z=o?0:(1-it)*_-g;if(G=R?B.l-G:-G,Z=D?B.t-Z:-Z,t.attr(\"transform\",u(G,Z)),!o&&(S||i(E).getAlpha()&&!i.equals(F.paper_bgcolor,E))){var W=vt.selectAll(\"text\"),Y=W[0].length,X=t.select(\".\"+A.cbbg).node(),J=p.bBox(X),Q=p.getTranslate(t);W.each((function(t,e){var r=Y-1;if(0===e||e===r){var n,i=p.bBox(this),a=p.getTranslate(this);if(e===r){var o=i.right+a.x;(n=J.right+Q.x+st-S-2+z-o)>0&&(n=0)}else if(0===e){var s=i.left+a.x;(n=J.left+Q.x+st+S+2-s)<0&&(n=0)}n&&(Y<3?this.setAttribute(\"transform\",\"translate(\"+n+\",0) \"+this.getAttribute(\"transform\")):this.setAttribute(\"visibility\",\"hidden\"))}}))}var tt={},et=T[C],at=k[C],ot=T[L],ut=k[L],ht=_-$;o?(\"pixels\"===f?(tt.y=O,tt.t=K*ot,tt.b=K*ut):(tt.t=tt.b=0,tt.yt=O+l*ot,tt.yb=O-l*ut),\"pixels\"===b?(tt.x=z,tt.l=_*et,tt.r=_*at):(tt.l=ht*et,tt.r=ht*at,tt.xl=z-y*et,tt.xr=z+y*at)):(\"pixels\"===f?(tt.x=z,tt.l=K*et,tt.r=K*at):(tt.l=tt.r=0,tt.xl=z+l*et,tt.xr=z-l*at),\"pixels\"===b?(tt.y=1-O,tt.t=_*ot,tt.b=_*ut):(tt.t=ht*ot,tt.b=ht*ut,tt.yt=O-y*ot,tt.yb=O+y*ut));var ft=e.y<.5?\"b\":\"t\",pt=e.x<.5?\"l\":\"r\";r._fullLayout._reservedMargin[e._id]={};var _t={r:F.width-j-G,l:j+tt.r,b:F.height-q-Z,t:q+tt.b};R&&D?a.autoMargin(r,e._id,tt):R?r._fullLayout._reservedMargin[e._id][ft]=_t[ft]:D||o?r._fullLayout._reservedMargin[e._id][pt]=_t[pt]:r._fullLayout._reservedMargin[e._id][ft]=_t[ft]}],r)}(r,e,t);y&&y.then&&(t._promises||[]).push(y),t._context.edits.colorbarPosition&&function(t,e,r){var n,i,a,s=\"v\"===e.orientation,c=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr(\"transform\"),f(t)},moveFn:function(r,o){t.attr(\"transform\",n+u(r,o)),i=l.align((s?e._uFrac:e._vFrac)+r/c.w,s?e._thickFrac:e._lenFrac,0,1,e.xanchor),a=l.align((s?e._vFrac:1-e._uFrac)-o/c.h,s?e._lenFrac:e._thickFrac,0,1,e.yanchor);var h=l.getCursor(i,a,e.xanchor,e.yanchor);f(t,h)},doneFn:function(){if(f(t),void 0!==i&&void 0!==a){var n={};n[e._propPrefix+\"x\"]=i,n[e._propPrefix+\"y\"]=a,void 0!==e._traceIndex?o.call(\"_guiRestyle\",r,n,e._traceIndex):o.call(\"_guiRelayout\",r,n)}}})}(r,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},91362:function(t,e,r){\"use strict\";var n=r(34809);t.exports=function(t){return n.isPlainObject(t.colorbar)}},96919:function(t,e,r){\"use strict\";t.exports={moduleType:\"component\",name:\"colorbar\",attributes:r(25158),supplyDefaults:r(42097),draw:r(5881).draw,hasColorbar:r(91362)}},87163:function(t,e,r){\"use strict\";var n=r(25158),i=r(90694).counter,a=r(62994),o=r(19017).scales;function s(t){return\"`\"+t+\"`\"}a(o),t.exports=function(t,e){t=t||\"\";var r,a=(e=e||{}).cLetter||\"c\",l=(\"onlyIfNumerical\"in e?e.onlyIfNumerical:Boolean(t),\"noScale\"in e?e.noScale:\"marker.line\"===t),c=\"showScaleDflt\"in e?e.showScaleDflt:\"z\"===a,u=\"string\"==typeof e.colorscaleDflt?o[e.colorscaleDflt]:null,h=e.editTypeOverride||\"\",f=t?t+\".\":\"\";\"colorAttr\"in e?(r=e.colorAttr,e.colorAttr):s(f+(r={z:\"z\",c:\"color\"}[a]));var p=a+\"auto\",d=a+\"min\",m=a+\"max\",g=a+\"mid\",y=(s(f+p),s(f+d),s(f+m),{});y[d]=y[m]=void 0;var v={};v[p]=!1;var x={};return\"color\"===r&&(x.color={valType:\"color\",arrayOk:!0,editType:h||\"style\"},e.anim&&(x.color.anim=!0)),x[p]={valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:y},x[d]={valType:\"number\",dflt:null,editType:h||\"plot\",impliedEdits:v},x[m]={valType:\"number\",dflt:null,editType:h||\"plot\",impliedEdits:v},x[g]={valType:\"number\",dflt:null,editType:\"calc\",impliedEdits:y},x.colorscale={valType:\"colorscale\",editType:\"calc\",dflt:u,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:\"boolean\",dflt:!1!==e.autoColorDflt,editType:\"calc\",impliedEdits:{colorscale:void 0}},x.reversescale={valType:\"boolean\",dflt:!1,editType:\"plot\"},l||(x.showscale={valType:\"boolean\",dflt:c,editType:\"calc\"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:\"subplotid\",regex:i(\"coloraxis\"),dflt:null,editType:\"calc\"}),x}},28379:function(t,e,r){\"use strict\";var n=r(10721),i=r(34809),a=r(65477).extractOpts;t.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,c=r.containerStr,u=c?i.nestedProperty(e,c).get():e,h=a(u),f=!1!==h.auto,p=h.min,d=h.max,m=h.mid,g=function(){return i.aggNums(Math.min,null,l)},y=function(){return i.aggNums(Math.max,null,l)};void 0===p?p=g():f&&(p=u._colorAx&&n(p)?Math.min(p,g()):g()),void 0===d?d=y():f&&(d=u._colorAx&&n(d)?Math.max(d,y()):y()),f&&void 0!==m&&(d-m>m-p?p=m-(d-m):d-m=0?s.colorscale.sequential:s.colorscale.sequentialminus,h._sync(\"colorscale\",o))}},67623:function(t,e,r){\"use strict\";var n=r(34809),i=r(65477).hasColorscale,a=r(65477).extractOpts;t.exports=function(t,e){function r(t,e){var r=t[\"_\"+e];void 0!==r&&(t[e]=r)}function o(t,i){var o=i.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=a(o),l=s.auto;(l||void 0===s.min)&&r(o,i.min),(l||void 0===s.max)&&r(o,i.max),s.autocolorscale&&r(o,\"colorscale\")}}for(var s=0;s=0;n--,i++){var a=t[n];r[i]=[1-a[0],a[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,c=new Array(l),u=0;u4/3-s?o:s}},4001:function(t,e,r){\"use strict\";var n=r(34809),i=[[\"sw-resize\",\"s-resize\",\"se-resize\"],[\"w-resize\",\"move\",\"e-resize\"],[\"nw-resize\",\"n-resize\",\"ne-resize\"]];t.exports=function(t,e,r,a){return t=\"left\"===r?0:\"center\"===r?1:\"right\"===r?2:n.constrain(Math.floor(3*t),0,2),e=\"bottom\"===a?0:\"middle\"===a?1:\"top\"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},70414:function(t,e){\"use strict\";e.selectMode=function(t){return\"lasso\"===t||\"select\"===t},e.drawMode=function(t){return\"drawclosedpath\"===t||\"drawopenpath\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},e.openMode=function(t){return\"drawline\"===t||\"drawopenpath\"===t},e.rectMode=function(t){return\"select\"===t||\"drawline\"===t||\"drawrect\"===t||\"drawcircle\"===t},e.freeMode=function(t){return\"lasso\"===t||\"drawclosedpath\"===t||\"drawopenpath\"===t},e.selectingOrDrawing=function(t){return e.freeMode(t)||e.rectMode(t)}},14751:function(t,e,r){\"use strict\";var n=r(44039),i=r(39784),a=r(74043),o=r(34809).removeElement,s=r(54826),l=t.exports={};l.align=r(53770),l.getCursor=r(4001);var c=r(60148);function u(){var t=document.createElement(\"div\");t.className=\"dragcover\";var e=t.style;return e.position=\"fixed\",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background=\"none\",document.body.appendChild(t),t}function h(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=c.wrapped,l.unhoverRaw=c.raw,l.init=function(t){var e,r,n,c,f,p,d,m,g=t.gd,y=1,v=g._context.doubleClickDelay,x=t.element;g._mouseDownTime||(g._mouseDownTime=0),x.style.pointerEvents=\"all\",x.onmousedown=b,a?(x._ontouchstart&&x.removeEventListener(\"touchstart\",x._ontouchstart),x._ontouchstart=b,x.addEventListener(\"touchstart\",b,{passive:!1})):x.ontouchstart=b;var _=t.clampFn||function(t,e,r){return Math.abs(t)v&&(y=Math.max(y-1,1)),g._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(y,p),!m){var r;try{r=new MouseEvent(\"click\",e)}catch(t){var n=h(e);(r=document.createEvent(\"MouseEvents\")).initMouseEvent(\"click\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}g._dragging=!1,g._dragged=!1}else g._dragged=!1}},l.coverSlip=u},60148:function(t,e,r){\"use strict\";var n=r(68596),i=r(64025),a=r(95425).getGraphDiv,o=r(85988),s=t.exports={};s.wrapped=function(t,e,r){(t=a(t))._fullLayout&&i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!t._dragged&&!1===n.triggerHandler(t,\"plotly_beforehover\",e)||(r._hoverlayer.selectAll(\"g\").remove(),r._hoverlayer.selectAll(\"line\").remove(),r._hoverlayer.selectAll(\"circle\").remove(),t._hoverdata=void 0,e.target&&i&&t.emit(\"plotly_unhover\",{event:e,points:i}))}},94850:function(t,e){\"use strict\";e.T={valType:\"string\",values:[\"solid\",\"dot\",\"dash\",\"longdash\",\"dashdot\",\"longdashdot\"],dflt:\"solid\",editType:\"style\"},e.k={shape:{valType:\"enumerated\",values:[\"\",\"/\",\"\\\\\",\"x\",\"-\",\"|\",\"+\",\".\"],dflt:\"\",arrayOk:!0,editType:\"style\"},fillmode:{valType:\"enumerated\",values:[\"replace\",\"overlay\"],dflt:\"replace\",editType:\"style\"},bgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgopacity:{valType:\"number\",editType:\"style\",min:0,max:1},size:{valType:\"number\",min:0,dflt:8,arrayOk:!0,editType:\"style\"},solidity:{valType:\"number\",min:0,max:1,dflt:.3,arrayOk:!0,editType:\"style\"},editType:\"style\"}},62203:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809),a=i.numberFormat,o=r(10721),s=r(65657),l=r(33626),c=r(78766),u=r(88856),h=i.strTranslate,f=r(30635),p=r(62972),d=r(4530).LINE_SPACING,m=r(20438).DESELECTDIM,g=r(64726),y=r(92527),v=r(36040).appendArrayPointValue,x=t.exports={};function _(t){return\"none\"===t?void 0:t}x.font=function(t,e){var r=e.variant,n=e.style,i=e.weight,a=e.color,o=e.size,s=e.family,l=e.shadow,u=e.lineposition,h=e.textcase;s&&t.style(\"font-family\",s),o+1&&t.style(\"font-size\",o+\"px\"),a&&t.call(c.fill,a),i&&t.style(\"font-weight\",i),n&&t.style(\"font-style\",n),r&&t.style(\"font-variant\",r),h&&t.style(\"text-transform\",_(function(t){return b[t]}(h))),l&&t.style(\"text-shadow\",\"auto\"===l?f.makeTextShadow(c.contrast(a)):_(l)),u&&t.style(\"text-decoration-line\",_(function(t){return t.replace(\"under\",\"underline\").replace(\"over\",\"overline\").replace(\"through\",\"line-through\").split(\"+\").join(\" \")}(u)))};var b={normal:\"none\",lower:\"lowercase\",upper:\"uppercase\",\"word caps\":\"capitalize\"};function w(t,e,r,n){var i=e.fillpattern,a=e.fillgradient,o=i&&x.getPatternAttr(i.shape,0,\"\");if(o){var s=x.getPatternAttr(i.bgcolor,0,null),l=x.getPatternAttr(i.fgcolor,0,null),u=i.fgopacity,h=x.getPatternAttr(i.size,0,8),f=x.getPatternAttr(i.solidity,0,.3),p=e.uid;x.pattern(t,\"point\",r,p,o,h,f,void 0,i.fillmode,s,l,u)}else if(a&&\"none\"!==a.type){var d,m,g=a.type,y=\"scatterfill-\"+e.uid;n&&(y=\"legendfill-\"+e.uid),n||void 0===a.start&&void 0===a.stop?(\"horizontal\"===g&&(g+=\"reversed\"),t.call(x.gradient,r,y,g,a.colorscale,\"fill\")):(\"horizontal\"===g?(d={x:a.start,y:0},m={x:a.stop,y:0}):\"vertical\"===g&&(d={x:0,y:a.start},m={x:0,y:a.stop}),d.x=e._xA.c2p(void 0===d.x?e._extremes.x.min[0].val:d.x,!0),d.y=e._yA.c2p(void 0===d.y?e._extremes.y.min[0].val:d.y,!0),m.x=e._xA.c2p(void 0===m.x?e._extremes.x.max[0].val:m.x,!0),m.y=e._yA.c2p(void 0===m.y?e._extremes.y.max[0].val:m.y,!0),t.call(E,r,y,\"linear\",a.colorscale,\"fill\",d,m,!0,!1))}else e.fillcolor&&t.call(c.fill,e.fillcolor)}x.setPosition=function(t,e,r){t.attr(\"x\",e).attr(\"y\",r)},x.setSize=function(t,e,r){t.attr(\"width\",e).attr(\"height\",r)},x.setRect=function(t,e,r,n,i){t.call(x.setPosition,e,r).call(x.setSize,n,i)},x.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),a=n.c2p(t.y);return!!(o(i)&&o(a)&&e.node())&&(\"text\"===e.node().nodeName?e.attr(\"x\",i).attr(\"y\",a):e.attr(\"transform\",h(i,a)),!0)},x.translatePoints=function(t,e,r){t.each((function(t){var i=n.select(this);x.translatePoint(t,i,e,r)}))},x.hideOutsideRangePoint=function(t,e,r,n,i,a){e.attr(\"display\",r.isPtWithinRange(t,i)&&n.isPtWithinRange(t,a)?null:\"none\")},x.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,i=e.yaxis;t.each((function(e){var a=e[0].trace,o=a.xcalendar,s=a.ycalendar,c=l.traceIs(a,\"bar-like\")?\".bartext\":\".point,.textpoint\";t.selectAll(c).each((function(t){x.hideOutsideRangePoint(t,n.select(this),r,i,o,s)}))}))}},x.crispRound=function(t,e,r){return e&&o(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},x.singleLineStyle=function(t,e,r,n,i){e.style(\"fill\",\"none\");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,s=i||a.dash||\"\";c.stroke(e,n||a.color),x.dashLine(e,s,o)},x.lineGroupStyle=function(t,e,r,i){t.style(\"fill\",\"none\").each((function(t){var a=(((t||[])[0]||{}).trace||{}).line||{},o=e||a.width||0,s=i||a.dash||\"\";n.select(this).call(c.stroke,r||a.color).call(x.dashLine,s,o)}))},x.dashLine=function(t,e,r){r=+r||0,e=x.dashStyle(e,r),t.style({\"stroke-dasharray\":e,\"stroke-width\":r+\"px\"})},x.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return\"solid\"===t?t=\"\":\"dot\"===t?t=r+\"px,\"+r+\"px\":\"dash\"===t?t=3*r+\"px,\"+3*r+\"px\":\"longdash\"===t?t=5*r+\"px,\"+5*r+\"px\":\"dashdot\"===t?t=3*r+\"px,\"+r+\"px,\"+r+\"px,\"+r+\"px\":\"longdashdot\"===t&&(t=5*r+\"px,\"+2*r+\"px,\"+r+\"px,\"+2*r+\"px\"),t},x.singleFillStyle=function(t,e){var r=n.select(t.node());w(t,((r.data()[0]||[])[0]||{}).trace||{},e,!1)},x.fillGroupStyle=function(t,e,r){t.style(\"stroke-width\",0).each((function(t){var i=n.select(this);t[0].trace&&w(i,t[0].trace,e,r)}))};var T=r(38882);x.symbolNames=[],x.symbolFuncs=[],x.symbolBackOffs=[],x.symbolNeedLines={},x.symbolNoDot={},x.symbolNoFill={},x.symbolList=[],Object.keys(T).forEach((function(t){var e=T[t],r=e.n;x.symbolList.push(r,String(r),t,r+100,String(r+100),t+\"-open\"),x.symbolNames[r]=t,x.symbolFuncs[r]=e.f,x.symbolBackOffs[r]=e.backoff||0,e.needLine&&(x.symbolNeedLines[r]=!0),e.noDot?x.symbolNoDot[r]=!0:x.symbolList.push(r+200,String(r+200),t+\"-dot\",r+300,String(r+300),t+\"-open-dot\"),e.noFill&&(x.symbolNoFill[r]=!0)}));var k=x.symbolNames.length;function A(t,e,r,n){var i=t%100;return x.symbolFuncs[i](e,r,n)+(t>=200?\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\":\"\")}x.symbolNumber=function(t){if(o(t))t=+t;else if(\"string\"==typeof t){var e=0;t.indexOf(\"-open\")>0&&(e=100,t=t.replace(\"-open\",\"\")),t.indexOf(\"-dot\")>0&&(e+=200,t=t.replace(\"-dot\",\"\")),(t=x.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=k||t>=400?0:Math.floor(Math.max(t,0))};var M=a(\"~f\"),S={radial:{type:\"radial\"},radialreversed:{type:\"radial\",reversed:!0},horizontal:{type:\"linear\",start:{x:1,y:0},stop:{x:0,y:0}},horizontalreversed:{type:\"linear\",start:{x:1,y:0},stop:{x:0,y:0},reversed:!0},vertical:{type:\"linear\",start:{x:0,y:1},stop:{x:0,y:0}},verticalreversed:{type:\"linear\",start:{x:0,y:1},stop:{x:0,y:0},reversed:!0}};function E(t,e,r,a,o,l,u,h,f,p){var d,m=o.length;\"linear\"===a?d={node:\"linearGradient\",attrs:{x1:u.x,y1:u.y,x2:h.x,y2:h.y,gradientUnits:f?\"userSpaceOnUse\":\"objectBoundingBox\"},reversed:p}:\"radial\"===a&&(d={node:\"radialGradient\",reversed:p});for(var g=new Array(m),y=0;y=0&&void 0===t.i&&(t.i=o.i),e.style(\"opacity\",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?s.opacity:t.mo),n.ms2mrc){var u;u=\"various\"===t.ms||\"various\"===s.size?3:n.ms2mrc(t.ms),t.mrc=u,n.selectedSizeFn&&(u=t.mrc=n.selectedSizeFn(t));var h=x.symbolNumber(t.mx||s.symbol)||0;t.om=h%200>=100;var f=nt(t,r),p=Z(t,r);e.attr(\"d\",A(h,u,f,p))}var d,m,g,y=!1;if(t.so)g=l.outlierwidth,m=l.outliercolor,d=s.outliercolor;else{var v=(l||{}).width;g=(t.mlw+1||v+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,m=\"mlc\"in t?t.mlcc=n.lineScale(t.mlc):i.isArrayOrTypedArray(l.color)?c.defaultLine:l.color,i.isArrayOrTypedArray(s.color)&&(d=c.defaultLine,y=!0),d=\"mc\"in t?t.mcc=n.markerScale(t.mc):s.color||s.colors||\"rgba(0,0,0,0)\",n.selectedColorFn&&(d=n.selectedColorFn(t))}if(t.om)e.call(c.stroke,d).style({\"stroke-width\":(g||1)+\"px\",fill:\"none\"});else{e.style(\"stroke-width\",(t.isBlank?0:g)+\"px\");var _=s.gradient,b=t.mgt;b?y=!0:b=_&&_.type,i.isArrayOrTypedArray(b)&&(b=b[0],S[b]||(b=0));var w=s.pattern,T=w&&x.getPatternAttr(w.shape,t.i,\"\");if(b&&\"none\"!==b){var k=t.mgc;k?y=!0:k=_.color;var M=r.uid;y&&(M+=\"-\"+t.i),x.gradient(e,a,M,b,[[0,k],[1,d]],\"fill\")}else if(T){var E=!1,C=w.fgcolor;!C&&o&&o.color&&(C=o.color,E=!0);var L=x.getPatternAttr(C,t.i,o&&o.color||null),I=x.getPatternAttr(w.bgcolor,t.i,null),P=w.fgopacity,z=x.getPatternAttr(w.size,t.i,8),O=x.getPatternAttr(w.solidity,t.i,.3);E=E||t.mcc||i.isArrayOrTypedArray(w.shape)||i.isArrayOrTypedArray(w.bgcolor)||i.isArrayOrTypedArray(w.fgcolor)||i.isArrayOrTypedArray(w.size)||i.isArrayOrTypedArray(w.solidity);var D=r.uid;E&&(D+=\"-\"+t.i),x.pattern(e,\"point\",a,D,T,z,O,t.mcc,w.fillmode,I,L,P)}else i.isArrayOrTypedArray(d)?c.fill(e,d[t.i]):c.fill(e,d);g&&c.stroke(e,m)}},x.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=x.tryColorscale(r,\"\"),e.lineScale=x.tryColorscale(r,\"line\"),l.traceIs(t,\"symbols\")&&(e.ms2mrc=g.isBubble(t)?y(t):function(){return(r.size||6)/2}),t.selectedpoints&&i.extendFlat(e,x.makeSelectedPointStyleFns(t)),e},x.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},o=r.marker||{},s=n.marker||{},c=a.opacity,u=o.opacity,h=s.opacity,f=void 0!==u,p=void 0!==h;(i.isArrayOrTypedArray(c)||f||p)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?f?u:e:p?h:m*e});var d=a.color,g=o.color,y=s.color;(g||y)&&(e.selectedColorFn=function(t){var e=t.mcc||d;return t.selected?g||e:y||e});var v=a.size,x=o.size,_=s.size,b=void 0!==x,w=void 0!==_;return l.traceIs(t,\"symbols\")&&(b||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||v/2;return t.selected?b?x/2:e:w?_/2:e}),e},x.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},i=t.textfont||{},a=r.textfont||{},o=n.textfont||{},s=i.color,l=a.color,u=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||s;return t.selected?l||e:u||(l?e:c.addOpacity(e,m))},e},x.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedPointStyleFns(e),i=e.marker||{},a=[];r.selectedOpacityFn&&a.push((function(t,e){t.style(\"opacity\",r.selectedOpacityFn(e))})),r.selectedColorFn&&a.push((function(t,e){c.fill(t,r.selectedColorFn(e))})),r.selectedSizeFn&&a.push((function(t,n){var a=n.mx||i.symbol||0,o=r.selectedSizeFn(n);t.attr(\"d\",A(x.symbolNumber(a),o,nt(n,e),Z(n,e))),n.mrc2=o})),a.length&&t.each((function(t){for(var e=n.select(this),r=0;r0?r:0}function O(t,e,r){return r&&(t=j(t)),e?R(t[1]):D(t[0])}function D(t){var e=n.round(t,2);return C=e,e}function R(t){var e=n.round(t,2);return L=e,e}function F(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),c=Math.pow(o*o+s*s,.25),u=(c*c*i-l*l*o)*n,h=(c*c*a-l*l*s)*n,f=3*c*(l+c),p=3*l*(l+c);return[[D(e[0]+(f&&u/f)),R(e[1]+(f&&h/f))],[D(e[0]-(p&&u/p)),R(e[1]-(p&&h/p))]]}x.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var o=x.makeSelectedTextStyleFns(e);a=o.selectedTextColorFn}var s=e.texttemplate,l=r._fullLayout;t.each((function(t){var o=n.select(this),c=s?i.extractOption(t,e,\"txt\",\"texttemplate\"):i.extractOption(t,e,\"tx\",\"text\");if(c||0===c){if(s){var u=e._module.formatLabels,h=u?u(t,e,l):{},p={};v(p,e,t.i);var d=e._meta||{};c=i.texttemplateString(c,h,l._d3locale,p,t,d)}var m=t.tp||e.textposition,g=z(t,e),y=a?a(t):t.tc||e.textfont.color;o.call(x.font,{family:t.tf||e.textfont.family,weight:t.tw||e.textfont.weight,style:t.ty||e.textfont.style,variant:t.tv||e.textfont.variant,textcase:t.tC||e.textfont.textcase,lineposition:t.tE||e.textfont.lineposition,shadow:t.tS||e.textfont.shadow,size:g,color:y}).text(c).call(f.convertToTspans,r).call(P,m,g,t.mrc)}else o.remove()}))}},x.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=x.makeSelectedTextStyleFns(e);t.each((function(t){var i=n.select(this),a=r.selectedTextColorFn(t),o=t.tp||e.textposition,s=z(t,e);c.fill(i,a);var u=l.traceIs(e,\"bar-like\");P(i,o,s,t.mrc2||t.mrc,u)}))}},x.smoothopen=function(t,e){if(t.length<3)return\"M\"+t.join(\"L\");var r,n=\"M\"+t[0],i=[];for(r=1;r=c||w>=h&&w<=c)&&(T<=f&&T>=u||T>=f&&T<=u)&&(t=[w,T])}return t}x.steps=function(t){var e=B[t]||N;return function(t){for(var r=\"M\"+D(t[0][0])+\",\"+R(t[0][1]),n=t.length,i=1;i=1e4&&(x.savedBBoxes={},U=0),r&&(x.savedBBoxes[r]=g),U++,i.extendFlat({},g)},x.setClipUrl=function(t,e,r){t.attr(\"clip-path\",q(e,r))},x.getTranslate=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||0,y:+e[1]||0}},x.setTranslate=function(t,e,r){var n=t.attr?\"attr\":\"getAttribute\",i=t.attr?\"attr\":\"setAttribute\",a=t[n](\"transform\")||\"\";return e=e||0,r=r||0,a=a.replace(/(\\btranslate\\(.*?\\);?)/,\"\").trim(),a=(a+=h(e,r)).trim(),t[i](\"transform\",a),a},x.getScale=function(t){var e=(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||1,y:+e[1]||1}},x.setScale=function(t,e,r){var n=t.attr?\"attr\":\"getAttribute\",i=t.attr?\"attr\":\"setAttribute\",a=t[n](\"transform\")||\"\";return e=e||1,r=r||1,a=a.replace(/(\\bscale\\(.*?\\);?)/,\"\").trim(),a=(a+=\"scale(\"+e+\",\"+r+\")\").trim(),t[i](\"transform\",a),a};var H=/\\s*sc.*/;x.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?\"\":\"scale(\"+e+\",\"+r+\")\";t.each((function(){var t=(this.getAttribute(\"transform\")||\"\").replace(H,\"\");t=(t+=n).trim(),this.setAttribute(\"transform\",t)}))}};var G=/translate\\([^)]*\\)\\s*$/;function Z(t,e){var r;return t&&(r=t.mf),void 0===r&&(r=e.marker&&e.marker.standoff||0),e._geo||e._xA?r:-r}x.setTextPointsScale=function(t,e,r){t&&t.each((function(){var t,i=n.select(this),a=i.select(\"text\");if(a.node()){var o=parseFloat(a.attr(\"x\")||0),s=parseFloat(a.attr(\"y\")||0),l=(i.attr(\"transform\")||\"\").match(G);t=1===e&&1===r?[]:[h(o,s),\"scale(\"+e+\",\"+r+\")\",h(-o,-s)],l&&t.push(l),i.attr(\"transform\",t.join(\"\"))}}))},x.getMarkerStandoff=Z;var W,Y,X,$,J,K,Q=Math.atan2,tt=Math.cos,et=Math.sin;function rt(t,e){var r=e[0],n=e[1];return[r*tt(t)-n*et(t),r*et(t)+n*tt(t)]}function nt(t,e){var r,n,a=t.ma;void 0===a&&((a=e.marker.angle)&&!i.isArrayOrTypedArray(a)||(a=0));var s=e.marker.angleref;if(\"previous\"===s||\"north\"===s){if(e._geo){var l=e._geo.project(t.lonlat);r=l[0],n=l[1]}else{var c=e._xA,u=e._yA;if(!c||!u)return 90;r=c.c2p(t.x),n=u.c2p(t.y)}if(e._geo){var h,f=t.lonlat[0],p=t.lonlat[1],d=e._geo.project([f,p+1e-5]),m=e._geo.project([f+1e-5,p]),g=Q(m[1]-n,m[0]-r),y=Q(d[1]-n,d[0]-r);if(\"north\"===s)h=a/180*Math.PI;else if(\"previous\"===s){var v=f/180*Math.PI,x=p/180*Math.PI,_=W/180*Math.PI,b=Y/180*Math.PI,w=_-v,T=tt(b)*et(w),k=et(b)*tt(x)-tt(b)*et(x)*tt(w);h=-Q(T,k)-Math.PI,W=f,Y=p}var A=rt(g,[tt(h),0]),M=rt(y,[et(h),0]);a=Q(A[1]+M[1],A[0]+M[0])/Math.PI*180,\"previous\"!==s||K===e.uid&&t.i===J+1||(a=null)}if(\"previous\"===s&&!e._geo)if(K===e.uid&&t.i===J+1&&o(r)&&o(n)){var S=r-X,E=n-$,C=e.line&&e.line.shape||\"\",L=C.slice(C.length-1);\"h\"===L&&(E=0),\"v\"===L&&(S=0),a+=Q(E,S)/Math.PI*180+90}else a=null}return X=r,$=n,J=t.i,K=e.uid,a}x.getMarkerAngle=nt},38882:function(t,e,r){\"use strict\";var n,i,a,o,s=r(26953),l=r(45568).round,c=\"M0,0Z\",u=Math.sqrt(2),h=Math.sqrt(3),f=Math.PI,p=Math.cos,d=Math.sin;function m(t){return null===t}function g(t,e,r){if(!(t&&t%360!=0||e))return r;if(a===t&&o===e&&n===r)return i;function l(t,r){var n=p(t),i=d(t),a=r[0],o=r[1]+(e||0);return[a*n-o*i,a*i+o*n]}a=t,o=e,n=r;for(var c=t/180*f,u=0,h=0,m=s(r),g=\"\",y=0;y0,h=t._context.staticPlot;e.each((function(e){var f,p=e[0].trace,d=p.error_x||{},m=p.error_y||{};p.ids&&(f=function(t){return t.id});var g=o.hasMarkers(p)&&p.marker.maxdisplayed>0;m.visible||d.visible||(e=[]);var y=n.select(this).selectAll(\"g.errorbar\").data(e,f);if(y.exit().remove(),e.length){d.visible||y.selectAll(\"path.xerror\").remove(),m.visible||y.selectAll(\"path.yerror\").remove(),y.style(\"opacity\",1);var v=y.enter().append(\"g\").classed(\"errorbar\",!0);u&&v.style(\"opacity\",0).transition().duration(s.duration).style(\"opacity\",1),a.setClipUrl(y,r.layerClipId,t),y.each((function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};return void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),i(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0))),void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),i(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0))),n}(t,l,c);if(!g||t.vis){var a,o=e.select(\"path.yerror\");if(m.visible&&i(r.x)&&i(r.yh)&&i(r.ys)){var f=m.width;a=\"M\"+(r.x-f)+\",\"+r.yh+\"h\"+2*f+\"m-\"+f+\",0V\"+r.ys,r.noYS||(a+=\"m-\"+f+\",0h\"+2*f),o.size()?u&&(o=o.transition().duration(s.duration).ease(s.easing)):o=e.append(\"path\").style(\"vector-effect\",h?\"none\":\"non-scaling-stroke\").classed(\"yerror\",!0),o.attr(\"d\",a)}else o.remove();var p=e.select(\"path.xerror\");if(d.visible&&i(r.y)&&i(r.xh)&&i(r.xs)){var y=(d.copy_ystyle?m:d).width;a=\"M\"+r.xh+\",\"+(r.y-y)+\"v\"+2*y+\"m0,-\"+y+\"H\"+r.xs,r.noXS||(a+=\"m0,-\"+y+\"v\"+2*y),p.size()?u&&(p=p.transition().duration(s.duration).ease(s.easing)):p=e.append(\"path\").style(\"vector-effect\",h?\"none\":\"non-scaling-stroke\").classed(\"xerror\",!0),p.attr(\"d\",a)}else p.remove()}}))}}))}},22800:function(t,e,r){\"use strict\";var n=r(45568),i=r(78766);t.exports=function(t){t.each((function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll(\"path.yerror\").style(\"stroke-width\",r.thickness+\"px\").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll(\"path.xerror\").style(\"stroke-width\",a.thickness+\"px\").call(i.stroke,a.color)}))}},70192:function(t,e,r){\"use strict\";var n=r(80337),i=r(6811).hoverlabel,a=r(93049).extendFlat;t.exports={hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:\"none\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\"none\"}}},83552:function(t,e,r){\"use strict\";var n=r(34809),i=r(33626);function a(t,e,r,i){i=i||n.identity,Array.isArray(t)&&(e[0][r]=i(t))}t.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s=0&&r.index$[0]._length||bt<0||bt>J[0]._length)return m.unhoverRaw(t,e)}else _t=\"xpx\"in e?e.xpx:$[0]._length/2,bt=\"ypx\"in e?e.ypx:J[0]._length/2;if(e.pointerX=_t+$[0]._offset,e.pointerY=bt+J[0]._offset,nt=\"xval\"in e?x.flat(_,e.xval):x.p2c($,_t),it=\"yval\"in e?x.flat(_,e.yval):x.p2c(J,bt),!i(nt[0])||!i(it[0]))return o.warn(\"Fx.hover failed\",e,t),m.unhoverRaw(t,e)}var At=1/0;function Mt(r,n){for(ot=0;otmt&&(gt.splice(0,mt),At=gt[0].distance),M&&0!==rt&&0===gt.length){dt.distance=rt,dt.index=!1;var u=lt._module.hoverPoints(dt,ft,pt,\"closest\",{hoverLayer:b._hoverlayer});if(u&&(u=u.filter((function(t){return t.spikeDistance<=rt}))),u&&u.length){var h,f=u.filter((function(t){return t.xa.showspikes&&\"hovered data\"!==t.xa.spikesnap}));if(f.length){var p=f[0];i(p.x0)&&i(p.y0)&&(h=Et(p),(!vt.vLinePoint||vt.vLinePoint.spikeDistance>h.spikeDistance)&&(vt.vLinePoint=h))}var m=u.filter((function(t){return t.ya.showspikes&&\"hovered data\"!==t.ya.spikesnap}));if(m.length){var g=m[0];i(g.x0)&&i(g.y0)&&(h=Et(g),(!vt.hLinePoint||vt.hLinePoint.spikeDistance>h.spikeDistance)&&(vt.hLinePoint=h))}}}}}function St(t,e,r){for(var n,i=null,a=1/0,o=0;o0&&Math.abs(t.distance)Nt-1;jt--)Ht(gt[jt]);gt=Ut,Pt()}var Gt=t._hoverdata,Zt=[],Wt=H(t),Yt=G(t);for(at=0;at1||gt.length>1)||\"closest\"===S&&xt&>.length>1,se=d.combine(b.plot_bgcolor||d.background,b.paper_bgcolor),le=D(gt,{gd:t,hovermode:S,rotateLabels:oe,bgColor:se,container:b._hoverlayer,outerContainer:b._paper.node(),commonLabelOpts:b.hoverlabel,hoverdistance:b.hoverdistance}),ce=le.hoverLabels;if(x.isUnifiedHover(S)||(function(t,e,r,n){var i,a,o,s,l,c,u,h=e?\"xa\":\"ya\",f=e?\"ya\":\"xa\",p=0,d=1,m=t.size(),g=new Array(m),y=0,v=n.minX,x=n.maxX,_=n.minY,b=n.maxY,w=function(t){return t*r._invScaleX},T=function(t){return t*r._invScaleY};function k(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,o=r.pos+r.dp+r.size-e.pmax,a>.01){for(l=t.length-1;l>=0;l--)t[l].dp+=a;i=!1}if(!(o<.01)){if(a<-.01){for(l=t.length-1;l>=0;l--)t[l].dp-=o;i=!1}if(i){var n=0;for(s=0;se.pmax&&n++;for(s=t.length-1;s>=0&&!(n<=0);s--)(c=t[s]).pos>e.pmax-1&&(c.del=!0,n--);for(s=0;s=0;l--)t[l].dp-=o;for(s=t.length-1;s>=0&&!(n<=0);s--)(c=t[s]).pos+c.dp+c.size>e.pmax&&(c.del=!0,n--)}}}for(t.each((function(t){var n=t[h],i=t[f],a=\"x\"===n._id.charAt(0),o=n.range;0===y&&o&&o[0]>o[1]!==a&&(d=-1);var s=0,l=a?r.width:r.height;if(\"x\"===r.hovermode||\"y\"===r.hovermode){var c,u,p=F(t,e),m=t.anchor,k=\"end\"===m?-1:1;if(\"middle\"===m)u=(c=t.crossPos+(a?T(p.y-t.by/2):w(t.bx/2+t.tx2width/2)))+(a?T(t.by):w(t.bx));else if(a)u=(c=t.crossPos+T(E+p.y)-T(t.by/2-E))+T(t.by);else{var M=w(k*E+p.x),S=M+w(k*t.bx);c=t.crossPos+Math.min(M,S),u=t.crossPos+Math.max(M,S)}a?void 0!==_&&void 0!==b&&Math.min(u,b)-Math.max(c,_)>1&&(\"left\"===i.side?(s=i._mainLinePosition,l=r.width):l=i._mainLinePosition):void 0!==v&&void 0!==x&&Math.min(u,x)-Math.max(c,v)>1&&(\"top\"===i.side?(s=i._mainLinePosition,l=r.height):l=i._mainLinePosition)}g[y++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?A:1)/2,pmin:s,pmax:l}]})),g.sort((function(t,e){return t[0].posref-e[0].posref||d*(e[0].traceIndex-t[0].traceIndex)}));!i&&p<=m;){for(p++,i=!0,s=0;s.01){for(l=S.length-1;l>=0;l--)S[l].dp+=a;for(M.push.apply(M,S),g.splice(s+1,1),u=0,l=M.length-1;l>=0;l--)u+=M[l].dp;for(o=u/M.length,l=M.length-1;l>=0;l--)M[l].dp-=o;i=!1}else s++}g.forEach(k)}for(s=g.length-1;s>=0;s--){var I=g[s];for(l=I.length-1;l>=0;l--){var P=I[l],z=P.datum;z.offset=P.dp,z.del=P.del}}}(ce,oe,b,le.commonLabelBoundingBox),B(ce,oe,b._invScaleX,b._invScaleY)),l&&l.tagName){var ue=v.getComponentMethod(\"annotations\",\"hasClickToShow\")(t,Zt);f(n.select(l),ue?\"pointer\":\"\")}l&&!a&&function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber)||String(i.pointNumbers)!==String(a.pointNumbers))return!0}return!1}(t,0,Gt)&&(Gt&&t.emit(\"plotly_unhover\",{event:e,points:Gt}),t.emit(\"plotly_hover\",{event:e,points:t._hoverdata,xaxes:$,yaxes:J,xvals:nt,yvals:it}))}(t,e,r,a,l)}))},e.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var i=e.gd,a=H(i),o=G(i),s=D(t.map((function(t){var r=t._x0||t.x0||t.x||0,n=t._x1||t.x1||t.x||0,s=t._y0||t.y0||t.y||0,l=t._y1||t.y1||t.y||0,c=t.eventData;if(c){var u=Math.min(r,n),h=Math.max(r,n),f=Math.min(s,l),p=Math.max(s,l),m=t.trace;if(v.traceIs(m,\"gl3d\")){var g=i._fullLayout[m.scene]._scene.container,y=g.offsetLeft,x=g.offsetTop;u+=y,h+=y,f+=x,p+=x}c.bbox={x0:u+o,x1:h+o,y0:f+a,y1:p+a},e.inOut_bbox&&e.inOut_bbox.push(c.bbox)}else c=!1;return{color:t.color||d.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,fontWeight:t.fontWeight,fontStyle:t.fontStyle,fontVariant:t.fontVariant,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\"\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,hovertemplateLabels:t.hovertemplateLabels||!1,eventData:c}})),{gd:i,hovermode:\"closest\",rotateLabels:!1,bgColor:e.bgColor||d.background,container:n.select(e.container),outerContainer:e.outerContainer||e.container}).hoverLabels,l=0,c=0;return s.sort((function(t,e){return t.y0-e.y0})).each((function(t,r){var n=t.y0-t.by/2;t.offset=n-5([\\s\\S]*)<\\/extra>/;function D(t,e){var r=e.gd,i=r._fullLayout,a=e.hovermode,s=e.rotateLabels,u=e.bgColor,f=e.container,m=e.outerContainer,g=e.commonLabelOpts||{};if(0===t.length)return[[]];var y=e.fontFamily||_.HOVERFONT,k=e.fontSize||_.HOVERFONTSIZE,A=e.fontWeight||i.font.weight,M=e.fontStyle||i.font.style,S=e.fontVariant||i.font.variant,L=e.fontTextcase||i.font.textcase,I=e.fontLineposition||i.font.lineposition,P=e.fontShadow||i.font.shadow,O=t[0],D=O.xa,F=O.ya,B=a.charAt(0),N=B+\"Label\",j=O[N];if(void 0===j&&\"multicategory\"===D.type)for(var U=0;Ui.width-T&&(z=i.width-T),e.attr(\"d\",\"M\"+(x-z)+\",0L\"+(x-z+E)+\",\"+w+E+\"H\"+T+\"v\"+w+(2*C+b.height)+\"H\"+-T+\"V\"+w+E+\"H\"+(x-z-E)+\"Z\"),x=z,Q.minX=x-T,Q.maxX=x+T,\"top\"===D.side?(Q.minY=_-(2*C+b.height),Q.maxY=_-C):(Q.minY=_+C,Q.maxY=_+(2*C+b.height))}else{var R,B,N;\"right\"===F.side?(R=\"start\",B=1,N=\"\",x=D._offset+D._length):(R=\"end\",B=-1,N=\"-\",x=D._offset),_=F._offset+(O.y0+O.y1)/2,s.attr(\"text-anchor\",R),e.attr(\"d\",\"M0,0L\"+N+E+\",\"+E+\"V\"+(C+b.height/2)+\"h\"+N+(2*C+b.width)+\"V-\"+(C+b.height/2)+\"H\"+N+E+\"V-\"+E+\"Z\"),Q.minY=_-(C+b.height/2),Q.maxY=_+(C+b.height/2),\"right\"===F.side?(Q.minX=x+E,Q.maxX=x+E+(2*C+b.width)):(Q.minX=x-E-(2*C+b.width),Q.maxX=x-E);var U,V=b.height/2,H=q-b.top-V,G=\"clip\"+i._uid+\"commonlabel\"+F._id;if(x=0?dt:mt+vt=0?mt:Mt+vt=0?ft:pt+xt=0?pt:St+xt=0,\"top\"!==t.idealAlign&&J||!K?J?(N+=V/2,t.anchor=\"start\"):t.anchor=\"middle\":(N-=V/2,t.anchor=\"end\"),t.crossPos=N;else{if(t.pos=N,J=B+U/2+Q<=H,K=B-U/2-Q>=0,\"left\"!==t.idealAlign&&J||!K)if(J)B+=U/2,t.anchor=\"start\";else{t.anchor=\"middle\";var tt=Q/2,et=B+tt-H,rt=B-tt;et>0&&(B-=et),rt<0&&(B+=-rt)}else B-=U/2,t.anchor=\"end\";t.crossPos=B}w.attr(\"text-anchor\",t.anchor),O&&z.attr(\"text-anchor\",t.anchor),e.attr(\"transform\",l(B,N)+(s?c(T):\"\"))})),{hoverLabels:Et,commonLabelBoundingBox:Q}}function R(t,e,r,n,i,a){var s=\"\",l=\"\";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=V(t.name,t.nameLength));var c=r.charAt(0),u=\"x\"===c?\"y\":\"x\";void 0!==t.zLabel?(void 0!==t.xLabel&&(l+=\"x: \"+t.xLabel+\" \"),void 0!==t.yLabel&&(l+=\"y: \"+t.yLabel+\" \"),\"choropleth\"!==t.trace.type&&\"choroplethmapbox\"!==t.trace.type&&\"choroplethmap\"!==t.trace.type&&(l+=(l?\"z: \":\"\")+t.zLabel)):e&&t[c+\"Label\"]===i?l=t[u+\"Label\"]||\"\":void 0===t.xLabel?void 0!==t.yLabel&&\"scattercarpet\"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:\"(\"+t.xLabel+\", \"+t.yLabel+\")\",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?\" \":\"\")+t.text),void 0!==t.extraText&&(l+=(l?\" \":\"\")+t.extraText),a&&\"\"===l&&!t.hovertemplate&&(\"\"===s&&a.remove(),l=s);var h=t.hovertemplate||!1;if(h){var f=t.hovertemplateLabels||t;t[c+\"Label\"]!==i&&(f[c+\"other\"]=f[c+\"Val\"],f[c+\"otherLabel\"]=f[c+\"Label\"]),l=(l=o.hovertemplateString(h,f,n._d3locale,t.eventData[0]||{},t.trace._meta)).replace(O,(function(e,r){return s=V(r,t.nameLength),\"\"}))}return[l,s]}function F(t,e){var r=0,n=t.offset;return e&&(n*=-S,r=t.offset*M),{x:r,y:n}}function B(t,e,r,i){var a=function(t){return t*r},o=function(t){return t*i};t.each((function(t){var r=n.select(this);if(t.del)return r.remove();var i,s,l,c,u=r.select(\"text.nums\"),f=t.anchor,d=\"end\"===f?-1:1,m=(c=(l=(s={start:1,end:-1,middle:0}[(i=t).anchor])*(E+C))+s*(i.txwidth+C),\"middle\"===i.anchor&&(l-=i.tx2width/2,c+=i.txwidth/2+C),{alignShift:s,textShiftX:l,text2ShiftX:c}),g=F(t,e),y=g.x,v=g.y,x=\"middle\"===f;r.select(\"path\").attr(\"d\",x?\"M-\"+a(t.bx/2+t.tx2width/2)+\",\"+o(v-t.by/2)+\"h\"+a(t.bx)+\"v\"+o(t.by)+\"h-\"+a(t.bx)+\"Z\":\"M0,0L\"+a(d*E+y)+\",\"+o(E+v)+\"v\"+o(t.by/2-E)+\"h\"+a(d*t.bx)+\"v-\"+o(t.by)+\"H\"+a(d*E+y)+\"V\"+o(v-E)+\"Z\");var _=y+m.textShiftX,b=v+t.ty0-t.by/2+C,w=t.textAlign||\"auto\";\"auto\"!==w&&(\"left\"===w&&\"start\"!==f?(u.attr(\"text-anchor\",\"start\"),_=x?-t.bx/2-t.tx2width/2+C:-t.bx-C):\"right\"===w&&\"end\"!==f&&(u.attr(\"text-anchor\",\"end\"),_=x?t.bx/2-t.tx2width/2-C:t.bx+C)),u.call(h.positionText,a(_),o(b)),t.tx2width&&(r.select(\"text.name\").call(h.positionText,a(m.text2ShiftX+m.alignShift*C+y),o(v+t.ty0-t.by/2+C)),r.select(\"rect\").call(p.setRect,a(m.text2ShiftX+(m.alignShift-1)*t.tx2width/2+y),o(v-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function N(t,e){var r=t.index,n=t.trace||{},a=t.cd[0],s=t.cd[r]||{};function l(t){return t||i(t)&&0===t}var c=Array.isArray(r)?function(t,e){var i=o.castOption(a,r,t);return l(i)?i:o.extractOption({},n,\"\",e)}:function(t,e){return o.extractOption(s,n,t,e)};function u(e,r,n){var i=c(r,n);l(i)&&(t[e]=i)}if(u(\"hoverinfo\",\"hi\",\"hoverinfo\"),u(\"bgcolor\",\"hbg\",\"hoverlabel.bgcolor\"),u(\"borderColor\",\"hbc\",\"hoverlabel.bordercolor\"),u(\"fontFamily\",\"htf\",\"hoverlabel.font.family\"),u(\"fontSize\",\"hts\",\"hoverlabel.font.size\"),u(\"fontColor\",\"htc\",\"hoverlabel.font.color\"),u(\"fontWeight\",\"htw\",\"hoverlabel.font.weight\"),u(\"fontStyle\",\"hty\",\"hoverlabel.font.style\"),u(\"fontVariant\",\"htv\",\"hoverlabel.font.variant\"),u(\"nameLength\",\"hnl\",\"hoverlabel.namelength\"),u(\"textAlign\",\"hta\",\"hoverlabel.align\"),t.posref=\"y\"===e||\"closest\"===e&&\"h\"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel=\"xLabel\"in t?t.xLabel:g.hoverLabelText(t.xa,t.xLabelVal,n.xhoverformat),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel=\"yLabel\"in t?t.yLabel:g.hoverLabelText(t.ya,t.yLabelVal,n.yhoverformat),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||\"log\"===t.xa.type&&t.xerr<=0)){var h=g.tickText(t.xa,t.xa.c2l(t.xerr),\"hover\").text;void 0!==t.xerrneg?t.xLabel+=\" +\"+h+\" / -\"+g.tickText(t.xa,t.xa.c2l(t.xerrneg),\"hover\").text:t.xLabel+=\" ± \"+h,\"x\"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||\"log\"===t.ya.type&&t.yerr<=0)){var f=g.tickText(t.ya,t.ya.c2l(t.yerr),\"hover\").text;void 0!==t.yerrneg?t.yLabel+=\" +\"+f+\" / -\"+g.tickText(t.ya,t.ya.c2l(t.yerrneg),\"hover\").text:t.yLabel+=\" ± \"+f,\"y\"===e&&(t.distance+=1)}var p=t.hoverinfo||t.trace.hoverinfo;return p&&\"all\"!==p&&(-1===(p=Array.isArray(p)?p:p.split(\"+\")).indexOf(\"x\")&&(t.xLabel=void 0),-1===p.indexOf(\"y\")&&(t.yLabel=void 0),-1===p.indexOf(\"z\")&&(t.zLabel=void 0),-1===p.indexOf(\"text\")&&(t.text=void 0),-1===p.indexOf(\"name\")&&(t.name=void 0)),t}function j(t,e,r){var n,i,o=r.container,s=r.fullLayout,l=s._size,c=r.event,u=!!e.hLinePoint,h=!!e.vLinePoint;if(o.selectAll(\".spikeline\").remove(),h||u){var f=d.combine(s.plot_bgcolor,s.paper_bgcolor);if(u){var m,y,v=e.hLinePoint;n=v&&v.xa,\"cursor\"===(i=v&&v.ya).spikesnap?(m=c.pointerX,y=c.pointerY):(m=n._offset+v.x,y=i._offset+v.y);var x,_,b=a.readability(v.color,f)<1.5?d.contrast(f):v.color,w=i.spikemode,T=i.spikethickness,k=i.spikecolor||b,A=g.getPxPosition(t,i);if(-1!==w.indexOf(\"toaxis\")||-1!==w.indexOf(\"across\")){if(-1!==w.indexOf(\"toaxis\")&&(x=A,_=m),-1!==w.indexOf(\"across\")){var M=i._counterDomainMin,S=i._counterDomainMax;\"free\"===i.anchor&&(M=Math.min(M,i.position),S=Math.max(S,i.position)),x=l.l+M*l.w,_=l.l+S*l.w}o.insert(\"line\",\":first-child\").attr({x1:x,x2:_,y1:y,y2:y,\"stroke-width\":T,stroke:k,\"stroke-dasharray\":p.dashStyle(i.spikedash,T)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:x,x2:_,y1:y,y2:y,\"stroke-width\":T+2,stroke:f}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==w.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:A+(\"right\"!==i.side?T:-T),cy:y,r:T,fill:k}).classed(\"spikeline\",!0)}if(h){var E,C,L=e.vLinePoint;n=L&&L.xa,i=L&&L.ya,\"cursor\"===n.spikesnap?(E=c.pointerX,C=c.pointerY):(E=n._offset+L.x,C=i._offset+L.y);var I,P,z=a.readability(L.color,f)<1.5?d.contrast(f):L.color,O=n.spikemode,D=n.spikethickness,R=n.spikecolor||z,F=g.getPxPosition(t,n);if(-1!==O.indexOf(\"toaxis\")||-1!==O.indexOf(\"across\")){if(-1!==O.indexOf(\"toaxis\")&&(I=F,P=C),-1!==O.indexOf(\"across\")){var B=n._counterDomainMin,N=n._counterDomainMax;\"free\"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),I=l.t+(1-N)*l.h,P=l.t+(1-B)*l.h}o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:I,y2:P,\"stroke-width\":D,stroke:R,\"stroke-dasharray\":p.dashStyle(n.spikedash,D)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:I,y2:P,\"stroke-width\":D+2,stroke:f}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!==O.indexOf(\"marker\")&&o.insert(\"circle\",\":first-child\").attr({cx:E,cy:F-(\"top\"!==n.side?D:-D),r:D,fill:R}).classed(\"spikeline\",!0)}}}function U(t,e){return!e||e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint}function V(t,e){return h.plainText(t||\"\",{len:e,allowedTags:[\"br\",\"sub\",\"sup\",\"b\",\"i\",\"em\",\"s\",\"u\"]})}function q(t,e,r){var n=e[t+\"a\"],i=e[t+\"Val\"],a=e.cd[0];if(\"category\"===n.type||\"multicategory\"===n.type)i=n._categoriesMap[i];else if(\"date\"===n.type){var o=e.trace[t+\"periodalignment\"];if(o){var s=e.cd[e.index],l=s[t+\"Start\"];void 0===l&&(l=s[t]);var c=s[t+\"End\"];void 0===c&&(c=s[t]);var u=c-l;\"end\"===o?i+=u:\"middle\"===o&&(i+=u/2)}i=n.d2c(i)}return a&&a.t&&a.t.posLetter===n._id&&(\"group\"!==r.boxmode&&\"group\"!==r.violinmode||(i+=a.t.dPos)),i}function H(t){return t.offsetTop+t.clientTop}function G(t){return t.offsetLeft+t.clientLeft}function Z(t,e){var r=t._fullLayout,n=e.getBoundingClientRect(),i=n.left,a=n.top,s=i+n.width,l=a+n.height,c=o.apply3DTransform(r._invTransform)(i,a),u=o.apply3DTransform(r._invTransform)(s,l),h=c[0],f=c[1],p=u[0],d=u[1];return{x:h,y:f,width:p-h,height:d-f,top:Math.min(f,d),left:Math.min(h,p),right:Math.max(h,p),bottom:Math.max(f,d)}}},26430:function(t,e,r){\"use strict\";var n=r(34809),i=r(78766),a=r(36040).isUnifiedHover;t.exports=function(t,e,r,o){o=o||{};var s=e.legend;function l(t){o.font[t]||(o.font[t]=s?e.legend.font[t]:e.font[t])}e&&a(e.hovermode)&&(o.font||(o.font={}),l(\"size\"),l(\"family\"),l(\"color\"),l(\"weight\"),l(\"style\"),l(\"variant\"),s?(o.bgcolor||(o.bgcolor=i.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r(\"hoverlabel.bgcolor\",o.bgcolor),r(\"hoverlabel.bordercolor\",o.bordercolor),r(\"hoverlabel.namelength\",o.namelength),n.coerceFont(r,\"hoverlabel.font\",o.font),r(\"hoverlabel.align\",o.align)}},45265:function(t,e,r){\"use strict\";var n=r(34809),i=r(6811);t.exports=function(t,e){function r(r,a){return void 0!==e[r]?e[r]:n.coerce(t,e,i,r,a)}return r(\"clickmode\"),r(\"hoversubplots\"),r(\"hovermode\")}},32141:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809),a=r(14751),o=r(36040),s=r(6811),l=r(38103);t.exports={moduleType:\"component\",name:\"fx\",constants:r(85988),schema:{layout:s},attributes:r(70192),layoutAttributes:s,supplyLayoutGlobalDefaults:r(5358),supplyDefaults:r(3239),supplyLayoutDefaults:r(8412),calc:r(83552),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,\"hoverlabel.\"+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,\"hoverinfo\",(function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=i.isD3Selection(t)?t:n.select(t);e.selectAll(\"g.hovertext\").remove(),e.selectAll(\".spikeline\").remove()},click:r(94225)}},6811:function(t,e,r){\"use strict\";var n=r(85988),i=r(80337),a=i({editType:\"none\"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,t.exports={clickmode:{valType:\"flaglist\",flags:[\"event\",\"select\"],dflt:\"event\",editType:\"plot\",extras:[\"none\"]},dragmode:{valType:\"enumerated\",values:[\"zoom\",\"pan\",\"select\",\"lasso\",\"drawclosedpath\",\"drawopenpath\",\"drawline\",\"drawrect\",\"drawcircle\",\"orbit\",\"turntable\",!1],dflt:\"zoom\",editType:\"modebar\"},hovermode:{valType:\"enumerated\",values:[\"x\",\"y\",\"closest\",!1,\"x unified\",\"y unified\"],dflt:\"closest\",editType:\"modebar\"},hoversubplots:{valType:\"enumerated\",values:[\"single\",\"overlaying\",\"axis\"],dflt:\"overlaying\",editType:\"none\"},hoverdistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},spikedistance:{valType:\"integer\",min:-1,dflt:-1,editType:\"none\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"none\"},bordercolor:{valType:\"color\",editType:\"none\"},font:a,grouptitlefont:i({editType:\"none\"}),align:{valType:\"enumerated\",values:[\"left\",\"right\",\"auto\"],dflt:\"auto\",editType:\"none\"},namelength:{valType:\"integer\",min:-1,dflt:15,editType:\"none\"},editType:\"none\"},selectdirection:{valType:\"enumerated\",values:[\"h\",\"v\",\"d\",\"any\"],dflt:\"any\",editType:\"none\"}}},8412:function(t,e,r){\"use strict\";var n=r(34809),i=r(6811),a=r(45265),o=r(26430);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}a(t,e)&&(r(\"hoverdistance\"),r(\"spikedistance\")),\"select\"===r(\"dragmode\")&&r(\"selectdirection\");var s=e._has(\"mapbox\"),l=e._has(\"map\"),c=e._has(\"geo\"),u=e._basePlotModules.length;\"zoom\"===e.dragmode&&((s||l||c)&&1===u||(s||l)&&c&&2===u)&&(e.dragmode=\"pan\"),o(t,e,r),n.coerceFont(r,\"hoverlabel.grouptitlefont\",e.hoverlabel.font)}},5358:function(t,e,r){\"use strict\";var n=r(34809),i=r(26430),a=r(6811);t.exports=function(t,e){i(t,e,(function(r,i){return n.coerce(t,e,a,r,i)}))}},83595:function(t,e,r){\"use strict\";var n=r(34809),i=r(90694).counter,a=r(13792).u,o=r(54826).idRegex,s=r(78032),l={rows:{valType:\"integer\",min:1,editType:\"plot\"},roworder:{valType:\"enumerated\",values:[\"top to bottom\",\"bottom to top\"],dflt:\"top to bottom\",editType:\"plot\"},columns:{valType:\"integer\",min:1,editType:\"plot\"},subplots:{valType:\"info_array\",freeLength:!0,dimensions:2,items:{valType:\"enumerated\",values:[i(\"xy\").toString(),\"\"],editType:\"plot\"},editType:\"plot\"},xaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.x.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},yaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.y.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},pattern:{valType:\"enumerated\",values:[\"independent\",\"coupled\"],dflt:\"coupled\",editType:\"plot\"},xgap:{valType:\"number\",min:0,max:1,editType:\"plot\"},ygap:{valType:\"number\",min:0,max:1,editType:\"plot\"},domain:a({name:\"grid\",editType:\"plot\",noGridCell:!0},{}),xside:{valType:\"enumerated\",values:[\"bottom\",\"bottom plot\",\"top plot\",\"top\"],dflt:\"bottom plot\",editType:\"plot\"},yside:{valType:\"enumerated\",values:[\"left\",\"left plot\",\"right plot\",\"right\"],dflt:\"left plot\",editType:\"plot\"},editType:\"plot\"};function c(t,e,r){var n=e[r+\"axes\"],i=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function u(t,e,r,n,i,a){var o=e(t+\"gap\",r),s=e(\"domain.\"+t);e(t+\"side\",n);for(var l=new Array(i),c=s[0],u=(s[1]-c)/(i-o),h=u*(1-o),f=0;f1){f||p||d||\"independent\"===k(\"pattern\")&&(f=!0),g._hasSubplotGrid=f;var x,_,b=\"top to bottom\"===k(\"roworder\"),w=f?.2:.1,T=f?.3:.1;m&&e._splomGridDflt&&(x=e._splomGridDflt.xside,_=e._splomGridDflt.yside),g._domains={x:u(\"x\",k,w,x,v),y:u(\"y\",k,T,_,y,b)}}else delete e.grid}function k(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,i,a,o,s,l,u,f=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,m=r.rows,g=r.columns,y=\"independent\"===r.pattern,v=r._axisMap={};if(d){var x=f.subplots||[];l=r.subplots=new Array(m);var _=1;for(n=0;n(\"legend\"===t?1:0));if(!1===M&&(r[t]=void 0),(!1!==M||h.uirevision)&&(p(\"uirevision\",r.uirevision),!1!==M)){p(\"borderwidth\");var S,E,C,L=\"h\"===p(\"orientation\"),I=\"paper\"===p(\"yref\"),P=\"paper\"===p(\"xref\"),z=\"left\";if(L?(S=0,n.getComponentMethod(\"rangeslider\",\"isVisible\")(e.xaxis)?I?(E=1.1,C=\"bottom\"):(E=1,C=\"top\"):I?(E=-.1,C=\"top\"):(E=0,C=\"bottom\")):(E=1,C=\"auto\",P?S=1.02:(S=1,z=\"right\")),i.coerce(h,f,{x:{valType:\"number\",editType:\"legend\",min:P?-2:0,max:P?3:1,dflt:S}},\"x\"),i.coerce(h,f,{y:{valType:\"number\",editType:\"legend\",min:I?-2:0,max:I?3:1,dflt:E}},\"y\"),p(\"traceorder\",b),c.isGrouped(r[t])&&p(\"tracegroupgap\"),p(\"entrywidth\"),p(\"entrywidthmode\"),p(\"indentation\"),p(\"itemsizing\"),p(\"itemwidth\"),p(\"itemclick\"),p(\"itemdoubleclick\"),p(\"groupclick\"),p(\"xanchor\",z),p(\"yanchor\",C),p(\"valign\"),i.noneOrAll(h,f,[\"x\",\"y\"]),p(\"title.text\")){p(\"title.side\",L?\"left\":\"top\");var O=i.extendFlat({},d,{size:i.bigFont(d.size)});i.coerceFont(p,\"title.font\",O)}}}}t.exports=function(t,e,r){var n,a=r.slice(),o=e.shapes;if(o)for(n=0;n1)}var B=d.hiddenlabels||[];if(!(T||d.showlegend&&S.length))return s.selectAll(\".\"+w).remove(),d._topdefs.select(\"#\"+r).remove(),a.autoMargin(t,w);var N=i.ensureSingle(s,\"g\",w,(function(t){T||t.attr(\"pointer-events\",\"all\")})),j=i.ensureSingleById(d._topdefs,\"clipPath\",r,(function(t){t.append(\"rect\")})),U=i.ensureSingle(N,\"rect\",\"bg\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));U.call(u.stroke,f.bordercolor).call(u.fill,f.bgcolor).style(\"stroke-width\",f.borderwidth+\"px\");var V,q=i.ensureSingle(N,\"g\",\"scrollbox\"),H=f.title;f._titleWidth=0,f._titleHeight=0,H.text?((V=i.ensureSingle(q,\"text\",w+\"titletext\")).attr(\"text-anchor\",\"start\").call(c.font,H.font).text(H.text),C(V,q,t,f,b)):q.selectAll(\".\"+w+\"titletext\").remove();var G=i.ensureSingle(N,\"rect\",\"scrollbar\",(function(t){t.attr(p.scrollBarEnterAttrs).call(u.fill,p.scrollBarColor)})),Z=q.selectAll(\"g.groups\").data(S);Z.enter().append(\"g\").attr(\"class\",\"groups\"),Z.exit().remove();var W=Z.selectAll(\"g.traces\").data(i.identity);W.enter().append(\"g\").attr(\"class\",\"traces\"),W.exit().remove(),W.style(\"opacity\",(function(t){var e=t[0].trace;return o.traceIs(e,\"pie-like\")?-1!==B.indexOf(t[0].label)?.5:1:\"legendonly\"===e.visible?.5:1})).each((function(){n.select(this).call(M,t,f)})).call(x,t,f).each((function(){T||n.select(this).call(E,t,w)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,r,i){var a=t._fullLayout,o=P(i);i||(i=a[o]);var s=a._size,l=_.isVertical(i),u=_.isGrouped(i),h=\"fraction\"===i.entrywidthmode,f=i.borderwidth,d=2*f,m=p.itemGap,g=i.indentation+i.itemwidth+2*m,y=2*(f+m),v=I(i),x=i.y<0||0===i.y&&\"top\"===v,b=i.y>1||1===i.y&&\"bottom\"===v,w=i.tracegroupgap,T={};i._maxHeight=Math.max(x||b?a.height/2:s.h,30);var A=0;i._width=0,i._height=0;var M=function(t){var e=0,r=0,n=t.title.side;return n&&(-1!==n.indexOf(\"left\")&&(e=t._titleWidth),-1!==n.indexOf(\"top\")&&(r=t._titleHeight)),[e,r]}(i);if(l)r.each((function(t){var e=t[0].height;c.setTranslate(this,f+M[0],f+M[1]+i._height+e/2+m),i._height+=e,i._width=Math.max(i._width,t[0].width)})),A=g+i._width,i._width+=m+g+d,i._height+=y,u&&(e.each((function(t,e){c.setTranslate(this,0,e*i.tracegroupgap)})),i._height+=(i._lgroupsLength-1)*i.tracegroupgap);else{var S=L(i),E=i.x<0||0===i.x&&\"right\"===S,C=i.x>1||1===i.x&&\"left\"===S,z=b||x,O=a.width/2;i._maxWidth=Math.max(E?z&&\"left\"===S?s.l+s.w:O:C?z&&\"right\"===S?s.r+s.w:O:s.w,2*g);var D=0,R=0;r.each((function(t){var e=k(t,i,g);D=Math.max(D,e),R+=e})),A=null;var F=0;if(u){var B=0,N=0,j=0;e.each((function(){var t=0,e=0;n.select(this).selectAll(\"g.traces\").each((function(r){var n=k(r,i,g),a=r[0].height;c.setTranslate(this,M[0],M[1]+f+m+a/2+e),e+=a,t=Math.max(t,n),T[r[0].trace.legendgroup]=t}));var r=t+m;N>0&&r+f+N>i._maxWidth?(F=Math.max(F,N),N=0,j+=B+w,B=e):B=Math.max(B,e),c.setTranslate(this,N,j),N+=r})),i._width=Math.max(F,N)+f,i._height=j+B+y}else{var U=r.size(),V=R+d+(U-1)*m=i._maxWidth&&(F=Math.max(F,Z),H=0,G+=q,i._height+=q,q=0),c.setTranslate(this,M[0]+f+H,M[1]+f+G+e/2+m),Z=H+r+m,H+=n,q=Math.max(q,e)})),V?(i._width=H+d,i._height=q+y):(i._width=Math.max(F,Z)+d,i._height+=q+y)}}i._width=Math.ceil(Math.max(i._width+M[0],i._titleWidth+2*(f+p.titlePad))),i._height=Math.ceil(Math.max(i._height+M[1],i._titleHeight+2*(f+p.itemGap))),i._effHeight=Math.min(i._height,i._maxHeight);var W=t._context.edits,Y=W.legendText||W.legendPosition;r.each((function(t){var e=n.select(this).select(\".\"+o+\"toggle\"),r=t[0].height,a=t[0].trace.legendgroup,s=k(t,i,g);u&&\"\"!==a&&(s=T[a]);var f=Y?g:A||s;l||h||(f+=m/2),c.setRect(e,0,-r/2,f,r)}))}(t,Z,W,f)},function(){var e,u,v,x,_=d._size,b=f.borderwidth,k=\"paper\"===f.xref,M=\"paper\"===f.yref;if(H.text&&function(t,e,r){if(\"top center\"===e.title.side||\"top right\"===e.title.side){var n=e.title.font.size*m,i=0,a=t.node(),o=c.bBox(a).width;\"top center\"===e.title.side?i=.5*(e._width-2*r-2*p.titlePad-o):\"top right\"===e.title.side&&(i=e._width-2*r-2*p.titlePad-o),h.positionText(t,r+p.titlePad+i,r+n)}}(V,f,b),!T){var S,E;S=k?_.l+_.w*f.x-g[L(f)]*f._width:d.width*f.x-g[L(f)]*f._width,E=M?_.t+_.h*(1-f.y)-g[I(f)]*f._effHeight:d.height*(1-f.y)-g[I(f)]*f._effHeight;var C=function(t,e,r,n){var i=t._fullLayout,o=i[e],s=L(o),l=I(o),c=\"paper\"===o.xref,u=\"paper\"===o.yref;t._fullLayout._reservedMargin[e]={};var h=o.y<.5?\"b\":\"t\",f=o.x<.5?\"l\":\"r\",p={r:i.width-r,l:r+o._width,b:i.height-n,t:n+o._effHeight};if(c&&u)return a.autoMargin(t,e,{x:o.x,y:o.y,l:o._width*g[s],r:o._width*y[s],b:o._effHeight*y[l],t:o._effHeight*g[l]});c?t._fullLayout._reservedMargin[e][h]=p[h]:u||\"v\"===o.orientation?t._fullLayout._reservedMargin[e][f]=p[f]:t._fullLayout._reservedMargin[e][h]=p[h]}(t,w,S,E);if(C)return;if(d.margin.autoexpand){var P=S,z=E;S=k?i.constrain(S,0,d.width-f._width):P,E=M?i.constrain(E,0,d.height-f._effHeight):z,S!==P&&i.log(\"Constrain \"+w+\".x to make legend fit inside graph\"),E!==z&&i.log(\"Constrain \"+w+\".y to make legend fit inside graph\")}c.setTranslate(N,S,E)}if(G.on(\".drag\",null),N.on(\"wheel\",null),T||f._height<=f._maxHeight||t._context.staticPlot){var O=f._effHeight;T&&(O=f._height),U.attr({width:f._width-b,height:O-b,x:b/2,y:b/2}),c.setTranslate(q,0,0),j.select(\"rect\").attr({width:f._width-2*b,height:O-2*b,x:b,y:b}),c.setClipUrl(q,r,t),c.setRect(G,0,0,0,0),delete f._scrollY}else{var D,R,F,B=Math.max(p.scrollBarMinHeight,f._effHeight*f._effHeight/f._height),Z=f._effHeight-B-2*p.scrollBarMargin,W=f._height-f._effHeight,Y=Z/W,X=Math.min(f._scrollY||0,W);U.attr({width:f._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:f._effHeight-b,x:b/2,y:b/2}),j.select(\"rect\").attr({width:f._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:f._effHeight-2*b,x:b,y:b+X}),c.setClipUrl(q,r,t),K(X,B,Y),N.on(\"wheel\",(function(){K(X=i.constrain(f._scrollY+n.event.deltaY/Z*W,0,W),B,Y),0!==X&&X!==W&&n.event.preventDefault()}));var $=n.behavior.drag().on(\"dragstart\",(function(){var t=n.event.sourceEvent;D=\"touchstart\"===t.type?t.changedTouches[0].clientY:t.clientY,F=X})).on(\"drag\",(function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(R=\"touchmove\"===t.type?t.changedTouches[0].clientY:t.clientY,X=function(t,e,r){var n=(r-e)/Y+t;return i.constrain(n,0,W)}(F,D,R),K(X,B,Y))}));G.call($);var J=n.behavior.drag().on(\"dragstart\",(function(){var t=n.event.sourceEvent;\"touchstart\"===t.type&&(D=t.changedTouches[0].clientY,F=X)})).on(\"drag\",(function(){var t=n.event.sourceEvent;\"touchmove\"===t.type&&(R=t.changedTouches[0].clientY,X=function(t,e,r){var n=(e-r)/Y+t;return i.constrain(n,0,W)}(F,D,R),K(X,B,Y))}));q.call(J)}function K(e,r,n){f._scrollY=t._fullLayout[w]._scrollY=e,c.setTranslate(q,0,-e),c.setRect(G,f._width,p.scrollBarMargin+e*n,p.scrollBarWidth,r),j.select(\"rect\").attr(\"y\",b+e)}t._context.edits.legendPosition&&(N.classed(\"cursor-move\",!0),l.init({element:N.node(),gd:t,prepFn:function(t){if(t.target!==G.node()){var e=c.getTranslate(N);v=e.x,x=e.y}},moveFn:function(t,r){if(void 0!==v&&void 0!==x){var n=v+t,i=x+r;c.setTranslate(N,n,i),e=l.align(n,f._width,_.l,_.l+_.w,f.xanchor),u=l.align(i+f._height,-f._height,_.t+_.h,_.t,f.yanchor)}},doneFn:function(){if(void 0!==e&&void 0!==u){var r={};r[w+\".x\"]=e,r[w+\".y\"]=u,o.call(\"_guiRelayout\",t,r)}},clickFn:function(e,r){var n=s.selectAll(\"g.traces\").filter((function(){var t=this.getBoundingClientRect();return r.clientX>=t.left&&r.clientX<=t.right&&r.clientY>=t.top&&r.clientY<=t.bottom}));n.size()>0&&A(t,N,n,e,r)}}))}],t)}}function k(t,e,r){var n=t[0],i=n.width,a=e.entrywidthmode,o=n.trace.legendwidth||e.entrywidth;return\"fraction\"===a?e._maxWidth*o:r+(o||i)}function A(t,e,r,n,i){var a=r.data()[0][0].trace,l={event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};a._group&&(l.group=a._group),o.traceIs(a,\"pie-like\")&&(l.label=r.datum()[0].label);var c=s.triggerHandler(t,\"plotly_legendclick\",l);if(1===n){if(!1===c)return;e._clickTimeout=setTimeout((function(){t._fullLayout&&f(r,t,n)}),t._context.doubleClickDelay)}else 2===n&&(e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,\"plotly_legenddoubleclick\",l)&&!1!==c&&f(r,t,n))}function M(t,e,r){var n,a,s=P(r),l=t.data()[0][0],u=l.trace,f=o.traceIs(u,\"pie-like\"),d=!r._inHover&&e._context.edits.legendText&&!f,m=r._maxNameLength;l.groupTitle?(n=l.groupTitle.text,a=l.groupTitle.font):(a=r.font,r.entries?n=l.text:(n=f?l.label:u.name,u._meta&&(n=i.templateString(n,u._meta))));var g=i.ensureSingle(t,\"text\",s+\"text\");g.attr(\"text-anchor\",\"start\").call(c.font,a).text(d?S(n,m):n);var y=r.indentation+r.itemwidth+2*p.itemGap;h.positionText(g,y,0),d?g.call(h.makeEditable,{gd:e,text:n}).call(C,t,e,r).on(\"edit\",(function(n){this.text(S(n,m)).call(C,t,e,r);var a=l.trace._fullInput||{},s={};if(o.hasTransform(a,\"groupby\")){var c=o.getTransformIndices(a,\"groupby\"),h=c[c.length-1],f=i.keyedContainer(a,\"transforms[\"+h+\"].styles\",\"target\",\"value.name\");f.set(l.trace._group,n),s=f.constructUpdate()}else s.name=n;return a._isShape?o.call(\"_guiRelayout\",e,\"shapes[\"+u.index+\"].name\",s.name):o.call(\"_guiRestyle\",e,s,u.index)})):C(g,t,e,r)}function S(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||\"\").length;n>0;n--)t+=\" \";return t}function E(t,e,r){var a,o=e._context.doubleClickDelay,s=1,l=i.ensureSingle(t,\"rect\",r+\"toggle\",(function(t){e._context.staticPlot||t.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),t.call(u.fill,\"rgba(0,0,0,0)\")}));e._context.staticPlot||(l.on(\"mousedown\",(function(){(a=(new Date).getTime())-e._legendMouseDownTimeo&&(s=Math.max(s-1,1)),A(e,i,t,s,n.event)}})))}function C(t,e,r,n,i){n._inHover&&t.attr(\"data-notex\",!0),h.convertToTspans(t,r,(function(){!function(t,e,r,n){var i=t.data()[0][0];if(r._inHover||!i||i.trace.showlegend){var a=t.select(\"g[class*=math-group]\"),o=a.node(),s=P(r);r||(r=e._fullLayout[s]);var l,u,f=r.borderwidth,d=(n===b?r.title.font:i.groupTitle?i.groupTitle.font:r.font).size*m;if(o){var g=c.bBox(o);l=g.height,u=g.width,n===b?c.setTranslate(a,f,f+.75*l):c.setTranslate(a,0,.25*l)}else{var y=\".\"+s+(n===b?\"title\":\"\")+\"text\",v=t.select(y),x=h.lineCount(v),_=v.node();if(l=d*x,u=_?c.bBox(_).width:0,n===b)\"left\"===r.title.side&&(u+=2*p.itemGap),h.positionText(v,f+p.titlePad,f+d);else{var w=2*p.itemGap+r.indentation+r.itemwidth;i.groupTitle&&(w=p.itemGap,u-=r.indentation+r.itemwidth),h.positionText(v,w,-d*((x-1)/2-.3))}}n===b?(r._titleWidth=u,r._titleHeight=l):(i.lineHeight=d,i.height=Math.max(l,16)+3,i.width=u)}else t.remove()}(e,r,n,i)}))}function L(t){return i.isRightAnchor(t)?\"right\":i.isCenterAnchor(t)?\"center\":\"left\"}function I(t){return i.isBottomAnchor(t)?\"bottom\":i.isMiddleAnchor(t)?\"middle\":\"top\"}function P(t){return t._id||\"legend\"}t.exports=function(t,e){if(e)T(t,e);else{var r=t._fullLayout,i=r._legends;r._infolayer.selectAll('[class^=\"legend\"]').each((function(){var t=n.select(this),e=t.attr(\"class\").split(\" \")[0];e.match(w)&&-1===i.indexOf(e)&&t.remove()}));for(var a=0;aS&&(M=S)}k[a][0]._groupMinRank=M,k[a][0]._preGroupSort=a}var E=function(t,e){return t.trace.legendrank-e.trace.legendrank||t._preSort-e._preSort};for(k.forEach((function(t,e){t[0]._preGroupSort=e})),k.sort((function(t,e){return t[0]._groupMinRank-e[0]._groupMinRank||t[0]._preGroupSort-e[0]._preGroupSort})),a=0;ar?r:t}t.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var v=\"constant\"===r.itemsizing,x=r.itemwidth,_=(x+2*p.itemGap)/2,b=o(_,0),w=function(t,e,r,n){var i;if(t+1)i=t;else{if(!(e&&e.width>0))return 0;i=e.width}return v?n:Math.min(i,r)};function T(t,a,o){var u=t[0].trace,h=u.marker||{},f=h.line||{},p=h.cornerradius?\"M6,3a3,3,0,0,1-3,3H-3a3,3,0,0,1-3-3V-3a3,3,0,0,1,3-3H3a3,3,0,0,1,3,3Z\":\"M6,6H-6V-6H6Z\",d=o?u.visible&&u.type===o:i.traceIs(u,\"bar\"),m=n.select(a).select(\"g.legendpoints\").selectAll(\"path.legend\"+o).data(d?[t]:[]);m.enter().append(\"path\").classed(\"legend\"+o,!0).attr(\"d\",p).attr(\"transform\",b),m.exit().remove(),m.each((function(t){var i=n.select(this),a=t[0],o=w(a.mlw,h.line,5,2);i.style(\"stroke-width\",o+\"px\");var p=a.mcc;if(!r._inHover&&\"mc\"in a){var d=c(h),m=d.mid;void 0===m&&(m=(d.max+d.min)/2),p=s.tryColorscale(h,\"\")(m)}var y=p||a.mc||h.color,v=h.pattern,x=v&&s.getPatternAttr(v.shape,0,\"\");if(x){var _=s.getPatternAttr(v.bgcolor,0,null),b=s.getPatternAttr(v.fgcolor,0,null),T=v.fgopacity,k=g(v.size,8,10),A=g(v.solidity,.5,1),M=\"legend-\"+u.uid;i.call(s.pattern,\"legend\",e,M,x,k,A,p,v.fillmode,_,b,T)}else i.call(l.fill,y);o&&l.stroke(i,a.mlc||f.color)}))}function k(t,r,o){var s=t[0],l=s.trace,c=o?l.visible&&l.type===o:i.traceIs(l,o),u=n.select(r).select(\"g.legendpoints\").selectAll(\"path.legend\"+o).data(c?[t]:[]);if(u.enter().append(\"path\").classed(\"legend\"+o,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",b),u.exit().remove(),u.size()){var p=l.marker||{},d=w(f(p.line.width,s.pts),p.line,5,2),m=\"pieLike\",g=a.minExtend(l,{marker:{line:{width:d}}},m),y=a.minExtend(s,{trace:g},m);h(u,y,g,e)}}t.each((function(t){var e=n.select(this),i=a.ensureSingle(e,\"g\",\"layers\");i.style(\"opacity\",t[0].trace.opacity);var s=r.indentation,l=r.valign,c=t[0].lineHeight,u=t[0].height;if(\"middle\"===l&&0===s||!c||!u)i.attr(\"transform\",null);else{var h={top:1,bottom:-1}[l]*(.5*(c-u+3))||0,f=r.indentation;i.attr(\"transform\",o(f,h))}i.selectAll(\"g.legendfill\").data([t]).enter().append(\"g\").classed(\"legendfill\",!0),i.selectAll(\"g.legendlines\").data([t]).enter().append(\"g\").classed(\"legendlines\",!0);var p=i.selectAll(\"g.legendsymbols\").data([t]);p.enter().append(\"g\").classed(\"legendsymbols\",!0),p.selectAll(\"g.legendpoints\").data([t]).enter().append(\"g\").classed(\"legendpoints\",!0)})).each((function(t){var r,i=t[0].trace,o=[];if(i.visible)switch(i.type){case\"histogram2d\":case\"heatmap\":o=[[\"M-15,-2V4H15V-2Z\"]],r=!0;break;case\"choropleth\":case\"choroplethmapbox\":case\"choroplethmap\":o=[[\"M-6,-6V6H6V-6Z\"]],r=!0;break;case\"densitymapbox\":case\"densitymap\":o=[[\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\"]],r=\"radial\";break;case\"cone\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\"]],r=!1;break;case\"streamtube\":o=[[\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\"]],r=!1;break;case\"surface\":o=[[\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\"],[\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\"]],r=!0;break;case\"mesh3d\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r=!1;break;case\"volume\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r=!0;break;case\"isosurface\":o=[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\"]],r=!1}var u=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legend3dandfriends\").data(o);u.enter().append(\"path\").classed(\"legend3dandfriends\",!0).attr(\"transform\",b).style(\"stroke-miterlimit\",1),u.exit().remove(),u.each((function(t,o){var u,h=n.select(this),f=c(i),p=f.colorscale,m=f.reversescale;if(p){if(!r){var g=p.length;u=0===o?p[m?g-1:0][1]:1===o?p[m?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var y=i.vertexcolor||i.facecolor||i.color;u=a.isArrayOrTypedArray(y)?y[o]||y[0]:y}h.attr(\"d\",t[0]),u?h.call(l.fill,u):h.call((function(t){if(t.size()){var n=\"legendfill-\"+i.uid;s.gradient(t,e,n,d(m,\"radial\"===r),p,\"fill\")}}))}))})).each((function(t){var e=t[0].trace,r=\"waterfall\"===e.type;if(t[0]._distinct&&r){var i=t[0].trace[t[0].dir].marker;return t[0].mc=i.color,t[0].mlw=i.line.width,t[0].mlc=i.line.color,T(t,this,\"waterfall\")}var a=[];e.visible&&r&&(a=t[0].hasTotals?[[\"increasing\",\"M-6,-6V6H0Z\"],[\"totals\",\"M6,6H0L-6,-6H-0Z\"],[\"decreasing\",\"M6,6V-6H0Z\"]]:[[\"increasing\",\"M-6,-6V6H6Z\"],[\"decreasing\",\"M6,6V-6H-6Z\"]]);var o=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendwaterfall\").data(a);o.enter().append(\"path\").classed(\"legendwaterfall\",!0).attr(\"transform\",b).style(\"stroke-miterlimit\",1),o.exit().remove(),o.each((function(t){var r=n.select(this),i=e[t[0]].marker,a=w(void 0,i.line,5,2);r.attr(\"d\",t[1]).style(\"stroke-width\",a+\"px\").call(l.fill,i.color),a&&r.call(l.stroke,i.line.color)}))})).each((function(t){T(t,this,\"funnel\")})).each((function(t){T(t,this)})).each((function(t){var r=t[0].trace,o=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendbox\").data(r.visible&&i.traceIs(r,\"box-violin\")?[t]:[]);o.enter().append(\"path\").classed(\"legendbox\",!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",b),o.exit().remove(),o.each((function(){var t=n.select(this);if(\"all\"!==r.boxpoints&&\"all\"!==r.points||0!==l.opacity(r.fillcolor)||0!==l.opacity((r.line||{}).color)){var i=w(void 0,r.line,5,2);t.style(\"stroke-width\",i+\"px\").call(l.fill,r.fillcolor),i&&l.stroke(t,r.line.color)}else{var c=a.minExtend(r,{marker:{size:v?12:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\"diameter\"}});o.call(s.pointStyle,c,e)}}))})).each((function(t){k(t,this,\"funnelarea\")})).each((function(t){k(t,this,\"pie\")})).each((function(t){var r,i,o=m(t),l=o.showFill,h=o.showLine,f=o.showGradientLine,p=o.showGradientFill,g=o.anyFill,y=o.anyLine,v=t[0],_=v.trace,b=c(_),T=b.colorscale,k=b.reversescale,A=u.hasMarkers(_)||!g?\"M5,0\":y?\"M5,-2\":\"M5,-3\",M=n.select(this),S=M.select(\".legendfill\").selectAll(\"path\").data(l||p?[t]:[]);if(S.enter().append(\"path\").classed(\"js-fill\",!0),S.exit().remove(),S.attr(\"d\",A+\"h\"+x+\"v6h-\"+x+\"z\").call((function(t){if(t.size())if(l)s.fillGroupStyle(t,e,!0);else{var r=\"legendfill-\"+_.uid;s.gradient(t,e,r,d(k),T,\"fill\")}})),h||f){var E=w(void 0,_.line,10,5);i=a.minExtend(_,{line:{width:E}}),r=[a.minExtend(v,{trace:i})]}var C=M.select(\".legendlines\").selectAll(\"path\").data(h||f?[r]:[]);C.enter().append(\"path\").classed(\"js-line\",!0),C.exit().remove(),C.attr(\"d\",A+(f?\"l\"+x+\",0.0001\":\"h\"+x)).call(h?s.lineGroupStyle:function(t){if(t.size()){var r=\"legendline-\"+_.uid;s.lineGroupStyle(t),s.gradient(t,e,r,d(k),T,\"stroke\")}})})).each((function(t){var r,i,o=m(t),l=o.anyFill,c=o.anyLine,h=o.showLine,f=o.showMarker,p=t[0],d=p.trace,g=!f&&!c&&!l&&u.hasText(d);function y(t,e,r,n){var i=a.nestedProperty(d,t).get(),o=a.isArrayOrTypedArray(i)&&e?e(i):i;if(v&&o&&void 0!==n&&(o=n),r){if(or[1])return r[1]}return o}function x(t){return p._distinct&&p.index&&t[p.index]?t[p.index]:t[0]}if(f||g||h){var _={},w={};if(f){_.mc=y(\"marker.color\",x),_.mx=y(\"marker.symbol\",x),_.mo=y(\"marker.opacity\",a.mean,[.2,1]),_.mlc=y(\"marker.line.color\",x),_.mlw=y(\"marker.line.width\",a.mean,[0,5],2),w.marker={sizeref:1,sizemin:1,sizemode:\"diameter\"};var T=y(\"marker.size\",a.mean,[2,16],12);_.ms=T,w.marker.size=T}h&&(w.line={width:y(\"line.width\",x,[0,10],5)}),g&&(_.tx=\"Aa\",_.tp=y(\"textposition\",x),_.ts=10,_.tc=y(\"textfont.color\",x),_.tf=y(\"textfont.family\",x),_.tw=y(\"textfont.weight\",x),_.ty=y(\"textfont.style\",x),_.tv=y(\"textfont.variant\",x),_.tC=y(\"textfont.textcase\",x),_.tE=y(\"textfont.lineposition\",x),_.tS=y(\"textfont.shadow\",x)),r=[a.minExtend(p,_)],(i=a.minExtend(d,w)).selectedpoints=null,i.texttemplate=null}var k=n.select(this).select(\"g.legendpoints\"),A=k.selectAll(\"path.scatterpts\").data(f?r:[]);A.enter().insert(\"path\",\":first-child\").classed(\"scatterpts\",!0).attr(\"transform\",b),A.exit().remove(),A.call(s.pointStyle,i,e),f&&(r[0].mrc=3);var M=k.selectAll(\"g.pointtext\").data(g?r:[]);M.enter().append(\"g\").classed(\"pointtext\",!0).append(\"text\").attr(\"transform\",b),M.exit().remove(),M.selectAll(\"text\").call(s.textPointStyle,i,e)})).each((function(t){var e=t[0].trace,r=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendcandle\").data(e.visible&&\"candlestick\"===e.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendcandle\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H-8M-8,6V-6H8Z\":\"M15,0H8M8,-6V6H-8Z\"})).attr(\"transform\",b).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\"increasing\":\"decreasing\"],o=w(void 0,a.line,5,2);i.style(\"stroke-width\",o+\"px\").call(l.fill,a.fillcolor),o&&l.stroke(i,a.line.color)}))})).each((function(t){var e=t[0].trace,r=n.select(this).select(\"g.legendpoints\").selectAll(\"path.legendohlc\").data(e.visible&&\"ohlc\"===e.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendohlc\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H0M-8,-6V0\":\"M15,0H0M8,6V0\"})).attr(\"transform\",b).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i=n.select(this),a=e[r?\"increasing\":\"decreasing\"],o=w(void 0,a.line,5,2);i.style(\"fill\",\"none\").call(s.dashLine,a.line.dash,o),o&&l.stroke(i,a.line.color)}))}))}},50308:function(t,e,r){\"use strict\";r(87632),t.exports={editType:\"modebar\",orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"modebar\"},bgcolor:{valType:\"color\",editType:\"modebar\"},color:{valType:\"color\",editType:\"modebar\"},activecolor:{valType:\"color\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},add:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"},remove:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"}}},5832:function(t,e,r){\"use strict\";var n=r(33626),i=r(44122),a=r(5975),o=r(35188),s=r(28231).eraseActiveShape,l=r(34809),c=l._,u=t.exports={};function h(t,e){var r,i,o=e.currentTarget,s=o.getAttribute(\"data-attr\"),l=o.getAttribute(\"data-val\")||!0,c=t._fullLayout,u={},h=a.list(t,null,!0),f=c._cartesianSpikesEnabled;if(\"zoom\"===s){var p,d=\"in\"===l?.5:2,m=(1+d)/2,g=(1-d)/2;for(i=0;i1?(z=[\"toggleHover\"],O=[\"resetViews\"]):y?(P=[\"zoomInGeo\",\"zoomOutGeo\"],z=[\"hoverClosestGeo\"],O=[\"resetGeo\"]):g?(z=[\"hoverClosest3d\"],O=[\"resetCameraDefault3d\",\"resetCameraLastSave3d\"]):w?(P=[\"zoomInMapbox\",\"zoomOutMapbox\"],z=[\"toggleHover\"],O=[\"resetViewMapbox\"]):T?(P=[\"zoomInMap\",\"zoomOutMap\"],z=[\"toggleHover\"],O=[\"resetViewMap\"]):_?z=[\"hoverClosestGl2d\"]:v?z=[\"hoverClosestPie\"]:M?(z=[\"hoverClosestCartesian\",\"hoverCompareCartesian\"],O=[\"resetViewSankey\"]):z=[\"toggleHover\"],m&&z.push(\"toggleSpikelines\",\"hoverClosestCartesian\",\"hoverCompareCartesian\"),(function(t){for(var e=0;e0)){var m=function(t,e,r){for(var n=r.filter((function(r){return e[r].anchor===t._id})),i=0,a=0;a0?t.touches[0].clientX:0}function y(t,e,r,n){var i=o.ensureSingle(t,\"rect\",m.bgClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})),a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,u=-n._offsetShift,h=l.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:s(u,u),\"stroke-width\":h}).call(c.stroke,n.bordercolor).call(c.fill,n.bgcolor)}function v(t,e,r,n){var i=e._fullLayout;o.ensureSingleById(i._topdefs,\"clipPath\",n._clipId,(function(t){t.append(\"rect\").attr({x:0,y:0})})).select(\"rect\").attr({width:n._width,height:n._height})}function x(t,e,r,i){var s,c=e.calcdata,u=t.selectAll(\"g.\"+m.rangePlotClassName).data(r._subplotsWith,o.identity);u.enter().append(\"g\").attr(\"class\",(function(t){return m.rangePlotClassName+\" \"+t})).call(l.setClipUrl,i._clipId,e),u.order(),u.exit().remove(),u.each((function(t,o){var l=n.select(this),u=0===o,p=f.getFromId(e,t,\"y\"),d=p._name,m=i[d],g={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(g.layout.xaxis.rangebreaks=r.rangebreaks),g.layout[d]={type:p.type,domain:[0,1],range:\"match\"!==m.rangemode?m.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(g.layout[d].rangebreaks=p.rangebreaks),a.supplyDefaults(g);var y=g._fullLayout.xaxis,v=g._fullLayout[d];y.clearCalc(),y.setScale(),v.clearCalc(),v.setScale();var x={id:t,plotgroup:l,xaxis:y,yaxis:v,isRangePlot:!0};u?s=x:(x.mainplot=\"xy\",x.mainplotinfo=s),h.rangePlot(e,x,function(t,e){for(var r=[],n=0;n=n.max)e=B[r+1];else if(t=n.pmax)e=B[r+1];else if(tr._length||v+b<0)return;u=y+b,p=v+b;break;case l:if(_=\"col-resize\",y+b>r._length)return;u=y+b,p=v;break;case c:if(_=\"col-resize\",v+b<0)return;u=y,p=v+b;break;default:_=\"ew-resize\",u=m,p=m+b}if(p=0;k--){var A=r.append(\"path\").attr(g).style(\"opacity\",k?.1:y).call(o.stroke,x).call(o.fill,v).call(s.dashLine,k?\"solid\":b,k?4+_:_);if(d(A,t,a),w){var M=l(t.layout,\"selections\",a);A.style({cursor:\"move\"});var S={element:A.node(),plotinfo:p,gd:t,editHelpers:M,isActiveSelection:!0},E=n(c,t);i(E,A,S)}else A.style(\"pointer-events\",k?\"all\":\"none\");T[k]=A}var C=T[0];T[1].node().addEventListener(\"click\",(function(){return function(t,e){if(f(t)){var r=+e.node().getAttribute(\"data-index\");if(r>=0){if(r===t._fullLayout._activeSelectionIndex)return void m(t);t._fullLayout._activeSelectionIndex=r,t._fullLayout._deactivateSelection=m,h(t)}}}(t,C)}))}(t._fullLayout._selectionLayer)}function d(t,e,r){var n=r.xref+r.yref;s.setClipUrl(t,\"clip\"+e._fullLayout._uid+n,e)}function m(t){f(t)&&t._fullLayout._activeSelectionIndex>=0&&(a(t),delete t._fullLayout._activeSelectionIndex,h(t))}t.exports={draw:h,drawOne:p,activateLastSelection:function(t){if(f(t)){var e=t._fullLayout.selections.length-1;t._fullLayout._activeSelectionIndex=e,t._fullLayout._deactivateSelection=m,h(t)}}}},52307:function(t,e,r){\"use strict\";var n=r(94850).T,i=r(93049).extendFlat;t.exports={newselection:{mode:{valType:\"enumerated\",values:[\"immediate\",\"gradual\"],dflt:\"immediate\",editType:\"none\"},line:{color:{valType:\"color\",editType:\"none\"},width:{valType:\"number\",min:1,dflt:1,editType:\"none\"},dash:i({},n,{dflt:\"dot\",editType:\"none\"}),editType:\"none\"},editType:\"none\"},activeselection:{fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"none\"},editType:\"none\"}}},43028:function(t){\"use strict\";t.exports=function(t,e,r){r(\"newselection.mode\"),r(\"newselection.line.width\")&&(r(\"newselection.line.color\"),r(\"newselection.line.dash\")),r(\"activeselection.fillcolor\"),r(\"activeselection.opacity\")}},51817:function(t,e,r){\"use strict\";var n=r(70414).selectMode,i=r(78534).clearOutline,a=r(81055),o=a.readPaths,s=a.writePaths,l=a.fixDatesForPaths;t.exports=function(t,e){if(t.length){var r=t[0][0];if(r){var a=r.getAttribute(\"d\"),c=e.gd,u=c._fullLayout.newselection,h=e.plotinfo,f=h.xaxis,p=h.yaxis,d=e.isActiveSelection,m=e.dragmode,g=(c.layout||{}).selections||[];if(!n(m)&&void 0!==d){var y=c._fullLayout._activeSelectionIndex;if(y-1,_=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(y)){Z(t,e,a);var b=function(t,e){var r,n,i=t[0],a=-1,o=[];for(n=0;n0?function(t,e){var r,n,i,a=[];for(i=0;i0&&a.push(r);if(1===a.length&&a[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(i=0;i1)return!1;if((n+=e.selectedpoints.length)>1)return!1}return 1===n}(s)&&(f=J(b))){for(o&&o.remove(),g=0;g=0})(i)&&i._fullLayout._deactivateShape(i),function(t){return t._fullLayout._activeSelectionIndex>=0}(i)&&i._fullLayout._deactivateSelection(i);var o=i._fullLayout._zoomlayer,s=p(r),l=m(r);if(s||l){var c,u,h=o.selectAll(\".select-outline-\"+n.id);h&&i._fullLayout._outlining&&(s&&(c=T(h,t)),c&&a.call(\"_guiRelayout\",i,{shapes:c}),l&&!U(t)&&(u=k(h,t)),u&&(i._fullLayout._noEmitSelectedAtStart=!0,a.call(\"_guiRelayout\",i,{selections:u}).then((function(){e&&A(i)}))),i._fullLayout._outlining=!1)}n.selection={},n.selection.selectionDefs=t.selectionDefs=[],n.selection.mergedPolygons=t.mergedPolygons=[]}function Y(t){return t._id}function X(t,e,r,n){if(!t.calcdata)return[];var i,a,o,s=[],l=e.map(Y),c=r.map(Y);for(o=0;o0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(i)>-1}function K(t,e,r){var n,i;for(n=0;n-1&&e;if(!a&&e){var et=ot(t,!0);if(et.length){var nt=et[0].xref,pt=et[0].yref;if(nt&&pt){var dt=ct(et);ut([L(t,nt,\"x\"),L(t,pt,\"y\")])(Q,dt)}}t._fullLayout._noEmitSelectedAtStart?t._fullLayout._noEmitSelectedAtStart=!1:tt&&ht(t,Q),f._reselect=!1}if(!a&&f._deselect){var mt=f._deselect;(function(t,e,r){for(var n=0;n=0)k._fullLayout._deactivateShape(k);else if(!x){var r=A.clickmode;C.done(Mt).then((function(){if(C.clear(Mt),2===t){for(_t.remove(),J=0;J-1&&V(e,k,n.xaxes,n.yaxes,n.subplot,n,_t),\"event\"===r&&ht(k,void 0);l.click(k,e,I.id)})).catch(M.error)}},n.doneFn=function(){kt.remove(),C.done(Mt).then((function(){C.clear(Mt),!S&&$&&n.selectionDefs&&($.subtract=xt,n.selectionDefs.push($),n.mergedPolygons.length=0,[].push.apply(n.mergedPolygons,Y)),(S||x)&&W(n,S),n.doneFnCompleted&&n.doneFnCompleted(St),_&&ht(k,at)})).catch(M.error)}},clearOutline:x,clearSelectionsCache:W,selectOnClick:V}},43144:function(t,e,r){\"use strict\";var n=r(50222),i=r(80337),a=r(36640).line,o=r(94850).T,s=r(93049).extendFlat,l=r(78032).templatedArray,c=(r(35081),r(9829)),u=r(3208).LF,h=r(41235);t.exports=l(\"shape\",{visible:s({},c.visible,{editType:\"calc+arraydraw\"}),showlegend:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},legend:s({},c.legend,{editType:\"calc+arraydraw\"}),legendgroup:s({},c.legendgroup,{editType:\"calc+arraydraw\"}),legendgrouptitle:{text:s({},c.legendgrouptitle.text,{editType:\"calc+arraydraw\"}),font:i({editType:\"calc+arraydraw\"}),editType:\"calc+arraydraw\"},legendrank:s({},c.legendrank,{editType:\"calc+arraydraw\"}),legendwidth:s({},c.legendwidth,{editType:\"calc+arraydraw\"}),type:{valType:\"enumerated\",values:[\"circle\",\"rect\",\"path\",\"line\"],editType:\"calc+arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\",\"between\"],dflt:\"above\",editType:\"arraydraw\"},xref:s({},n.xref,{}),xsizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},xanchor:{valType:\"any\",editType:\"calc+arraydraw\"},x0:{valType:\"any\",editType:\"calc+arraydraw\"},x1:{valType:\"any\",editType:\"calc+arraydraw\"},x0shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},x1shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},yref:s({},n.yref,{}),ysizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},yanchor:{valType:\"any\",editType:\"calc+arraydraw\"},y0:{valType:\"any\",editType:\"calc+arraydraw\"},y1:{valType:\"any\",editType:\"calc+arraydraw\"},y0shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},y1shift:{valType:\"number\",dflt:0,min:-1,max:1,editType:\"calc\"},path:{valType:\"string\",editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},line:{color:s({},a.color,{editType:\"arraydraw\"}),width:s({},a.width,{editType:\"calc+arraydraw\"}),dash:s({},o,{editType:\"arraydraw\"}),editType:\"calc+arraydraw\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"arraydraw\"},editable:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},label:{text:{valType:\"string\",dflt:\"\",editType:\"arraydraw\"},texttemplate:u({},{keys:Object.keys(h)}),font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\",\"start\",\"middle\",\"end\"],editType:\"arraydraw\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],editType:\"calc+arraydraw\"},padding:{valType:\"number\",dflt:3,min:0,editType:\"arraydraw\"},editType:\"arraydraw\"},editType:\"arraydraw\"})},44959:function(t,e,r){\"use strict\";var n=r(34809),i=r(29714),a=r(2956),o=r(49728);function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,r,i,s,l){var c=t/2,u=l;if(\"pixel\"===e){var h=s?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],f=n.aggNums(Math.max,null,h),p=n.aggNums(Math.min,null,h),d=p<0?Math.abs(p)+c:c,m=f>0?f+c:c;return{ppad:c,ppadplus:u?d:m,ppadminus:u?m:d}}return{ppad:c}}function u(t,e,r){var n,i,s=\"x\"===t._id.charAt(0)?\"x\":\"y\",l=\"category\"===t.type||\"multicategory\"===t.type,c=0,u=0,h=l?t.r2c:t.d2c;if(\"scaled\"===e[s+\"sizemode\"]?(n=e[s+\"0\"],i=e[s+\"1\"],l&&(c=e[s+\"0shift\"],u=e[s+\"1shift\"])):(n=e[s+\"anchor\"],i=e[s+\"anchor\"]),void 0!==n)return[h(n)+c,h(i)+u];if(e.path){var f,p,d,m,g=1/0,y=-1/0,v=e.path.match(a.segmentRE);for(\"date\"===t.type&&(h=o.decodeDate(h)),f=0;fy&&(y=m)));return y>=g?[g,y]:void 0}}t.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o=t?e-n:n-e,-180/Math.PI*Math.atan2(i,a)}(x,b,_,w):0),A.call((function(e){return e.call(o.font,k).attr({}),a.convertToTspans(e,t),e}));var G=function(t,e,r,n,i,a,o){var s,l,c,u,f=i.label.textposition,p=i.label.textangle,d=i.label.padding,m=i.type,g=Math.PI/180*a,y=Math.sin(g),v=Math.cos(g),x=i.label.xanchor,_=i.label.yanchor;if(\"line\"===m){\"start\"===f?(s=t,l=e):\"end\"===f?(s=r,l=n):(s=(t+r)/2,l=(e+n)/2),\"auto\"===x&&(x=\"start\"===f?\"auto\"===p?r>t?\"left\":rt?\"right\":rt?\"right\":rt?\"left\":r1&&(2!==t.length||\"Z\"!==t[1][0])&&(0===L&&(t[0][0]=\"M\"),e[C]=t,A(),M())}}()}}function V(t,r){!function(t,r){if(e.length)for(var n=0;nb?(M=p,L=\"y0\",S=b,I=\"y1\"):(M=b,L=\"y1\",S=p,I=\"y0\"),it(n),st(l,r),function(t,e,r){var n=e.xref,i=e.yref,a=o.getFromId(r,n),s=o.getFromId(r,i),l=\"\";\"paper\"===n||a.autorange||(l+=n),\"paper\"===i||s.autorange||(l+=i),f.setClipUrl(t,l?\"clip\"+r._fullLayout._uid+l:null,r)}(e,r,t),nt.moveFn=\"move\"===D?at:ot,nt.altKey=n.altKey)},doneFn:function(){_(t)||(m(e),lt(l),T(e,t,r),i.call(\"_guiRelayout\",t,u.getUpdateObj()))},clickFn:function(){_(t)||lt(l)}};function it(r){if(_(t))D=null;else if(j)D=\"path\"===r.target.tagName?\"move\":\"start-point\"===r.target.attributes[\"data-line-point\"].value?\"resize-over-start-point\":\"resize-over-end-point\";else{var n=nt.element.getBoundingClientRect(),i=n.right-n.left,a=n.bottom-n.top,o=r.clientX-n.left,s=r.clientY-n.top,l=!U&&i>R&&a>F&&!r.shiftKey?d.getCursor(o/i,1-s/a):\"move\";m(e,l),D=l.split(\"-\")[0]}}function at(n,i){if(\"path\"===r.type){var a=function(t){return t},o=a,u=a;B?V(\"xanchor\",r.xanchor=tt(w+n)):(o=function(t){return tt(K(t)+n)},H&&\"date\"===H.type&&(o=y.encodeDate(o))),N?V(\"yanchor\",r.yanchor=et(A+i)):(u=function(t){return et(Q(t)+i)},Z&&\"date\"===Z.type&&(u=y.encodeDate(u))),V(\"path\",r.path=k(O,o,u))}else B?V(\"xanchor\",r.xanchor=tt(w+n)):(V(\"x0\",r.x0=tt(h+n)),V(\"x1\",r.x1=tt(x+n))),N?V(\"yanchor\",r.yanchor=et(A+i)):(V(\"y0\",r.y0=et(p+i)),V(\"y1\",r.y1=et(b+i)));e.attr(\"d\",v(t,r)),st(l,r),c(t,s,r,q)}function ot(n,i){if(U){var a=function(t){return t},o=a,u=a;B?V(\"xanchor\",r.xanchor=tt(w+n)):(o=function(t){return tt(K(t)+n)},H&&\"date\"===H.type&&(o=y.encodeDate(o))),N?V(\"yanchor\",r.yanchor=et(A+i)):(u=function(t){return et(Q(t)+i)},Z&&\"date\"===Z.type&&(u=y.encodeDate(u))),V(\"path\",r.path=k(O,o,u))}else if(j){if(\"resize-over-start-point\"===D){var f=h+n,d=N?p-i:p+i;V(\"x0\",r.x0=B?f:tt(f)),V(\"y0\",r.y0=N?d:et(d))}else if(\"resize-over-end-point\"===D){var m=x+n,g=N?b-i:b+i;V(\"x1\",r.x1=B?m:tt(m)),V(\"y1\",r.y1=N?g:et(g))}}else{var _=function(t){return-1!==D.indexOf(t)},T=_(\"n\"),G=_(\"s\"),W=_(\"w\"),Y=_(\"e\"),X=T?M+i:M,$=G?S+i:S,J=W?E+n:E,rt=Y?C+n:C;N&&(T&&(X=M-i),G&&($=S-i)),(!N&&$-X>F||N&&X-$>F)&&(V(L,r[L]=N?X:et(X)),V(I,r[I]=N?$:et($))),rt-J>R&&(V(P,r[P]=B?J:tt(J)),V(z,r[z]=B?rt:tt(rt)))}e.attr(\"d\",v(t,r)),st(l,r),c(t,s,r,q)}function st(t,e){(B||N)&&function(){var r=\"path\"!==e.type,n=t.selectAll(\".visual-cue\").data([0]);n.enter().append(\"path\").attr({fill:\"#fff\",\"fill-rule\":\"evenodd\",stroke:\"#000\",\"stroke-width\":1}).classed(\"visual-cue\",!0);var i=K(B?e.xanchor:a.midRange(r?[e.x0,e.x1]:y.extractPathCoords(e.path,g.paramIsX))),o=Q(N?e.yanchor:a.midRange(r?[e.y0,e.y1]:y.extractPathCoords(e.path,g.paramIsY)));if(i=y.roundPositionForSharpStrokeRendering(i,1),o=y.roundPositionForSharpStrokeRendering(o,1),B&&N){var s=\"M\"+(i-1-1)+\",\"+(o-1-1)+\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\";n.attr(\"d\",s)}else if(B){var l=\"M\"+(i-1-1)+\",\"+(o-9-1)+\"v18 h2 v-18 Z\";n.attr(\"d\",l)}else{var c=\"M\"+(i-9-1)+\",\"+(o-1-1)+\"h18 v2 h-18 Z\";n.attr(\"d\",c)}}()}function lt(t){t.selectAll(\".visual-cue\").remove()}d.init(nt),rt.node().onmousemove=it}(t,F,u,e,r,D):!0===u.editable&&F.style(\"pointer-events\",z||h.opacity(C)*E<=.5?\"stroke\":\"all\");F.node().addEventListener(\"click\",(function(){return function(t,e){if(b(t)){var r=+e.node().getAttribute(\"data-index\");if(r>=0){if(r===t._fullLayout._activeShapeIndex)return void A(t);t._fullLayout._activeShapeIndex=r,t._fullLayout._deactivateShape=A,x(t)}}}(t,F)}))}u._input&&!0===u.visible&&(\"above\"===u.layer?M(t._fullLayout._shapeUpperLayer):\"paper\"===u.xref||\"paper\"===u.yref?M(t._fullLayout._shapeLowerLayer):\"between\"===u.layer?M(w.shapelayerBetween):w._hadPlotinfo?M((w.mainplotinfo||w).shapelayer):M(t._fullLayout._shapeLowerLayer))}function T(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,\"\").replace(/[xyz][1-9]* *domain/g,\"\");f.setClipUrl(t,n?\"clip\"+e._fullLayout._uid+n:null,e)}function k(t,e,r){return t.replace(g.segmentRE,(function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i];return i+t.substr(1).replace(g.paramRE,(function(t){return n>=s||(a[n]?t=e(t):o[n]&&(t=r(t)),n++),t}))}))}function A(t){b(t)&&t._fullLayout._activeShapeIndex>=0&&(u(t),delete t._fullLayout._activeShapeIndex,x(t))}t.exports={draw:x,drawOne:w,eraseActiveShape:function(t){if(b(t)){u(t);var e=t._fullLayout._activeShapeIndex,r=(t.layout||{}).shapes||[];if(e0&&lp&&(t=\"X\"),t}));return a>p&&(d=d.replace(/[\\s,]*X.*/,\"\"),i.log(\"Ignoring extra params in segment \"+t)),u+d}))}(r,l,u);if(\"pixel\"===r.xsizemode){var A=l(r.xanchor);h=A+r.x0+b,f=A+r.x1+w}else h=l(r.x0)+b,f=l(r.x1)+w;if(\"pixel\"===r.ysizemode){var M=u(r.yanchor);p=M-r.y0+T,d=M-r.y1+k}else p=u(r.y0)+T,d=u(r.y1)+k;if(\"line\"===m)return\"M\"+h+\",\"+p+\"L\"+f+\",\"+d;if(\"rect\"===m)return\"M\"+h+\",\"+p+\"H\"+f+\"V\"+d+\"H\"+h+\"Z\";var S=(h+f)/2,E=(p+d)/2,C=Math.abs(S-h),L=Math.abs(E-p),I=\"A\"+C+\",\"+L,P=S+C+\",\"+E;return\"M\"+P+I+\" 0 1,1 \"+S+\",\"+(E-L)+I+\" 0 0,1 \"+P+\"Z\"}},43701:function(t,e,r){\"use strict\";var n=r(28231);t.exports={moduleType:\"component\",name:\"shapes\",layoutAttributes:r(43144),supplyLayoutDefaults:r(74367),supplyDrawNewShapeDefaults:r(85522),includeBasePlot:r(20706)(\"shapes\"),calcAutorange:r(44959),draw:n.draw,drawOne:n.drawOne}},41235:function(t){\"use strict\";function e(t,e){return e?e.d2l(t):t}function r(t,e){return e?e.l2d(t):t}function n(t){return t.x0shift||0}function i(t){return t.x1shift||0}function a(t){return t.y0shift||0}function o(t){return t.y1shift||0}function s(t,r){return e(t.x1,r)+i(t)-e(t.x0,r)-n(t)}function l(t,r,n){return e(t.y1,n)+o(t)-e(t.y0,n)-a(t)}t.exports={x0:function(t){return t.x0},x1:function(t){return t.x1},y0:function(t){return t.y0},y1:function(t){return t.y1},slope:function(t,e,r){return\"line\"!==t.type?void 0:l(t,0,r)/s(t,e)},dx:s,dy:l,width:function(t,e){return Math.abs(s(t,e))},height:function(t,e,r){return Math.abs(l(t,0,r))},length:function(t,e,r){return\"line\"!==t.type?void 0:Math.sqrt(Math.pow(s(t,e),2)+Math.pow(l(t,0,r),2))},xcenter:function(t,a){return r((e(t.x1,a)+i(t)+e(t.x0,a)+n(t))/2,a)},ycenter:function(t,n,i){return r((e(t.y1,i)+o(t)+e(t.y0,i)+a(t))/2,i)}}},8606:function(t,e,r){\"use strict\";var n=r(80337),i=r(57891),a=r(93049).extendDeepAll,o=r(13582).overrideAll,s=r(49722),l=r(78032).templatedArray,c=r(64194),u=l(\"step\",{visible:{valType:\"boolean\",dflt:!0},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\"},value:{valType:\"string\"},execute:{valType:\"boolean\",dflt:!0}});t.exports=o(l(\"slider\",{visible:{valType:\"boolean\",dflt:!0},active:{valType:\"number\",min:0,dflt:0},steps:u,lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",min:-2,max:3,dflt:0},pad:a(i({editType:\"arraydraw\"}),{},{t:{dflt:20}}),xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\"},y:{valType:\"number\",min:-2,max:3,dflt:0},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},transition:{duration:{valType:\"number\",min:0,dflt:150},easing:{valType:\"enumerated\",values:s.transition.easing.values,dflt:\"cubic-in-out\"}},currentvalue:{visible:{valType:\"boolean\",dflt:!0},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},offset:{valType:\"number\",dflt:10},prefix:{valType:\"string\"},suffix:{valType:\"string\"},font:n({})},font:n({}),activebgcolor:{valType:\"color\",dflt:c.gripBgActiveColor},bgcolor:{valType:\"color\",dflt:c.railBgColor},bordercolor:{valType:\"color\",dflt:c.railBorderColor},borderwidth:{valType:\"number\",min:0,dflt:c.railBorderWidth},ticklen:{valType:\"number\",min:0,dflt:c.tickLength},tickcolor:{valType:\"color\",dflt:c.tickColor},tickwidth:{valType:\"number\",min:0,dflt:1},minorticklen:{valType:\"number\",min:0,dflt:c.minorTickLength}}),\"arraydraw\",\"from-root\")},64194:function(t){\"use strict\";t.exports={name:\"sliders\",containerClassName:\"slider-container\",groupClassName:\"slider-group\",inputAreaClass:\"slider-input-area\",railRectClass:\"slider-rail-rect\",railTouchRectClass:\"slider-rail-touch-rect\",gripRectClass:\"slider-grip-rect\",tickRectClass:\"slider-tick-rect\",inputProxyClass:\"slider-input-proxy\",labelsClass:\"slider-labels\",labelGroupClass:\"slider-label-group\",labelClass:\"slider-label\",currentValueClass:\"slider-current-value\",railHeight:5,menuIndexAttrName:\"slider-active-index\",autoMarginIdRoot:\"slider-\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\"#bec8d9\",railBgColor:\"#f8fafc\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\"#bec8d9\",gripBgColor:\"#f6f8fa\",gripBgActiveColor:\"#dbdde0\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\"#333\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\"#333\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},74537:function(t,e,r){\"use strict\";var n=r(34809),i=r(59008),a=r(8606),o=r(64194).name,s=a.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=i(t,e,{name:\"steps\",handleItemDefaults:c}),l=0,u=0;u0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\"transform\",l(o-.5*h.gripWidth,e._dims.currentValueTotalHeight))}}function E(t,e){var r=t._dims;return r.inputAreaStart+h.stepInset+(r.inputAreaLength-2*h.stepInset)*Math.min(1,Math.max(0,e))}function C(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-h.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*h.stepInset-2*r.inputAreaStart)))}function L(t,e,r){var n=r._dims,i=s.ensureSingle(t,\"rect\",h.railTouchRectClass,(function(n){n.call(A,e,t,r).style(\"pointer-events\",\"all\")}));i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,h.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr(\"opacity\",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function I(t,e){var r=e._dims,n=r.inputAreaLength-2*h.railInset,i=s.ensureSingle(t,\"rect\",h.railRectClass);i.attr({width:n,height:h.railWidth,rx:h.railRadius,ry:h.railRadius,\"shape-rendering\":\"crispEdges\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\"),o.setTranslate(i,h.railInset,.5*(r.inputAreaWidth-h.railWidth)+r.currentValueTotalHeight)}t.exports=function(t){var e=t._context.staticPlot,r=t._fullLayout,a=function(t,e){for(var r=t[h.name],n=[],i=0;i0?[0]:[]);function l(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(s.enter().append(\"g\").classed(h.containerClassName,!0).style(\"cursor\",e?null:\"ew-resize\"),s.exit().each((function(){n.select(this).selectAll(\"g.\"+h.groupClassName).each(l)})).remove(),0!==a.length){var c=s.selectAll(\"g.\"+h.groupClassName).data(a,y);c.enter().append(\"g\").classed(h.groupClassName,!0),c.exit().each(l).remove();for(var u=0;u0||T<0){var E={left:[-k,0],right:[k,0],top:[0,-k],bottom:[0,k]}[b.side];a.attr(\"transform\",l(E[0],E[1]))}}}function ft(t,e){t.text(e).on(\"mouseover.opacity\",(function(){n.select(this).transition().duration(f.SHOW_PLACEHOLDER).style(\"opacity\",1)})).on(\"mouseout.opacity\",(function(){n.select(this).transition().duration(f.HIDE_PLACEHOLDER).style(\"opacity\",0)}))}if(at.call(ct,ot),et&&(S?at.on(\".opacity\",null):(ft(at,x),E=!0),at.call(h.makeEditable,{gd:t}).on(\"edit\",(function(e){void 0!==_?o.call(\"_guiRestyle\",t,v,e,_):o.call(\"_guiRelayout\",t,v,e)})).on(\"cancel\",(function(){this.text(this.attr(\"data-unformatted\")).call(ct)})).on(\"input\",(function(t){this.text(t||\" \").call(h.positionText,w.x,w.y)})),N)){if(N&&!S){var pt=at.node().getBBox(),dt=pt.y+pt.height+1.6*W;ot.attr(\"y\",dt)}V?ot.on(\".opacity\",null):(ft(ot,j),q=!0),ot.call(h.makeEditable,{gd:t}).on(\"edit\",(function(e){o.call(\"_guiRelayout\",t,\"title.subtitle.text\",e)})).on(\"cancel\",(function(){this.text(this.attr(\"data-unformatted\")).call(ct)})).on(\"input\",(function(t){this.text(t||\" \").call(h.positionText,ot.attr(\"x\"),ot.attr(\"y\"))}))}return at.classed(\"js-placeholder\",E),ot&&ot.classed(\"js-placeholder\",q),k},SUBTITLE_PADDING_EM:1.6,SUBTITLE_PADDING_MATHJAX_EM:1.6}},85389:function(t,e,r){\"use strict\";var n=r(80337),i=r(10229),a=r(93049).extendFlat,o=r(13582).overrideAll,s=r(57891),l=r(78032).templatedArray,c=l(\"button\",{visible:{valType:\"boolean\"},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},args2:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\",dflt:\"\"},execute:{valType:\"boolean\",dflt:!0}});t.exports=o(l(\"updatemenu\",{_arrayAttrRegexps:[/^updatemenus\\[(0|[1-9][0-9]+)\\]\\.buttons/],visible:{valType:\"boolean\"},type:{valType:\"enumerated\",values:[\"dropdown\",\"buttons\"],dflt:\"dropdown\"},direction:{valType:\"enumerated\",values:[\"left\",\"right\",\"up\",\"down\"],dflt:\"down\"},active:{valType:\"integer\",min:-1,dflt:0},showactive:{valType:\"boolean\",dflt:!0},buttons:c,x:{valType:\"number\",min:-2,max:3,dflt:-.05},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"right\"},y:{valType:\"number\",min:-2,max:3,dflt:1},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},pad:a(s({editType:\"arraydraw\"}),{}),font:n({}),bgcolor:{valType:\"color\"},bordercolor:{valType:\"color\",dflt:i.borderLine},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"arraydraw\"}}),\"arraydraw\",\"from-root\")},71559:function(t){\"use strict\";t.exports={name:\"updatemenus\",containerClassName:\"updatemenu-container\",headerGroupClassName:\"updatemenu-header-group\",headerClassName:\"updatemenu-header\",headerArrowClassName:\"updatemenu-header-arrow\",dropdownButtonGroupClassName:\"updatemenu-dropdown-button-group\",dropdownButtonClassName:\"updatemenu-dropdown-button\",buttonClassName:\"updatemenu-button\",itemRectClassName:\"updatemenu-item-rect\",itemTextClassName:\"updatemenu-item-text\",menuIndexAttrName:\"updatemenu-active-index\",autoMarginIdRoot:\"updatemenu-\",blankHeaderOpts:{label:\" \"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\"#F4FAFF\",hoverColor:\"#F4FAFF\",arrowSymbol:{left:\"◄\",right:\"►\",up:\"▲\",down:\"▼\"}}},42746:function(t,e,r){\"use strict\";var n=r(34809),i=r(59008),a=r(85389),o=r(71559).name,s=a.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o(\"visible\",i(t,e,{name:\"buttons\",handleItemDefaults:c}).length>0)&&(o(\"active\"),o(\"direction\"),o(\"type\"),o(\"showactive\"),o(\"x\"),o(\"y\"),n.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),n.coerceFont(o,\"font\",r.font),o(\"bgcolor\",r.paper_bgcolor),o(\"bordercolor\"),o(\"borderwidth\"))}function c(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r(\"visible\",\"skip\"===t.method||Array.isArray(t.args))&&(r(\"method\"),r(\"args\"),r(\"args2\"),r(\"label\"),r(\"execute\"))}t.exports=function(t,e){i(t,e,{name:o,handleItemDefaults:l})}},40974:function(t,e,r){\"use strict\";var n=r(45568),i=r(44122),a=r(78766),o=r(62203),s=r(34809),l=r(30635),c=r(78032).arrayEditor,u=r(4530).LINE_SPACING,h=r(71559),f=r(21736);function p(t){return t._index}function d(t,e){return+t.attr(h.menuIndexAttrName)===e._index}function m(t,e,r,n,i,a,o,s){e.active=o,c(t.layout,h.name,e).applyUpdate(\"active\",o),\"buttons\"===e.type?y(t,n,null,null,e):\"dropdown\"===e.type&&(i.attr(h.menuIndexAttrName,\"-1\"),g(t,n,i,a,e),s||y(t,n,i,a,e))}function g(t,e,r,n,i){var a=s.ensureSingle(e,\"g\",h.headerClassName,(function(t){t.style(\"pointer-events\",\"all\")})),l=i._dims,c=i.active,u=i.buttons[c]||h.blankHeaderOpts,f={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};a.call(v,i,u,t).call(M,i,f,p),s.ensureSingle(e,\"text\",h.headerArrowClassName,(function(t){t.attr(\"text-anchor\",\"end\").call(o.font,i.font).text(h.arrowSymbol[i.direction])})).attr({x:l.headerWidth-h.arrowOffsetX+i.pad.l,y:l.headerHeight/2+h.textOffsetY+i.pad.t}),a.on(\"click\",(function(){r.call(S,String(d(r,i)?-1:i._index)),y(t,e,r,n,i)})),a.on(\"mouseover\",(function(){a.call(w)})),a.on(\"mouseout\",(function(){a.call(T,i)})),o.setTranslate(e,l.lx,l.ly)}function y(t,e,r,a,o){r||(r=e).attr(\"pointer-events\",\"all\");var l=function(t){return-1==+t.attr(h.menuIndexAttrName)}(r)&&\"buttons\"!==o.type?[]:o.buttons,c=\"dropdown\"===o.type?h.dropdownButtonClassName:h.buttonClassName,u=r.selectAll(\"g.\"+c).data(s.filterVisible(l)),f=u.enter().append(\"g\").classed(c,!0),p=u.exit();\"dropdown\"===o.type?(f.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),p.transition().attr(\"opacity\",\"0\").remove()):p.remove();var d=0,g=0,y=o._dims,x=-1!==[\"up\",\"down\"].indexOf(o.direction);\"dropdown\"===o.type&&(x?g=y.headerHeight+h.gapButtonHeader:d=y.headerWidth+h.gapButtonHeader),\"dropdown\"===o.type&&\"up\"===o.direction&&(g=-h.gapButtonHeader+h.gapButton-y.openHeight),\"dropdown\"===o.type&&\"left\"===o.direction&&(d=-h.gapButtonHeader+h.gapButton-y.openWidth);var _={x:y.lx+d+o.pad.l,y:y.ly+g+o.pad.t,yPad:h.gapButton,xPad:h.gapButton,index:0},k={l:_.x+o.borderwidth,t:_.y+o.borderwidth};u.each((function(s,l){var c=n.select(this);c.call(v,o,s,t).call(M,o,_),c.on(\"click\",(function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(m(t,o,0,e,r,a,-1),i.executeAPICommand(t,s.method,s.args2)):(m(t,o,0,e,r,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit(\"plotly_buttonclicked\",{menu:o,button:s,active:o.active}))})),c.on(\"mouseover\",(function(){c.call(w)})),c.on(\"mouseout\",(function(){c.call(T,o),u.call(b,o)}))})),u.call(b,o),x?(k.w=Math.max(y.openWidth,y.headerWidth),k.h=_.y-k.t):(k.w=_.x-k.l,k.h=Math.max(y.openHeight,y.headerHeight)),k.direction=o.direction,a&&(u.size()?function(t,e,r,n,i,a){var o,s,l,c=i.direction,u=\"up\"===c||\"down\"===c,f=i._dims,p=i.active;if(u)for(s=0,l=0;l0?[0]:[]);if(o.enter().append(\"g\").classed(h.containerClassName,!0).style(\"cursor\",\"pointer\"),o.exit().each((function(){n.select(this).selectAll(\"g.\"+h.headerGroupClassName).each(a)})).remove(),0!==r.length){var l=o.selectAll(\"g.\"+h.headerGroupClassName).data(r,p);l.enter().append(\"g\").classed(h.headerGroupClassName,!0);for(var c=s.ensureSingle(o,\"g\",h.dropdownButtonGroupClassName,(function(t){t.style(\"pointer-events\",\"all\")})),u=0;uw,A=s.barLength+2*s.barPad,M=s.barWidth+2*s.barPad,S=d,E=g+y;E+M>c&&(E=c-M);var C=this.container.selectAll(\"rect.scrollbar-horizontal\").data(k?[0]:[]);C.exit().on(\".drag\",null).remove(),C.enter().append(\"rect\").classed(\"scrollbar-horizontal\",!0).call(i.fill,s.barColor),k?(this.hbar=C.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:A,height:M}),this._hbarXMin=S+A/2,this._hbarTranslateMax=w-A):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var L=y>T,I=s.barWidth+2*s.barPad,P=s.barLength+2*s.barPad,z=d+m,O=g;z+I>l&&(z=l-I);var D=this.container.selectAll(\"rect.scrollbar-vertical\").data(L?[0]:[]);D.exit().on(\".drag\",null).remove(),D.enter().append(\"rect\").classed(\"scrollbar-vertical\",!0).call(i.fill,s.barColor),L?(this.vbar=D.attr({rx:s.barRadius,ry:s.barRadius,x:z,y:O,width:I,height:P}),this._vbarYMin=O+P/2,this._vbarTranslateMax=T-P):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=u-.5,B=L?h+I+.5:h+.5,N=f-.5,j=k?p+M+.5:p+.5,U=o._topdefs.selectAll(\"#\"+R).data(k||L?[0]:[]);if(U.exit().remove(),U.enter().append(\"clipPath\").attr(\"id\",R).append(\"rect\"),k||L?(this._clipRect=U.select(\"rect\").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:g,width:m,height:y})):(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),k||L){var V=n.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault()})).on(\"drag\",this._onBoxDrag.bind(this));this.container.on(\"wheel\",null).on(\"wheel\",this._onBoxWheel.bind(this)).on(\".drag\",null).call(V);var q=n.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()})).on(\"drag\",this._onBarDrag.bind(this));k&&this.hbar.on(\".drag\",null).call(q),L&&this.vbar.on(\".drag\",null).call(q)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(\".drag\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(\".drag\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,i=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,s=a+this._vbarTranslateMax;e=(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},4530:function(t){\"use strict\";t.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\"right\",right:\"left\",top:\"bottom\",bottom:\"top\"}}},35081:function(t){\"use strict\";t.exports={axisRefDescription:function(t,e,r){return[\"If set to a\",t,\"axis id (e.g. *\"+t+\"* or\",\"*\"+t+\"2*), the `\"+t+\"` position refers to a\",t,\"coordinate. If set to *paper*, the `\"+t+\"`\",\"position refers to the distance from the\",e,\"of the plotting\",\"area in normalized coordinates where *0* (*1*) corresponds to the\",e,\"(\"+r+\"). If set to a\",t,\"axis ID followed by\",\"*domain* (separated by a space), the position behaves like for\",\"*paper*, but refers to the distance in fractions of the domain\",\"length from the\",e,\"of the domain of that axis: e.g.,\",\"*\"+t+\"2 domain* refers to the domain of the second\",t,\" axis and a\",t,\"position of 0.5 refers to the\",\"point between the\",e,\"and the\",r,\"of the domain of the\",\"second\",t,\"axis.\"].join(\" \")}}},20909:function(t){\"use strict\";t.exports={INCREASING:{COLOR:\"#3D9970\",SYMBOL:\"▲\"},DECREASING:{COLOR:\"#FF4136\",SYMBOL:\"▼\"}}},87296:function(t){\"use strict\";t.exports={FORMAT_LINK:\"https://github.com/d3/d3-format/tree/v1.4.5#d3-format\",DATE_FORMAT_LINK:\"https://github.com/d3/d3-time-format/tree/v2.2.3#locale_format\"}},20726:function(t){\"use strict\";t.exports={COMPARISON_OPS:[\"=\",\"!=\",\"<\",\">=\",\">\",\"<=\"],COMPARISON_OPS2:[\"=\",\"<\",\">=\",\">\",\"<=\"],INTERVAL_OPS:[\"[]\",\"()\",\"[)\",\"(]\",\"][\",\")(\",\"](\",\")[\"],SET_OPS:[\"{}\",\"}{\"],CONSTRAINT_REDUCTION:{\"=\":\"=\",\"<\":\"<\",\"<=\":\"<\",\">\":\">\",\">=\":\">\",\"[]\":\"[]\",\"()\":\"[]\",\"[)\":\"[]\",\"(]\":\"[]\",\"][\":\"][\",\")(\":\"][\",\"](\":\"][\",\")[\":\"][\"}}},84770:function(t){\"use strict\";t.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},49467:function(t){\"use strict\";t.exports={circle:\"●\",\"circle-open\":\"○\",square:\"■\",\"square-open\":\"□\",diamond:\"◆\",\"diamond-open\":\"◇\",cross:\"+\",x:\"❌\"}},20438:function(t){\"use strict\";t.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},63821:function(t){\"use strict\";t.exports={BADNUM:void 0,FP_SAFE:1e-4*Number.MAX_VALUE,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,ONEMILLI:1,ONEMICROSEC:.001,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:\"−\"}},1837:function(t,e){\"use strict\";e.CSS_DECLARATIONS=[[\"image-rendering\",\"optimizeSpeed\"],[\"image-rendering\",\"-moz-crisp-edges\"],[\"image-rendering\",\"-o-crisp-edges\"],[\"image-rendering\",\"-webkit-optimize-contrast\"],[\"image-rendering\",\"optimize-contrast\"],[\"image-rendering\",\"crisp-edges\"],[\"image-rendering\",\"pixelated\"]],e.STYLE=e.CSS_DECLARATIONS.map((function(t){return t.join(\": \")+\"; \"})).join(\"\")},62972:function(t,e){\"use strict\";e.xmlns=\"http://www.w3.org/2000/xmlns/\",e.svg=\"http://www.w3.org/2000/svg\",e.xlink=\"http://www.w3.org/1999/xlink\",e.svgAttrs={xmlns:e.svg,\"xmlns:xlink\":e.xlink}},17430:function(t,e,r){\"use strict\";e.version=r(29697).version,r(71116),r(6713);for(var n=r(33626),i=e.register=n.register,a=r(90742),o=Object.keys(a),s=0;s\",\"\",\" \",\" \",\" plotly-logomark \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\" \",\"\"].join(\"\")}}},32546: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}},44313:function(t,e,r){\"use strict\";var n=r(98953),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 c(t,e){return a(e-t,s)}function u(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 h(t,e,r,n,i,a,c){i=i||0,a=a||0;var u,h,f,p,d,m=l([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}m?(u=0,h=o,f=s):r=i&&t<=a);var i,a},pathArc:function(t,e,r,n,i){return h(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return h(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return h(t,e,r,n,i,a,1)}}},87800:function(t,e,r){\"use strict\";var n=r(93229).decode,i=r(56174),a=Array.isArray,o=ArrayBuffer,s=DataView;function l(t){return o.isView(t)&&!(t instanceof s)}function c(t){return a(t)||l(t)}e.isTypedArray=l,e.isArrayOrTypedArray=c,e.isArray1D=function(t){return!c(t[0])},e.ensureArray=function(t,e){return a(t)||(t=[]),t.length=e,t};var u={u1c:\"undefined\"==typeof Uint8ClampedArray?void 0:Uint8ClampedArray,i1:\"undefined\"==typeof Int8Array?void 0:Int8Array,u1:\"undefined\"==typeof Uint8Array?void 0:Uint8Array,i2:\"undefined\"==typeof Int16Array?void 0:Int16Array,u2:\"undefined\"==typeof Uint16Array?void 0:Uint16Array,i4:\"undefined\"==typeof Int32Array?void 0:Int32Array,u4:\"undefined\"==typeof Uint32Array?void 0:Uint32Array,f4:\"undefined\"==typeof Float32Array?void 0:Float32Array,f8:\"undefined\"==typeof Float64Array?void 0:Float64Array};function h(t){return t.constructor===ArrayBuffer}function f(t,e,r){if(c(t)){if(c(t[0])){for(var n=r,i=0;ii.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){-1===(i.extras||[]).indexOf(t)?(d(t)&&(t=m(t)),t%1||!n(t)||void 0!==i.min&&ti.max?e.set(r):e.set(+t)):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){d(t)&&(t=m(t)),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(s.get(t,r))}},angle:{coerceFunction:function(t,e,r){d(t)&&(t=m(t)),\"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||h(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&&!!h(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:u}if(\"string\"!=typeof t&&\"number\"!=typeof t)return u;t=String(t);var c=b(r),y=t.charAt(0);!c||\"G\"!==y&&\"g\"!==y||(t=t.substr(1),r=\"\");var w=c&&\"chinese\"===r.substr(0,7),T=t.match(w?x:v);if(!T)return u;var k=T[1],A=T[3]||\"1\",M=Number(T[5]||1),S=Number(T[7]||0),E=Number(T[9]||0),C=Number(T[11]||0);if(c){if(2===k.length)return u;var L;k=Number(k);try{var I=g.getComponentMethod(\"calendars\",\"getCal\")(r);if(w){var P=\"i\"===A.charAt(A.length-1);A=parseInt(A,10),L=I.newDate(k,I.toMonthIndex(k,A,P),M)}else L=I.newDate(k,Number(A),M)}catch(t){return u}return L?(L.toJD()-m)*h+S*f+E*p+C*d:u}k=2===k.length?(Number(k)+2e3-_)%100+_:Number(k),A-=1;var z=new Date(Date.UTC(2e3,A,M,S,E));return z.setUTCFullYear(k),z.getUTCMonth()!==A||z.getUTCDate()!==M?u:z.getTime()+C*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)!==u};var T=90*h,k=3*f,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 u;e||(e=0);var a,o,s,c,v,x,_=Math.floor(10*l(t+.05,1)),w=Math.round(t-_/10);if(b(r)){var S=Math.floor(w/h)+m,E=Math.floor(l(t,h));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+h&&t<=i-h))return u;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===u)return r;if(e.isJSDate(t)||\"number\"==typeof t&&isFinite(t)){if(b(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,C={1:\"1\",2:\"1\",3:\"2\",4:\"2\"};function L(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 C[r(\"%q\")(i)]})),b(n))try{t=g.getComponentMethod(\"calendars\",\"worldCalFmt\")(t,e,n)}catch(t){return\"Invalid\"}return r(t)(i)}var I=[59,59.9,59.99,59.999,59.9999];e.formatDate=function(t,e,r,n,i,a){if(i=b(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,h),n=w(Math.floor(r/f),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),I[e])).toFixed(e).substr(1);e>0&&(i=i.replace(/0+$/,\"\").replace(/[\\.]$/,\"\")),n+=\":\"+i}return n}(t,r)+\"\\n\"+L(a.dayMonthYear,t,n,i);e=a.dayMonth+\"\\n\"+a.year}return L(e,t,n,i)};var P=3*h;e.incrementMonth=function(t,e,r){r=b(r)&&r;var n=l(t,h);if(t=Math.round(t-n),r)try{var i=Math.round(t/h)+m,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()-m)*h+n}catch(e){s.error(\"invalid ms \"+t+\" in calendar \"+r)}var c=new Date(t+P);return c.setUTCMonth(c.getUTCMonth()+e)+n-P},e.findExactDates=function(t,e){for(var r,n,i=0,a=0,s=0,l=0,c=b(e)&&g.getComponentMethod(\"calendars\",\"getCal\")(e),u=0;u0&&t[e+1][0]<0)return e;return null}switch(e=\"RUS\"===s||\"FJI\"===s?function(t){var e;if(null===c(t))e=t;else for(e=new Array(t.length),i=0;ie?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=f.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(f.tester(t))},a.type){case\"MultiPolygon\":for(r=0;r0?u.properties.ct=function(t){var e,r=t.geometry;if(\"MultiPolygon\"===r.type)for(var n=r.coordinates,i=0,s=0;si&&(i=c,e=l)}else e=r;return o(e).geometry.coordinates}(u):u.properties.ct=[NaN,NaN],n.fIn=t,n.fOut=u,s.push(u)}else c.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 f=r.features;for(n=0;n100?(clearInterval(a),n(\"Unexpected error while fetching from \"+t)):void i++}),50)}))}for(var o=0;o0&&(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;r1||m<0||m>1?null:{x:t+l*m,y:e+h*m}}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,c){if(s(t,e,r,n,i,a,o,c))return 0;var u=r-t,h=n-e,f=o-i,p=c-a,d=u*u+h*h,m=f*f+p*p,g=Math.min(l(u,h,d,i-t,a-e),l(u,h,d,o-t,c-e),l(f,p,m,t-i,e-a),l(f,p,m,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)),c=t.getPointAtLength(o(r+s/2,e)),u=Math.atan((c.y-l.y)/(c.x-l.x)),h=t.getPointAtLength(o(r,e)),f={x:(4*h.x+l.x+c.x)/6,y:(4*h.y+l.y+c.y)/6,theta:u};return n[r]=f,f},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,c=0,u=t.getTotalLength(),h=u;function f(e){var r=t.getPointAtLength(e);0===e?n=r:e===u&&(i=r);var c=r.xo?r.x-o:0,h=r.yl?r.y-l:0;return Math.sqrt(c*c+h*h)}for(var p=f(c);p;){if((c+=p+r)>h)return;p=f(c)}for(p=f(h);p;){if(c>(h-=p+r))return;p=f(h)}return{min:c,max:h,len:h-c,total:u,isClosed:0===c&&h===u&&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,c=n.iterationLimit||30,u=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,h=0,f=0,p=s;h0?p=i:f=i,h++}return a}},46998:function(t,e,r){\"use strict\";var n=r(10721),i=r(65657),a=r(162),o=r(88856),s=r(10229).defaultLine,l=r(87800).isArrayOrTypedArray,c=a(s);function u(t,e){var r=t;return r[3]*=e,r}function h(t){if(n(t))return c;var e=a(t);return e.length?e:c}function f(t){return n(t)?t:1}t.exports={formatColor:function(t,e,r){var n=t.color;n&&n._inputArray&&(n=n._inputArray);var i,s,p,d,m,g=l(n),y=l(e),v=o.extractOpts(t),x=[];if(i=void 0!==v.colorscale?o.makeColorScaleFuncFromTrace(t):h,s=g?function(t,e){return void 0===t[e]?c:a(i(t[e]))}:h,p=y?function(t,e){return void 0===t[e]?1:f(t[e])}:f,g||y)for(var _=0;_1?(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}},34809:function(t,e,r){\"use strict\";var n=r(45568),i=r(42696).aL,a=r(36464).GP,o=r(10721),s=r(63821),l=s.FP_SAFE,c=-l,u=s.BADNUM,h=t.exports={};h.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 f={};h.warnBadFormat=function(t){var e=String(t);f[e]||(f[e]=1,h.warn('encountered bad format: \"'+e+'\"'))},h.noFormat=function(t){return String(t)},h.numberFormat=function(t){var e;try{e=a(h.adjustFormat(t))}catch(e){return h.warnBadFormat(t),h.noFormat}return e},h.nestedProperty=r(35632),h.keyedContainer=r(34967),h.relativeAttr=r(82047),h.isPlainObject=r(56174),h.toLogRange=r(8083),h.relinkPrivateKeys=r(80428);var p=r(87800);h.isArrayBuffer=p.isArrayBuffer,h.isTypedArray=p.isTypedArray,h.isArrayOrTypedArray=p.isArrayOrTypedArray,h.isArray1D=p.isArray1D,h.ensureArray=p.ensureArray,h.concat=p.concat,h.maxRowLength=p.maxRowLength,h.minRowLength=p.minRowLength;var d=r(98953);h.mod=d.mod,h.modHalf=d.modHalf;var m=r(34220);h.valObjectMeta=m.valObjectMeta,h.coerce=m.coerce,h.coerce2=m.coerce2,h.coerceFont=m.coerceFont,h.coercePattern=m.coercePattern,h.coerceHoverinfo=m.coerceHoverinfo,h.coerceSelectionMarkerOpacity=m.coerceSelectionMarkerOpacity,h.validate=m.validate;var g=r(92596);h.dateTime2ms=g.dateTime2ms,h.isDateTime=g.isDateTime,h.ms2DateTime=g.ms2DateTime,h.ms2DateTimeLocal=g.ms2DateTimeLocal,h.cleanDate=g.cleanDate,h.isJSDate=g.isJSDate,h.formatDate=g.formatDate,h.incrementMonth=g.incrementMonth,h.dateTick0=g.dateTick0,h.dfltRange=g.dfltRange,h.findExactDates=g.findExactDates,h.MIN_MS=g.MIN_MS,h.MAX_MS=g.MAX_MS;var y=r(98813);h.findBin=y.findBin,h.sorterAsc=y.sorterAsc,h.sorterDes=y.sorterDes,h.distinctVals=y.distinctVals,h.roundUp=y.roundUp,h.sort=y.sort,h.findIndexOfMin=y.findIndexOfMin,h.sortObjectKeys=r(62994);var v=r(89258);h.aggNums=v.aggNums,h.len=v.len,h.mean=v.mean,h.geometricMean=v.geometricMean,h.median=v.median,h.midRange=v.midRange,h.variance=v.variance,h.stdev=v.stdev,h.interp=v.interp;var x=r(15236);h.init2dArray=x.init2dArray,h.transposeRagged=x.transposeRagged,h.dot=x.dot,h.translationMatrix=x.translationMatrix,h.rotationMatrix=x.rotationMatrix,h.rotationXYMatrix=x.rotationXYMatrix,h.apply3DTransform=x.apply3DTransform,h.apply2DTransform=x.apply2DTransform,h.apply2DTransform2=x.apply2DTransform2,h.convertCssMatrix=x.convertCssMatrix,h.inverseTransformMatrix=x.inverseTransformMatrix;var _=r(44313);h.deg2rad=_.deg2rad,h.rad2deg=_.rad2deg,h.angleDelta=_.angleDelta,h.angleDist=_.angleDist,h.isFullCircle=_.isFullCircle,h.isAngleInsideSector=_.isAngleInsideSector,h.isPtInsideSector=_.isPtInsideSector,h.pathArc=_.pathArc,h.pathSector=_.pathSector,h.pathAnnulus=_.pathAnnulus;var b=r(32546);h.isLeftAnchor=b.isLeftAnchor,h.isCenterAnchor=b.isCenterAnchor,h.isRightAnchor=b.isRightAnchor,h.isTopAnchor=b.isTopAnchor,h.isMiddleAnchor=b.isMiddleAnchor,h.isBottomAnchor=b.isBottomAnchor;var w=r(3447);h.segmentsIntersect=w.segmentsIntersect,h.segmentDistance=w.segmentDistance,h.getTextLocation=w.getTextLocation,h.clearLocationCache=w.clearLocationCache,h.getVisibleSegment=w.getVisibleSegment,h.findPointOnPath=w.findPointOnPath;var T=r(93049);h.extendFlat=T.extendFlat,h.extendDeep=T.extendDeep,h.extendDeepAll=T.extendDeepAll,h.extendDeepNoArrays=T.extendDeepNoArrays;var k=r(48636);h.log=k.log,h.warn=k.warn,h.error=k.error;var A=r(90694);h.counterRegex=A.counter;var M=r(64025);h.throttle=M.throttle,h.throttleDone=M.done,h.clearThrottle=M.clear;var S=r(95425);function E(t){var e={};for(var r in t)for(var n=t[r],i=0;il||t=e)&&o(t)&&t>=0&&t%1==0},h.noop=r(4969),h.identity=r(29527),h.repeat=function(t,e){for(var r=new Array(e),n=0;nr?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},h.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},h.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?(h.warn(\"randstr failed uniqueness\"),l):t(e,r,n,(i||0)+1):l},h.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},h.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,c=new Array(l),u=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]*c[n];u[r]=a}return u},h.syncOrAsync=function(t,e,r){var n;function i(){return h.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)},h.stripTrailingSlash=function(t){return\"/\"===t.substr(-1)?t.substr(0,t.length-1):t},h.noneOrAll=function(t,e,r){if(t){var n,i=!1,a=!0;for(n=0;n0?e:0}))},h.fillArray=function(t,e,r,n){if(n=n||h.identity,h.isArrayOrTypedArray(t))for(var i=0;i1?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},h.TEMPLATE_STRING_REGEX=/%{([^\\s%{}:]*)([:|\\|][^}]*)?}/g;var D=/^\\w*$/;h.templateString=function(t,e){var r={};return t.replace(h.TEMPLATE_STRING_REGEX,(function(t,n){var i;return D.test(n)?i=e[n]:(r[n]=r[n]||h.nestedProperty(e,n).get,i=r[n]()),h.isValidTextValue(i)?i:\"\"}))};var R={max:10,count:0,name:\"hovertemplate\"};h.hovertemplateString=function(){return U.apply(R,arguments)};var F={max:10,count:0,name:\"texttemplate\"};h.texttemplateString=function(){return U.apply(F,arguments)};var B=/^(\\S+)([\\*\\/])(-?\\d+(\\.\\d+)?)$/,N={max:10,count:0,name:\"texttemplate\",parseMultDiv:!0};h.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(h.TEMPLATE_STRING_REGEX,(function(t,s,l){var c=\"_xother\"===s||\"_yother\"===s,u=\"_xother_\"===s||\"_yother_\"===s,f=\"xother_\"===s||\"yother_\"===s,p=\"xother\"===s||\"yother\"===s||c||f||u,d=s;(c||u)&&(d=d.substring(1)),(f||u)&&(d=d.substring(0,d.length-1));var m,g,y,v=null,x=null;if(n.parseMultDiv){var _=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=_.key,v=_.op,x=_.number}if(p){if(void 0===(m=e[d]))return\"\"}else for(y=3;y=48&&o<=57,c=s>=48&&s<=57;if(l&&(n=10*n+o-48),c&&(i=10*i+s-48),!l||!c){if(n!==i)return n-i;if(o!==s)return o-s}}return i-n};var V=2e9;h.seedPseudoRandom=function(){V=2e9},h.pseudoRandom=function(){var t=V;return V=(69069*V+1)%4294967296,Math.abs(V-t)<429496729?h.pseudoRandom():V/4294967296},h.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},i=h.extractOption(t,e,\"htx\",\"hovertext\");if(h.isValidTextValue(i))return n(i);var a=h.extractOption(t,e,\"tx\",\"text\");return h.isValidTextValue(a)?n(a):void 0},h.isValidTextValue=function(t){return t||0===t},h.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;n1&&(c=1):c=0,h.strTranslate(i-c*(r+o),a-c*(n+s))+h.strScale(c)+(l?\"rotate(\"+l+(e?\"\":\" \"+r+\" \"+n)+\")\":\"\")},h.setTransormAndDisplay=function(t,e){t.attr(\"transform\",h.getTextTransform(e)),t.style(\"display\",e.scale?null:\"none\")},h.ensureUniformFontSize=function(t,e){var r=h.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r},h.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)},h.bigFont=function(t){return Math.round(1.2*t)};var q=h.getFirefoxVersion(),H=null!==q&&q<86;h.getPositionFromD3Event=function(){return H?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},56174: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\")}},34967:function(t,e,r){\"use strict\";var n=r(35632),i=/^\\w*$/;t.exports=function(t,e,r,a){var o,s,l;r=r||\"name\",a=a||\"value\";var c={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||\"\";var u={};if(s)for(o=0;o2)return c[e]=2|c[e],f.set(t,null);if(h){for(o=e;o1){var e=[\"LOG:\"];for(t=0;t1){var r=[];for(t=0;t\"),\"long\")}},a.warn=function(){var t;if(n.logging>0){var e=[\"WARN:\"];for(t=0;t0){var r=[];for(t=0;t\"),\"stick\")}},a.error=function(){var t;if(n.logging>0){var e=[\"ERROR:\"];for(t=0;t0){var r=[];for(t=0;t\"),\"stick\")}}},75944:function(t,e,r){\"use strict\";var n=r(45568);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}},15236:function(t,e,r){\"use strict\";var n=r(11191);e.init2dArray=function(t,e){for(var r=new Array(t),n=0;ne/2?t-Math.round(t/e)*e:t}}},35632:function(t,e,r){\"use strict\";var n=r(10721),i=r(87800).isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,c=t;for(s=0;s/g),l=0;la||c===i||cs||e&&l(t))}:function(t,e){var l=t[0],c=t[1];if(l===i||la||c===i||cs)return!1;var u,h,f,p,d,m=r.length,g=r[0][0],y=r[0][1],v=0;for(u=1;uMath.max(h,g)||c>Math.max(f,y)))if(cu||Math.abs(n(o,f))>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 c=l+1;c1&&o(t.pop()),{addPt:o,raw:t,filtered:r}}},22459:function(t,e,r){\"use strict\";var n=r(97464),i=r(81330);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}},32521:function(t,e,r){\"use strict\";var n=r(10721),i=r(13087);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 c=l.substr(8).split(\".\")[0];if(n(c)&&(c=+c),c>=13)return!0}}return r}},36539:function(t){\"use strict\";t.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;ni.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;re}function h(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,f=0,p=e.length,d=0,m=p>1?(e[p-1]-e[0])/(p-1):1;for(o=m>=0?r?l:c:r?h:u,t+=m*s*(r?-1:1)*(m>=0?1:-1);f90&&i.log(\"Long binary search...\"),f-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=[],c=0;c<=r;c++){var u=n[c],h=u-i;void 0===i?(l.push(u),i=u):h>s&&(a=Math.min(a,h),l.push(u),i=u)}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,c=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;ia.length)&&(o=a.length),n(r)||(r=!1),i(a[0])){for(l=new Array(o),s=0;st.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},55010:function(t,e,r){\"use strict\";var n=r(162);t.exports=function(t){return t?n(t):[0,0,0,1]}},95544:function(t,e,r){\"use strict\";var n=r(1837),i=r(62203),a=r(34809),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}},30635:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809),a=i.strTranslate,o=r(62972),s=r(4530).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),I=n.select(t.node().parentNode);if(!I.empty()){var P=t.attr(\"class\")?t.attr(\"class\").split(\" \")[0]:\"text\";return P+=\"-math\",I.selectAll(\"svg.\"+P).remove(),I.selectAll(\"g.\"+P+\"-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,f=parseInt((MathJax.version||\"\").split(\".\")[0]);if(2===f||3===f){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(c,\"\\\\lt \").replace(u,\"\\\\gt \"))).node();return 2===f?MathJax.Hub.Typeset(a):MathJax.typeset([a])},d=function(){var e=l.select(2===f?\".MathJax_SVG\":\".MathJax\"),a=!e.empty()&&l.select(\"svg\").node();if(a){var o,s=a.getBoundingClientRect();o=2===f?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===f?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:h},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===f&&(o=i.extendDeepAll({},MathJax.config),MathJax.config.tex||(MathJax.config.tex={}),MathJax.config.tex.inlineMath=h,\"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){I.selectAll(\"svg.\"+P).remove(),I.selectAll(\"g.\"+P+\"-group\").remove();var s=n&&n.select(\"svg\");if(!s||!s.node())return z(),void e();var l=I.append(\"g\").classed(P+\"-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 c=o.width,u=o.height;s.attr({class:P,height:u,preserveAspectRatio:\"xMinYMin meet\"}).style({overflow:\"visible\",\"pointer-events\":\"none\"});var h=t.node().style.fill||\"black\",f=s.select(\"g\");f.attr({fill:h,stroke:h});var p=f.node().getBoundingClientRect(),d=p.width,m=p.height;(d>c||m>u)&&(s.style(\"overflow\",\"hidden\"),d=(p=s.node().getBoundingClientRect()).width,m=p.height);var y=+t.attr(\"x\"),v=+t.attr(\"y\"),x=-(r||t.node().getBoundingClientRect().height)/4;if(\"y\"===P[0])l.attr({transform:\"rotate(\"+[-90,y,v]+\")\"+a(-d/2,x-m/2)});else if(\"l\"===P[0])v=x-m/2;else if(\"a\"===P[0]&&0!==P.indexOf(\"atitle\"))y=0,v=x;else{var _=t.attr(\"text-anchor\");y-=d*(\"middle\"===_?.5:\"end\"===_?1:0),v=v+x-m/2}s.attr({x:y,y:v}),g&&g.call(t,l),e(l)}))}))):z(),t}function z(){I.empty()||(P=t.attr(\"class\")+\"-math\",I.select(\"svg.\"+P).remove()),t.text(\"\").style(\"white-space\",\"pre\");var r=function(t,e){e=e.replace(y,\" \");var r,a=!1,l=[],c=-1;function u(){c++;var e=document.createElementNS(o.svg,\"tspan\");n.select(e).attr({class:\"line\",dy:c*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)}_.test(e)?u():(r=t,l=[{node:t}]);for(var E=e.split(v),I=0;I|>|>)/g,h=[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]],f={sup:\"font-size:70%\",sub:\"font-size:70%\",s:\"text-decoration:line-through\",u:\"text-decoration:underline\",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\"},m=\"\",g=[\"http:\",\"https:\",\"mailto:\",\"\",void 0,\":\"],y=e.NEWLINES=/(\\r\\n?|\\n)/g,v=/(<[^<>]*>)/,x=/<(\\/?)([^ >]*)(\\s+(.*))?>/i,_=/ /i;e.BR_TAG_ALL=/ /gi;var b=/(^|[\\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&&C(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(v),a=[],o=\"\",s=0,l=0;l3?a.push(c.substr(0,p-3)+\"...\"):a.push(c.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 C(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 L(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 I(t,e,r){var n,a,o,s=r.horizontalAlign,l=r.verticalAlign||\"top\",c=t.node().getBoundingClientRect(),u=e.node().getBoundingClientRect();return a=\"bottom\"===l?function(){return c.bottom-n.height}:\"middle\"===l?function(){return c.top+(c.height-n.height)/2}:function(){return c.top},o=\"right\"===s?function(){return c.right-n.width}:\"center\"===s?function(){return c.left+(c.width-n.width)/2}:function(){return c.left},function(){n=this.node().getBoundingClientRect();var t=o()-u.left,e=a()-u.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=C,e.sanitizeHTML=function(t){t=t.replace(y,\" \");for(var e=document.createElement(\"p\"),r=e,i=[],a=t.split(v),o=0;oa.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)}},8083:function(t,e,r){\"use strict\";var n=r(10721);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}},11577:function(t,e,r){\"use strict\";var n=t.exports={},i=r(74285).locationmodeToLayer,a=r(48640).N4;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}},44611: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\"}}},30227: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\"}}},56037:function(t,e,r){\"use strict\";var n=r(33626);t.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split(\"[\")[0],s=0;s0&&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,h=(s.subplotsRegistry.ternary||{}).attrRegex,f=(s.subplotsRegistry.gl3d||{}).attrRegex,m=Object.keys(t);for(r=0;r3?(z.x=1.02,z.xanchor=\"left\"):z.x<-2&&(z.x=-.02,z.xanchor=\"right\"),z.y>3?(z.y=1.02,z.yanchor=\"bottom\"):z.y<-2&&(z.y=-.02,z.yanchor=\"top\")),d(t),\"rotate\"===t.dragmode&&(t.dragmode=\"orbit\"),c.clean(t),t.template&&t.template.layout&&e.cleanLayout(t.template.layout),t},e.cleanData=function(t){for(var r=0;r0)return t.substr(0,e)}e.hasParent=function(t,e){for(var r=_(e);r;){if(r in t)return!0;r=_(r)}return!1};var b=[\"x\",\"y\",\"z\"];e.clearAxisTypes=function(t,e,r){for(var n=0;n1&&a.warn(\"Full array edits are incompatible with other edits\",h);var v=r[\"\"][\"\"];if(c(v))e.set(null);else{if(!Array.isArray(v))return a.warn(\"Unrecognized full array edit value\",h,v),!0;e.set(v)}return!m&&(f(g,y),p(t),!0)}var x,_,b,w,T,k,A,M,S=Object.keys(r).map(Number).sort(o),E=e.get(),C=E||[],L=u(y,h).get(),I=[],P=-1,z=C.length;for(x=0;xC.length-(A?0:1))a.warn(\"index out of range\",h,b);else if(void 0!==k)T.length>1&&a.warn(\"Insertion & removal are incompatible with edits to the same index.\",h,b),c(k)?I.push(b):A?(\"add\"===k&&(k={}),C.splice(b,0,k),L&&L.splice(b,0,{})):a.warn(\"Unrecognized full object edit value\",h,b,k),-1===P&&(P=b);else for(_=0;_=0;x--)C.splice(I[x],1),L&&L.splice(I[x],1);if(C.length?E||e.set(C):e.set(null),m)return!1;if(f(g,y),d!==i){var O;if(-1===P)O=S;else{for(z=Math.max(C.length,z),O=[],x=0;x=P);x++)O.push(b);for(x=P;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 O(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]),z(t,e,\"currentIndices\"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&z(t,r,\"newIndices\"),void 0!==r&&e.length!==r.length)throw new Error(\"current and new indices must be of equal length.\")}function D(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 z(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,c,u,h,f=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=P(r,t.data.length-1),e)for(var m=0;m-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 q(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=[f.previousPromises];a.layoutReplot?s.push(k.layoutReplot):Object.keys(n).length&&(H(t,a,i)||f.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(f.rehover,f.redrag,f.reselect),c.add(t,q,[t,i.undoit],q,[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 H(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,m,t,e)},c={};for(var u in r.rangesAltered){var h=p.id2name(u);if(n=t.layout[h],i=a[h],d(n,i,l,c),i._matchGroup)for(var f in i._matchGroup)if(f!==u){var g=a[p.id2name(f)];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(_,k.doAutoRangeAndConstraints,r,k.drawData,k.finalDraw)}var Z=/^[xyz]axis[0-9]*\\.range(\\[[0|1]\\])?$/,W=/^[xyz]axis[0-9]*\\.autorange$/,Y=/^[xyz]axis[0-9]*\\.domain(\\[[0|1]\\])?$/;function X(t,e){var r,n,i,a=t.layout,l=t._fullLayout,c=l._guiEditing,f=N(l._preGUI,c),d=Object.keys(e),m=p.list(t),g=o.extendDeepAll({},e),y={};for(V(e),d=Object.keys(e),n=0;n0&&\"string\"!=typeof z.parts[D];)D--;var R=z.parts[D],F=z.parts[D-1]+\".\"+R,j=z.parts.slice(0,D).join(\".\"),U=s(t.layout,j).get(),q=s(l,j).get(),H=z.get();if(void 0!==O){k[P]=O,S[P]=\"reverse\"===R?O:B(H);var G=h.getLayoutValObject(l,z.parts);if(G&&G.impliedEdits&&null!==O)for(var X in G.impliedEdits)E(o.relativeAttr(P,X),G.impliedEdits[X]);if(-1!==[\"width\",\"height\"].indexOf(P))if(O){E(\"autosize\",null);var J=\"height\"===P?\"width\":\"height\";E(J,l[J])}else l[P]=t._initialAutoSize[P];else if(\"autosize\"===P)E(\"width\",O?null:l.width),E(\"height\",O?null:l.height);else if(F.match(Z))I(F),s(l,j+\"._inputRange\").set(null);else if(F.match(W)){I(F),s(l,j+\"._inputRange\").set(null);var K=s(l,j).get();K._inputDomain&&(K._input.domain=K._inputDomain.slice())}else F.match(Y)&&s(l,j+\"._inputDomain\").set(null);if(\"type\"===R){C=U;var Q=\"linear\"===q.type&&\"log\"===O,tt=\"log\"===q.type&&\"linear\"===O;if(Q||tt){if(C&&C.range)if(q.autorange)Q&&(C.range=C.range[1]>C.range[0]?[1,2]:[2,1]);else{var et=C.range[0],rt=C.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[z.parts[0]]&&\"radialaxis\"===z.parts[1]&&delete l[z.parts[0]]._subplot.viewInitial[\"radialaxis.range\"],u.getComponentMethod(\"annotations\",\"convertCoords\")(t,q,O,E),u.getComponentMethod(\"images\",\"convertCoords\")(t,q,O,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,P).get(),it=(O||{}).type;it&&\"-\"!==it||(it=\"linear\"),u.getComponentMethod(\"annotations\",\"convertCoords\")(t,nt,it,E),u.getComponentMethod(\"images\",\"convertCoords\")(t,nt,it,E)}var at=w.containerArrayMatch(P);if(at){r=at.array,n=at.index;var ot=at.property,st=G||{editType:\"calc\"};\"\"!==n&&\"\"===ot&&(w.isAddVal(O)?S[P]=null:w.isRemoveVal(O)?S[P]=(s(a,r).get()||[])[n]:o.warn(\"unrecognized full object value\",e)),A.update(b,st),y[r]||(y[r]={});var lt=y[r][n];lt||(lt=y[r][n]={}),lt[ot]=O,delete e[P]}else\"reverse\"===R?(U.range?U.range.reverse():(E(j+\".autorange\",!0),U.range=[1,0]),q.autorange?b.calc=!0:b.plot=!0):(\"dragmode\"===P&&(!1===O&&!1!==H||!1!==O&&!1===H)||l._has(\"scatter-like\")&&l._has(\"regl\")&&\"dragmode\"===P&&(\"lasso\"===O||\"select\"===O)&&\"lasso\"!==H&&\"select\"!==H||l._has(\"gl2d\")?b.plot=!0:G?A.update(b,G):b.calc=!0,z.set(O))}}for(r in y)w.applyContainerArrayChanges(t,f(a,r),y[r],b,f)||(b.plot=!0);for(var ct in L){var ut=(C=p.getFromId(t,ct))&&C._constraintGroup;if(ut)for(var ht in b.calc=!0,ut)L[ht]||(p.getFromId(t,ht)._constraintShrinkable=!0)}($(t)||e.height||e.width)&&(b.plot=!0);var ft=l.shapes;for(n=0;n1;)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 c(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,u){function h(){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,f.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,m=0;function g(t){return Array.isArray(i)?m>=i.length?t.transitionOpts=i[m]:t.transitionOpts=i[0]:t.transitionOpts=i,m++,t}var y=[],v=null==e,x=Array.isArray(e);if(v||x||!o.isPlainObject(e)){if(v||-1!==[\"string\",\"number\"].indexOf(typeof e))for(p=0;p0&&ww)&&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 m=e[n].name,g=(u[m]||d[m]||{}).name,y=e[n].name,v=u[g]||d[g];g&&y&&\"number\"==typeof y&&v&&S<5&&(S++,o.warn('addFrames: overwriting frame \"'+(u[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[m]={name:m},p.push({frame:f.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:h+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(;u[i.name=\"frame \"+t._transitionData._counter++];);if(u[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=f.modifyFrames,u=f.modifyFrames,h=[t,s],p=[t,a];return c&&c.add(t,l,h,u,p),f.modifyFrames(t,a)},e.addTraces=function t(r,n,i){r=o.getGraphDiv(r);var a,s,l=[],u=e.deleteTraces,h=t,f=[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(!b(o))return!1;t=a[i][o]}else t=a[i]}else t=a}}return t}function b(t){return t===Math.round(t)&&t>=0}function w(){var t,e,r={};for(t in h(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[c].type]||{}).attributes)&&r[e[2]],s=3}else{var u=t._module;if(u||(u=(n.modules[t.type||a.type.dflt]||{})._module),!u)return!1;if(!(i=(r=u.attributes)&&r[o])){var h=u.basePlotModule;h&&h.attributes&&(i=h.attributes[o])}i||(i=a[o])}return _(i,e,s)},e.getLayoutValObject=function(t,e){var r=function(t,e){var r,i,a,s,l=t._basePlotModules;if(l){var c;for(r=0;r=i&&(r._input||{})._templateitemname;s&&(o=i);var l,c=e+\"[\"+o+\"]\";function u(){l={},s&&(l[c]={},l[c][a]=s)}function h(t,e){s?n.nestedProperty(l[c],t).set(e):l[c+\".\"+t]=e}function f(){var t=l;return u(),t}return u(),{modifyBase:function(t,e){l[t]=e},modifyItem:h,getUpdateObj:f,applyUpdate:function(e,r){e&&h(e,r);var i=f();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},71817:function(t,e,r){\"use strict\";var n=r(45568),i=r(33626),a=r(44122),o=r(34809),s=r(30635),l=r(34823),c=r(78766),u=r(62203),h=r(17240),f=r(95433),p=r(29714),d=r(4530),m=r(84391),g=m.enforce,y=m.clean,v=r(32919).doAutoRange,x=\"start\",_=r(54826).zindexSeparator;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 w(t){var r,i,s,l,h,m,g=t._fullLayout,y=g._size,v=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(u.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),e.drawMainTitle(t),f.manage(t),!g._has(\"cartesian\"))return a.previousPromises(t);function w(t,e,r){var n=t._lw/2;return\"x\"===t._id.charAt(0)?e?\"top\"===r?e._offset-v-n:e._offset+e._length+v+n:y.t+y.h*(1-(t.position||0))+n%1:e?\"right\"===r?e._offset+e._length+v+n:e._offset-v-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,e,m);if(g>0){!function(t,e,r,n){var i=\"title.automargin\",s=t._fullLayout.title,l=s.y>.5?\"t\":\"b\",c={x:s.x,y:s.y,t:0,b:0},u={};\"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?u.push({code:\"unused\",traceType:v,templateCount:w,dataCount:T}):T>w&&u.push({code:\"reused\",traceType:v,templateCount:w,dataCount:T})}}else u.push({code:\"data\"});if(function t(e,r){for(var n in e)if(\"_\"!==n.charAt(0)){var a=e[n],o=m(e,n,r);i(a)?(Array.isArray(e)&&!1===a._template&&a.templateitemname&&u.push({code:\"missing\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)&&g(a)&&t(a,o)}}({data:p,layout:f},\"\"),u.length)return u.map(y)}},80491:function(t,e,r){\"use strict\";var n=r(10721),i=r(31420),a=r(44122),o=r(34809),s=r(84619),l=r(6243),c=r(72914),u=r(29697).version,h={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,f,p,d;function m(t){return!(t in e)||o.validate(e[t],h[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],f=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),f=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!m(\"width\")&&null!==e.width||!m(\"height\")&&null!==e.height)throw new Error(\"Height and width should be pixel values.\");if(!m(\"format\"))throw new Error(\"Export format is not \"+o.join2(h.format.values,\", \",\" or \")+\".\");var g={};function y(t,r){return o.coerce(e,g,h,t,r)}var v=y(\"format\"),x=y(\"width\"),_=y(\"height\"),b=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({},f);x?A.width=x:null===e.width&&n(d.width)&&(A.width=d.width),_?A.height=_: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 C(){return new Promise((function(t,e){var r=l(k,v,b),n=k._fullLayout.width,h=k._fullLayout.height;function f(){i.purge(k),document.body.removeChild(k)}if(\"full-json\"===v){var p=a.graphJson(k,!1,\"keepdata\",\"object\",!0,!0);return p.version=u,p=JSON.stringify(p),f(),t(T?p:s.encodeJSON(p))}if(f(),\"svg\"===v)return t(T?r:s.encodeSVG(r));var d=document.createElement(\"canvas\");d.id=o.randstr(),c({format:v,width:n,height:h,scale:b,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(C).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,\"\"):t}(e))})).catch((function(t){e(t)}))}))}},2466:function(t,e,r){\"use strict\";var n=r(34809),i=r(44122),a=r(57297),o=r(24452).dfltConfig,s=n.isPlainObject,l=Array.isArray,c=n.isArrayOrTypedArray;function u(t,e,r,i,a,o){o=o||[];for(var h=Object.keys(t),f=0;fx.length&&i.push(p(\"unused\",a,y.concat(x.length)));var A,M,S,E,C,L=x.length,I=Array.isArray(k);if(I&&(L=Math.min(L,k.length)),2===_.dimensions)for(M=0;Mx[M].length&&i.push(p(\"unused\",a,y.concat(M,x[M].length)));var P=x[M].length;for(A=0;A<(I?Math.min(P,k[M].length):P);A++)S=I?k[M][A]:k,E=v[M][A],C=x[M][A],n.validate(E,S)?C!==E&&C!==+E&&i.push(p(\"dynamic\",a,y.concat(M,A),E,C)):i.push(p(\"value\",a,y.concat(M,A),E))}else i.push(p(\"array\",a,y.concat(M),v[M]));else for(M=0;M1&&f.push(p(\"object\",\"layout\"))),i.supplyDefaults(d);for(var m=d._fullData,g=r.length,y=0;y0&&Math.round(h)===h))return{vals:i};c=h}for(var f=e.calendar,p=\"start\"===l,d=\"end\"===l,m=t[r+\"period0\"],g=a(m,f)||0,y=[],v=[],x=[],_=i.length,b=0;b<_;b++){var w,T,k,A=i[b];if(c){for(w=Math.round((A-g)/(c*s)),k=o(g,c*w,f);k>A;)k=o(k,-c,f);for(;k<=A;)k=o(k,c,f);T=o(k,-c,f)}else{for(k=g+(w=Math.round((A-g)/u))*u;k>A;)k-=u;for(;k<=A;)k+=u;T=k-u}y[b]=p?T:d?k:(T+k)/2,v[b]=T,x[b]=k}return{vals:y,starts:v,ends:x}}},55126:function(t){\"use strict\";t.exports={xaxis:{valType:\"subplotid\",dflt:\"x\",editType:\"calc+clearAxisTypes\"},yaxis:{valType:\"subplotid\",dflt:\"y\",editType:\"calc+clearAxisTypes\"}}},32919:function(t,e,r){\"use strict\";var n=r(45568),i=r(10721),a=r(34809),o=r(63821).FP_SAFE,s=r(33626),l=r(62203),c=r(5975),u=c.getFromId,h=c.isLinked;function f(t,e){var r,n,i=[],o=t._fullLayout,s=d(o,e,0),l=d(o,e,1),c=g(t,e),u=c.min,h=c.max;if(0===u.length||0===h.length)return a.simpleMap(e.range,e.r2l);var f=u[0].val,m=h[0].val;for(r=1;r0&&((A=L-s(_)-l(b))>I?M/A>P&&(w=_,T=b,P=M/A):M/L>P&&(w={val:_.val,nopad:1},T={val:b.val,nopad:1},P=M/L));if(f===m){var z=f-1,O=f+1;if(E)if(0===f)i=[0,1];else{var D=(f>0?h:u).reduce((function(t,e){return Math.max(t,l(e))}),0),R=f/(1-Math.min(.5,D/L));i=f>0?[0,R]:[R,0]}else i=C?[Math.max(0,z),Math.max(1,O)]:[z,O]}else E?(w.val>=0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:0,nopad:1})):C&&(w.val-P*s(w)<0&&(w={val:0,nopad:1}),T.val<=0&&(T={val:1,nopad:1})),P=(T.val-w.val-p(e,_.val,b.val))/(L-s(w)-l(T)),i=[w.val-P*s(w),T.val+P*l(T)];return i=k(i,e),e.limitRange&&e.limitRange(),v&&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;a0?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),C=A(r.vpadminus||r.vpad);if(!T){if(f=1/0,p=-1/0,w)for(n=0;n0&&(f=a),a>p&&a-o&&(f=a),a>p&&a=P;n--)I(n);return{min:d,max:m,opts:r}},concatExtremes:g};var m=3;function g(t,e,r){var n,i,a,o=e._id,s=t._fullData,l=t._fullLayout,c=[],h=[];function f(t,e){for(n=0;n=r&&(c.extrapad||!o)){s=!1;break}i(e,c.val)&&c.pad<=r&&(o||!c.extrapad)&&(t.splice(l,1),l--)}if(s){var u=a&&0===e;t.push({val:e,pad:u?0:r,extrapad:!u&&o})}}function _(t){return i(t)&&Math.abs(t)=e}function T(t,e,r){return void 0===e||void 0===r||(e=t.d2l(e))=c&&(o=c,r=c),s<=c&&(s=c,n=c)}}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]}},75511: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\")}},29714:function(t,e,r){\"use strict\";var n=r(45568),i=r(10721),a=r(44122),o=r(33626),s=r(34809),l=s.strTranslate,c=r(30635),u=r(17240),h=r(78766),f=r(62203),p=r(25829),d=r(68599),m=r(63821),g=m.ONEMAXYEAR,y=m.ONEAVGYEAR,v=m.ONEMINYEAR,x=m.ONEMAXQUARTER,_=m.ONEAVGQUARTER,b=m.ONEMINQUARTER,w=m.ONEMAXMONTH,T=m.ONEAVGMONTH,k=m.ONEMINMONTH,A=m.ONEWEEK,M=m.ONEDAY,S=M/2,E=m.ONEHOUR,C=m.ONEMIN,L=m.ONESEC,I=m.ONEMILLI,P=m.ONEMICROSEC,z=m.MINUS_SIGN,O=m.BADNUM,D={K:\"zeroline\"},R={K:\"gridline\",L:\"path\"},F={K:\"minor-gridline\",L:\"path\"},B={K:\"tick\",L:\"path\"},N={K:\"tick\",L:\"text\"},j={width:[\"x\",\"r\",\"l\",\"xl\",\"xr\"],height:[\"y\",\"t\",\"b\",\"yt\",\"yb\"],right:[\"r\",\"xr\"],left:[\"l\",\"xl\"],top:[\"t\",\"yt\"],bottom:[\"b\",\"yb\"]},U=r(4530),V=U.MID_SHIFT,q=U.CAP_SHIFT,H=U.LINE_SPACING,G=U.OPPOSITE_SIDE,Z=t.exports={};Z.setConvert=r(19091);var W=r(9666),Y=r(5975),X=Y.idSort,$=Y.isLinked;Z.id2name=Y.id2name,Z.name2id=Y.name2id,Z.cleanId=Y.cleanId,Z.list=Y.list,Z.listIds=Y.listIds,Z.getFromId=Y.getFromId,Z.getFromTrace=Y.getFromTrace;var J=r(32919);Z.getAutoRange=J.getAutoRange,Z.findExtremes=J.findExtremes;var K=1e-4;function Q(t){var e=(t[1]-t[0])*K;return[t[0]-e,t[1]+e]}Z.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+\"axis\"],c=n+\"ref\",u={};return i||(i=l[0]||(\"string\"==typeof a?a:a[0])),a||(a=i),l=l.concat(l.map((function(t){return t+\" domain\"}))),u[c]={valType:\"enumerated\",values:l.concat(a?\"string\"==typeof a?[a]:a:[]),dflt:i},s.coerce(t,e,u,c)},Z.getRefType=function(t){return void 0===t?t:\"paper\"===t?\"paper\":\"pixel\"===t?\"pixel\":/( domain)$/.test(t)?\"domain\":\"range\"},Z.coercePosition=function(t,e,r,n,i,a){var o,l;if(\"range\"!==Z.getRefType(n))o=s.ensureNumber,l=r(i,a);else{var c=Z.getFromId(e,n);l=r(i,a=c.fraction2r(a)),o=c.cleanPos}t[i]=o(l)},Z.cleanPosition=function(t,e,r){return(\"paper\"===r||\"pixel\"===r?s.ensureNumber:Z.getFromId(e,r).cleanPos)(t)},Z.redrawComponents=function(t,e){e=e||Z.listIds(t);var r=t._fullLayout;function n(n,i,a,s){for(var l=o.getComponentMethod(n,i),c={},u=0;un&&f2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},Z.saveRangeInitial=function(t,e){for(var r=Z.list(t,\"\",!0),n=!1,i=0;i.3*f||u(n)||u(a))){var p=r.dtick/2;t+=t+p.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=Z.tickIncrement(t,\"M6\",\"reverse\")+1.5*M:a.exactMonths>.8?t=Z.tickIncrement(t,\"M1\",\"reverse\")+15.5*M:t-=S;var l=Z.tickIncrement(t,r);if(l<=n)return l}return t}(v,t,y,c,a)),g=v;g<=u;)g=Z.tickIncrement(g,y,!1,a);return{start:e.c2r(v,0,a),end:e.c2r(g,0,a),size:y,_dataSpan:u-c}},Z.prepMinorTicks=function(t,e,r){if(!e.minor.dtick){delete t.dtick;var n,a=e.dtick&&i(e._tmin);if(a){var o=Z.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,Z.prepTicks(t,r),a){var c=i(e.dtick),u=i(t.dtick),h=c?e.dtick:+e.dtick.substring(1),f=u?t.dtick:+t.dtick.substring(1);c&&u?nt(h,f)?h===2*A&&f===2*M&&(t.dtick=A):h===2*A&&f===3*M?t.dtick=A:h!==A||(e._input.minor||{}).nticks?it(h/f,2.5)?t.dtick=h/2:t.dtick=h:t.dtick=M:\"M\"===String(e.dtick).charAt(0)?u?t.dtick=\"M1\":nt(h,f)?h>=12&&2===f&&(t.dtick=\"M3\"):t.dtick=e.dtick:\"L\"===String(t.dtick).charAt(0)?\"L\"===String(e.dtick).charAt(0)?nt(h,f)||(t.dtick=it(h/f,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)},Z.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,Z.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=Z.getTickFormat(t);if(a){var o=t._dtickInit!==t.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e=E,o&&!n&&t.dtickt.range[1],p=!t.ticklabelindex||s.isArrayOrTypedArray(t.ticklabelindex)?t.ticklabelindex:[t.ticklabelindex],d=s.simpleMap(t.range,t.r2l,void 0,void 0,e),m=d[1]=(V?0:1);q--){var H=!q;q?(t._dtickInit=t.dtick,t._tick0Init=t.tick0):(t.minor._dtickInit=t.minor.dtick,t.minor._tick0Init=t.minor.tick0);var G=q?t:s.extendFlat({},t,t.minor);if(H?Z.prepMinorTicks(G,t,e):Z.prepTicks(G,e),\"array\"!==G.tickmode)if(\"sync\"!==G.tickmode){var W=Q(d),Y=W[0],X=W[1],$=i(G.dtick),J=\"log\"===l&&!($||\"L\"===G.dtick.charAt(0)),K=Z.tickFirst(G,e);if(q){if(t._tmin=K,K=X:nt<=X;nt=Z.tickIncrement(nt,it,m,c)){if(q&&tt++,G.rangebreaks&&!m){if(nt=D)break}if(N.length>R||nt===rt)break;rt=nt;var at={value:nt};q?(J&&nt!==(0|nt)&&(at.simpleLabel=!0),u>1&&tt%u&&(at.skipLabel=!0),N.push(at)):(at.minor=!0,j.push(at))}}else N=[],F=st(t);else q?(N=[],F=lt(t,!H)):(j=[],B=lt(t,!H))}!j||j.length<2?p=!1:(r=(j[1].value-j[0].value)*(f?-1:1),n=t.tickformat,(/%f/.test(n)?r>=P:/%L/.test(n)?r>=I:/%[SX]/.test(n)?r>=L:/%M/.test(n)?r>=C:/%[HI]/.test(n)?r>=E:/%p/.test(n)?r>=S:/%[Aadejuwx]/.test(n)?r>=M:/%[UVW]/.test(n)?r>=A:/%[Bbm]/.test(n)?r>=k:/%[q]/.test(n)?r>=b:!/%[Yy]/.test(n)||r>=v)||(p=!1));if(p){var ot=N.concat(j);h&&N.length&&(ot=ot.slice(1)),(ot=ot.sort((function(t,e){return t.value-e.value})).filter((function(t,e,r){return 0===e||t.value!==r[e-1].value}))).map((function(t,e){return void 0!==t.minor||t.skipLabel?null:e})).filter((function(t){return null!==t})).forEach((function(t){p.map((function(e){var r=t+e;r>=0&&r0?(a=n-1,o=n):(a=n,o=n);var s,l=t[a].value,c=t[o].value,u=Math.abs(c-l),h=r||u,f=0;h>=v?f=u>=v&&u<=g?u:y:r===_&&h>=b?f=u>=b&&u<=x?u:_:h>=k?f=u>=k&&u<=w?u:T:r===A&&h>=A?f=A:h>=M?f=M:r===S&&h>=S?f=S:r===E&&h>=E&&(f=E),f>=u&&(f=u,s=!0);var p=i+f;if(e.rangebreaks&&f>0){for(var d=0,m=0;m<84;m++){var C=(m+.5)/84;e.maskBreaks(i*(1-C)+C*p)!==O&&d++}(f*=d/84)||(t[n].drop=!0),s&&u>A&&(f=u)}(f>0||0===n)&&(t[n].periodX=i+f/2)}}(U,t,t._definedDelta),t.rangebreaks){var gt=\"y\"===t._id.charAt(0),yt=1;\"auto\"===t.tickmode&&(yt=t.tickfont?t.tickfont.size:12);var vt=NaN;for(a=N.length-1;a>-1;a--)if(N[a].drop)N.splice(a,1);else{N[a].value=Ft(N[a].value,t);var xt=t.c2p(N[a].value);(gt?vt>xt-yt:vtD||nD&&(r.periodX=D),n10||\"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>=C&&a<=16||e>=E)t._tickround=\"M\";else if(e>=L&&a<=19||e>=C)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])),c=Math.floor(Math.log(l)/Math.LN10+.01),u=void 0===t.minexponent?3:t.minexponent;Math.abs(c)>u&&(_t(t.exponentformat)&&!bt(c)?t._tickexponent=3*Math.round((c-1)/3):t._tickexponent=c)}else t._tickround=null}function vt(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||\"\",fontSize:n.size,font:n.family,fontWeight:n.weight,fontStyle:n.style,fontVariant:n.variant,fontTextcase:n.textcase,fontLineposition:n.lineposition,fontShadow:n.shadow,fontColor:n.color}}Z.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*gt(e,n,ct);else if(o>T)e/=T,t.dtick=\"M\"+gt(e,1,ut);else if(o>M){if(t.dtick=gt(e,M,t._hasDayOfWeekBreaks?[1,2,7,14]:ft),!r){var l=Z.getTickFormat(t),c=\"period\"===t.ticklabelmode;c&&(t._rawTick0=t.tick0),/%[uVW]/.test(l)?t.tick0=s.dateTick0(t.calendar,2):t.tick0=s.dateTick0(t.calendar,1),c&&(t._dowTick0=t.tick0)}}else o>E?t.dtick=gt(e,E,ut):o>C?t.dtick=gt(e,C,ht):o>L?t.dtick=gt(e,L,ht):(n=a(10),t.dtick=gt(e,n,ct))}else if(\"log\"===t.type){t.tick0=0;var u=s.simpleMap(t.range,t.r2l);if(t._isMinor&&(e*=1.5),e>.7)t.dtick=Math.ceil(e);else if(Math.abs(u[1]-u[0])<1){var h=1.5*Math.abs((u[1]-u[0])/e);e=Math.abs(Math.pow(10,u[1])-Math.pow(10,u[0]))/h,n=a(10),t.dtick=\"L\"+gt(e,n,ct)}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))):Rt(t)?(t.tick0=0,n=1,t.dtick=gt(e,n,mt)):(t.tick0=0,n=a(10),t.dtick=gt(e,n,ct));if(0===t.dtick&&(t.dtick=1),!i(t.dtick)&&\"string\"!=typeof t.dtick){var f=t.dtick;throw t.dtick=1,\"ax.dtick error: \"+String(f)}},Z.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),c=o*Number(e.substr(1));if(\"M\"===l)return s.incrementMonth(t,c,a);if(\"L\"===l)return Math.log(Math.pow(10,t)+c)/Math.LN10;if(\"D\"===l){var u=\"D2\"===e?dt:pt,h=t+.01*o,f=s.roundUp(s.mod(h,1),u,r);return Math.floor(h)+Math.log(n.round(Math.pow(10,f),1))/Math.LN10}throw\"unrecognized dtick \"+String(e)},Z.tickFirst=function(t,e){var r=t.r2l||Number,a=s.simpleMap(t.range,r,void 0,void 0,e),o=a[1]=0&&r<=t._length?e:null};if(l&&s.isArrayOrTypedArray(t.ticktext)){var p=s.simpleMap(t.range,t.r2l),d=(Math.abs(p[1]-p[0])-(t._lBreaks||0))/1e4;for(a=0;a \")}else t._prevDateHead=l,c+=\" \"+l;e.text=c}(t,o,r,c):\"log\"===u?function(t,e,r,n,a){var o=t.dtick,l=e.x,c=t.tickformat,u=\"string\"==typeof o&&o.charAt(0);if(\"never\"===a&&(a=\"\"),n&&\"L\"!==u&&(o=\"L3\",u=\"L\"),c||\"L\"===u)e.text=wt(Math.pow(10,l),t,a,n);else if(i(o)||\"D\"===u&&s.mod(l+.01,1)<.1){var h=Math.round(l),f=Math.abs(h),p=t.exponentformat;\"power\"===p||_t(p)&&bt(h)?(e.text=0===h?1:1===h?\"10\":\"10\"+(h>1?\"\":z)+f+\" \",e.fontSize*=1.25):(\"e\"===p||\"E\"===p)&&f>2?e.text=\"1\"+p+(h>0?\"+\":z)+f:(e.text=wt(Math.pow(10,l),t,\"\",\"fakehover\"),\"D1\"===o&&\"y\"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if(\"D\"!==u)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,c,g):\"category\"===u?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=\"\"),e.text=String(r)}(t,o):\"multicategory\"===u?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):Rt(t)?function(t,e,r,n,i){if(\"radians\"!==t.thetaunit||r)e.text=wt(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=wt(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=z+e.text)}}}}(t,o,r,c,g):function(t,e,r,n,i){\"never\"===i?i=\"\":\"all\"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i=\"hide\"),e.text=wt(e.x,t,i,n)}(t,o,0,c,g),n||(t.tickprefix&&!m(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!m(t.showticksuffix)&&(o.text+=t.ticksuffix)),t.labelalias&&t.labelalias.hasOwnProperty(o.text)){var y=t.labelalias[o.text];\"string\"==typeof y&&(o.text=y)}return(\"boundaries\"===t.tickson||t.showdividers)&&(o.xbnd=[f(o.x-.5),f(o.x+t.dtick-.5)]),o},Z.hoverLabelText=function(t,e,r){r&&(t=s.extendFlat({},t,{hoverformat:r}));var n=s.isArrayOrTypedArray(e)?e[0]:e,i=s.isArrayOrTypedArray(e)?e[1]:void 0;if(void 0!==i&&i!==n)return Z.hoverLabelText(t,n,r)+\" - \"+Z.hoverLabelText(t,i,r);var a=\"log\"===t.type&&n<=0,o=Z.tickText(t,t.c2l(a?-n:n),\"hover\").text;return a?0===n?\"0\":z+o:o};var xt=[\"f\",\"p\",\"n\",\"μ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\"];function _t(t){return\"SI\"===t||\"B\"===t}function bt(t){return t>14||t<-15}function wt(t,e,r,n){var a=t<0,o=e._tickround,l=r||e.exponentformat||\"B\",c=e._tickexponent,u=Z.getTickFormat(e),h=e.separatethousands;if(n){var f={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]};yt(f),o=(Number(f._tickround)||0)+4,c=f._tickexponent,e.hoverformat&&(u=e.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,z);var p,d=Math.pow(10,-o)/2;if(\"none\"===l&&(c=0),(t=Math.abs(t))\"+p+\"\":\"B\"===l&&9===c?t+=\"B\":_t(l)&&(t+=xt[c/3+5])),a?z+t:t}function Tt(t,e){if(t){var r=Object.keys(j).reduce((function(t,r){return-1!==e.indexOf(r)&&j[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 kt(t,e){for(var r=[],n={},i=0;i1&&r=i.min&&t=0,a=u(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=Z.getFromId(t,e);r||(r={}),r.axShifts=o,r.overlayingShiftedAx=a;var i=Z.drawOne(t,n,r);return n._shiftPusher&&jt(n,n._fullDepth||0,o,!0),n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),i}}})))},Z.drawOne=function(t,e,r){var n,i,l,p=(r=r||{}).axShifts||{},d=r.overlayingShiftedAx||[];e.setScale();var m=t._fullLayout,g=e._id,y=g.charAt(0),v=Z.counterLetter(g),x=m._plots[e._mainSubplot];if(x){if(e._shiftPusher=e.autoshift||-1!==d.indexOf(e._id)||-1!==d.indexOf(e.overlaying),e._shiftPusher&\"free\"===e.anchor){var _=e.linewidth/2||0;\"inside\"===e.ticks&&(_+=e.ticklen),jt(e,_,p,!0),jt(e,e.shift||0,p,!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,p));var b=x[y+\"axislayer\"],w=e._mainLinePosition,T=w+=e._shift,k=e._mainMirrorPosition,A=e._vals=Z.calcTicks(e),M=[e.mirror,T,k].join(\"_\");for(n=0;n0?r.bottom-u:0,h))));var f=0,p=0;if(e._shiftPusher&&(f=Math.max(h,r.height>0?\"l\"===l?u-r.left:r.right-u:0),e.title.text!==m._dfltTitle[y]&&(p=(e._titleStandoff||0)+(e._titleScoot||0),\"l\"===l&&(p+=St(e))),e._fullDepth=Math.max(f,p)),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var d=[0,1],g=\"number\"==typeof e._shift?e._shift:0;if(\"x\"===y){if(\"b\"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?u-r.top:0,h),d.reverse()),r.width>0){var x=r.right-(e._offset+e._length);x>0&&(n.xr=1,n.r=x);var _=e._offset-r.left;_>0&&(n.xl=0,n.l=_)}}else if(\"l\"===l?(e._depth=Math.max(r.height>0?u-r.left:0,h),n[l]=e._depth-g):(e._depth=Math.max(r.height>0?r.right-u:0,h),n[l]=e._depth+g,d.reverse()),r.height>0){var b=r.bottom-(e._offset+e._length);b>0&&(n.yb=0,n.b=b);var w=e._offset-r.top;w>0&&(n.yt=1,n.t=w)}n[v]=\"free\"===e.anchor?e.position:e._anchorAxis.domain[d[0]],e.title.text!==m._dfltTitle[y]&&(n[l]+=St(e)+(e.title.standoff||0)),e.mirror&&\"free\"!==e.anchor&&((i={x:0,y:0,r:0,l:0,t:0,b:0})[c]=e.linewidth,e.mirror&&!0!==e.mirror&&(i[c]+=h),!0===e.mirror||\"ticks\"===e.mirror?i[v]=e._anchorAxis.domain[d[1]]:\"all\"!==e.mirror&&\"allticks\"!==e.mirror||(i[v]=[e._counterDomainMin,e._counterDomainMax][d[1]]))}ht&&(s=o.getComponentMethod(\"rangeslider\",\"autoMarginOpts\")(t,e)),\"string\"==typeof e.automargin&&(Tt(n,e.automargin),Tt(i,e.automargin)),a.autoMargin(t,Lt(e),n),a.autoMargin(t,It(e),i),a.autoMargin(t,Pt(e),s)})),s.syncOrAsync(ct)}}function ft(t){var r=g+(t||\"tick\");return S[r]||(S[r]=function(t,e,r){var n,i,a,o;if(t._selections[e].size())n=1/0,i=-1/0,a=1/0,o=-1/0,t._selections[e].each((function(){var t=Ct(this),e=f.bBox(t.node().parentNode);n=Math.min(n,e.top),i=Math.max(i,e.bottom),a=Math.min(a,e.left),o=Math.max(o,e.right)}));else{var s=Z.makeLabelFns(t,r);n=i=s.yFn({dx:0,dy:0,fontSize:0}),a=o=s.xFn({dx:0,dy:0,fontSize:0})}return{top:n,bottom:i,left:a,right:o,height:i-n,width:o-a}}(e,r,T)),S[r]}},Z.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},Z.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))}},Z.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 c=t.side,u=l?(t.tickwidth||0)/2:0,h=3,f=t.tickfont?t.tickfont.size:12;return(o||n)&&(u+=f*q,h+=(t.linewidth||0)/2),(i||a)&&(u+=(t.linewidth||0)/2,h+=3),s&&\"top\"===c&&(h-=f*(1-q)),(i||n)&&(u=-u),\"bottom\"!==c&&\"right\"!==c||(h=-h),[l?u:0,s?h:0]}(t),r=t.ticklabelshift||0,n=t.ticklabelstandoff||0,i=e[0],a=e[1],o=t.range[0]>t.range[1],s=t.ticklabelposition&&-1!==t.ticklabelposition.indexOf(\"inside\"),c=!s;if(r&&(r*=o?-1:1),n){var u=t.side;n*=s&&(\"top\"===u||\"left\"===u)||c&&(\"bottom\"===u||\"right\"===u)?1:-1}return\"x\"===t._id.charAt(0)?function(e){return l(i+t._offset+t.l2p(At(e))+r,a+n)}:function(e){return l(a+n,i+t._offset+t.l2p(At(e))+r)}},Z.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},Z.makeLabelFns=function(t,e,r){var n=t.ticklabelposition||\"\",a=function(t){return-1!==n.indexOf(t)},o=a(\"top\"),l=a(\"left\"),c=a(\"right\"),u=a(\"bottom\")||l||o||c,h=a(\"inside\"),f=\"inside\"===n&&\"inside\"===t.ticks||!h&&\"outside\"===t.ticks&&\"boundaries\"!==t.tickson,p=0,d=0,m=f?t.ticklen:0;if(h?m*=-1:u&&(m=0),f&&(p+=m,r)){var g=s.deg2rad(r);p=m*Math.cos(g)+1,d=m*Math.sin(g)}t.showticklabels&&(f||t.showline)&&(p+=.2*t.tickfont.size);var y,v,x,_,b,w={labelStandoff:p+=(t.linewidth||1)/2*(h?-1:1),labelShift:d},T=0,k=t.side,A=t._id.charAt(0),M=t.tickangle;if(\"x\"===A)_=(b=!h&&\"bottom\"===k||h&&\"top\"===k)?1:-1,h&&(_*=-1),y=d*_,v=e+p*_,x=b?1:-.2,90===Math.abs(M)&&(h?x+=V:x=-90===M&&\"bottom\"===k?q:90===M&&\"top\"===k?V:.5,T=V/2*(M/90)),w.xFn=function(t){return t.dx+y+T*t.fontSize},w.yFn=function(t){return t.dy+v+t.fontSize*x},w.anchorFn=function(t,e){if(u){if(l)return\"end\";if(c)return\"start\"}return i(e)&&0!==e&&180!==e?e*_<0!==h?\"end\":\"start\":\"middle\"},w.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:\"top\"===t.side!==h?-n:0};else if(\"y\"===A){if(_=(b=!h&&\"left\"===k||h&&\"right\"===k)?1:-1,h&&(_*=-1),y=p,v=d*_,x=0,h||90!==Math.abs(M)||(x=-90===M&&\"left\"===k||90===M&&\"right\"===k?q:.5),h){var S=i(M)?+M:0;if(0!==S){var E=s.deg2rad(S);T=Math.abs(Math.sin(E))*q*_,x=0}}w.xFn=function(t){return t.dx+e-(y+t.fontSize*x)*_+T*t.fontSize},w.yFn=function(t){return t.dy+v+t.fontSize*V},w.anchorFn=function(t,e){return i(e)&&90===Math.abs(e)?\"middle\":b?\"end\":\"start\"},w.heightFn=function(e,r,n){return\"right\"===t.side&&(r*=-1),r<-30?-n:r<30?-.5*n:0}}return w},Z.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,Mt);o.exit().remove(),o.enter().append(\"path\").classed(i,1).classed(\"ticks\",1).classed(\"crisp\",!1!==r.crisp).each((function(t){return h.stroke(n.select(this),t.minor?e.minor.tickcolor:e.tickcolor)})).style(\"stroke-width\",(function(r){return f.crispRound(t,r.minor?e.minor.tickwidth:e.tickwidth,1)+\"px\"})).attr(\"d\",r.path).style(\"display\",null),Nt(e,[B]),o.attr(\"transform\",r.transFn)},Z.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&&Z.shouldShowZeroLine(t,e,l))for(var c=\"array\"===e.tickmode,u=0;u=0;y--){var v=y?m:g;if(v){var x=v.selectAll(\"path.\"+i).data(y?s:o,Mt);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 h.stroke(n.select(this),t.minor?e.minor.gridcolor:e.gridcolor||\"#ddd\")})).style(\"stroke-dasharray\",(function(t){return f.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)}}Nt(e,[R,F])}},Z.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+\"zl\",i=Z.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 X(t.id,e.id)}))})),a.attr(\"transform\",r.transFn).attr(\"d\",r.path).call(h.stroke,e.zerolinecolor||h.defaultLine).style(\"stroke-width\",f.crispRound(t,e.zerolinewidth,e._gw||1)+\"px\").style(\"display\",null),Nt(e,[D])},Z.drawLabels=function(t,e,r){r=r||{};var a=t._fullLayout,o=e._id,u=r.cls||o+\"tick\",h=r.vals.filter((function(t){return t.text})),p=r.labelFns,d=r.secondary?0:e.tickangle,m=(e._prevTickAngles||{})[u],g=r.layer.selectAll(\"g.\"+u).data(e.showticklabels?h:[],Mt),y=[];function v(t,a){t.each((function(t){var o=n.select(this),s=o.select(\".text-math-group\"),u=p.anchorFn(t,a),h=r.transFn.call(o.node(),t)+(i(a)&&0!=+a?\" rotate(\"+a+\",\"+p.xFn(t)+\",\"+(p.yFn(t)-t.fontSize/2)+\")\":\"\"),d=c.lineCount(o),m=H*t.fontSize,g=p.heightFn(t,i(a)?+a:0,(d-1)*m);if(g&&(h+=l(0,g)),s.empty()){var y=o.select(\"text\");y.attr({transform:h,\"text-anchor\":u}),y.style(\"opacity\",1),e._adjustTickLabelsOverflow&&e._adjustTickLabelsOverflow()}else{var v=f.bBox(s.node()).width*{end:-.5,start:.5}[u];s.attr(\"transform\",h+l(v,0))}}))}g.enter().append(\"g\").classed(u,1).append(\"text\").attr(\"text-anchor\",\"middle\").each((function(e){var r=n.select(this),i=t._promises.length;r.call(c.positionText,p.xFn(e),p.yFn(e)).call(f.font,{family:e.font,size:e.fontSize,color:e.fontColor,weight:e.fontWeight,style:e.fontStyle,variant:e.fontVariant,textcase:e.fontTextcase,lineposition:e.fontLineposition,shadow:e.fontShadow}).text(e.text).call(c.convertToTspans,t),t._promises[i]?y.push(t._promises.pop().then((function(){v(r,d)}))):v(r,d)})),Nt(e,[N]),g.exit().remove(),r.repositionOnUpdate&&g.each((function(t){n.select(this).select(\"text\").call(c.positionText,p.xFn(t),p.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,c=o?t._fullLayout.width:t._fullLayout.height;if(-1!==r.indexOf(\"domain\")){var u=s.simpleMap(e.range,e.r2l);l=e.l2p(u[0])+e._offset,c=e.l2p(u[1])+e._offset}var h=Math.min(l,c),p=Math.max(l,c),d=e.side,m=1/0,y=-1/0;for(var v in g.each((function(t){var r=n.select(this);if(r.select(\".text-math-group\").empty()){var a=f.bBox(r.node()),s=0;o?(a.right>p||a.leftp||a.top+(e.tickangle?0:t.fontSize/4)e[\"_visibleLabelMin_\"+r._id]?l.style(\"display\",\"none\"):\"tick\"!==t.K||i||l.style(\"display\",null)}))}))}))}))},v(g,m+1?m:d);var x=null;e._selections&&(e._selections[u]=g);var _=[function(){return y.length&&Promise.all(y)}];e.automargin&&a._redrawFromAutoMarginCount&&90===m?(x=m,_.push((function(){v(g,m)}))):_.push((function(){if(v(g,d),h.length&&e.autotickangles&&(\"log\"!==e.type||\"D\"!==String(e.dtick).charAt(0))){x=e.autotickangles[0];var t,n=0,i=[],a=1;g.each((function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),o=Ct(this),s=f.bBox(o.node());a=Math.max(a,c.lineCount(o)),i.push({top:0,bottom:10,height:10,left:r-s.width/2,right:r+s.width/2+2,width:s.width+2})}));var o=(\"boundaries\"===e.tickson||e.showdividers)&&!r.secondary,l=h.length,u=Math.abs((h[l-1].x-h[0].x)*e._m)/(l-1),p=o?u/2:u,m=o?e.ticklen:1.25*n*a,y=p/Math.sqrt(Math.pow(p,2)+Math.pow(m,2)),_=e.autotickangles.map((function(t){return t*Math.PI/180})),b=_.find((function(t){return Math.abs(Math.cos(t))<=y}));void 0===b&&(b=_.reduce((function(t,e){return Math.abs(Math.cos(t))j*O&&(I=O,E[S]=C[S]=P[S])}var U=Math.abs(I-L);U-k>0?k*=1+k/(U-=k):k=0,\"y\"!==e._id.charAt(0)&&(k=-k),E[M]=w.p2r(w.r2p(C[M])+A*k),\"min\"===w.autorange||\"max reversed\"===w.autorange?(E[0]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0):\"max\"!==w.autorange&&\"min reversed\"!==w.autorange||(E[1]=null,w._rangeInitial0=void 0,w._rangeInitial1=void 0),a._insideTickLabelsUpdaterange[w._name+\".range\"]=E}var V=s.syncOrAsync(_);return V&&V.then&&t._promises.push(V),V},Z.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},Z.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)&&(Et(e,0)||!function(t,e,r,n){var i=r._mainAxis;if(i){var a=t._fullLayout,o=e._id.charAt(0),s=Z.counterLetter(e._id),l=e._offset+(Math.abs(n[0])1)for(n=1;n2*o}(i,e))return\"date\";var g=\"strict\"!==r.autotypenumbers;return function(t,e){for(var r=t.length,n=h(r),i=0,o=0,s={},u=0;u2*i}(i,g)?\"category\":function(t,e){for(var r=t.length,n=0;n=2){var s,c,u=\"\";if(2===o.length)for(s=0;s<2;s++)if(c=b(o[s])){u=y;break}var h=i(\"pattern\",u);if(h===y)for(s=0;s<2;s++)(c=b(o[s]))&&(e.bounds[s]=o[s]=c-1);if(h)for(s=0;s<2;s++)switch(c=o[s],h){case y:if(!n(c))return void(e.enabled=!1);if((c=+c)!==Math.floor(c)||c<0||c>=7)return void(e.enabled=!1);e.bounds[s]=o[s]=c;break;case v:if(!n(c))return void(e.enabled=!1);if((c=+c)<0||c>24)return void(e.enabled=!1);e.bounds[s]=o[s]=c}if(!1===r.autorange){var f=r.range;if(f[0]f[1])return void(e.enabled=!1)}else if(o[0]>f[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)}},46473:function(t,e,r){\"use strict\";var n=r(87800).isTypedArraySpec;t.exports=function(t,e,r,i){if(\"category\"===e.type){var a,o=t.categoryarray,s=Array.isArray(o)&&o.length>0||n(o);s&&(a=\"array\");var l,c=r(\"categoryorder\",a);\"array\"===c&&(l=r(\"categoryarray\")),s||\"array\"!==c||(c=e.categoryorder=\"trace\"),\"trace\"===c?e._initialCategories=[]:\"array\"===c?e._initialCategories=l.slice():(l=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;nn?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;oc*x)||T)for(r=0;rz&&FI&&(I=F);f/=(I-L)/(2*P),L=l.l2r(L),I=l.l2r(I),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\",c(r,n)).attr(\"d\",i+\"Z\")}function j(t,e,r){return t.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:h.background,stroke:h.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"transform\",c(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 q(t){n.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}function H(t){P&&t.data&&t._context.showTips&&(i.notifier(i._(t,\"Double-click to zoom back out\"),\"long\"),P=!1)}function G(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,I)/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,c,u=!1,h={},f={},p=(a||{}).xaHash,d=(a||{}).yaHash,m=0;m=0)i._fullLayout._deactivateShape(i);else{var o=i._fullLayout.clickmode;if(q(i),2!==t||yt||Ht(),gt)o.indexOf(\"select\")>-1&&S(r,i,$,J,e.id,It),o.indexOf(\"event\")>-1&&p.click(i,r,e.id);else if(1===t&&yt){var s=m?z:P,c=\"s\"===m||\"w\"===y?0:1,h=s._name+\".range[\"+c+\"]\",f=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,c),d=\"left\",g=\"middle\";if(s.fixedrange)return;m?(g=\"n\"===m?\"top\":\"bottom\",\"right\"===s.side&&(d=\"right\")):\"e\"===y&&(d=\"right\"),i._context.showAxisRangeEntryBoxes&&n.select(_t).call(u.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(f),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,h,e)}))}}}function Ot(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(tt,pt*e+bt)),i=Math.max(0,Math.min(et,dt*r+wt)),a=Math.abs(n-bt),o=Math.abs(i-wt);function s(){St=\"\",Tt.r=Tt.l,Tt.t=Tt.b,Ct.attr(\"d\",\"M0,0Z\")}if(Tt.l=Math.min(bt,n),Tt.r=Math.max(bt,n),Tt.t=Math.min(wt,i),Tt.b=Math.max(wt,i),rt.isSubplotConstrained)a>I||o>I?(St=\"xy\",a/tt>o/et?(o=a*et/tt,wt>i?Tt.t=wt-o:Tt.b=wt+o):(a=o*tt/et,bt>n?Tt.l=bt-a:Tt.r=bt+a),Ct.attr(\"d\",G(Tt))):s();else if(nt.isSubplotConstrained)if(a>I||o>I){St=\"xy\";var l=Math.min(Tt.l/tt,(et-Tt.b)/et),c=Math.max(Tt.r/tt,(et-Tt.t)/et);Tt.l=l*tt,Tt.r=c*tt,Tt.b=(1-l)*et,Tt.t=(1-c)*et,Ct.attr(\"d\",G(Tt))}else s();else!at||o0){var u;if(nt.isSubplotConstrained||!it&&1===at.length){for(u=0;u<$.length;u++)$[u].range=$[u]._r.slice(),E($[u],1-r/et);o=(e=r*tt/et)/2}if(nt.isSubplotConstrained||!at&&1===it.length){for(u=0;u1&&(void 0!==a.maxallowed&&st===(a.range[0]1&&(void 0!==o.maxallowed&<===(o.range[0]1)if(l)e.xlines=f(n,\"path\",\"xlines-above\"),e.ylines=f(n,\"path\",\"ylines-above\"),e.xaxislayer=f(n,\"g\",\"xaxislayer-above\"),e.yaxislayer=f(n,\"g\",\"yaxislayer-above\");else{if(!a){var h=f(n,\"g\",\"layer-subplot\");e.shapelayer=f(h,\"g\",\"shapelayer\"),e.imagelayer=f(h,\"g\",\"imagelayer\"),e.minorGridlayer=f(n,\"g\",\"minor-gridlayer\"),e.gridlayer=f(n,\"g\",\"gridlayer\"),e.zerolinelayer=f(n,\"g\",\"zerolinelayer\");var m=f(n,\"g\",\"layer-between\");e.shapelayerBetween=f(m,\"g\",\"shapelayer\"),e.imagelayerBetween=f(m,\"g\",\"imagelayer\"),f(n,\"path\",\"xlines-below\"),f(n,\"path\",\"ylines-below\"),e.overlinesBelow=f(n,\"g\",\"overlines-below\"),f(n,\"g\",\"xaxislayer-below\"),f(n,\"g\",\"yaxislayer-below\"),e.overaxesBelow=f(n,\"g\",\"overaxes-below\")}e.overplot=f(n,\"g\",\"overplot\"),e.plot=f(e.overplot,\"g\",i),a||(e.xlines=f(n,\"path\",\"xlines-above\"),e.ylines=f(n,\"path\",\"ylines-above\"),e.overlinesAbove=f(n,\"g\",\"overlines-above\"),f(n,\"g\",\"xaxislayer-above\"),f(n,\"g\",\"yaxislayer-above\"),e.overaxesAbove=f(n,\"g\",\"overaxes-above\"),e.xlines=n.select(\".xlines-\"+o),e.ylines=n.select(\".ylines-\"+s),e.xaxislayer=n.select(\".xaxislayer-\"+o),e.yaxislayer=n.select(\".yaxislayer-\"+s))}else{var g=e.mainplotinfo,y=g.plotgroup,v=i+\"-x\",x=i+\"-y\";e.minorGridlayer=g.minorGridlayer,e.gridlayer=g.gridlayer,e.zerolinelayer=g.zerolinelayer,f(g.overlinesBelow,\"path\",v),f(g.overlinesBelow,\"path\",x),f(g.overaxesBelow,\"g\",v),f(g.overaxesBelow,\"g\",x),e.plot=f(g.overplot,\"g\",i),f(g.overlinesAbove,\"path\",v),f(g.overlinesAbove,\"path\",x),f(g.overaxesAbove,\"g\",v),f(g.overaxesAbove,\"g\",x),e.xlines=y.select(\".overlines-\"+o).select(\".\"+v),e.ylines=y.select(\".overlines-\"+s).select(\".\"+x),e.xaxislayer=y.select(\".overaxes-\"+o).select(\".\"+v),e.yaxislayer=y.select(\".overaxes-\"+s).select(\".\"+x)}a||(l||(p(e.minorGridlayer,\"g\",e.xaxis._id),p(e.minorGridlayer,\"g\",e.yaxis._id),e.minorGridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(c.idSort),p(e.gridlayer,\"g\",e.xaxis._id),p(e.gridlayer,\"g\",e.yaxis._id),e.gridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(c.idSort)),e.xlines.style(\"fill\",\"none\").classed(\"crisp\",!0),e.ylines.style(\"fill\",\"none\").classed(\"crisp\",!0))}function y(t,e){if(t){var r={};for(var i in t.each((function(t){var i=t[0];n.select(this).remove(),v(i,e),r[i]=!0})),e._plots)for(var a=e._plots[i].overlays||[],o=0;o0){var g=p.id;if(-1!==g.indexOf(d))continue;g+=d+(u+1),p=a.extendFlat({},p,{id:g,plot:o._cartesianlayer.selectAll(\".subplot\").select(\".\"+g)})}for(var y,v=[],x=0;x1&&(w+=d+b),_.push(n+w),r=0;r_[1]-1/4096&&(e.domain=s),i.noneOrAll(t.domain,e.domain,s),\"sync\"===e.tickmode&&(e.tickmode=\"auto\")}return r(\"layer\"),e}},54616:function(t,e,r){\"use strict\";var n=r(87703);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)}},90259:function(t,e,r){\"use strict\";var n=r(75511);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 c,u=e.getAutorangeDflt(l,i),h=r(\"autorange\",u);!l||(null!==l[0]||null!==l[1])&&(null!==l[0]&&null!==l[1]||\"reversed\"!==h&&!0!==h)&&(null===l[0]||\"min\"!==h&&\"max reversed\"!==h)&&(null===l[1]||\"max\"!==h&&\"min reversed\"!==h)||(l=void 0,delete e.range,e.autorange=!0,c=!0),c||(h=r(\"autorange\",u=e.getAutorangeDflt(l,i))),h&&(n(r,h,l),\"linear\"!==o&&\"-\"!==o||r(\"rangemode\")),e.cleanRange()}},67611:function(t,e,r){\"use strict\";var n=r(4530).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()}},19091:function(t,e,r){\"use strict\";var n=r(45568),i=r(42696).aL,a=r(34809),o=a.numberFormat,s=r(10721),l=a.cleanNumber,c=a.ms2DateTime,u=a.dateTime2ms,h=a.ensureNumber,f=a.isArrayOrTypedArray,p=r(63821),d=p.FP_SAFE,m=p.BADNUM,g=p.LOG_CLIP,y=p.ONEWEEK,v=p.ONEDAY,x=p.ONEHOUR,_=p.ONEMIN,b=p.ONESEC,w=r(5975),T=r(54826),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 m}function C(e,r,n,i){if((i||{}).msUTC&&s(e))return+e;var o=u(e,n||t.calendar);if(o===m){if(!s(e))return m;e=+e;var l=Math.floor(10*a.mod(e+.05,1)),c=Math.round(e-l/10);o=u(new Date(c))+l/10}return o}function L(e,r,n){return c(e,r,n||t.calendar)}function I(e){return t._categories[Math.round(e)]}function P(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 m}function z(e){if(t._categoriesMap)return t._categoriesMap[e]}function O(t){var e=z(t);return void 0!==e?e:s(t)?+t:void 0}function D(t){return s(t)?+t:z(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):m},N=function(e){return F(e,t._m,t._b)};if(t.rangebreaks){var j=\"y\"===p;B=function(e){if(!s(e))return m;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;lu)){o=a<(c+u)/2?l:l+1;break}o=l+1}var h=t._B[o]||0;return isFinite(h)?R(e,t._m2,h):0},N=function(e){var r=t._rangebreaks.length;if(!r)return F(e,t._m,t._b);for(var n=0,i=0;it._rangebreaks[i].pmax&&(n=i+1);return F(e,t._m2,t._B[n])}}t.c2l=\"log\"===t.type?E:h,t.l2c=\"log\"===t.type?M:h,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=h,t.d2p=t.r2p=function(e){return t.l2p(l(e))},t.p2d=t.p2r=N,t.cleanPos=h):\"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=h,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=h):\"date\"===t.type?(t.d2r=t.r2d=a.identity,t.d2c=t.r2c=t.d2l=t.r2l=C,t.c2d=t.c2r=t.l2d=t.l2r=L,t.d2p=t.r2p=function(e,r,n){return t.l2p(C(e,0,n))},t.p2d=t.p2r=function(t,e,r){return L(N(t),e,r)},t.cleanPos=function(e){return a.cleanDate(e,m,t.calendar)}):\"category\"===t.type?(t.d2c=t.d2l=P,t.r2d=t.c2d=t.l2d=I,t.d2r=t.d2l_noadd=O,t.r2c=function(e){var r=D(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=h,t.r2l=D,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return I(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return\"string\"==typeof t&&\"\"!==t?t:h(t)}):\"multicategory\"===t.type&&(t.r2d=t.c2d=t.l2d=I,t.d2r=t.d2l_noadd=O,t.r2c=function(e){var r=O(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=z,t.l2r=t.c2r=h,t.r2l=O,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return I(N(t))},t.r2p=t.d2p,t.p2r=N,t.cleanPos=function(t){return Array.isArray(t)||\"string\"==typeof t&&\"\"!==t?t:h(t)},t.setupMultiCategory=function(n){var i,o,s=t._traceIndices,l=t._matchGroup;if(l&&0===t._categories.length)for(var c in l)if(c!==r){var u=e[w.id2name(c)];s=s.concat(u._traceIndices)}var h=[[0,{}],[0,{}]],d=[];for(i=0;il[1]&&(i[s?0:1]=n),i[0]===i[1]){var c=t.l2r(r),u=t.l2r(n);if(void 0!==r){var h=c+1;void 0!==n&&(h=Math.min(h,u)),i[s?1:0]=h}if(void 0!==n){var f=u+1;void 0!==r&&(f=Math.max(f,c)),i[s?0:1]=f}}}},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],c=null===o[1];for(\"date\"!==t.type||t.autorange||(o[0]=a.cleanDate(o[0],m,t.calendar),o[1]=a.cleanDate(o[1],m,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 u=a.constrain(t.r2l(o[0]),a.MIN_MS+1e3,a.MAX_MS-1e3);o[0]=t.l2r(u-1e3),o[1]=t.l2r(u+1e3);break}}else{if(!s(o[n])){if(l||c||!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 h=Math.max(1,Math.abs(1e-6*o[0]));o[0]-=h,o[1]+=h}}}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,c=t.r2l(t[a][0],o),u=t.r2l(t[a][1],o),h=\"y\"===p;if(h?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks&&(t._rangebreaks=t.locateBreaks(Math.min(c,u),Math.max(c,u)),t._rangebreaks.length)){for(s=0;su&&(f=!f),f&&t._rangebreaks.reverse();var d=f?-1:1;for(t._m2=d*t._length/(Math.abs(u-c)-t._lBreaks),t._B.push(-t._m2*(h?u:c)),s=0;si&&(i+=7,oi&&(i+=24,o=n&&o=n&&e=s.min&&(ts.max&&(s.max=n),i=!1)}i&&c.push({min:t,max:n})}};for(n=0;nr.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,c=i._length,u=l._length,h=!!e.xr1,f=!!e.yr1,p=[];if(h){var d=a.simpleMap(e.xr0,i.r2l),m=a.simpleMap(e.xr1,i.r2l),g=d[1]-d[0],y=m[1]-m[0];p[0]=(d[0]*(1-r)+r*m[0]-d[0])/(d[1]-d[0])*c,p[2]=c*(1-r+r*y/g),i.range[0]=i.l2r(d[0]*(1-r)+r*m[0]),i.range[1]=i.l2r(d[1]*(1-r)+r*m[1])}else p[0]=0,p[2]=c;if(f){var v=a.simpleMap(e.yr0,l.r2l),x=a.simpleMap(e.yr1,l.r2l),_=v[1]-v[0],b=x[1]-x[0];p[1]=(v[1]*(1-r)+r*x[1]-v[1])/(v[0]-v[1])*u,p[3]=u*(1-r+r*b/_),l.range[0]=i.l2r(v[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(v[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=u;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w=h?c/p[2]:1,T=f?u/p[3]:1,k=h?p[0]:0,A=f?p[1]:0,M=h?p[0]/p[2]*c:0,S=f?p[1]/p[3]*u:0,E=i._offset-M,C=l._offset-S;n.clipRect.call(o.setTranslate,k,A).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,C).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},4392:function(t,e,r){\"use strict\";var n=r(33626).traceIs,i=r(9666);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 c=function(t,e,r){for(var n=0;n0&&(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(c)if(\"histogram\"!==c.type||l!=={v:\"y\",h:\"x\"}[c.orientation||\"v\"]){var u=l+\"calendar\",h=c[u],f={noMultiCategory:!n(c,\"cartesian\")||n(c,\"noMultiCategory\")};if(\"box\"===c.type&&c._hasPreCompStats&&l==={h:\"x\",v:\"y\"}[c.orientation||\"v\"]&&(f.noMultiCategory=!0),f.autotypenumbers=t.autotypenumbers,o(c,l)){var p=a(c),d=[];for(r=0;r0?\".\":\"\")+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 c=e.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(r&&r._commandObserver){if(c)return s;if(r._commandObserver.remove)return r._commandObserver.remove(),r._commandObserver=null,s}if(c){a(t,c,s.cache),s.check=function(){if(l){var e=a(t,c,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u=[\"plotly_relayout\",\"plotly_redraw\",\"plotly_restyle\",\"plotly_update\",\"plotly_animatingframe\",\"plotly_afterplot\"],h=0;h0&&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 c=!1,u=0;u0&&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,u=n.domain,h=n.projection,f=n.lonaxis,p=n.lataxis,d=f._ax,m=p._ax,y=this.projection=function(t){var e=t.projection,r=e.type,n=w.projNames[r];n=\"geo\"+c.titleCase(n);for(var l=(i[n]||s[n])(),u=t._isSatellite?180*Math.acos(1/e.distance)/Math.PI:t._isClipped?w.lonaxisSpan[r]/2:null,h=[\"center\",\"rotate\",\"parallels\",\"clipExtent\"],f=function(t){return t?l:[]},p=0;pu*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),u&&l.clipAngle(u-w.clipPad),l}(n),v=[[l.l+l.w*u.x[0],l.t+l.h*(1-u.y[1])],[l.l+l.w*u.x[1],l.t+l.h*(1-u.y[0])]],x=n.center||{},_=h.rotation||{},b=f.range||[],T=p.range||[];if(n.fitbounds){d._length=v[1][0]-v[0][0],m._length=v[1][1]-v[0][1],d.range=g(r,d),m.range=g(r,m);var k=(d.range[0]+d.range[1])/2,A=(m.range[0]+m.range[1])/2;if(n._isScoped)x={lon:k,lat:A};else if(n._isClipped){x={lon:k,lat:A},_={lon:k,lat:A,roll:_.roll};var M=h.type,S=w.lonaxisSpan[M]/2||180,C=w.lataxisSpan[M]/2||90;b=[k-S,k+S],T=[A-C,A+C]}else x={lon:k,lat:A},_={lon:k,lat:_.lat,roll:_.roll}}y.center([x.lon-_.lon,x.lat-_.lat]).rotate([-_.lon,-_.lat,_.roll]).parallels(h.parallels);var L=E(b,T);y.fitExtent(v,L);var I=this.bounds=y.getBounds(L),P=this.fitScale=y.scale(),z=y.translate();if(n.fitbounds){var O=y.getBounds(E(d.range,m.range)),D=Math.min((I[1][0]-I[0][0])/(O[1][0]-O[0][0]),(I[1][1]-I[0][1])/(O[1][1]-O[0][1]));isFinite(D)?y.scale(D*P):c.warn(\"Something went wrong during\"+this.id+\"fitbounds computations.\")}else y.scale(h.scale*P);var R=this.midPt=[(I[0][0]+I[1][0])/2,(I[0][1]+I[1][1])/2];if(y.translate([z[0]+(R[0]-z[0]),z[1]+(R[1]-z[1])]).clipExtent(I),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 c(t){return Boolean(w.fillLayers[t])}var u=(this.hasChoropleth?w.layersForChoropleth:w.layers).filter((function(t){return l(t)||c(t)?e[\"show\"+t]:!s(t)||e[t].showgrid})),p=r.framework.selectAll(\".layer\").data(u,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):c(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)||c(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};m.setConvert(l,r);var c=m.calcTicks(l);e.isScoped||\"lonaxis\"!==t||c.pop();for(var u=c.length,h=new Array(u),f=0;f-1&&_(n.event,i,[r.xaxis],[r.yaxis],r.id,u),s.indexOf(\"event\")>-1&&p.click(i,n.event))}))}function h(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(f.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\"},m.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},c.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?u(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)}},47544:function(t,e,r){\"use strict\";var n=r(4173).fX,i=r(34809).counterRegex,a=r(6493),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(42194),supplyLayoutDefaults:r(31653),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[o],s=0;s0&&I<0&&(I+=360);var P,z,O,D=(L+I)/2;if(!p){var R=d?h.projRotate:[D,0,0];P=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?(z=-96.6,O=38.7):(z=d?D:P,O=(C[0]+C[1])/2),r(\"center.lon\",z),r(\"center.lat\",O),m&&(r(\"projection.tilt\"),r(\"projection.distance\")),g&&r(\"projection.parallels\",h.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\"!==u&&x)&&(r(\"countrycolor\"),r(\"countrywidth\")),(\"usa\"===u||\"north america\"===u&&50===c)&&(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:c,fullData:r,partition:\"y\"})}},14309:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809),a=r(33626),o=Math.PI/180,s=180/Math.PI,l={cursor:\"pointer\"},c={cursor:\"auto\"};function u(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function h(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],c=o._fullLayout,u=c[n],h={},f={};function p(t,e){h[n+\".\"+t]=i.nestedProperty(l,t).get(),a.call(\"_storeDirectGUIEdit\",s,c._preGUI,h);var r=i.nestedProperty(u,t);r.get()!==e&&(r.set(e),i.nestedProperty(l,t).set(e),f[n+\".\"+t]=e)}r(p),p(\"projection.scale\",e.scale()/t.fitScale),p(\"fitbounds\",!1),o.emit(\"plotly_relayout\",f)}function f(t,e){var r=u(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(c),h(t,e,i)})),r}function p(t,e){var r,i,a,o,s,f,p,d,m,g=u(0,e);function y(t){return e.invert(t)}function v(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(f=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(f)&&(d=y(f),p=[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o=p):s=y(r=f),m=!0,t.render(!0);var l=e.rotate(),c=e.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":c[0],\"geo.center.lat\":c[1],\"geo.projection.rotation.lon\":-l[0]})})).on(\"zoomend\",(function(){n.select(this).style(c),m&&h(t,e,v)})),g}function d(t,e){var r,i={r:e.rotate(),k:e.scale()},a=u(0,e),f=function(t){for(var e=0,r=arguments.length,i=[];++ed?(a=(h>0?90:-90)-p,i=0):(a=Math.asin(h/d)*s-p,i=Math.sqrt(d*d-h*h));var m=180-a-2*p,y=(Math.atan2(f,u)-Math.atan2(c,i))*s,x=(Math.atan2(f,u)-Math.atan2(c,-i))*s;return g(r[0],r[1],a,y)<=g(r[0],r[1],m,x)?[a,y,r[2]]:[m,x,r[2]]}(T,r,E);isFinite(k[0])&&isFinite(k[1])&&isFinite(k[2])||(k=E),e.rotate(k),E=k}}else r=m(e,M=_);f.of(this,arguments)({type:\"zoom\"})})),A=f.of(this,arguments),p++||A({type:\"zoomstart\"})})).on(\"zoomend\",(function(){var r;n.select(this).style(c),d.call(a,\"zoom\",null),r=f.of(this,arguments),--p||r({type:\"zoomend\"}),h(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,f,\"on\")}function m(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 v(t,e,r){var n=r*o,i=t.slice(),a=0===e?1:0,s=2===e?1:2,l=Math.cos(n),c=Math.sin(n);return i[a]=t[a]*l-t[s]*c,i[s]=t[s]*l+t[a]*c,i}function x(t,e){for(var r=0,n=0,i=t.length;nMath.abs(s)?(c.boxEnd[1]=c.boxStart[1]+Math.abs(a)*b*(s>=0?1:-1),c.boxEnd[1]l[3]&&(c.boxEnd[1]=l[3],c.boxEnd[0]=c.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(b))):(c.boxEnd[0]=c.boxStart[0]+Math.abs(s)/b*(a>=0?1:-1),c.boxEnd[0]l[2]&&(c.boxEnd[0]=l[2],c.boxEnd[1]=c.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(b)))}}else c.boxEnabled?(a=c.boxStart[0]!==c.boxEnd[0],s=c.boxStart[1]!==c.boxEnd[1],a||s?(a&&(g(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange=!1),s&&(g(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled=!1,c.boxInited=!1):c.boxInited&&(c.boxInited=!1);break;case\"pan\":c.boxEnabled=!1,c.boxInited=!1,e?(c.panning||(c.dragStart[0]=n,c.dragStart[1]=i),Math.abs(c.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:u,attributes:l,handleDefaults:h,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})}},77168:function(t,e,r){\"use strict\";var n=r(63397),i=r(13792).u,a=r(93049).extendFlat,o=r(34809).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\"}}}},64087:function(t,e,r){\"use strict\";var n=r(55010),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}},32412:function(t,e,r){\"use strict\";t.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],c=0;c<3;++c){var u=s[a[c]];if(u._length=(r[c].hi-r[c].lo)*r[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)===1/0||isNaN(u._length))l[c]=[];else{u._input_range=u.range.slice(),u.range[0]=r[c].lo/t.dataScale[c],u.range[1]=r[c].hi/t.dataScale[c],u._m=1/(t.dataScale[c]*r[c].pixelsPerDataUnit),u.range[0]===u.range[1]&&(u.range[0]-=1,u.range[1]+=1);var h=u.tickmode;if(\"auto\"===u.tickmode){u.tickmode=\"linear\";var f=u.nticks||i.constrain(u._length/40,4,9);n.autoTicks(u,Math.abs(u.range[1]-u.range[0])/f)}for(var p=n.calcTicks(u,{msUTC:!0}),d=0;d/g,\" \"));l[c]=p,u.tickmode=h}}for(e.ticks=l,c=0;c<3;++c)for(o[c]=.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]),d=0;d<2;++d)e.bounds[d][c]=t.glplot.bounds[d][c];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;ar.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)}}),!!c&&{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),_(e),e.glplot.axes.update(e.axesOptions);for(var c=Object.keys(e.traces),u=null,f=e.glplot.selection,m=0;m\")):\"isosurface\"===t.type||\"volume\"===t.type?(k.valueLabel=p.hoverLabelText(e._mockAxis,e._mockAxis.d2l(f.traceCoordinate[3]),t.valuehoverformat),E.push(\"value: \"+k.valueLabel),f.textLabel&&E.push(f.textLabel),x=E.join(\" \")):x=f.textLabel;var C={x:f.traceCoordinate[0],y:f.traceCoordinate[1],z:f.traceCoordinate[2],data:b._input,fullData:b,curveNumber:b.index,pointNumber:T};d.appendArrayPointValue(C,b,T),t._module.eventData&&(C=b._module.eventData(C,f,b,{},T));var L={points:[C]};if(e.fullSceneLayout.hovermode){var I=[];d.loneHover({trace:b,x:(.5+.5*v[0]/v[3])*s,y:(.5-.5*v[1]/v[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:x,name:u.name,color:d.castHoverOption(b,T,\"bgcolor\")||u.color,borderColor:d.castHoverOption(b,T,\"bordercolor\"),fontFamily:d.castHoverOption(b,T,\"font.family\"),fontSize:d.castHoverOption(b,T,\"font.size\"),fontColor:d.castHoverOption(b,T,\"font.color\"),nameLength:d.castHoverOption(b,T,\"namelength\"),textAlign:d.castHoverOption(b,T,\"align\"),hovertemplate:h.castOption(b,T,\"hovertemplate\"),hovertemplateLabels:h.extendFlat({},C,k),eventData:[C]},{container:n,gd:r,inOut_bbox:I}),C.bbox=I[0]}f.distance<5&&(f.buttons||w)?r.emit(\"plotly_click\",L):r.emit(\"plotly_hover\",L),this.oldEventData=L}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):h.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],c=e[o+\"calendar\"],u=e[\"_\"+o+\"length\"];if(h.isArrayOrTypedArray(l))for(var f,p=0;p<(u||l.length);p++)if(h.isArrayOrTypedArray(l[p]))for(var d=0;dy[1][o])y[0][o]=-1,y[1][o]=1;else{var P=y[1][o]-y[0][o];y[0][o]-=P/32,y[1][o]+=P/32}if(_=[y[0][o],y[1][o]],_=b(_,l),y[0][o]=_[0],y[1][o]=_[1],l.isReversed()){var z=y[0][o];y[0][o]=y[1][o],y[1][o]=z}}else _=l.range,y[0][o]=l.r2l(_[0]),y[1][o]=l.r2l(_[1]);y[0][o]===y[1][o]&&(y[0][o]-=1,y[1][o]+=1),v[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 O=u.aspectmode;if(\"cube\"===O)g=[1,1,1];else if(\"manual\"===O){var D=u.aspectratio;g=[D.x,D.y,D.z]}else{if(\"auto\"!==O&&\"data\"!==O)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[c=(l=u[M[o]]).type];R[o]=Math.pow(F.acc,1/F.count)/p[o]}g=\"data\"===O||Math.max.apply(null,R)/Math.min.apply(null,R)<=4?R:[1,1,1]}u.aspectratio.x=h.aspectratio.x=g[0],u.aspectratio.y=h.aspectratio.y=g[1],u.aspectratio.z=h.aspectratio.z=g[2],n.glplot.setAspectratio(u.aspectratio),n.viewInitial.aspectratio||(n.viewInitial.aspectratio={x:u.aspectratio.x,y:u.aspectratio.y,z:u.aspectratio.z}),n.viewInitial.aspectmode||(n.viewInitial.aspectmode=u.aspectmode);var B=u.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=h.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=h.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,c=s.isCameraChanged(t),f=s.isAspectChanged(t),p=c||f;if(p){var d={};c&&(e=s.getCamera(),n=(r=h.nestedProperty(t,s.id+\".camera\")).get(),d[s.id+\".camera\"]=n),f&&(i=s.glplot.getAspectratio(),o=(a=h.nestedProperty(t,s.id+\".aspectratio\")).get(),d[s.id+\".aspectratio\"]=o),u.call(\"_storeDirectGUIEdit\",t,l._preGUI,d),c&&(r.set(e),h.nestedProperty(l,s.id+\".camera\").set(e)),f&&(a.set(i),h.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,c=o.up.z;if(c/Math.sqrt(s*s+l*l+c*c)<.999){var f=r.id+\".camera.up\",p={x:0,y:0,z:1},d={};d[f]=p;var m=i.layout;u.call(\"_storeDirectGUIEdit\",m,a._preGUI,d),o.up=p,h.nestedProperty(m,f).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,c=s.getContext(\"2d\",{willReadFrequently:!0}),u=c.createImageData(i,a);switch(u.data.set(o),c.putImageData(u,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=h.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},88239:function(t){\"use strict\";t.exports=function(t,e,r,n){n=n||t.length;for(var i=new Array(n),a=0;aOpenStreetMap contributors',tiles:[\"https://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\":a,\"carto-darkmatter\":o,\"carto-voyager\":s,\"carto-positron-nolabels\":\"https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json\",\"carto-darkmatter-nolabels\":\"https://basemaps.cartocdn.com/gl/dark-matter-nolabels-gl-style/style.json\",\"carto-voyager-nolabels\":\"https://basemaps.cartocdn.com/gl/voyager-nolabels-gl-style/style.json\"},c=n(l);t.exports={styleValueDflt:\"basic\",stylesMap:l,styleValuesMap:c,traceLayerPrefix:\"plotly-trace-layer-\",layoutLayerPrefix:\"plotly-layout-layer-\",missingStyleErrorMsg:[\"No valid maplibre style found, please set `map.style` to one of:\",c.join(\", \"),\"or use a tile service.\"].join(\"\\n\"),mapOnErrorMsg:\"Map error.\"}},4657:function(t,e,r){\"use strict\";var n=r(34809);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,c=[\"\",\"\"],u=[0,0];switch(i){case\"top\":c[0]=\"top\",u[1]=-l;break;case\"bottom\":c[0]=\"bottom\",u[1]=l}switch(a){case\"left\":c[1]=\"right\",u[0]=-s;break;case\"right\":c[1]=\"left\",u[0]=s}return{anchor:c[0]&&c[1]?c.join(\"-\"):c[0]?c[0]:c[1]?c[1]:\"center\",offset:u}}},34091:function(t,e,r){\"use strict\";var n=r(34809),i=n.strTranslate,a=n.strScale,o=r(4173).fX,s=r(62972),l=r(45568),c=r(62203),u=r(30635),h=r(38793),f=\"map\";e.name=f,e.attr=\"subplot\",e.idRoot=f,e.idRegex=e.attrRegex=n.counterRegex(f),e.attributes={subplot:{valType:\"subplotid\",dflt:\"map\",editType:\"calc\"}},e.layoutAttributes=r(8257),e.supplyLayoutDefaults=r(97446),e.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots[f],a=0;ax/2){var _=m.split(\"|\").join(\" \");y.text(_).attr(\"data-unformatted\",_).call(u.convertToTspans,t),v=c.bBox(y.node())}y.attr(\"transform\",i(-3,8-v.height)),g.insert(\"rect\",\".static-attribution\").attr({x:-v.width-6,y:-v.height-3,width:v.width+6,height:v.height+3,fill:\"rgba(255, 255, 255, 0.75)\"});var b=1;v.width+6>x&&(b=x/(v.width+6));var w=[n.l+n.w*p.x[1],n.t+n.h*(1-p.y[0])];g.attr(\"transform\",i(w[0],w[1])+a(b))}},e.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots[f],n=0;n0){for(var r=0;r0}function u(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=c(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.findFollowingMapLayerId(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,c(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.findFollowingMapLayerId=function(t){if(\"traces\"===t)for(var e=this.subplot.getMapLayers(),r=0;r1)for(r=0;r-1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\"event\")>-1&&c.click(n,e.originalEvent)}}},_.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]=[c([r.xmin,r.ymin]),c([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(c)};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),f(o)||h(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 c(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},_.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])},_.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;eOpenStreetMap 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://tiles.stadiamaps.com/tiles/stamen_terrain/{z}/{x}/{y}.png?api_key=\"],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://tiles.stadiamaps.com/tiles/stamen_toner/{z}/{x}/{y}.png?api_key=\"],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://tiles.stadiamaps.com/tiles/stamen_watercolor/{z}/{x}/{y}.jpg?api_key=\"],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\"}},c=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:c,traceLayerPrefix:\"plotly-trace-layer-\",layoutLayerPrefix:\"plotly-layout-layer-\",wrongVersionErrorMsg:[\"Your custom plotly.js bundle is not using the correct mapbox-gl version\",\"Please install @plotly/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:\",c.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\\')'}}},2178:function(t,e,r){\"use strict\";var n=r(34809);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,c=[\"\",\"\"],u=[0,0];switch(i){case\"top\":c[0]=\"top\",u[1]=-l;break;case\"bottom\":c[0]=\"bottom\",u[1]=l}switch(a){case\"left\":c[1]=\"right\",u[0]=-s;break;case\"right\":c[1]=\"left\",u[0]=s}return{anchor:c[0]&&c[1]?c.join(\"-\"):c[0]?c[0]:c[1]?c[1]:\"center\",offset:u}}},68192:function(t,e,r){\"use strict\";var n=r(32280),i=r(34809),a=i.strTranslate,o=i.strScale,s=r(4173).fX,l=r(62972),c=r(45568),u=r(62203),h=r(30635),f=r(5417),p=\"mapbox\",d=e.constants=r(44245);e.name=p,e.attr=\"subplot\",e.idRoot=p,e.idRegex=e.attrRegex=i.counterRegex(p);var m=[\"mapbox subplots and traces are deprecated!\",\"Please consider switching to `map` subplots and traces.\",\"Learn more at: https://plotly.com/javascript/maplibre-migration/\"].join(\" \");e.attributes={subplot:{valType:\"subplotid\",dflt:\"mapbox\",editType:\"calc\"}},e.layoutAttributes=r(67514),e.supplyLayoutDefaults=r(86989);var g=!0;function y(t){return\"string\"==typeof t&&(-1!==d.styleValuesMapbox.indexOf(t)||0===t.indexOf(\"mapbox://\")||0===t.indexOf(\"stamen\"))}e.plot=function(t){g&&(g=!1,i.warn(m));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&&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;lw/2){var T=v.split(\"|\").join(\" \");_.text(T).attr(\"data-unformatted\",T).call(h.convertToTspans,t),b=u.bBox(_.node())}_.attr(\"transform\",a(-3,8-b.height)),x.insert(\"rect\",\".static-attribution\").attr({x:-b.width-6,y:-b.height-3,width:b.width+6,height:b.height+3,fill:\"rgba(255, 255, 255, 0.75)\"});var k=1;b.width+6>w&&(k=w/(b.width+6));var A=[n.l+n.w*f.x[1],n.t+n.h*(1-f.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;r0}function u(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=c(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,c(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;r1)for(r=0;r-1&&g(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\"event\")>-1&&c.click(n,e.originalEvent)}}},_.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]=[c([r.xmin,r.ymin]),c([r.xmax,r.ymax])]:(t.lassoPoints={})[e.id]=r.map(c)};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),f(o)||h(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 c(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},_.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])},_.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(){w.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()?\" - \":\"\")}},w.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=w.graphJson(t,!1,\"keepdata\"),i.node().submit(),r.remove(),t.emit(\"plotly_afterexport\"),!1}};var A=[\"days\",\"shortDays\",\"months\",\"shortMonths\",\"periods\",\"dateTime\",\"date\",\"time\",\"decimal\",\"thousands\",\"grouping\",\"currency\"],M=[\"year\",\"month\",\"dayMonth\",\"dayMonthYear\"];function S(t,e){var r=t._context.locale;r||(r=\"en-US\");var n=!1,i={};function a(t){for(var r=!0,a=0;a1&&O.length>1){for(l.getComponentMethod(\"grid\",\"sizeDefaults\")(c,s),o=0;o15&&O.length>15&&0===s.shapes.length&&0===s.images.length,w.linkSubplots(f,s,u,n),w.cleanPlot(f,s,u,n);var N=!(!n._has||!n._has(\"gl2d\")),j=!(!s._has||!s._has(\"gl2d\")),U=!(!n._has||!n._has(\"cartesian\"))||N,V=!(!s._has||!s._has(\"cartesian\"))||j;U&&!V?n._bgLayer.remove():V&&!U&&(s._shouldCreateBgLayer=!0),n._zoomlayer&&!t._dragging&&m({_fullLayout:n}),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var i=0;i0){var u=1-2*s;n=Math.round(u*n),i=Math.round(u*i)}}var f=w.layoutAttributes.width.min,p=w.layoutAttributes.height.min;n1,m=!e.height&&Math.abs(r.height-i)>1;(m||d)&&(d&&(r.width=n),m&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),w.sanitizeMargins(r)},w.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a,o,s=l.componentsRegistry,c=e._basePlotModules,u=l.subplotsRegistry.cartesian;for(i in s)(o=s[i]).includeBasePlot&&o.includeBasePlot(t,e);for(var f in c.length||c.push(u),e._has(\"cartesian\")&&(l.getComponentMethod(\"grid\",\"contentDefaults\")(t,e),u.finalizeSubplots(t,e)),e._subplots)e._subplots[f].sort(h.subplotSort);for(a=0;a1&&(r.l/=y,r.r/=y)}if(p){var v=(r.t+r.b)/p;v>1&&(r.t/=v,r.b/=v)}var x=void 0!==r.xl?r.xl:r.x,_=void 0!==r.xr?r.xr:r.x,b=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:_,size:r.r+g},b:{val:T,size:r.b+g},t:{val:b,size:r.t+g}},m[e]=1}else delete d[e],delete m[e];if(!n._replotting)return w.doAutoMargin(t)}},w.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,s={t:0,b:0,l:0,r:0},c=h.extendFlat({},i),u=a.l,f=a.r,p=a.t,m=a.b,g=e._pushmargin,y=e._pushmarginIds,v=e.minreducedwidth,x=e.minreducedheight;if(!1!==a.autoexpand){for(var _ in g)y[_]||delete g[_];var b=t._fullLayout._reservedMargin;for(var T in b)for(var k in b[T]){var A=b[T][k];s[k]=Math.max(s[k],A)}for(var M in g.base={l:{val:0,size:u},r:{val:1,size:f},t:{val:1,size:p},b:{val:0,size:m}},s){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 C=Math.max(0,a[M]-S);s[M]=Math.max(0,s[M]-C)}for(var L in g){var I=g[L].l||{},z=g[L].b||{},O=I.val,D=I.size,R=z.val,F=z.size,B=r-s.r-s.l,N=n-s.t-s.b;for(var j in g){if(o(D)&&g[j].r){var U=g[j].r.val,V=g[j].r.size;if(U>O){var q=(D*U+(V-B)*O)/(U-O),H=(V*(1-O)+(D-B)*(1-U))/(U-O);q+H>u+f&&(u=q,f=H)}}if(o(F)&&g[j].t){var G=g[j].t.val,Z=g[j].t.size;if(G>R){var W=(F*G+(Z-N)*R)/(G-R),Y=(Z*(1-R)+(F-N)*(1-G))/(G-R);W+Y>m+p&&(m=W,p=Y)}}}}}var X=h.constrain(r-a.l-a.r,2,v),$=h.constrain(n-a.t-a.b,2,x),J=Math.max(0,r-X),K=Math.max(0,n-$);if(J){var Q=(u+f)/J;Q>1&&(u/=Q,f/=Q)}if(K){var tt=(m+p)/K;tt>1&&(m/=tt,p/=tt)}if(i.l=Math.round(u)+s.l,i.r=Math.round(f)+s.r,i.t=Math.round(p)+s.t,i.b=Math.round(m)+s.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&&(w.didMarginChange(c,i)||function(t){if(\"_redrawFromAutoMarginCount\"in t._fullLayout)return!1;var e=d.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._redrawFromAutoMarginCount0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push((function(){n=!0})),r.redraw&&t._transitionData._interruptCallbacks.push((function(){return l.call(\"redraw\",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit(\"plotly_transitioninterrupted\",[])}));var a=0,o=0;function s(){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 l.call(\"redraw\",t)})).then((function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit(\"plotly_transitioned\",[])})).then(e)))}}r.runFn(s),setTimeout(s())}))}],a=h.syncOrAsync(i,t);return a&&a.then||(a=Promise.resolve()),a.then((function(){return t}))}w.didMarginChange=function(t,e){for(var r=0;r1)return!0}return!1},w.graphJson=function(t,e,r,n,i,a){(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&w.supplyDefaults(t);var o=i?t._fullData:t.data,l=i?t._fullLayout:t.layout,c=(t._transitionData||{})._frames;function u(t,e){if(\"function\"==typeof t)return e?\"_function_\":null;if(h.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&&!h.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}var a=Array.isArray(t),o=h.isTypedArray(t);if((a||o)&&t.dtype&&t.shape){var l=t.bdata;return u({dtype:t.dtype,shape:t.shape,bdata:h.isArrayBuffer(l)?s.encode(l):l},e)}return a?t.map((function(t){return u(t,e)})):o?h.simpleMap(t,h.identity):h.isJSDate(t)?h.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(l),i)){var p=l._size;f.layout.computed={margin:{b:p.b,l:p.l,r:p.r,t:p.t}}}return c&&(f.frames=u(c)),a&&(f.config=u(t._context,!0)),\"object\"===n?f:JSON.stringify(f)},w.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r=0;a--)if(l[a].enabled){r._indexToPoints=l[a]._indexToPoints;break}n&&n.calc&&(o=n.calc(t,r))}Array.isArray(o)&&o[0]||(o=[{x:p,y:p}]),o[0].t||(o[0].t={}),o[0].trace=r,f[e]=o}}for(R(o,s,u),i=0;i1e-10?t:0}function f(t,e,r){e=e||0,r=r||0;for(var n=t.length,i=new Array(n),a=0;a0?r:1/0})),i=n.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:c,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),c=(-o+l)/(2*a),u=(-o-l)/(2*a);return[[c,e*c+i+n],[u,e*u+i+n]]},clampTiny:h,pathPolygon:function(t,e,r,n,i,a){return\"M\"+f(u(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&&c<=0?0:Math.max(s,c),[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&&c>=0?0:Math.min(s,c),a>=360?1:o<=0&&l<=0?0:Math.max(o,l),e]}(d),b=_[2]-_[0],w=_[3]-_[1],T=p/f,k=Math.abs(w/b);T>k?(m=f,x=(p-(g=f*k))/i.h/2,y=[s[0],s[1]],v=[h[0]+x,h[1]-x]):(g=p,x=(f-(m=p/k))/i.w/2,y=[s[0]+x,s[1]-x],v=[h[0],h[1]]),r.xLength2=m,r.yLength2=g,r.xDomain2=y,r.yDomain2=v;var A,M=r.xOffset2=i.l+i.w*y[0],S=r.yOffset2=i.t+i.h*(1-v[1]),E=r.radius=m/b,C=r.innerRadius=r.getHole(e)*E,L=r.cx=M-E*_[0],I=r.cy=S+E*_[3],P=r.cxx=L-M,z=r.cyy=I-S,O=a.side;\"counterclockwise\"===O?(A=O,O=\"top\"):\"clockwise\"===O&&(A=O,O=\"bottom\"),r.radialAxis=r.mockAxis(t,e,a,{_id:\"x\",side:O,_trueSide:A,domain:[C/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:v});var F=r.pathSubplot();r.clipPaths.forTraces.select(\"path\").attr(\"d\",F).attr(\"transform\",l(P,z)),n.frontplot.attr(\"transform\",l(M,S)).call(u.setClipUrl,r._hasClipOnAxisFalse?null:r.clipIds.forTraces,r.gd),n.bg.attr(\"d\",F).attr(\"transform\",l(L,I)).call(c.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);m(n,i);var o=i.range;if(a.range=o.slice(),a._input.range=o.slice(),i._rl=[i.r2l(o[0],null,\"gregorian\"),i.r2l(o[1],null,\"gregorian\")],void 0!==i.minallowed){var s=i.r2l(i.minallowed);i._rl[0]>i._rl[1]?i._rl[1]=Math.max(i._rl[1],s):i._rl[0]=Math.max(i._rl[0],s)}if(void 0!==i.maxallowed){var l=i.r2l(i.maxallowed);i._rl[0]90&&m<=270&&(g.tickangle=180);var x=v?function(t){var e=z(r,L([t.x,0]));return l(e[0]-h,e[1]-p)}:function(t){return l(g.l2p(t.x)+u,0)},_=v?function(t){return P(r,t.x,-1/0,1/0)}:function(t){return r.pathArc(g.r2p(t.x)+u)},b=j(d);if(r.radialTickLayout!==b&&(i[\"radial-axis\"].selectAll(\".xtick\").remove(),r.radialTickLayout=b),y){g.setScale();var w=0,T=v?(g.tickvals||[]).filter((function(t){return t>=0})).map((function(t){return f.tickText(g,t,!0,!1)})):f.calcTicks(g),k=v?T:f.clipEnds(g,T),A=f.getTickSigns(g)[2];v&&((\"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)),f.drawTicks(n,g,{vals:T,layer:i[\"radial-axis\"],path:f.makeTickPath(g,0,A),transFn:x,crisp:!1}),f.drawGrid(n,g,{vals:k,layer:i[\"radial-grid\"],path:_,transFn:o.noop,crisp:!1}),f.drawLabels(n,g,{vals:T,layer:i[\"radial-axis\"],transFn:x,labelFns:f.makeLabelFns(g,w)})}var M=r.radialAxisAngle=r.vangles?F(U(R(d.angle),r.vangles)):d.angle,S=l(h,p),E=S+s(-M);V(i[\"radial-axis\"],y&&(d.showticklabels||d.ticks),{transform:E}),V(i[\"radial-grid\"],y&&d.showgrid,{transform:v?\"\":S}),V(i[\"radial-line\"].select(\"line\"),y&&d.showline,{x1:v?-a:u,y1:0,x2:a,y2:0,transform:E}).attr(\"stroke-width\",d.linewidth).call(c.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),c=n.id+\"title\",h=0;if(l.title){var f=u.bBox(n.layers[\"radial-axis\"].node()).height,p=l.title.font.size,d=l.side;h=\"top\"===d?p:\"counterclockwise\"===d?-(f+.4*p):f+.8*p}var m=void 0!==r?r:n.radialAxisAngle,g=R(m),y=Math.cos(g),v=Math.sin(g),_=o+a/2*y+h*v,b=s-a/2*v+h*y;n.layers[\"radial-axis-title\"]=x.draw(i,c,{propContainer:l,propName:n.id+\".radialaxis.title\",placeholder:O(i,\"Click to enter radial axis title\"),attributes:{x:_,y:b,\"text-anchor\":\"middle\"},transform:{rotate:-m}})}},N.updateAngularAxis=function(t,e){var r=this,n=r.gd,i=r.layers,a=r.radius,u=r.innerRadius,h=r.cx,p=r.cy,d=r.getAngular(e),m=r.angularAxis,g=r.isSmith;g||(r.fillViewInitialKey(\"angularaxis.rotation\",d.rotation),m.setGeometry(),m.setScale());var y=g?function(t){var e=z(r,L([0,t.x]));return Math.atan2(e[0]-h,e[1]-p)-Math.PI/2}:function(t){return m.t2g(t.x)};\"linear\"===m.type&&\"radians\"===m.thetaunit&&(m.tick0=F(m.tick0),m.dtick=F(m.dtick));var v=function(t){return l(h+a*Math.cos(t),p-a*Math.sin(t))},x=g?function(t){var e=z(r,L([0,t.x]));return l(e[0],e[1])}:function(t){return v(y(t))},_=g?function(t){var e=z(r,L([0,t.x])),n=Math.atan2(e[0]-h,e[1]-p)-Math.PI/2;return l(e[0],e[1])+s(-F(n))}:function(t){var e=y(t);return v(e)+s(-F(e))},b=g?function(t){return I(r,t.x,0,1/0)}:function(t){var e=y(t),r=Math.cos(e),n=Math.sin(e);return\"M\"+[h+u*r,p-u*n]+\"L\"+[h+a*r,p-a*n]},w=f.makeLabelFns(m,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(\".\"+m._id+\"tick\").remove(),r.angularTickLayout=k);var A,S=g?[1/0].concat(m.tickvals||[]).map((function(t){return f.tickText(m,t,!0,!1)})):f.calcTicks(m);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\"===m.type&&(S=S.filter((function(t){return o.isAngleInsideSector(y(t),r.sectorInRad)}))),m.visible){var E=\"inside\"===m.ticks?-1:1,C=(m.linewidth||1)/2;f.drawTicks(n,m,{vals:S,layer:i[\"angular-axis\"],path:\"M\"+E*C+\",0h\"+E*m.ticklen,transFn:_,crisp:!1}),f.drawGrid(n,m,{vals:S,layer:i[\"angular-grid\"],path:b,transFn:o.noop,crisp:!1}),f.drawLabels(n,m,{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(h,p)}).attr(\"stroke-width\",d.linewidth).call(c.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,c=s.isSmith,u=s.gd,h=s.layers,f=t._zoomlayer,p=S.MINZOOM,d=S.OFFEDGE,m=s.radius,x=s.innerRadius,T=s.cx,k=s.cy,A=s.cxx,M=s.cyy,C=s.sectorInRad,L=s.vangles,I=s.radialAxis,P=E.clampTiny,z=E.findXYatLength,O=E.findEnclosingVertexAngles,D=S.cornerHalfWidth,R=S.cornerLen/2,F=g.makeDragger(h,\"path\",\"maindrag\",!1===t.dragmode?\"none\":\"crosshair\");n.select(F).attr(\"d\",s.pathSubplot()).attr(\"transform\",l(T,k)),F.onmousemove=function(t){v.hover(u,t,s.id),u._fullLayout._lasthover=F,u._fullLayout._hoversubplot=s.id},F.onmouseout=function(t){u._dragging||y.unhover(u,t)};var B,N,j,U,V,q,H,G,Z,W={element:F,gd:u,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function Y(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return Y(t-A,e-M)}function $(t,e){return Math.atan2(M-e,t-A)}function J(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function K(t,e){if(0===t)return s.pathSector(2*D);var r=R/t,n=e-r,i=e+r,a=Math.max(0,Math.min(t,m)),o=a-D,l=a+D;return\"M\"+J(o,n)+\"A\"+[o,o]+\" 0,0,0 \"+J(o,i)+\"L\"+J(l,i)+\"A\"+[l,l]+\" 0,0,1 \"+J(l,n)+\"Z\"}function Q(t,e,r){if(0===t)return s.pathSector(2*D);var n,i,a=J(t,e),o=J(t,r),l=P((a[0]+o[0])/2),c=P((a[1]+o[1])/2);if(l&&c){var u=c/l,h=-1/u,f=z(D,u,l,c);n=z(R,h,f[0][0],f[0][1]),i=z(R,h,f[1][0],f[1][1])}else{var p,d;c?(p=R,d=D):(p=D,d=R),n=[[l-p,c-d],[l+p,c-d]],i=[[l-p,c+d],[l+p,c+d]]}return\"M\"+n.join(\"L\")+\"L\"+i.reverse().join(\"L\")+\"Z\"}function tt(t,e){return e=Math.max(Math.min(e,m),x),tp?(t-1&&1===t&&b(e,u,[s.xaxis],[s.yaxis],s.id,W),r.indexOf(\"event\")>-1&&v.click(u,e,s.id)}W.prepFn=function(t,n,a){var l=u._fullLayout.dragmode,h=F.getBoundingClientRect();u._fullLayout._calcInverseTransform(u);var p=u._fullLayout._invTransform;e=u._fullLayout._invScaleX,r=u._fullLayout._invScaleY;var d=o.apply3DTransform(p)(n-h.left,a-h.top);if(B=d[0],N=d[1],L){var y=E.findPolygonOffset(m,C[0],C[1],L);B+=A+y[0],N+=M+y[1]}switch(l){case\"zoom\":W.clickFn=st,c||(W.moveFn=L?it:rt,W.doneFn=at,function(){j=null,U=null,V=s.pathSubplot(),q=!1;var t=u._fullLayout[s.id];H=i(t.bgcolor).getLuminance(),(G=g.makeZoombox(f,H,T,k,V)).attr(\"fill-rule\",\"evenodd\"),Z=g.makeCorners(f,T,k),w(u)}());break;case\"select\":case\"lasso\":_(t,n,a,W,l)}},y.init(W)},N.updateRadialDrag=function(t,e,r){var i=this,c=i.gd,u=i.layers,h=i.radius,f=i.innerRadius,p=i.cx,d=i.cy,m=i.radialAxis,v=S.radialDragBoxSize,x=v/2;if(m.visible){var _,b,T,M=R(i.radialAxisAngle),E=m._rl,C=E[0],L=E[1],I=E[r],P=.75*(E[1]-E[0])/(1-i.getHole(e))/h;r?(_=p+(h+x)*Math.cos(M),b=d-(h+x)*Math.sin(M),T=\"radialdrag\"):(_=p+(f-x)*Math.cos(M),b=d-(f-x)*Math.sin(M),T=\"radialdrag-inner\");var z,O,D,B=g.makeRectDragger(u,T,\"crosshair\",-x,-x,v,v),N={element:B,gd:c};!1===t.dragmode&&(N.dragmode=!1),V(n.select(B),m.visible&&f0==(r?D>C:Dn?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,r){var n,i,a=e[r],o=e._length,s=function(r){return t.d2c(r,e.thetaunit)};if(a)for(n=new Array(o),i=0;i0?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],c=s[1],u=n(t,r([o,e])),h=u[0],f=u[1];if(0===e)return[\"M\"+l+\",\"+c,\"L\"+h+\",\"+f].join(\" \");var p=i(t,1/Math.abs(e));return[\"M\"+l+\",\"+c,\"A\"+p+\",\"+p+\" 0 0,\"+(e<0?1:0)+\" \"+h+\",\"+f].join(\" \")},resistanceArc:function(t,a,o,s){var l=i(t,1/(a+1)),c=n(t,r([a,o])),u=c[0],h=c[1],f=n(t,r([a,s])),p=f[0],d=f[1];if(e(o)!==e(s)){var m=n(t,r([a,0]));return[\"M\"+u+\",\"+h,\"A\"+l+\",\"+l+\" 0 0,\"+(00){for(var n=[],i=0;i=u&&(f.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 m(t,e,r,n){var i=f[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,m=e._name.charAt(0).toUpperCase(),g=\"Component \"+m,y=o(\"title.text\",g);e._hovertitle=y===g?y:m,a.coerceFont(o,\"title.font\",r.font,{overrideDflt:{size:a.bigFont(r.font.size),color:d}}),o(\"min\"),u(t,e,o,\"linear\"),l(t,e,o,\"linear\"),s(t,e,o,\"linear\",{noAutotickangles:!0,noTicklabelshift:!0,noTicklabelstandoff:!0}),c(t,e,o,{outerTicks:!0}),o(\"showticklabels\")&&(a.coerceFont(o,\"tickfont\",r.font,{overrideDflt:{color:d}}),o(\"tickangle\"),o(\"tickformat\")),h(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:f,handleDefaults:d,font:e.font,paper_bgcolor:e.paper_bgcolor})}},83637:function(t,e,r){\"use strict\";var n=r(45568),i=r(65657),a=r(33626),o=r(34809),s=o.strTranslate,l=o._,c=r(78766),u=r(62203),h=r(19091),f=r(93049).extendFlat,p=r(44122),d=r(29714),m=r(14751),g=r(32141),y=r(70414),v=y.freeMode,x=y.rectMode,_=r(17240),b=r(44844).prepSelect,w=r(44844).selectOnClick,T=r(44844).clearOutline,k=r(44844).clearSelectionsCache,A=r(54826);function M(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.updateFx(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;aE*_?i=(a=_)*E:a=(i=x)/E,o=y*i/x,l=v*a/_,r=e.l+e.w*m-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=b,p.xaxis={type:\"linear\",range:[w+2*k-b,b-w-2*T],domain:[m-o/2,m+o/2],_id:\"x\"},h(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,b-T-k],domain:[g-l/2,g+l/2],_id:\"y\"},h(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange=function(){return!0};var A=p.yaxis.domain[0],M=p.aaxis=f({},t.aaxis,{range:[w,b-T-k],side:\"left\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});h(M,p.graphDiv._fullLayout),M.setScale();var S=p.baxis=f({},t.baxis,{range:[b-w-k,T],side:\"bottom\",domain:p.xaxis.domain,anchor:\"free\",position:0,_id:\"x\",_length:i});h(S,p.graphDiv._fullLayout),S.setScale();var C=p.caxis=f({},t.caxis,{range:[b-w-T,k],side:\"right\",tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});h(C,p.graphDiv._fullLayout),C.setScale();var L=\"M\"+r+\",\"+(n+a)+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDef.select(\"path\").attr(\"d\",L),p.layers.plotbg.select(\"path\").attr(\"d\",L);var I=\"M0,\"+a+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDefRelative.select(\"path\").attr(\"d\",I);var P=s(r,n);p.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",P),p.clipDefRelative.select(\"path\").attr(\"transform\",null);var z=s(r-S._offset,n+a);p.layers.baxis.attr(\"transform\",z),p.layers.bgrid.attr(\"transform\",z);var O=s(r+i/2,n)+\"rotate(30)\"+s(0,-M._offset);p.layers.aaxis.attr(\"transform\",O),p.layers.agrid.attr(\"transform\",O);var D=s(r+i/2,n)+\"rotate(-30)\"+s(0,-C._offset);p.layers.caxis.attr(\"transform\",D),p.layers.cgrid.attr(\"transform\",D),p.drawAxes(!0),p.layers.aline.select(\"path\").attr(\"d\",M.showline?\"M\"+r+\",\"+(n+a)+\"l\"+i/2+\",-\"+a:\"M0,0\").call(c.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(c.stroke,S.linecolor||\"#000\").style(\"stroke-width\",(S.linewidth||0)+\"px\"),p.layers.cline.select(\"path\").attr(\"d\",C.showline?\"M\"+(r+i/2)+\",\"+n+\"l\"+i/2+\",\"+a:\"M0,0\").call(c.stroke,C.linecolor||\"#000\").style(\"stroke-width\",(C.linewidth||0)+\"px\"),p.graphDiv._context.staticPlot||p.initInteractions(),u.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 c=Math.max(a.showticklabels?a.tickfont.size/2:0,(s.showticklabels?.75*s.tickfont.size:0)+(\"outside\"===s.ticks?.87*s.ticklen:0)),u=(o.showticklabels?o.tickfont.size:0)+(\"outside\"===o.ticks?o.ticklen:0)+3;i[\"a-title\"]=_.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-c,\"text-anchor\":\"middle\"}}),i[\"b-title\"]=_.draw(r,\"b\"+n,{propContainer:o,propName:e.id+\".baxis.title\",placeholder:l(r,\"Click to enter Component B title\"),attributes:{x:e.x0-u,y:e.y0+e.h+.83*o.title.font.size+u,\"text-anchor\":\"middle\"}}),i[\"c-title\"]=_.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+u,y:e.y0+e.h+.83*s.title.font.size+u,\"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],c=a+\"tickLayout\",u=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);r[c]!==u&&(l.selectAll(\".\"+s+\"tick\").remove(),r[c]=u),t.setScale();var h=d.calcTicks(t),f=d.clipEnds(t,h),p=d.makeTransTickFn(t),m=d.getTickSigns(t)[2],g=o.deg2rad(30),y=m*(t.linewidth||1)/2,v=m*t.ticklen,x=r.w,_=r.h,b=\"b\"===a?\"M0,\"+y+\"l\"+Math.sin(g)*v+\",\"+Math.cos(g)*v:\"M\"+y+\",0l\"+Math.cos(g)*v+\",\"+-Math.sin(g)*v,w={a:\"M0,0l\"+_+\",-\"+x/2,b:\"M0,0l-\"+x/2+\",-\"+_,c:\"M0,0l-\"+_+\",\"+x/2}[a];d.drawTicks(n,t,{vals:\"inside\"===t.ticks?f:h,layer:l,path:b,transFn:p,crisp:!1}),d.drawGrid(n,t,{vals:f,layer:r.layers[a+\"grid\"],path:w,transFn:p,crisp:!1}),d.drawLabels(n,t,{vals:h,layer:l,transFn:p,labelFns:d.makeLabelFns(t,0,30)})};var C=A.MINZOOM/2+.87,L=\"m-0.87,.5h\"+C+\"v3h-\"+(C+5.2)+\"l\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l2.6,1.5l-\"+C/2+\",\"+.87*C+\"Z\",I=\"m0.87,.5h-\"+C+\"v3h\"+(C+5.2)+\"l-\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l-2.6,1.5l\"+C/2+\",\"+.87*C+\"Z\",P=\"m0,1l\"+C/2+\",\"+.87*C+\"l2.6,-1.5l-\"+(C/2+2.6)+\",-\"+(.87*C+4.5)+\"l-\"+(C/2+2.6)+\",\"+(.87*C+4.5)+\"l2.6,1.5l\"+C/2+\",-\"+.87*C+\"Z\",z=!0;function O(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,h,f,p,d,y,_,T,k,M=this,S=M.layers.plotbg.select(\"path\").node(),C=M.graphDiv,D=C._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=C._fullLayout.clickmode;O(C),2===t&&(C.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",C,R({a:0,b:0,c:0}))),r.indexOf(\"select\")>-1&&1===t&&w(e,C,[M.xaxis],[M.yaxis],M.id,M.dragOptions),r.indexOf(\"event\")>-1&&g.click(C,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))),c=Math.max(0,Math.min(1,N(r,n),N(o,s))),u=Math.max(0,Math.min(1,j(r,n),j(o,s))),m=(l/2+u)*M.w,g=(1-l/2-c)*M.w,v=(m+g)/2,x=g-m,b=(1-l)*M.h,w=b-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),_=!0),C.emit(\"plotly_relayouting\",R(p))}function V(){O(C),p!==h&&(a.call(\"_guiRelayout\",C,R(p)),z&&C.data&&C._context.showTips&&(o.notifier(l(C,\"Double-click to zoom back out\"),\"long\"),z=!1))}function q(t,e){var r=t/M.xaxis._m,n=e/M.yaxis._m,i=[(p={a:h.a-n,b:h.b+(r+n)/2,c:h.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a=i.indexOf(p.a),l=i.indexOf(p.b),c=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[c]},e=(h.a-p.a)*M.yaxis._m,t=(h.c-p.c-h.b+p.b)*M.xaxis._m);var f=s(M.x0+t,M.y0+e);M.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",f);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(u.hideOutsideRangePoints,M),C.emit(\"plotly_relayouting\",R(p))}function H(){a.call(\"_guiRelayout\",C,R(p))}this.dragOptions={element:S,gd:C,plotinfo:{id:M.id,domain:C._fullLayout[M.id].domain,xaxis:M.xaxis,yaxis:M.yaxis},subplot:M.id,prepFn:function(a,l,u){M.dragOptions.xaxes=[M.xaxis],M.dragOptions.yaxes=[M.yaxis],t=C._fullLayout._invScaleX,e=C._fullLayout._invScaleY;var m=M.dragOptions.dragmode=C._fullLayout.dragmode;v(m)?M.dragOptions.minDrag=1:M.dragOptions.minDrag=void 0,\"zoom\"===m?(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,C._fullLayout._calcInverseTransform(C);var u=C._fullLayout._invTransform,m=o.apply3DTransform(u)(r,n);r=m[0],n=m[1],h={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=h,f=M.aaxis.range[1]-h.a,d=i(M.graphDiv._fullLayout[M.id].bgcolor).getLuminance(),y=\"M0,\"+M.h+\"L\"+M.w/2+\", 0L\"+M.w+\",\"+M.h+\"Z\",_=!1,T=D.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=D.append(\"path\").attr(\"class\",\"zoombox-corners\").attr(\"transform\",s(M.x0,M.y0)).style({fill:c.background,stroke:c.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"d\",\"M0,0Z\"),M.clearOutline(C)}(0,l,u)):\"pan\"===m?(M.dragOptions.moveFn=q,M.dragOptions.clickFn=F,M.dragOptions.doneFn=H,h={a:M.aaxis.range[0],b:M.baxis.range[1],c:M.caxis.range[1]},p=h,M.clearOutline(C)):(x(m)||v(m))&&b(a,l,u,M.dragOptions,m)}},S.onmousemove=function(t){g.hover(C,t,M.id),C._fullLayout._lasthover=S,C._fullLayout._hoversubplot=M.id},S.onmouseout=function(t){C._dragging||m.unhover(C,t)},m.init(this.dragOptions)}},33626:function(t,e,r){\"use strict\";var n=r(48636),i=r(4969),a=r(36539),o=r(56174),s=r(95425).addStyleRule,l=r(93049),c=r(9829),u=r(6704),h=l.extendFlat,f=l.extendDeepAll;function p(t){var i=t.name,a=t.categories,o=t.meta;if(e.modules[i])n.log(\"Type \"+i+\" 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)_(i,t.name)}(t.basePlotModule);for(var l={},c=0;c-1&&(h[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(u,\"'\"),i.isIE()&&(w=(w=(w=w.replace(/\"/gi,\"'\")).replace(/(\\('#)([^']*)('\\))/gi,'(\"#$2\")')).replace(/(\\\\')/gi,'\"')),w}},35374:function(t,e,r){\"use strict\";var n=r(34809);t.exports=function(t,e){for(var r=0;rh+c||!n(u))}for(var p=0;p=0)return t}else if(\"string\"==typeof t&&\"%\"===(t=t.trim()).slice(-1)&&n(t.slice(0,-1))&&(t=+t.slice(0,-1))>=0)return t+\"%\"}function d(t,e,r,n,a,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),c=!(!1===o.moduleHasConstrain),u=!(!1===o.moduleHasCliponaxis),h=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,m=Array.isArray(a)||\"auto\"===a,g=m||\"inside\"===a,y=m||\"outside\"===a;if(g||y){var v=f(n,\"textfont\",r.font),x=i.extendFlat({},v),_=!(t.textfont&&t.textfont.color);if(_&&delete x.color,f(n,\"insidetextfont\",x),d){var b=i.extendFlat({},v);_&&delete b.color,f(n,\"pathbar.textfont\",b)}y&&f(n,\"outsidetextfont\",v),s&&n(\"selected.textfont.color\"),l&&n(\"unselected.textfont.color\"),c&&n(\"constraintext\"),u&&n(\"cliponaxis\"),h&&n(\"textangle\"),n(\"texttemplate\")}g&&p&&n(\"insidetextanchor\")}t.exports={supplyDefaults:function(t,e,r,n){function u(r,n){return i.coerce(t,e,h,r,n)}if(s(t,e,n,u)){l(t,e,n,u),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"zorder\"),u(\"orientation\",e.x&&!e.y?\"h\":\"v\"),u(\"base\"),u(\"offset\"),u(\"width\"),u(\"text\"),u(\"hovertext\"),u(\"hovertemplate\");var f=u(\"textposition\");d(t,0,n,u,f,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),c(t,e,u,r,n);var p=(e.marker.line||{}).color,m=o.getComponentMethod(\"errorbars\",\"supplyDefaults\");m(t,e,p||a.defaultLine,{axis:\"y\"}),m(t,e,p||a.defaultLine,{axis:\"x\",inherit:\"y\"}),i.coerceSelectionMarkerOpacity(e,u)}else e.visible=!1},crossTraceDefaults:function(t,e){var r,n;function a(t,e){return i.coerce(n._input,n,h,t,e)}for(var o=0;oa))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 a(t)?e0?e+=r:u<0&&(e-=r)}return e}function O(t){var e=u,r=t.b,i=z(t);return n.inbox(r-e,i-e,b+(i-e)/(i-r)-1)}var D=t[h+\"a\"],R=t[f+\"a\"];m=Math.abs(D.r2c(D.range[1])-D.r2c(D.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!==c){k||(C=function(t){return Math.min(A(t),t.p-v.bargroupwidth/2)},L=function(t){return Math.max(M(t),t.p+v.bargroupwidth/2)});var B=g[t.index],N=y.base?B.b+B.s:B.s;t[f+\"0\"]=t[f+\"1\"]=R.c2p(B[f],!0),t[f+\"LabelVal\"]=N;var j=v.extents[v.extents.round(B.p)];t[h+\"0\"]=D.c2p(x?C(B):j[0],!0),t[h+\"1\"]=D.c2p(x?L(B):j[1],!0);var U=void 0!==B.orig_p;return t[h+\"LabelVal\"]=U?B.orig_p:B.p,t.labelLabel=l(D,t[h+\"LabelVal\"],y[h+\"hoverformat\"]),t.valueLabel=l(R,t[f+\"LabelVal\"],y[f+\"hoverformat\"]),t.baseLabel=l(R,B.b,y[f+\"hoverformat\"]),t.spikeDistance=(function(t){var e=u,r=t.b,i=z(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(B)+function(t){return I(A(t),M(t),w)}(B))/2,t[h+\"Spike\"]=D.c2p(B.p,!0),o(B,y,t),t.hovertemplate=y.hovertemplate,t}}function h(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=u(t,e,r,n,a);if(o){var s=o.cd,l=s[0].trace,c=s[o.index];return o.color=h(l,c),i.getComponentMethod(\"errorbars\",\"hoverInfo\")(c,l,o),[o]}},hoverOnBars:u,getTraceColor:h}},58218:function(t,e,r){\"use strict\";t.exports={attributes:r(81481),layoutAttributes:r(25412),supplyDefaults:r(17550).supplyDefaults,crossTraceDefaults:r(17550).crossTraceDefaults,supplyLayoutDefaults:r(78931),calc:r(67565),crossTraceCalc:r(24782).crossTraceCalc,colorbar:r(21146),arraysToCalcdata:r(35374),plot:r(32995).plot,style:r(6851).style,styleOnSelect:r(6851).styleOnSelect,hoverPoints:r(91664).hoverPoints,eventData:r(59541),selectPoints:r(88384),moduleType:\"trace\",name:\"bar\",basePlotModule:r(37703),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"oriented\",\"errorBarsOK\",\"showLegend\",\"zoomScale\"],animatable:!0,meta:{}}},25412: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\"},barcornerradius:{valType:\"any\",editType:\"calc\"}}},78931:function(t,e,r){\"use strict\";var n=r(33626),i=r(29714),a=r(34809),o=r(25412),s=r(17550).validateCornerradius;t.exports=function(t,e,r){function l(r,n){return a.coerce(t,e,o,r,n)}for(var c=!1,u=!1,h=!1,f={},p=l(\"barmode\"),d=0;d0)-(t<0)}function A(t,e){return t0}function E(t,e,r,n,i){return!(t<0||e<0)&&(r<=t&&n<=e||r<=e&&n<=t||(i?t>=r*(e/n):e>=n*(t/r)))}function C(t){return\"auto\"===t?0:t}function L(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 I(t,e,r,n,i,a){var o=!!a.isHorizontal,s=!!a.constrained,l=a.angle||0,c=a.anchor,u=\"end\"===c,h=\"start\"===c,f=((a.leftToRight||0)+1)/2,p=1-f,d=a.hasB,m=a.r,g=a.overhead,y=i.width,v=i.height,x=Math.abs(e-t),_=Math.abs(n-r),w=x>2*b&&_>2*b?b:0;x-=2*w,_-=2*w;var T=C(l);\"auto\"!==l||y<=x&&v<=_||!(y>x||v>_)||(y>_||v>x)&&yb){var E=function(t,e,r,n,i,a,o,s,l){var c,u,h,f,p=Math.max(0,Math.abs(e-t)-2*b),d=Math.max(0,Math.abs(n-r)-2*b),m=a-b,g=o?m-Math.sqrt(m*m-(m-o)*(m-o)):m,y=l?2*m:s?m-o:2*g,v=l?2*m:s?2*g:m-o;return i.y/i.x>=d/(p-y)?f=d/i.y:i.y/i.x<=(d-v)/p?f=p/i.x:!l&&s?(c=i.x*i.x+i.y*i.y/4,h=(p-m)*(p-m)+(d/2-m)*(d/2-m)-m*m,f=(-(u=-2*i.x*(p-m)-i.y*(d/2-m))+Math.sqrt(u*u-4*c*h))/(2*c)):l?(c=(i.x*i.x+i.y*i.y)/4,h=(p/2-m)*(p/2-m)+(d/2-m)*(d/2-m)-m*m,f=(-(u=-i.x*(p/2-m)-i.y*(d/2-m))+Math.sqrt(u*u-4*c*h))/(2*c)):(c=i.x*i.x/4+i.y*i.y,h=(p/2-m)*(p/2-m)+(d-m)*(d-m)-m*m,f=(-(u=-i.x*(p/2-m)-2*i.y*(d-m))+Math.sqrt(u*u-4*c*h))/(2*c)),{scale:f=Math.min(1,f),pad:s?Math.max(0,m-Math.sqrt(Math.max(0,m*m-(m-(d-i.y*f)/2)*(m-(d-i.y*f)/2)))-o):Math.max(0,m-Math.sqrt(Math.max(0,m*m-(m-(p-i.x*f)/2)*(m-(p-i.x*f)/2)))-o)}}(t,e,r,n,S,m,g,o,d);k=E.scale,M=E.pad}else k=1,s&&(k=Math.min(1,x/S.x,_/S.y)),M=0;var I=i.left*p+i.right*f,P=(i.top+i.bottom)/2,z=(t+b)*p+(e-b)*f,O=(r+n)/2,D=0,R=0;if(h||u){var F=(o?S.x:S.y)/2;m&&(u||d)&&(w+=M);var B=o?A(t,e):A(r,n);o?h?(z=t+B*w,D=-B*F):(z=e-B*w,D=B*F):h?(O=r+B*w,R=-B*F):(O=n-B*w,R=B*F)}return{textX:I,textY:P,targetX:z,targetY:O,anchorX:D,anchorY:R,scale:k,rotate:T}}t.exports={plot:function(t,e,r,h,g,y){var w=e.xaxis,P=e.yaxis,z=t._fullLayout,O=t._context.staticPlot;g||(g={mode:z.barmode,norm:z.barmode,gap:z.bargap,groupgap:z.bargroupgap},p(\"bar\",z));var D=a.makeTraceGroups(h,r,\"trace bars\").each((function(r){var c=n.select(this),h=r[0].trace,p=r[0].t,D=\"waterfall\"===h.type,R=\"funnel\"===h.type,F=\"histogram\"===h.type,B=\"bar\"===h.type,N=B||R,j=0;D&&h.connector.visible&&\"between\"===h.connector.mode&&(j=h.connector.line.width/2);var U=\"h\"===h.orientation,V=S(g),q=a.ensureSingle(c,\"g\",\"points\"),H=T(h),G=q.selectAll(\"g.point\").data(a.identity,H);G.enter().append(\"g\").classed(\"point\",!0),G.exit().remove(),G.each((function(c,T){var S,D,R=n.select(this),q=function(t,e,r,n){var i=[],a=[],o=n?e:r,s=n?r:e;return i[0]=o.c2p(t.s0,!0),a[0]=s.c2p(t.p0,!0),i[1]=o.c2p(t.s1,!0),a[1]=s.c2p(t.p1,!0),n?[i,a]:[a,i]}(c,w,P,U),H=q[0][0],G=q[0][1],Z=q[1][0],W=q[1][1],Y=0==(U?G-H:W-Z);if(Y&&N&&m.getLineWidth(h,c)&&(Y=!1),Y||(Y=!(i(H)&&i(G)&&i(Z)&&i(W))),c.isBlank=Y,Y&&(U?G=H:W=Z),j&&!Y&&(U?(H-=A(H,G)*j,G+=A(H,G)*j):(Z-=A(Z,W)*j,W+=A(Z,W)*j)),\"waterfall\"===h.type){if(!Y){var X=h[c.dir].marker;S=X.line.width,D=X.color}}else S=m.getLineWidth(h,c),D=c.mc||h.marker.color;function $(t){var e=n.round(S/2%1,2);return 0===g.gap&&0===g.groupgap?n.round(Math.round(t)-e,2):t}var J=s.opacity(D)<1||S>.01?$:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?$(t):t>e?Math.ceil(t):Math.floor(t)};t._context.staticPlot||(H=J(H,G,U),G=J(G,H,U),Z=J(Z,W,!U),W=J(W,Z,!U));var K,Q=U?w.c2p:P.c2p;K=c.s0>0?c._sMax:c.s0<0?c._sMin:c.s1>0?c._sMax:c._sMin;var tt,et,rt=B||F?function(t,e){if(!t)return 0;var r,n=U?Math.abs(W-Z):Math.abs(G-H),i=U?Math.abs(G-H):Math.abs(W-Z),a=J(Math.abs(Q(K,!0)-Q(0,!0))),o=c.hasB?Math.min(n/2,i/2):Math.min(n/2,a);return r=\"%\"===e?n*(Math.min(50,t)/100):t,J(Math.max(Math.min(r,o),0))}(p.cornerradiusvalue,p.cornerradiusform):0,nt=\"M\"+H+\",\"+Z+\"V\"+W+\"H\"+G+\"V\"+Z+\"Z\",it=0;if(rt&&c.s){var at=0===k(c.s0)||k(c.s)===k(c.s0)?c.s1:c.s0;if((it=J(c.hasB?0:Math.abs(Q(K,!0)-Q(at,!0))))0?Math.sqrt(it*(2*rt-it)):0,ht=ot>0?Math.max:Math.min;tt=\"M\"+H+\",\"+Z+\"V\"+(W-ct*st)+\"H\"+ht(G-(rt-it)*ot,H)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+G+\",\"+(W-rt*st-ut)+\"V\"+(Z+rt*st+ut)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+ht(G-(rt-it)*ot,H)+\",\"+(Z+ct*st)+\"Z\"}else if(c.hasB)tt=\"M\"+(H+rt*ot)+\",\"+Z+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+H+\",\"+(Z+rt*st)+\"V\"+(W-rt*st)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+(H+rt*ot)+\",\"+W+\"H\"+(G-rt*ot)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+G+\",\"+(W-rt*st)+\"V\"+(Z+rt*st)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+(G-rt*ot)+\",\"+Z+\"Z\";else{var ft=(et=Math.abs(W-Z)+it)0?Math.sqrt(it*(2*rt-it)):0,dt=st>0?Math.max:Math.min;tt=\"M\"+(H+ft*ot)+\",\"+Z+\"V\"+dt(W-(rt-it)*st,Z)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+(H+rt*ot-pt)+\",\"+W+\"H\"+(G-rt*ot+pt)+\"A \"+rt+\",\"+rt+\" 0 0 \"+lt+\" \"+(G-ft*ot)+\",\"+dt(W-(rt-it)*st,Z)+\"V\"+Z+\"Z\"}}else tt=nt}else tt=nt;var mt=M(a.ensureSingle(R,\"path\"),z,g,y);if(mt.style(\"vector-effect\",O?\"none\":\"non-scaling-stroke\").attr(\"d\",isNaN((G-H)*(W-Z))||Y&&t._context.staticPlot?\"M0,0Z\":tt).call(l.setClipUrl,e.layerClipId,t),!z.uniformtext.mode&&V){var gt=l.makePointStyleFns(h);l.singlePointStyle(c,mt,h,gt,t)}!function(t,e,r,n,i,s,c,h,p,g,y,w,T){var k,S=e.xaxis,P=e.yaxis,z=t._fullLayout;function O(e,r,n){return a.ensureSingle(e,\"text\").text(r).attr({class:\"bartext bartext-\"+k,\"text-anchor\":\"middle\",\"data-notex\":1}).call(l.font,n).call(o.convertToTspans,t)}var D=n[0].trace,R=\"h\"===D.orientation,F=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,c,h,f,p=\"histogram\"===o.type,d=\"waterfall\"===o.type,m=\"funnel\"===o.type,g=\"h\"===o.orientation;function y(t){return u(f,f.c2l(t),!0).text}g?(l=\"y\",c=i,h=\"x\",f=n):(l=\"x\",c=n,h=\"y\",f=i);var v,x=e[r],b={};b.label=x.p,b.labelLabel=b[l+\"Label\"]=(v=x.p,u(c,c.c2l(v),!0).text);var w=a.castOption(o,x.i,\"text\");(0===w||w)&&(b.text=w),b.value=x.s,b.valueLabel=b[h+\"Label\"]=y(x.s);var T={};_(T,o,x.i),(p||void 0===T.x)&&(T.x=g?b.value:b.label),(p||void 0===T.y)&&(T.y=g?b.label:b.value),(p||void 0===T.xLabel)&&(T.xLabel=g?b.valueLabel:b.labelLabel),(p||void 0===T.yLabel)&&(T.yLabel=g?b.labelLabel:b.valueLabel),d&&(b.delta=+x.rawS||x.s,b.deltaLabel=y(b.delta),b.final=x.v,b.finalLabel=y(b.final),b.initial=b.final-b.delta,b.initialLabel=y(b.initial)),m&&(b.value=x.s,b.valueLabel=y(b.value),b.percentInitial=x.begR,b.percentInitialLabel=a.formatPercent(x.begR),b.percentPrevious=x.difR,b.percentPreviousLabel=a.formatPercent(x.difR),b.percentTotal=x.sumR,b.percenTotalLabel=a.formatPercent(x.sumR));var k=a.castOption(o,x.i,\"customdata\");return k&&(b.customdata=k),a.texttemplateString(s,b,t._d3locale,T,b,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 c(t){return u(o?r:n,+t,!0).text}var h,f,p=i.textinfo,d=t[e],m=p.split(\"+\"),g=[],y=function(t){return-1!==m.indexOf(t)};if(y(\"label\")&&g.push((f=t[e].p,u(o?n:r,f,!0).text)),y(\"text\")&&(0===(h=a.castOption(i,d.i,\"text\"))||h)&&g.push(h),s){var v=+d.rawS||d.s,x=d.v,_=x-v;y(\"initial\")&&g.push(c(_)),y(\"delta\")&&g.push(c(v)),y(\"final\")&&g.push(c(x))}if(l){y(\"value\")&&g.push(c(d.s));var b=0;y(\"percent initial\")&&b++,y(\"percent previous\")&&b++,y(\"percent total\")&&b++;var w=b>1;y(\"percent initial\")&&(h=a.formatPercent(d.begR),w&&(h+=\" of initial\"),g.push(h)),y(\"percent previous\")&&(h=a.formatPercent(d.difR),w&&(h+=\" of previous\"),g.push(h)),y(\"percent total\")&&(h=a.formatPercent(d.sumR),w&&(h+=\" of total\"),g.push(h))}return g.join(\" \")}(e,r,n,i):m.getValue(s.text,r),m.coerceString(v,o)}(z,n,i,S,P);k=function(t,e){var r=m.getValue(t.textposition,e);return m.coerceEnumerated(x,r)}(D,i);var B=\"stack\"===w.mode||\"relative\"===w.mode,N=n[i],j=!B||N._outmost,U=N.hasB,V=g&&g-y>b;if(F&&\"none\"!==k&&(!N.isBlank&&s!==c&&h!==p||\"auto\"!==k&&\"inside\"!==k)){var q=z.font,H=d.getBarColor(n[i],D),G=d.getInsideTextFont(D,i,q,H),Z=d.getOutsideTextFont(D,i,q),W=D.insidetextanchor||\"end\",Y=r.datum();R?\"log\"===S.type&&Y.s0<=0&&(s=S.range[0]0&&K>0;it=V?U?E(rt-2*g,nt,J,K,R)||E(rt,nt-2*g,J,K,R):R?E(rt-(g-y),nt,J,K,R)||E(rt,nt-2*(g-y),J,K,R):E(rt,nt-(g-y),J,K,R)||E(rt-2*(g-y),nt,J,K,R):E(rt,nt,J,K,R),at&&it?k=\"inside\":(k=\"outside\",X.remove(),X=null)}else k=\"inside\";if(!X){var ot=(X=O(r,F,Q=a.ensureUniformFontSize(t,\"outside\"===k?Z:G))).attr(\"transform\");if(X.attr(\"transform\",\"\"),J=($=l.bBox(X.node())).width,K=$.height,X.attr(\"transform\",ot),J<=0||K<=0)return void X.remove()}var st,lt=D.textangle;st=\"outside\"===k?function(t,e,r,n,i,a){var o,s=!!a.isHorizontal,l=!!a.constrained,c=a.angle||0,u=i.width,h=i.height,f=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*b?b:0:f>2*b?b:0;var d=1;l&&(d=s?Math.min(1,p/h):Math.min(1,f/u));var m=C(c),g=L(i,m),y=(s?g.x:g.y)/2,v=(i.left+i.right)/2,x=(i.top+i.bottom)/2,_=(t+e)/2,w=(r+n)/2,T=0,k=0,M=s?A(e,t):A(r,n);return s?(_=e-M*o,T=M*y):(w=n+M*o,k=-M*y),{textX:v,textY:x,targetX:_,targetY:w,anchorX:T,anchorY:k,scale:d,rotate:m}}(s,c,h,p,$,{isHorizontal:R,constrained:\"both\"===D.constraintext||\"outside\"===D.constraintext,angle:lt}):I(s,c,h,p,$,{isHorizontal:R,constrained:\"both\"===D.constraintext||\"inside\"===D.constraintext,angle:lt,anchor:W,hasB:U,r:g,overhead:y}),st.fontSize=Q.size,f(\"histogram\"===D.type?\"bar\":D.type,st,z),N.transform=st;var ct=M(X,z,w,T);a.setTransormAndDisplay(ct,st)}else r.select(\"text\").remove()}(t,e,R,r,T,H,G,Z,W,rt,it,g,y),e.layerClipId&&l.hideOutsideRangePoint(c,R.select(\"text\"),w,P,h.xcalendar,h.ycalendar)}));var Z=!1===h.cliponaxis;l.setClipUrl(c,Z?null:e.layerClipId,t)}));c.getComponentMethod(\"errorbars\",\"plot\")(t,D,e,g)},toMoveInsideBar:I}},88384: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,c=\"h\"===s.orientation,u=[];if(!1===r)for(n=0;n1||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:m,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:v,getOutsideTextFont:x,getBarColor:b,resizeText:l}},59760:function(t,e,r){\"use strict\";var n=r(78766),i=r(65477).hasColorscale,a=r(39356),o=r(34809).coercePattern;t.exports=function(t,e,r,s,l){var c=r(\"marker.color\",s),u=i(t,\"marker\");u&&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\",c,u),r(\"selected.marker.color\"),r(\"unselected.marker.color\")}},84102:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809);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)}}))}}}},32225:function(t,e,r){\"use strict\";var n,i=r(3208).rb,a=r(93049).extendFlat,o=r(8738),s=r(81481);t.exports={r:o.r,theta:o.theta,r0:o.r0,dr:o.dr,theta0:o.theta0,dtheta:o.dtheta,thetaunit:o.thetaunit,base:a({},s.base,{}),offset:a({},s.offset,{}),width:a({},s.width,{}),text:a({},s.text,{}),hovertext:a({},s.hovertext,{}),marker:(n=a({},s.marker),delete n.cornerradius,n),hoverinfo:o.hoverinfo,hovertemplate:i(),selected:s.selected,unselected:s.unselected}},27941:function(t,e,r){\"use strict\";var n=r(65477).hasColorscale,i=r(28379),a=r(34809).isArrayOrTypedArray,o=r(35374),s=r(24782).setGroupPositions,l=r(48861),c=r(33626).traceIs,u=r(34809).extendFlat;t.exports={calc:function(t,e){for(var r=t._fullLayout,s=e.subplot,c=r[s].radialaxis,u=r[s].angularaxis,h=c.makeCalcdata(e,\"r\"),f=u.makeCalcdata(e,\"theta\"),p=e._length,d=new Array(p),m=h,g=f,y=0;y f.range[1]&&(x+=Math.PI),n.getClosest(c,(function(t){return m(v,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/y)-1+(t.rp1-v)/(t.rp1-t.rp0)-1:1/0}),t),!1!==t.index){var _=c[t.index];t.x0=t.x1=_.ct[0],t.y0=t.y1=_.ct[1];var b=i.extendFlat({},_,{r:_.s,theta:_.p});return o(_,u,t),s(b,u,h,t),t.hovertemplate=u.hovertemplate,t.color=a(u,_),t.xLabelVal=t.yLabelVal=void 0,_.s<0&&(t.idealAlign=\"left\"),[t]}}},89362:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"barpolar\",basePlotModule:r(31645),categories:[\"polar\",\"bar\",\"showLegend\"],attributes:r(32225),layoutAttributes:r(42956),supplyDefaults:r(77318),supplyLayoutDefaults:r(60507),calc:r(27941).calc,crossTraceCalc:r(27941).crossTraceCalc,plot:r(11627),colorbar:r(21146),formatLabels:r(33368),style:r(6851).style,styleOnSelect:r(6851).styleOnSelect,hoverPoints:r(83080),selectPoints:r(88384),meta:{}}},42956: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\"}}},60507:function(t,e,r){\"use strict\";var n=r(34809),i=r(42956);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;l0?(c=o,u=l):(c=l,u=o);var h=[s.findEnclosingVertexAngles(c,t.vangles)[0],(c+u)/2,s.findEnclosingVertexAngles(u,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,c,u,h,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=h.c2p(t.s0),s=t.rp1=h.c2p(t.s1),l=t.thetag0=f.c2g(t.p0),d=t.thetag1=f.c2g(t.p1);if(i(o)&&i(s)&&i(l)&&i(d)&&o!==s&&l!==d){var m=h.c2g(t.s1),g=(l+d)/2;t.ct=[c.c2p(m*Math.cos(g)),u.c2p(m*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)}))}},64625:function(t,e,r){\"use strict\";var n=r(19326),i=r(36640),a=r(81481),o=r(10229),s=r(80712).axisHoverFormat,l=r(3208).rb,c=r(93049).extendFlat,u=i.marker,h=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:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s(\"x\"),yhoverformat:s(\"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:c({},u.symbol,{arrayOk:!1,editType:\"plot\"}),opacity:c({},u.opacity,{arrayOk:!1,dflt:1,editType:\"style\"}),angle:c({},u.angle,{arrayOk:!1,editType:\"calc\"}),size:c({},u.size,{arrayOk:!1,editType:\"calc\"}),color:c({},u.color,{arrayOk:!1,editType:\"style\"}),line:{color:c({},h.color,{arrayOk:!1,dflt:o.defaultLine,editType:\"style\"}),width:c({},h.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(),whiskerwidth:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"calc\"},showwhiskers:{valType:\"boolean\",editType:\"calc\"},offsetgroup:a.offsetgroup,alignmentgroup:a.alignmentgroup,selected:{marker:i.selected.marker,editType:\"style\"},unselected:{marker:i.unselected.marker,editType:\"style\"},text:c({},i.text,{}),hovertext:c({},i.hovertext,{}),hovertemplate:l({}),hoveron:{valType:\"flaglist\",flags:[\"boxes\",\"points\"],dflt:\"boxes+points\",editType:\"style\"},zorder:i.zorder}},89429:function(t,e,r){\"use strict\";var n=r(10721),i=r(29714),a=r(40528),o=r(34809),s=r(63821).BADNUM,l=o._;t.exports=function(t,e){var r,c,v,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?(v=k,x=\"x\",_=A,b=\"y\",w=!!e.yperiodalignment):(v=A,x=\"y\",_=k,b=\"x\",w=!!e.xperiodalignment);var E,C,L,I,P,z,O=function(t,e,r,i){var s,l=e+\"0\"in t;if(e in t||l&&\"d\"+e in t){var c=r.makeCalcdata(t,e);return[a(t,r,e,c).vals,c]}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 u=\"multicategory\"===r.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+\"calendar\"]),h=t._length,f=new Array(h),p=0;pE.uf};if(e._hasPreCompStats){var U=e[x],V=function(t){return v.d2c((e[t]||[])[r])},q=1/0,H=-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,L,I);var W=V(\"upperfence\");E.uf=W!==s&&W>=E.q3?W:d(E,L,I);var Y=V(\"mean\");E.mean=Y!==s?Y:I?o.mean(L,I):(E.q1+E.q3)/2;var X=V(\"sd\");E.sd=Y!==s&&X>=0?X:I?o.stdev(L,I,E.mean):E.q3-E.q1,E.lo=m(E),E.uo=g(E);var $=V(\"notchspan\");$=$!==s&&$>0?$:y(E,I),E.ln=E.med-$,E.un=E.med+$;var J=E.lf,K=E.uf;e.boxpoints&&L.length&&(J=Math.min(J,L[0]),K=Math.max(K,L[I-1])),e.notched&&(J=Math.min(J,E.ln),K=Math.max(K,E.un)),E.min=J,E.max=K}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}q=Math.min(q,E.min),H=Math.max(H,E.max),E.pts2=C.filter(j),M.push(E)}}e._extremes[v._id]=i.findExtremes(v,[q,H],{padded:!0})}else{var tt=v.makeCalcdata(e,x),et=function(t,e){for(var r=t.length,n=new Array(r+1),i=0;i=0&&it0){var ut,ht;(E={}).pos=E[b]=B[r],C=E.pts=nt[r].sort(h),I=(L=E[x]=C.map(f)).length,E.min=L[0],E.max=L[I-1],E.mean=o.mean(L,I),E.sd=o.stdev(L,I,E.mean)*e.sdmultiple,E.med=o.interp(L,.5),I%2&&(lt||ct)?(lt?(ut=L.slice(0,I/2),ht=L.slice(I/2+1)):ct&&(ut=L.slice(0,I/2+1),ht=L.slice(I/2)),E.q1=o.interp(ut,.5),E.q3=o.interp(ht,.5)):(E.q1=o.interp(L,.25),E.q3=o.interp(L,.75)),E.lf=p(E,L,I),E.uf=d(E,L,I),E.lo=m(E),E.uo=g(E);var ft=y(E,I);E.ln=E.med-ft,E.un=E.med+ft,at=Math.min(at,E.ln),ot=Math.max(ot,E.un),E.pts2=C.filter(j),M.push(E)}e.notched&&o.isTypedArray(tt)&&(tt=Array.from(tt)),e._extremes[v._id]=i.findExtremes(v,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r0?(M[0].t={num:T[S],dPos:N,posLetter:b,valLetter:x,labels:{med:l(t,\"median:\"),min:l(t,\"min:\"),q1:l(t,\"q1:\"),q3:l(t,\"q3:\"),max:l(t,\"max:\"),mean:\"sd\"===e.boxmean||\"sd\"===e.sizemode?l(t,\"mean ± σ:\").replace(\"σ\",1===e.sdmultiple?\"σ\":e.sdmultiple+\"σ\"):l(t,\"mean:\"),lf:l(t,\"lower fence:\"),uf:l(t,\"upper fence:\")}},T[S]++,M):[{t:{empty:!0}}]};var c={text:\"tx\",hovertext:\"htx\"};function u(t,e,r){for(var n in c)o.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?o.isArrayOrTypedArray(e[n][r[0]])&&(t[c[n]]=e[n][r[0]][r[1]]):t[c[n]]=e[n][r])}function h(t,e){return t.v-e.v}function f(t){return t.v}function p(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function d(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function m(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function y(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},81606:function(t,e,r){\"use strict\";var n=r(29714),i=r(34809),a=r(84391).getAxisGroup,o=[\"v\",\"h\"];function s(t,e,r,o){var s,l,c,u=e.calcdata,h=e._fullLayout,f=o._id,p=f.charAt(0),d=[],m=0;for(s=0;s1,_=1-h[t+\"gap\"],b=1-h[t+\"groupgap\"];for(s=0;s0){var H=E.pointpos,G=E.jitter,Z=E.marker.size/2,W=0;H+G>=0&&((W=V*(H+G))>M?(q=!0,j=Z,B=W):W>R&&(j=Z,B=M)),W<=M&&(B=M);var Y=0;H-G<=0&&((Y=-V*(H-G))>S?(q=!0,U=Z,N=Y):Y>F&&(U=Z,N=S)),Y<=S&&(N=S)}else B=M,N=S;var X=new Array(c.length);for(l=0;l0?(g=\"v\",y=x>0?Math.min(b,_):Math.min(_)):x>0?(g=\"h\",y=Math.min(b)):y=0;if(y){e._length=y;var S=r(\"orientation\",g);e._hasPreCompStats?\"v\"===S&&0===x?(r(\"x0\",0),r(\"dx\",1)):\"h\"===S&&0===v&&(r(\"y0\",0),r(\"dy\",1)):\"v\"===S&&0===x?r(\"x0\"):\"h\"===S&&0===v&&r(\"y0\"),i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a)}else e.visible=!1}function h(t,e,r,i){var a=i.prefix,o=n.coerce2(t,e,c,\"marker.outliercolor\"),s=r(\"marker.line.outliercolor\"),l=\"outliers\";e._hasPreCompStats?l=\"all\":(o||s)&&(l=\"suspectedoutliers\");var u=r(a+\"points\",l);u?(r(\"jitter\",\"all\"===u?.3:0),r(\"pointpos\",\"all\"===u?-1.5:0),r(\"marker.symbol\"),r(\"marker.opacity\"),r(\"marker.size\"),r(\"marker.angle\"),r(\"marker.color\",e.line.color),r(\"marker.line.color\"),r(\"marker.line.width\"),\"suspectedoutliers\"===u&&(r(\"marker.line.outliercolor\",e.marker.color),r(\"marker.line.outlierwidth\")),r(\"selected.marker.color\"),r(\"unselected.marker.color\"),r(\"selected.marker.size\"),r(\"unselected.marker.size\"),r(\"text\"),r(\"hovertext\")):delete e.marker;var h=r(\"hoveron\");\"all\"!==h&&-1===h.indexOf(\"points\")||r(\"hovertemplate\"),n.coerceSelectionMarkerOpacity(e,r)}t.exports={supplyDefaults:function(t,e,r,i){function s(r,i){return n.coerce(t,e,c,r,i)}if(u(t,e,s,i),!1!==e.visible){o(t,e,i,s),s(\"xhoverformat\"),s(\"yhoverformat\");var l=e._hasPreCompStats;l&&(s(\"lowerfence\"),s(\"upperfence\")),s(\"line.color\",(t.marker||{}).color||r),s(\"line.width\"),s(\"fillcolor\",a.addOpacity(e.line.color,.5));var f=!1;if(l){var p=s(\"mean\"),d=s(\"sd\");p&&p.length&&(f=!0,d&&d.length&&(f=\"sd\"))}s(\"whiskerwidth\");var m,g=s(\"sizemode\");\"quartiles\"===g&&(m=s(\"boxmean\",f)),s(\"showwhiskers\",\"quartiles\"===g),\"sd\"!==g&&\"sd\"!==m||s(\"sdmultiple\"),s(\"width\"),s(\"quartilemethod\");var y=!1;if(l){var v=s(\"notchspan\");v&&v.length&&(y=!0)}else n.validate(t.notchwidth,c.notchwidth)&&(y=!0);s(\"notched\",y)&&s(\"notchwidth\"),h(t,e,s,{prefix:\"box\"}),s(\"zorder\")}},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,c,t)}for(var o=0;ot.lo&&(x.so=!0)}return a}));f.enter().append(\"path\").classed(\"point\",!0),f.exit().remove(),f.call(a.translatePoints,o,s)}function l(t,e,r,a){var o,s,l=e.val,c=e.pos,u=!!c.rangebreaks,h=a.bPos,f=a.bPosPxOffset||0,p=r.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o=a.bdPos[0],s=a.bdPos[1]):(o=a.bdPos,s=a.bdPos);var d=t.selectAll(\"path.mean\").data(\"box\"===r.type&&r.boxmean||\"violin\"===r.type&&r.box.visible&&r.meanline.visible?i.identity:[]);d.enter().append(\"path\").attr(\"class\",\"mean\").style({fill:\"none\",\"vector-effect\":\"non-scaling-stroke\"}),d.exit().remove(),d.each((function(t){var e=c.c2l(t.pos+h,!0),i=c.l2p(e-o)+f,a=c.l2p(e+s)+f,d=u?(i+a)/2:c.l2p(e)+f,m=l.c2p(t.mean,!0),g=l.c2p(t.mean-t.sd,!0),y=l.c2p(t.mean+t.sd,!0);\"h\"===r.orientation?n.select(this).attr(\"d\",\"M\"+m+\",\"+i+\"V\"+a+(\"sd\"===p?\"m0,0L\"+g+\",\"+d+\"L\"+m+\",\"+i+\"L\"+y+\",\"+d+\"Z\":\"\")):n.select(this).attr(\"d\",\"M\"+i+\",\"+m+\"H\"+a+(\"sd\"===p?\"m0,0L\"+d+\",\"+g+\"L\"+i+\",\"+m+\"L\"+d+\",\"+y+\"Z\":\"\"))}))}t.exports={plot:function(t,e,r,a){var c=t._context.staticPlot,u=e.xaxis,h=e.yaxis;i.makeTraceGroups(a,r,\"trace boxes\").each((function(t){var e,r,i=n.select(this),a=t[0],f=a.t,p=a.trace;f.wdPos=f.bdPos*p.whiskerwidth,!0!==p.visible||f.empty?i.remove():(\"h\"===p.orientation?(e=h,r=u):(e=u,r=h),o(i,{pos:e,val:r},p,f,c),s(i,{x:u,y:h},p,f),l(i,{pos:e,val:r},p,f))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},72488:function(t){\"use strict\";t.exports=function(t,e){var r,n,i=t.cd,a=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r=10)return null;for(var r=1/0,a=-1/0,o=t.length,s=0;s0?Math.floor:Math.ceil,P=C>0?Math.ceil:Math.floor,z=C>0?Math.min:Math.max,O=C>0?Math.max:Math.min,D=I(S+L),R=P(E-L),F=[[h=M(S)]];for(a=D;a*C=0;i--)a[u-i]=t[h][i],o[u-i]=e[h][i];for(s.push({x:a,y:o,bicubic:l}),i=h,a=[],o=[];i>=0;i--)a[h-i]=t[i][0],o[h-i]=e[i][0];return s.push({x:a,y:o,bicubic:c}),s}},4753:function(t,e,r){\"use strict\";var n=r(29714),i=r(93049).extendFlat;t.exports=function(t,e,r){var a,o,s,l,c,u,h,f,p,d,m,g,y,v,x=t[\"_\"+e],_=t[e+\"axis\"],b=_._gridlines=[],w=_._minorgridlines=[],T=_._boundarylines=[],k=t[\"_\"+r],A=t[r+\"axis\"];\"array\"===_.tickmode&&(_.tickvals=x.slice());var M=t._xctrl,S=t._yctrl,E=M[0].length,C=M.length,L=t._a.length,I=t._b.length;n.prepTicks(_),\"array\"===_.tickmode&&delete _.tickvals;var P=_.smoothing?3:1;function z(n){var i,a,o,s,l,c,u,h,p,d,m,g,y=[],v=[],x={};if(\"b\"===e)for(a=t.b2j(n),o=Math.floor(Math.max(0,Math.min(I-2,a))),s=a-o,x.length=I,x.crossLength=L,x.xy=function(e){return t.evalxy([],e,a)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},i=0;i0&&(p=t.dxydi([],i-1,o,0,s),y.push(l[0]+p[0]/3),v.push(l[1]+p[1]/3),d=t.dxydi([],i-1,o,1,s),y.push(h[0]-d[0]/3),v.push(h[1]-d[1]/3)),y.push(h[0]),v.push(h[1]),l=h;else for(i=t.a2i(n),c=Math.floor(Math.max(0,Math.min(L-2,i))),u=i-c,x.length=L,x.crossLength=I,x.xy=function(e){return t.evalxy([],i,e)},x.dxy=function(e,r){return t.dxydj([],c,e,u,r)},a=0;a0&&(m=t.dxydj([],c,a-1,u,0),y.push(l[0]+m[0]/3),v.push(l[1]+m[1]/3),g=t.dxydj([],c,a-1,u,1),y.push(h[0]-g[0]/3),v.push(h[1]-g[1]/3)),y.push(h[0]),v.push(h[1]),l=h;return x.axisLetter=e,x.axis=_,x.crossAxis=A,x.value=n,x.constvar=r,x.index=f,x.x=y,x.y=v,x.smoothing=A.smoothing,x}function O(n){var i,a,o,s,l,c=[],u=[],h={};if(h.length=x.length,h.crossLength=k.length,\"b\"===e)for(o=Math.max(0,Math.min(I-2,n)),l=Math.min(1,Math.max(0,n-o)),h.xy=function(e){return t.evalxy([],e,n)},h.dxy=function(e,r){return t.dxydi([],e,o,r,l)},i=0;ix.length-1||b.push(i(O(o),{color:_.gridcolor,width:_.gridwidth,dash:_.griddash}));for(f=u;fx.length-1||m<0||m>x.length-1))for(g=x[s],y=x[m],a=0;a<_.minorgridcount;a++)(v=m-s)<=0||(d=g+(y-g)*(a+1)/(_.minorgridcount+1)*(_.arraydtick/v))x[x.length-1]||w.push(i(z(d),{color:_.minorgridcolor,width:_.minorgridwidth,dash:_.minorgriddash}));_.startline&&T.push(i(O(0),{color:_.startlinecolor,width:_.startlinewidth})),_.endline&&T.push(i(O(x.length-1),{color:_.endlinecolor,width:_.endlinewidth}))}else{for(l=5e-15,u=(c=[Math.floor((x[x.length-1]-_.tick0)/_.dtick*(1+l)),Math.ceil((x[0]-_.tick0)/_.dtick/(1+l))].sort((function(t,e){return t-e})))[0],h=c[1],f=u;f<=h;f++)p=_.tick0+_.dtick*f,b.push(i(z(p),{color:_.gridcolor,width:_.gridwidth,dash:_.griddash}));for(f=u-1;fx[x.length-1]||w.push(i(z(d),{color:_.minorgridcolor,width:_.minorgridwidth,dash:_.minorgriddash}));_.startline&&T.push(i(z(x[0]),{color:_.startlinecolor,width:_.startlinewidth})),_.endline&&T.push(i(z(x[x.length-1]),{color:_.endlinecolor,width:_.endlinewidth}))}}},93923:function(t,e,r){\"use strict\";var n=r(29714),i=r(93049).extendFlat;t.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;re.length&&(t=t.slice(0,e.length)):t=[],i=0;i90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:c}}},87947:function(t,e,r){\"use strict\";var n=r(45568),i=r(62203),a=r(6720),o=r(3685),s=r(33163),l=r(30635),c=r(34809),u=c.strRotate,h=c.strTranslate,f=r(4530);function p(t,e,r,s,l,c,u){var h=\"const-\"+l+\"-lines\",f=r.selectAll(\".\"+h).data(c);f.enter().append(\"path\").classed(h,!0).style(\"vector-effect\",u?\"none\":\"non-scaling-stroke\"),f.each((function(r){var s=r,l=s.x,c=s.y,u=a([],l,t.c2p),h=a([],c,e.c2p),f=\"M\"+o(u,h,s.smoothing);n.select(this).attr(\"d\",f).style(\"stroke-width\",s.width).style(\"stroke\",s.color).style(\"stroke-dasharray\",i.dashStyle(s.dash,s.width)).style(\"fill\",\"none\")})),f.exit().remove()}function d(t,e,r,a,o,c,f,p){var d=c.selectAll(\"text.\"+p).data(f);d.enter().append(\"text\").classed(p,!0);var m=0,g={};return d.each((function(o,c){var f;if(\"auto\"===o.axis.tickangle)f=s(a,e,r,o.xy,o.dxy);else{var p=(o.axis.tickangle+180)*Math.PI/180;f=s(a,e,r,o.xy,[Math.cos(p),Math.sin(p)])}c||(g={angle:f.angle,flip:f.flip});var d=(o.endAnchor?-1:1)*f.flip,y=n.select(this).attr({\"text-anchor\":d>0?\"start\":\"end\",\"data-notex\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),v=i.bBox(this);y.attr(\"transform\",h(f.p[0],f.p[1])+u(f.angle)+h(o.axis.labelpadding*d,.3*v.height)),m=Math.max(m,v.width+o.axis.labelpadding)})),d.exit().remove(),g.maxExtent=m,g}t.exports=function(t,e,r,i){var l=t._context.staticPlot,u=e.xaxis,h=e.yaxis,f=t._fullLayout._clips;c.makeTraceGroups(i,r,\"trace\").each((function(e){var r=n.select(this),i=e[0],m=i.trace,g=m.aaxis,v=m.baxis,x=c.ensureSingle(r,\"g\",\"minorlayer\"),_=c.ensureSingle(r,\"g\",\"majorlayer\"),b=c.ensureSingle(r,\"g\",\"boundarylayer\"),w=c.ensureSingle(r,\"g\",\"labellayer\");r.style(\"opacity\",m.opacity),p(u,h,_,0,\"a\",g._gridlines,!0),p(u,h,_,0,\"b\",v._gridlines,!0),p(u,h,x,0,\"a\",g._minorgridlines,!0),p(u,h,x,0,\"b\",v._minorgridlines,!0),p(u,h,b,0,\"a-boundary\",g._boundarylines,l),p(u,h,b,0,\"b-boundary\",v._boundarylines,l);var T=d(t,u,h,m,0,w,g._labels,\"a-label\"),k=d(t,u,h,m,0,w,v._labels,\"b-label\");!function(t,e,r,n,i,a,o,l){var u,h,f,p,d=c.aggNums(Math.min,null,r.a),m=c.aggNums(Math.max,null,r.a),g=c.aggNums(Math.min,null,r.b),v=c.aggNums(Math.max,null,r.b);u=.5*(d+m),h=g,f=r.ab2xy(u,h,!0),p=r.dxyda_rough(u,h),void 0===o.angle&&c.extendFlat(o,s(r,i,a,f,r.dxydb_rough(u,h))),y(t,e,r,0,f,p,r.aaxis,i,a,o,\"a-title\"),u=d,h=.5*(g+v),f=r.ab2xy(u,h,!0),p=r.dxydb_rough(u,h),void 0===l.angle&&c.extendFlat(l,s(r,i,a,f,r.dxyda_rough(u,h))),y(t,e,r,0,f,p,r.baxis,i,a,l,\"b-title\")}(t,w,m,0,u,h,T,k),function(t,e,r,n,i){var s,l,u,h,f=r.select(\"#\"+t._clipPathId);f.size()||(f=r.append(\"clipPath\").classed(\"carpetclip\",!0));var p=c.ensureSingle(f,\"path\",\"carpetboundary\"),d=e.clipsegments,m=[];for(h=0;h90&&v<270,_=n.select(this);_.text(f.title.text).call(l.convertToTspans,t),x&&(b=(-l.lineCount(_)+g)*m*a-b),_.attr(\"transform\",h(e.p[0],e.p[1])+u(e.angle)+h(0,b)).attr(\"text-anchor\",\"middle\").call(i.font,f.title.font)})),_.exit().remove()}},76842:function(t,e,r){\"use strict\";var n=r(45923),i=r(98813).findBin,a=r(57075),o=r(13828),s=r(39848),l=r(41839);t.exports=function(t){var e=t._a,r=t._b,c=e.length,u=r.length,h=t.aaxis,f=t.baxis,p=e[0],d=e[c-1],m=r[0],g=r[u-1],y=e[e.length-1]-e[0],v=r[r.length-1]-r[0],x=y*n.RELATIVE_CULL_TOLERANCE,_=v*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,m-=_,g+=_,t.isVisible=function(t,e){return t>p&&tm&&ed||eg},t.setScale=function(){var e=t._x,r=t._y,n=a(t._xctrl,t._yctrl,e,r,h.smoothing,f.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],c,u,h.smoothing,f.smoothing),t.dxydi=s([t._xctrl,t._yctrl],h.smoothing,f.smoothing),t.dxydj=l([t._xctrl,t._yctrl],h.smoothing,f.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),c-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),c-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),c-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(c-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),u-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(u-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(ne[c-1]|ir[u-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var h,f,p,d,m=0,g=0,y=[];ne[c-1]?(h=c-2,f=1,m=(n-e[c-1])/(e[c-1]-e[c-2])):f=o-(h=Math.max(0,Math.min(c-2,Math.floor(o)))),ir[u-1]?(p=u-2,d=1,g=(i-r[u-1])/(r[u-1]-r[u-2])):d=s-(p=Math.max(0,Math.min(u-2,Math.floor(s)))),m&&(t.dxydi(y,h,p,f,d),l[0]+=y[0]*m,l[1]+=y[1]*m),g&&(t.dxydj(y,h,p,f,d),l[0]+=y[0]*g,l[1]+=y[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=v*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},13007:function(t,e,r){\"use strict\";var n=r(34809);t.exports=function(t,e,r){var i,a,o,s=[],l=[],c=t[0].length,u=t.length;function h(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r0&&a0&&i1e-5);return n.log(\"Smoother converged to\",k,\"after\",A,\"iterations\"),t}},10820:function(t,e,r){\"use strict\";var n=r(34809).isArray1D;t.exports=function(t,e,r){var i=r(\"x\"),a=i&&i.length,o=r(\"y\"),s=o&&o.length;if(!a&&!s)return!1;if(e._cheater=!i,a&&!n(i)||s&&!n(o))e._length=null;else{var l=a?i.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},92802:function(t,e,r){\"use strict\";var n=r(3208).rb,i=r(6893),a=r(87163),o=r(9829),s=r(10229).defaultLine,l=r(93049).extendFlat,c=i.marker.line;t.exports=l({locations:{valType:\"data_array\",editType:\"calc\"},locationmode:i.locationmode,z:{valType:\"data_array\",editType:\"calc\"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:\"calc\"},opacity:{valType:\"number\",arrayOk:!0,min:0,max:1,dflt:1,editType:\"style\"},editType:\"calc\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\"plot\"},editType:\"plot\"},hoverinfo:l({},o.hoverinfo,{editType:\"calc\",flags:[\"location\",\"z\",\"text\",\"name\"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},12702:function(t,e,r){\"use strict\";var n=r(10721),i=r(63821).BADNUM,a=r(28379),o=r(99203),s=r(48861);function l(t){return t&&\"string\"==typeof t}t.exports=function(t,e){var r,c=e._length,u=new Array(c);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var h=0;h\")}}(t,h,o),[t]}},58075:function(t,e,r){\"use strict\";t.exports={attributes:r(92802),supplyDefaults:r(51893),colorbar:r(12431),calc:r(12702),calcGeoJSON:r(4700).calcGeoJSON,plot:r(4700).plot,style:r(59342).style,styleOnSelect:r(59342).styleOnSelect,hoverPoints:r(94125),eventData:r(38414),selectPoints:r(43727),moduleType:\"trace\",name:\"choropleth\",basePlotModule:r(47544),categories:[\"geo\",\"noOpacity\",\"showLegend\"],meta:{}}},4700:function(t,e,r){\"use strict\";var n=r(45568),i=r(34809),a=r(3994),o=r(11577).getTopojsonFeatures,s=r(32919).findExtremes,l=r(59342).style;t.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],i=n._subplot,l=r.locationmode,c=r._length,u=\"geojson-id\"===l?a.extractTraceFeature(t):o(r,i.topojson),h=[],f=[],p=0;p=0;n--){var i=r[n].id;if(\"string\"==typeof i&&0===i.indexOf(\"water\"))for(var a=n+1;a=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(a,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},86227:function(t,e,r){\"use strict\";var n=r(92802),i=r(87163),a=r(3208).rb,o=r(9829),s=r(93049).extendFlat;t.exports=s({locations:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:s({},n.featureidkey,{}),below:{valType:\"string\",editType:\"plot\"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:\"plot\"}),width:s({},n.marker.line.width,{editType:\"plot\"}),editType:\"calc\"},opacity:s({},n.marker.opacity,{editType:\"plot\"}),editType:\"calc\"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:[\"properties\"]}),showlegend:s({},o.showlegend,{dflt:!1})},i(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},51335:function(t,e,r){\"use strict\";var n=r(10721),i=r(34809),a=r(88856),o=r(62203),s=r(39532).makeBlank,l=r(3994);function c(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var a=o.makeSelectedPointStyleFns(r),s=0;s=0;n--){var i=r[n].id;if(\"string\"==typeof i&&0===i.indexOf(\"water\"))for(var a=n+1;a=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new o(t,r.uid),a=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(a,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace=i,i}},49865:function(t,e,r){\"use strict\";var n=r(87163),i=r(80712).axisHoverFormat,a=r(3208).rb,o=r(42450),s=r(9829),l=r(93049).extendFlat,c={x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"scaled\",\"absolute\",\"raw\"],editType:\"calc\",dflt:\"scaled\"},sizeref:{valType:\"number\",editType:\"calc\",min:0},anchor:{valType:\"enumerated\",editType:\"calc\",values:[\"tip\",\"tail\",\"cm\",\"center\"],dflt:\"cm\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:a({editType:\"calc\"},{keys:[\"norm\"]}),uhoverformat:i(\"u\",1),vhoverformat:i(\"v\",1),whoverformat:i(\"w\",1),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),showlegend:l({},s.showlegend,{dflt:!1})};l(c,n(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"})),[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){c[t]=o[t]})),c.hoverinfo=l({},s.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),c.transforms=void 0,t.exports=c},93805:function(t,e,r){\"use strict\";var n=r(28379);t.exports=function(t,e){for(var r=e.u,i=e.v,a=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s=-1/0,l=1/0,c=0;co.level||o.starts.length&&a===o.level)}break;case\"constraint\":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,c=-1/0,u=1/0;for(r=0;r\":p>c&&(n.prefixBoundary=!0);break;case\"<\":(pc||n.starts.length&&f===u)&&(n.prefixBoundary=!0);break;case\"][\":h=Math.min(p[0],p[1]),f=Math.max(p[0],p[1]),hc&&(n.prefixBoundary=!0)}}}},92697:function(t,e,r){\"use strict\";var n=r(88856),i=r(16438),a=r(48715);t.exports={min:\"zmin\",max:\"zmax\",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,c=o.coloring,u=i(e,{isColorbar:!0});if(\"heatmap\"===c){var h=n.extractOpts(e);r._fillgradient=h.reversescale?n.flipScale(h.colorscale):h.colorscale,r._zrange=[h.min,h.max]}else\"fill\"===c&&(r._fillcolor=u);r._line={color:\"lines\"===c?u:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:a(o),size:l}}}},53156:function(t){\"use strict\";t.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},29503:function(t,e,r){\"use strict\";var n=r(10721),i=r(20576),a=r(78766),o=a.addOpacity,s=a.opacity,l=r(20726),c=r(34809).isArrayOrTypedArray,u=l.CONSTRAINT_REDUCTION,h=l.COMPARISON_OPS2;t.exports=function(t,e,r,a,l,f){var p,d,m,g=e.contours,y=r(\"contours.operation\");g._operation=u[y],function(t,e){var r;-1===h.indexOf(e.operation)?(t(\"contours.value\",[0,1]),c(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t(\"contours.value\",0),n(e.value)||(c(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,g),\"=\"===y?p=g.showlines=!0:(p=r(\"contours.showlines\"),m=r(\"fillcolor\",o((t.line||{}).color||l,.5))),p&&(d=r(\"line.color\",m&&s(m)?o(e.fillcolor,1):l),r(\"line.width\",2),r(\"line.dash\")),r(\"line.smoothing\"),i(r,a,d,f)}},22783:function(t,e,r){\"use strict\";var n=r(20726),i=r(10721);function a(t,e){var r,a=Array.isArray(e);function o(t){return i(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(a?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=a?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=a?e.map(o):[o(e)]),r}function o(t){return function(e){e=a(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=a(t,e),end:1/0,size:1/0}}}t.exports={\"[]\":o(\"[]\"),\"][\":o(\"][\"),\">\":s(\">\"),\"<\":s(\"<\"),\"=\":s(\"=\")}},47495:function(t){\"use strict\";t.exports=function(t,e,r,n){var i=n(\"contours.start\"),a=n(\"contours.end\"),o=!1===i||!1===a,s=r(\"contours.size\");!(o?e.autocontour=!0:r(\"autocontour\",!1))&&s||r(\"ncontours\")}},1999:function(t,e,r){\"use strict\";var n=r(34809);function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}t.exports=function(t,e){var r,a,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case\"=\":case\"<\":return t;case\">\":for(1!==t.length&&n.warn(\"Contour data invalid for the specified inequality operation.\"),a=t[0],r=0;r1e3){n.warn(\"Too many contours, clipping at 1000\",t);break}return l}},48715:function(t){\"use strict\";t.exports=function(t){return t.end+t.size/1e6}},27657:function(t,e,r){\"use strict\";var n=r(34809),i=r(53156);function a(t,e,r,n){return Math.abs(t[0]-e[0])20&&e?208===t||1114===t?n=0===r[0]?1:-1:a=0===r[1]?1:-1:-1!==i.BOTTOMSTART.indexOf(t)?a=1:-1!==i.LEFTSTART.indexOf(t)?n=1:-1!==i.TOPSTART.indexOf(t)?a=-1:n=-1,[n,a]}(h,r,e),p=[s(t,e,[-f[0],-f[1]])],d=t.z.length,m=t.z[0].length,g=e.slice(),y=f.slice();for(c=0;c<1e4;c++){if(h>20?(h=i.CHOOSESADDLE[h][(f[0]||f[1])<0?0:1],t.crossings[u]=i.SADDLEREMAINDER[h]):delete t.crossings[u],!(f=i.NEWDELTA[h])){n.log(\"Found bad marching index:\",h,e,t.level);break}p.push(s(t,e,f)),e[0]+=f[0],e[1]+=f[1],u=e.join(\",\"),a(p[p.length-1],p[p.length-2],o,l)&&p.pop();var v=f[0]&&(e[0]<0||e[0]>m-2)||f[1]&&(e[1]<0||e[1]>d-2);if(e[0]===g[0]&&e[1]===g[1]&&f[0]===y[0]&&f[1]===y[1]||r&&v)break;h=t.crossings[u]}1e4===c&&n.log(\"Infinite loop in contour?\");var x,_,b,w,T,k,A,M,S,E,C,L,I,P,z,O=a(p[0],p[p.length-1],o,l),D=0,R=.2*t.smoothing,F=[],B=0;for(c=1;c=B;c--)if((x=F[c])=B&&x+F[_]M&&S--,t.edgepaths[S]=C.concat(p,E));break}V||(t.edgepaths[M]=p.concat(E))}for(M=0;M=v)&&(r<=y&&(r=y),o>=v&&(o=v),l=Math.floor((o-r)/s)+1,c=0),f=0;fy&&(m.unshift(y),g.unshift(g[0])),m[m.length-1]t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}t.exports=function(t){var e,r,a,o,s,l,c,u,h,f=t[0].z,p=f.length,d=f[0].length,m=2===p||2===d;for(r=0;r=0&&(n=v,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-v[1])<.01&&(v[0]-r[0])*(n[0]-v[0])>=0&&(n=v,s=l):i.log(\"endpt to newendpt is not vert. or horz.\",r,n,v)}if(r=n,s>=0)break;h+=\"L\"+n}if(s===t.edgepaths.length){i.log(\"unclosed perimeter path\");break}f=s,(d=-1===p.indexOf(f))&&(f=p[0],h+=\"Z\")}for(f=0;fn.center?n.right-s:s-n.left)/(u+Math.abs(Math.sin(c)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(h)+Math.cos(c)*o);if(f<1||p<1)return 1/0;var d=y.EDGECOST*(1/(f-1)+1/(p-1));d+=y.ANGLECOST*c*c;for(var m=s-u,g=l-h,v=s+u,x=l+h,_=0;_2*y.MAXCOST)break;p&&(s/=2),l=(o=c-s/2)+1.5*s}if(f<=y.MAXCOST)return u},e.addLabelData=function(t,e,r,n){var i=e.fontSize,a=e.width+i/3,o=Math.max(0,e.height-i/3),s=t.x,l=t.y,c=t.theta,u=Math.sin(c),h=Math.cos(c),f=function(t,e){return[s+t*h-e*u,l+t*u+e*h]},p=[f(-a/2,-o/2),f(-a/2,o/2),f(a/2,o/2),f(a/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:c,level:e.level,width:a,height:o}),n.push(p)},e.drawLabels=function(t,e,r,a,o){var l=t.selectAll(\"text\").data(e,(function(t){return t.text+\",\"+t.x+\",\"+t.y+\",\"+t.theta}));if(l.exit().remove(),l.enter().append(\"text\").attr({\"data-notex\":1,\"text-anchor\":\"middle\"}).each((function(t){var e=t.x+Math.sin(t.theta)*t.dy,i=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:\"rotate(\"+180*t.theta/Math.PI+\" \"+e+\" \"+i+\")\"}).call(s.convertToTspans,r)})),o){for(var c=\"\",u=0;ur.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if(\"constraint\"!==r.type){var c,u=r.start,h=r.end,f=t._input.contours;u>h&&(r.start=f.start=h,h=r.end=f.end=u,u=r.start),r.size>0||(c=u===h?1:a(u,h,t.ncontours).dtick,f.size=r.size=c)}}},1328:function(t,e,r){\"use strict\";var n=r(45568),i=r(62203),a=r(12774),o=r(16438);t.exports=function(t){var e=n.select(t).selectAll(\"g.contour\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(t){var e=n.select(this),r=t[0].trace,a=r.contours,s=r.line,l=a.size||1,c=a.start,u=\"constraint\"===a.type,h=!u&&\"lines\"===a.coloring,f=!u&&\"fill\"===a.coloring,p=h||f?o(r):null;e.selectAll(\"g.contourlevel\").each((function(t){n.select(this).selectAll(\"path\").call(i.lineGroupStyle,s.width,h?p(t.level):s.color,s.dash)}));var d=a.labelfont;if(e.selectAll(\"g.contourlabels text\").each((function(t){i.font(n.select(this),{weight:d.weight,style:d.style,variant:d.variant,textcase:d.textcase,lineposition:d.lineposition,shadow:d.shadow,family:d.family,size:d.size,color:d.color||(h?p(t.level):s.color)})})),u)e.selectAll(\"g.contourfill path\").style(\"fill\",r.fillcolor);else if(f){var m;e.selectAll(\"g.contourfill path\").style(\"fill\",(function(t){return void 0===m&&(m=t.level),p(t.level+.5*l)})),void 0===m&&(m=c),e.selectAll(\"g.contourbg path\").style(\"fill\",p(m-.5*l))}})),a(t)}},39889:function(t,e,r){\"use strict\";var n=r(39356),i=r(20576);t.exports=function(t,e,r,a,o){var s,l=r(\"contours.coloring\"),c=\"\";\"fill\"===l&&(s=r(\"contours.showlines\")),!1!==s&&(\"lines\"!==l&&(c=r(\"line.color\",\"#000\")),r(\"line.width\",.5),r(\"line.dash\")),\"none\"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,a,r,{prefix:\"\",cLetter:\"z\"})),r(\"line.smoothing\"),i(r,a,c,o)}},66365:function(t,e,r){\"use strict\";var n=r(81658),i=r(52240),a=r(87163),o=r(93049).extendFlat,s=i.contours;t.exports=o({carpet:{valType:\"string\",editType:\"calc\"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:\"enumerated\",values:[\"fill\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},zorder:i.zorder,transforms:void 0},a(\"\",{cLetter:\"z\",autoColorDflt:!1}))},80849:function(t,e,r){\"use strict\";var n=r(28379),i=r(34809),a=r(87869),o=r(93877),s=r(69295),l=r(78106),c=r(80924),u=r(50538),h=r(26571),f=r(62475);t.exports=function(t,e){var r=e._carpetTrace=h(t,e);if(r&&r.visible&&\"legendonly\"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),u(d,e,e._defaultColor,t._fullLayout)}var m=function(t,e){var r,u,h,f,p,d,m,g=e._carpetTrace,y=g.aaxis,v=g.baxis;y._minDtick=0,v._minDtick=0,i.isArray1D(e.z)&&a(e,y,v,\"a\",\"b\",[\"z\"]),r=e._a=e._a||e.a,f=e._b=e._b||e.b,r=r?y.makeCalcdata(e,\"_a\"):[],f=f?v.makeCalcdata(e,\"_b\"):[],u=e.a0||0,h=e.da||1,p=e.b0||0,d=e.db||1,m=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(m),s(m,e._emptypoints);var x=i.maxRowLength(m),_=\"scaled\"===e.xtype?\"\":r,b=c(e,_,u,h,x,y),w=\"scaled\"===e.ytype?\"\":f,T={a:b,b:c(e,w,p,d,m.length,v),z:m};return\"levels\"===e.contours.type&&\"none\"!==e.contours.coloring&&n(t,e,{vals:m,containerStr:\"\",cLetter:\"z\"}),[T]}(t,e);return f(e,e._z),m}}},50538:function(t,e,r){\"use strict\";var n=r(34809),i=r(86073),a=r(66365),o=r(29503),s=r(47495),l=r(39889);t.exports=function(t,e,r,c){function u(r,i){return n.coerce(t,e,a,r,i)}if(u(\"carpet\"),t.a&&t.b){if(!i(t,e,u,c,\"a\",\"b\"))return void(e.visible=!1);u(\"text\"),\"constraint\"===u(\"contours.type\")?o(t,e,u,c,r,{hasHover:!1}):(s(t,e,u,(function(r){return n.coerce2(t,e,a,r)})),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor=r,e._length=null;u(\"zorder\")}},34406:function(t,e,r){\"use strict\";t.exports={attributes:r(66365),supplyDefaults:r(50538),colorbar:r(92697),calc:r(80849),plot:r(71815),style:r(1328),moduleType:\"trace\",name:\"contourcarpet\",basePlotModule:r(37703),categories:[\"cartesian\",\"svg\",\"carpet\",\"contour\",\"symbols\",\"showLegend\",\"hasLines\",\"carpetDependent\",\"noHover\",\"noSortingByValue\"],meta:{}}},71815:function(t,e,r){\"use strict\";var n=r(45568),i=r(6720),a=r(3685),o=r(62203),s=r(34809),l=r(83545),c=r(27657),u=r(8850),h=r(53156),f=r(1999),p=r(86828),d=r(49886),m=r(26571),g=r(94903);function y(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function v(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}t.exports=function(t,e,r,_){var b=e.xaxis,w=e.yaxis;s.makeTraceGroups(_,r,\"contour\").each((function(r){var _=n.select(this),T=r[0],k=T.trace,A=k._carpetTrace=m(t,k),M=t.calcdata[A.index][0];if(A.visible&&\"legendonly\"!==A.visible){var S=T.a,E=T.b,C=k.contours,L=p(C,e,T),I=\"constraint\"===C.type,P=C._operation,z=I?\"=\"===P?\"lines\":\"fill\":C.coloring,O=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(L);var D=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);c(L,D,R);var F,B,N,j,U=L;\"constraint\"===C.type&&(U=f(L,P)),function(t,e){var r,n,i,a,o,s,l,c,u;for(r=0;r=0;j--)F=M.clipsegments[j],B=i([],F.x,b.c2p),N=i([],F.y,w.c2p),B.reverse(),N.reverse(),V.push(a(B,N,F.bicubic));var q=\"M\"+V.join(\"L\")+\"Z\";!function(t,e,r,n,o,l){var c,u,h,f,p=s.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"!==l||o?[]:[0]);p.enter().append(\"path\"),p.exit().remove();var d=[];for(f=0;f=0&&(f=C,d=m):Math.abs(h[1]-f[1])=0&&(f=C,d=m):s.log(\"endpt to newendpt is not vert. or horz.\",h,f,C)}if(d>=0)break;v+=S(h,f),h=f}if(d===e.edgepaths.length){s.log(\"unclosed perimeter path\");break}u=d,(_=-1===x.indexOf(u))&&(u=x[0],v+=S(h,f)+\"Z\",h=null)}for(u=0;um&&(n.max=m),n.len=n.max-n.min}function g(t,e){var r,n=0,o=.1;return(Math.abs(t[0]-l)0?+p[u]:0),h.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:y},properties:v})}}var _=o.extractOpts(e),b=_.reversescale?o.flipScale(_.colorscale):_.colorscale,w=b[0][1],T=[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(u=1;u=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(o,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),i}},17347:function(t,e,r){\"use strict\";var n=r(87163),i=r(3208).rb,a=r(9829),o=r(95833),s=r(93049).extendFlat;t.exports=s({lon:o.lon,lat:o.lat,z:{valType:\"data_array\",editType:\"calc\"},radius:{valType:\"number\",editType:\"plot\",arrayOk:!0,min:1,dflt:30},below:{valType:\"string\",editType:\"plot\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\"lon\",\"lat\",\"z\",\"text\",\"name\"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},n(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},60675:function(t,e,r){\"use strict\";var n=r(10721),i=r(34809).isArrayOrTypedArray,a=r(63821).BADNUM,o=r(28379),s=r(34809)._;t.exports=function(t,e){for(var r=e._length,l=new Array(r),c=e.z,u=i(c)&&c.length,h=0;h0?+p[u]:0),h.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:y},properties:v})}}var _=o.extractOpts(e),b=_.reversescale?o.flipScale(_.colorscale):_.colorscale,w=b[0][1],T=[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,a.opacity(w)<1?w:a.addOpacity(w,0)];for(u=1;u=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},t.exports=function(t,e){var r=e[0].trace,i=new a(t,r.uid),o=i.sourceId,s=n(e),l=i.below=t.belowLookup[\"trace-\"+r.uid];return t.map.addSource(o,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),i}},43179:function(t,e,r){\"use strict\";var n=r(34809);t.exports=function(t,e){for(var r=0;r\"),l.color=function(t,e){var r=t.marker,i=e.mc||r.color,a=e.mlc||r.line.color,o=e.mlw||r.line.width;return n(i)?i:n(a)&&o?a:void 0}(u,f),[l]}}},52213:function(t,e,r){\"use strict\";t.exports={attributes:r(62824),layoutAttributes:r(93795),supplyDefaults:r(30495).supplyDefaults,crossTraceDefaults:r(30495).crossTraceDefaults,supplyLayoutDefaults:r(34980),calc:r(28152),crossTraceCalc:r(82539),plot:r(83482),style:r(7240).style,hoverPoints:r(27759),eventData:r(29412),selectPoints:r(88384),moduleType:\"trace\",name:\"funnel\",basePlotModule:r(37703),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},93795:function(t){\"use strict\";t.exports={funnelmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},funnelgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},funnelgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},34980:function(t,e,r){\"use strict\";var n=r(34809),i=r(93795);t.exports=function(t,e,r){var a=!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=0;s path\").each((function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\"opacity\",s.selectedpoints&&!t.selected?o:1)}})),c(r,s,t),r.selectAll(\".regions\").each((function(){n.select(this).selectAll(\"path\").style(\"stroke-width\",0).call(a.fill,s.connector.fillcolor)})),r.selectAll(\".lines\").each((function(){var t=s.connector.line;i.lineGroupStyle(n.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},63447:function(t,e,r){\"use strict\";var n=r(55412),i=r(9829),a=r(13792).u,o=r(3208).rb,s=r(3208).ay,l=r(93049).extendFlat;t.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:\"calc\"},pattern:n.marker.pattern,editType:\"calc\"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:[\"label\",\"text\",\"value\",\"percent\"]}),texttemplate:s({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),hoverinfo:l({},i.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:o({},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),textposition:l({},n.textposition,{values:[\"inside\",\"none\"],dflt:\"inside\"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:[\"top left\",\"top center\",\"top right\"],dflt:\"top center\"}),editType:\"plot\"},domain:a({name:\"funnelarea\",trace:!0,editType:\"calc\"}),aspectratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},baseratio:{valType:\"number\",min:0,max:1,dflt:.333,editType:\"plot\"}}},86817:function(t,e,r){\"use strict\";var n=r(44122);e.name=\"funnelarea\",e.plot=function(t,r,i,a){n.plotBasePlot(e.name,t,r,i,a)},e.clean=function(t,r,i,a){n.cleanBasePlot(e.name,t,r,i,a)}},2807:function(t,e,r){\"use strict\";var n=r(44148);t.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:\"funnelarea\"})}}},79824:function(t,e,r){\"use strict\";var n=r(34809),i=r(63447),a=r(13792).N,o=r(17550).handleText,s=r(46979).handleLabelsAndValues,l=r(46979).handleMarkerDefaults;t.exports=function(t,e,r,c){function u(r,a){return n.coerce(t,e,i,r,a)}var h=u(\"labels\"),f=u(\"values\"),p=s(h,f),d=p.len;if(e._hasLabels=p.hasLabels,e._hasValues=p.hasValues,!e._hasLabels&&e._hasValues&&(u(\"label0\"),u(\"dlabel\")),d){e._length=d,l(t,e,c,u),u(\"scalegroup\");var m,g=u(\"text\"),y=u(\"texttemplate\");if(y||(m=u(\"textinfo\",Array.isArray(g)?\"text+percent\":\"percent\")),u(\"hovertext\"),u(\"hovertemplate\"),y||m&&\"none\"!==m){var v=u(\"textposition\");o(t,e,c,u,v,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}else\"none\"===m&&u(\"textposition\",\"none\");a(e,c,u),u(\"title.text\")&&(u(\"title.position\"),n.coerceFont(u,\"title.font\",c.font)),u(\"aspectratio\"),u(\"baseratio\")}else e.visible=!1}},91132:function(t,e,r){\"use strict\";t.exports={moduleType:\"trace\",name:\"funnelarea\",basePlotModule:r(86817),categories:[\"pie-like\",\"funnelarea\",\"showLegend\"],attributes:r(63447),layoutAttributes:r(10270),supplyDefaults:r(79824),supplyLayoutDefaults:r(69161),calc:r(2807).calc,crossTraceCalc:r(2807).crossTraceCalc,plot:r(96673),style:r(13757),styleOne:r(32891),meta:{}}},10270:function(t,e,r){\"use strict\";var n=r(4031).hiddenlabels;t.exports={hiddenlabels:n,funnelareacolorway:{valType:\"colorlist\",editType:\"calc\"},extendfunnelareacolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},69161:function(t,e,r){\"use strict\";var n=r(34809),i=r(10270);t.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"hiddenlabels\"),r(\"funnelareacolorway\",e.colorway),r(\"extendfunnelareacolors\")}},96673:function(t,e,r){\"use strict\";var n=r(45568),i=r(62203),a=r(34809),o=a.strScale,s=a.strTranslate,l=r(30635),c=r(32995).toMoveInsideBar,u=r(84102),h=u.recordMinTextSize,f=u.clearMinTextSize,p=r(37252),d=r(35734),m=d.attachFxHandlers,g=d.determineInsideTextFont,y=d.layoutAreas,v=d.prerenderTitles,x=d.positionTitleOutside,_=d.formatSliceLabel;function b(t,e){return\"l\"+(e[0]-t[0])+\",\"+(e[1]-t[1])}t.exports=function(t,e){var r=t._context.staticPlot,u=t._fullLayout;f(\"funnelarea\",u),v(e,t),y(e,u._size),a.makeTraceGroups(u._funnelarealayer,e,\"trace\").each((function(e){var f=n.select(this),d=e[0],y=d.trace;!function(t){if(t.length){var e=t[0],r=e.trace,n=r.aspectratio,i=r.baseratio;i>.999&&(i=.999);var a,o,s,l=Math.pow(i,2),c=e.vTotal,u=c,h=c*l/(1-l)/c,f=[];for(f.push(E()),o=t.length-1;o>-1;o--)if(!(s=t[o]).hidden){var p=s.v/u;h+=p,f.push(E())}var d=1/0,m=-1/0;for(o=0;o-1;o--)if(!(s=t[o]).hidden){var M=f[A+=1][0],S=f[A][1];s.TL=[-M,S],s.TR=[M,S],s.BL=T,s.BR=k,s.pxmid=(b=s.TR,w=s.BR,[.5*(b[0]+w[0]),.5*(b[1]+w[1])]),T=s.TL,k=s.TR}}function E(){var t,e={x:t=Math.sqrt(h),y:-t};return[e.x,e.y]}}(e),f.each((function(){var f=n.select(this).selectAll(\"g.slice\").data(e);f.enter().append(\"g\").classed(\"slice\",!0),f.exit().remove(),f.each((function(o,s){if(o.hidden)n.select(this).selectAll(\"path,g\").remove();else{o.pointNumber=o.i,o.curveNumber=y.index;var f=d.cx,v=d.cy,x=n.select(this),w=x.selectAll(\"path.surface\").data([o]);w.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":r?\"none\":\"all\"}),x.call(m,t,e);var T=\"M\"+(f+o.TR[0])+\",\"+(v+o.TR[1])+b(o.TR,o.BR)+b(o.BR,o.BL)+b(o.BL,o.TL)+\"Z\";w.attr(\"d\",T),_(t,o,d);var k=p.castOption(y.textposition,o.pts),A=x.selectAll(\"g.slicetext\").data(o.text&&\"none\"!==k?[0]:[]);A.enter().append(\"g\").classed(\"slicetext\",!0),A.exit().remove(),A.each((function(){var r=a.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),p=a.ensureUniformFontSize(t,g(y,o,u.font));r.text(o.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,p).call(l.convertToTspans,t);var d,m,x,_=i.bBox(r.node()),b=Math.min(o.BL[1],o.BR[1])+v,w=Math.max(o.TL[1],o.TR[1])+v;m=Math.max(o.TL[0],o.BL[0])+f,x=Math.min(o.TR[0],o.BR[0])+f,(d=c(m,x,b,w,_,{isHorizontal:!0,constrained:!0,angle:0,anchor:\"middle\"})).fontSize=p.size,h(y.type,d,u),e[s].transform=d,a.setTransormAndDisplay(r,d)}))}}));var v=n.select(this).selectAll(\"g.titletext\").data(y.title.text?[0]:[]);v.enter().append(\"g\").classed(\"titletext\",!0),v.exit().remove(),v.each((function(){var e=a.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),r=y.title.text;y._meta&&(r=a.templateString(r,y._meta)),e.text(r).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,y.title.font).call(l.convertToTspans,t);var c=x(d,u._size);e.attr(\"transform\",s(c.x,c.y)+o(Math.min(1,c.scale))+s(c.tx,c.ty))}))}))}))}},13757:function(t,e,r){\"use strict\";var n=r(45568),i=r(32891),a=r(84102).resizeText;t.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(\".trace\");a(t,e,\"funnelarea\"),e.each((function(e){var r=e[0].trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(\"path.surface\").each((function(e){n.select(this).call(i,e,r,t)}))}))}},81658:function(t,e,r){\"use strict\";var n=r(36640),i=r(9829),a=r(80337),o=r(80712).axisHoverFormat,s=r(3208).rb,l=r(3208).ay,c=r(87163),u=r(93049).extendFlat;t.exports=u({z:{valType:\"data_array\",editType:\"calc\"},x:u({},n.x,{impliedEdits:{xtype:\"array\"}}),x0:u({},n.x0,{impliedEdits:{xtype:\"scaled\"}}),dx:u({},n.dx,{impliedEdits:{xtype:\"scaled\"}}),y:u({},n.y,{impliedEdits:{ytype:\"array\"}}),y0:u({},n.y0,{impliedEdits:{ytype:\"scaled\"}}),dy:u({},n.dy,{impliedEdits:{ytype:\"scaled\"}}),xperiod:u({},n.xperiod,{impliedEdits:{xtype:\"scaled\"}}),yperiod:u({},n.yperiod,{impliedEdits:{ytype:\"scaled\"}}),xperiod0:u({},n.xperiod0,{impliedEdits:{xtype:\"scaled\"}}),yperiod0:u({},n.yperiod0,{impliedEdits:{ytype:\"scaled\"}}),xperiodalignment:u({},n.xperiodalignment,{impliedEdits:{xtype:\"scaled\"}}),yperiodalignment:u({},n.yperiodalignment,{impliedEdits:{ytype:\"scaled\"}}),text:{valType:\"data_array\",editType:\"calc\"},hovertext:{valType:\"data_array\",editType:\"calc\"},transpose:{valType:\"boolean\",dflt:!1,editType:\"calc\"},xtype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},ytype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",\"best\",!1],dflt:!1,editType:\"calc\"},hoverongaps:{valType:\"boolean\",dflt:!0,editType:\"none\"},connectgaps:{valType:\"boolean\",editType:\"calc\"},xgap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},ygap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:s(),texttemplate:l({arrayOk:!1,editType:\"plot\"},{keys:[\"x\",\"y\",\"z\",\"text\"]}),textfont:a({editType:\"plot\",autoSize:!0,autoColor:!0,colorEditType:\"style\"}),showlegend:u({},i.showlegend,{dflt:!1}),zorder:n.zorder},{transforms:void 0},c(\"\",{cLetter:\"z\",autoColorDflt:!1}))},51670:function(t,e,r){\"use strict\";var n=r(33626),i=r(34809),a=r(29714),o=r(40528),s=r(19226),l=r(28379),c=r(87869),u=r(93877),h=r(69295),f=r(78106),p=r(80924),d=r(63821).BADNUM;function m(t){for(var e=[],r=t.length,n=0;n1){var e=(t[t.length-1]-t[0])/(t.length-1),r=Math.abs(e/100);for(k=0;kr)return!1}return!0}(M.rangebreaks||S.rangebreaks)&&(T=function(t,e,r){for(var n=[],i=-1,a=0;a=0;o--)(s=((h[[(r=(a=f[o])[0])-1,i=a[1]]]||m)[2]+(h[[r+1,i]]||m)[2]+(h[[r,i-1]]||m)[2]+(h[[r,i+1]]||m)[2])/20)&&(l[a]=[r,i,s],f.splice(o,1),c=!0);if(!c)throw\"findEmpties iterated with no new neighbors\";for(a in l)h[a]=l[a],u.push(l[a])}return u.sort((function(t,e){return e[2]-t[2]}))}},93125:function(t,e,r){\"use strict\";var n=r(32141),i=r(34809),a=i.isArrayOrTypedArray,o=r(29714),s=r(88856).extractOpts;t.exports=function(t,e,r,l,c){c||(c={});var u,h,f,p,d=c.isContour,m=t.cd[0],g=m.trace,y=t.xa,v=t.ya,x=m.x,_=m.y,b=m.z,w=m.xCenter,T=m.yCenter,k=m.zmask,A=g.zhoverformat,M=x,S=_;if(!1!==t.index){try{f=Math.round(t.index[1]),p=Math.round(t.index[0])}catch(e){return void i.error(\"Error hovering on heatmap, pointNumber must be [row,col], found:\",t.index)}if(f<0||f>=b[0].length||p<0||p>b.length)return}else{if(n.inbox(e-x[0],e-x[x.length-1],0)>0||n.inbox(r-_[0],r-_[_.length-1],0)>0)return;if(d){var E;for(M=[2*x[0]-x[1]],E=1;Em&&(y=Math.max(y,Math.abs(t[a][o]-d)/(g-m))))}return y}t.exports=function(t,e){var r,i=1;for(o(t,e),r=0;r.01;r++)i=o(t,e,a(i));return i>.01&&n.log(\"interp2d didn't converge quickly\",i),t}},63814:function(t,e,r){\"use strict\";var n=r(34809);t.exports=function(t,e){t(\"texttemplate\");var r=n.extendFlat({},e.font,{color:\"auto\",size:\"auto\"});n.coerceFont(t,\"textfont\",r)}},80924:function(t,e,r){\"use strict\";var n=r(33626),i=r(34809).isArrayOrTypedArray;t.exports=function(t,e,r,a,o,s){var l,c,u,h=[],f=n.traceIs(t,\"contour\"),p=n.traceIs(t,\"histogram\"),d=n.traceIs(t,\"gl2d\");if(i(e)&&e.length>1&&!p&&\"category\"!==s.type){var m=e.length;if(!(m<=o))return f?e.slice(0,o):e.slice(0,o+1);if(f||d)h=Array.from(e).slice(0,o);else if(1===o)h=\"log\"===s.type?[.5*e[0],2*e[0]]:[e[0]-.5,e[0]+.5];else if(\"log\"===s.type){for(h=[Math.pow(e[0],1.5)/Math.pow(e[1],.5)],u=1;u0;)k=A.c2p(N[L]),L--;for(k0;)C=M.c2p(j[L]),L--;C=A._length||k<=0||E>=M._length||C<=0)return z.selectAll(\"image\").data([]).exit().remove(),void _(z);\"fast\"===X?(J=Z,K=G):(J=Q,K=tt);var et=document.createElement(\"canvas\");et.width=J,et.height=K;var rt,nt,it=et.getContext(\"2d\",{willReadFrequently:!0}),at=p(D,{noNumericCheck:!0,returnArray:!0});\"fast\"===X?(rt=W?function(t){return Z-1-t}:l.identity,nt=Y?function(t){return G-1-t}:l.identity):(rt=function(t){return l.constrain(Math.round(A.c2p(N[t])-r),0,Q)},nt=function(t){return l.constrain(Math.round(M.c2p(j[t])-E),0,tt)});var ot,st,lt,ct,ut=nt(0),ht=[ut,ut],ft=W?0:1,pt=Y?0:1,dt=0,mt=0,gt=0,yt=0;function vt(t,e){if(void 0!==t){var r=at(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),dt+=e,mt+=r[0]*e,gt+=r[1]*e,yt+=r[2]*e,r}return[0,0,0,0]}function xt(t,e,r,n){var i=t[r.bin0];if(void 0===i)return vt(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],c=o-i||0,u=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,vt(i+r.frac*c+n.frac*(u+r.frac*a))}if(\"default\"!==X){var _t,bt=0;try{_t=new Uint8Array(J*K*4)}catch(t){_t=new Array(J*K*4)}if(\"smooth\"===X){var wt,Tt,kt,At=U||N,Mt=V||j,St=new Array(At.length),Et=new Array(Mt.length),Ct=new Array(Q),Lt=U?w:b,It=V?w:b;for(L=0;LXt||Xt>M._length))for(I=Gt;IJt||Jt>A._length)){var Kt=u({x:$t,y:Yt},D,t._fullLayout);Kt.x=$t,Kt.y=Yt;var Qt=O.z[L][I];void 0===Qt?(Kt.z=\"\",Kt.zLabel=\"\"):(Kt.z=Qt,Kt.zLabel=s.tickText(Ut,Qt,\"hover\").text);var te=O.text&&O.text[L]&&O.text[L][I];void 0!==te&&!1!==te||(te=\"\"),Kt.text=te;var ee=l.texttemplateString(Nt,Kt,t._fullLayout._d3locale,Kt,D._meta||{});if(ee){var re=ee.split(\" \"),ne=re.length,ie=0;for(P=0;P0&&(a=!0);for(var l=0;la){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]c?t>o?t>1.1*i?i:t>1.1*a?a:o:t>s?s:t>l?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n&&t>o){var l=d(e,a,s),c=d(r,a,s),u=t===i?0:1;return l[u]!==c[u]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,i,r).split(\"-\");return\"\"===n[0]&&(n.unshift(),n[0]=\"-\"+n[0]),n}t.exports=function(t,e,r,n,a){var s,l,c=-1.1*e,f=-.1*e,p=t-f,d=r[0],m=r[1],g=Math.min(h(d+f,d+p,n,a),h(m+f,m+p,n,a)),y=Math.min(h(d+c,d+f,n,a),h(m+c,m+f,n,a));if(g>y&&yo){var v=s===i?1:6,x=s===i?\"M12\":\"M1\";return function(e,r){var o=n.c2d(e,i,a),s=o.indexOf(\"-\",v);s>0&&(o=o.substr(0,s));var c=n.d2c(o,0,a);if(cr.r2l(B)&&(j=o.tickIncrement(j,_.size,!0,p)),O.start=r.l2r(j),F||i.nestedProperty(e,y+\".start\").set(O.start)}var U=_.end,V=r.r2l(z.end),q=void 0!==V;if((_.endFound||q)&&V!==r.r2l(U)){var H=q?V:i.aggNums(Math.max,null,d);O.end=r.l2r(H),q||i.nestedProperty(e,y+\".start\").set(O.end)}var G=\"autobin\"+s;return!1===e._input[G]&&(e._input[y]=i.extendFlat({},e[y]||{}),delete e._input[G],delete e[G]),[O,d]}t.exports={calc:function(t,e){var r,a,p,d,m=[],g=[],y=\"h\"===e.orientation,v=o.getFromId(t,y?e.yaxis:e.xaxis),x=y?\"y\":\"x\",_={x:\"y\",y:\"x\"}[x],b=e[x+\"calendar\"],w=e.cumulative,T=f(t,e,v,x),k=T[0],A=T[1],M=\"string\"==typeof k.size,S=[],E=M?S:k,C=[],L=[],I=[],P=0,z=e.histnorm,O=e.histfunc,D=-1!==z.indexOf(\"density\");w.enabled&&D&&(z=z.replace(/ ?density$/,\"\"),D=!1);var R,F=\"max\"===O||\"min\"===O?null:0,B=l.count,N=c[z],j=!1,U=function(t){return v.r2c(t,0,b)};for(i.isArrayOrTypedArray(e[_])&&\"count\"!==O&&(R=e[_],j=\"avg\"===O,B=l[O]),r=U(k.start),p=U(k.end)+(r-o.tickIncrement(r,k.size,!1,b))/1e6;r