oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10rc0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ads/aqua/__init__.py +40 -0
- ads/aqua/app.py +507 -0
- ads/aqua/cli.py +96 -0
- ads/aqua/client/__init__.py +3 -0
- ads/aqua/client/client.py +836 -0
- ads/aqua/client/openai_client.py +305 -0
- ads/aqua/common/__init__.py +5 -0
- ads/aqua/common/decorator.py +125 -0
- ads/aqua/common/entities.py +274 -0
- ads/aqua/common/enums.py +134 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1295 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +247 -0
- ads/aqua/config/evaluation/__init__.py +4 -0
- ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
- ads/aqua/config/utils/__init__.py +4 -0
- ads/aqua/config/utils/serializer.py +339 -0
- ads/aqua/constants.py +116 -0
- ads/aqua/data.py +14 -0
- ads/aqua/dummy_data/icon.txt +1 -0
- ads/aqua/dummy_data/oci_model_deployments.json +56 -0
- ads/aqua/dummy_data/oci_models.json +1 -0
- ads/aqua/dummy_data/readme.md +26 -0
- ads/aqua/evaluation/__init__.py +8 -0
- ads/aqua/evaluation/constants.py +53 -0
- ads/aqua/evaluation/entities.py +186 -0
- ads/aqua/evaluation/errors.py +70 -0
- ads/aqua/evaluation/evaluation.py +1814 -0
- ads/aqua/extension/__init__.py +42 -0
- ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
- ads/aqua/extension/base_handler.py +90 -0
- ads/aqua/extension/common_handler.py +121 -0
- ads/aqua/extension/common_ws_msg_handler.py +36 -0
- ads/aqua/extension/deployment_handler.py +381 -0
- ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
- ads/aqua/extension/errors.py +30 -0
- ads/aqua/extension/evaluation_handler.py +129 -0
- ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
- ads/aqua/extension/finetune_handler.py +96 -0
- ads/aqua/extension/model_handler.py +390 -0
- ads/aqua/extension/models/__init__.py +0 -0
- ads/aqua/extension/models/ws_models.py +145 -0
- ads/aqua/extension/models_ws_msg_handler.py +50 -0
- ads/aqua/extension/ui_handler.py +300 -0
- ads/aqua/extension/ui_websocket_handler.py +130 -0
- ads/aqua/extension/utils.py +133 -0
- ads/aqua/finetuning/__init__.py +7 -0
- ads/aqua/finetuning/constants.py +23 -0
- ads/aqua/finetuning/entities.py +181 -0
- ads/aqua/finetuning/finetuning.py +749 -0
- ads/aqua/model/__init__.py +8 -0
- ads/aqua/model/constants.py +60 -0
- ads/aqua/model/entities.py +385 -0
- ads/aqua/model/enums.py +32 -0
- ads/aqua/model/model.py +2134 -0
- ads/aqua/model/utils.py +52 -0
- ads/aqua/modeldeployment/__init__.py +6 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1315 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/utils.py +543 -0
- ads/aqua/resources/gpu_shapes_index.json +94 -0
- ads/aqua/server/__init__.py +4 -0
- ads/aqua/server/__main__.py +24 -0
- ads/aqua/server/app.py +47 -0
- ads/aqua/server/aqua_spec.yml +1291 -0
- ads/aqua/training/__init__.py +4 -0
- ads/aqua/training/exceptions.py +476 -0
- ads/aqua/ui.py +519 -0
- ads/automl/__init__.py +9 -0
- ads/automl/driver.py +330 -0
- ads/automl/provider.py +975 -0
- ads/bds/__init__.py +5 -0
- ads/bds/auth.py +127 -0
- ads/bds/big_data_service.py +255 -0
- ads/catalog/__init__.py +19 -0
- ads/catalog/model.py +1576 -0
- ads/catalog/notebook.py +461 -0
- ads/catalog/project.py +468 -0
- ads/catalog/summary.py +178 -0
- ads/common/__init__.py +11 -0
- ads/common/analyzer.py +65 -0
- ads/common/artifact/.model-ignore +63 -0
- ads/common/artifact/__init__.py +10 -0
- ads/common/auth.py +1122 -0
- ads/common/card_identifier.py +83 -0
- ads/common/config.py +647 -0
- ads/common/data.py +165 -0
- ads/common/decorator/__init__.py +9 -0
- ads/common/decorator/argument_to_case.py +88 -0
- ads/common/decorator/deprecate.py +69 -0
- ads/common/decorator/require_nonempty_arg.py +65 -0
- ads/common/decorator/runtime_dependency.py +178 -0
- ads/common/decorator/threaded.py +97 -0
- ads/common/decorator/utils.py +35 -0
- ads/common/dsc_file_system.py +303 -0
- ads/common/error.py +14 -0
- ads/common/extended_enum.py +81 -0
- ads/common/function/__init__.py +5 -0
- ads/common/function/fn_util.py +142 -0
- ads/common/function/func_conf.yaml +25 -0
- ads/common/ipython.py +76 -0
- ads/common/model.py +679 -0
- ads/common/model_artifact.py +1759 -0
- ads/common/model_artifact_schema.json +107 -0
- ads/common/model_export_util.py +664 -0
- ads/common/model_metadata.py +24 -0
- ads/common/object_storage_details.py +296 -0
- ads/common/oci_client.py +179 -0
- ads/common/oci_datascience.py +46 -0
- ads/common/oci_logging.py +1144 -0
- ads/common/oci_mixin.py +957 -0
- ads/common/oci_resource.py +136 -0
- ads/common/serializer.py +559 -0
- ads/common/utils.py +1852 -0
- ads/common/word_lists.py +1491 -0
- ads/common/work_request.py +189 -0
- ads/config.py +1 -0
- ads/data_labeling/__init__.py +13 -0
- ads/data_labeling/boundingbox.py +253 -0
- ads/data_labeling/constants.py +47 -0
- ads/data_labeling/data_labeling_service.py +244 -0
- ads/data_labeling/interface/__init__.py +5 -0
- ads/data_labeling/interface/loader.py +16 -0
- ads/data_labeling/interface/parser.py +16 -0
- ads/data_labeling/interface/reader.py +23 -0
- ads/data_labeling/loader/__init__.py +5 -0
- ads/data_labeling/loader/file_loader.py +241 -0
- ads/data_labeling/metadata.py +110 -0
- ads/data_labeling/mixin/__init__.py +5 -0
- ads/data_labeling/mixin/data_labeling.py +232 -0
- ads/data_labeling/ner.py +129 -0
- ads/data_labeling/parser/__init__.py +5 -0
- ads/data_labeling/parser/dls_record_parser.py +388 -0
- ads/data_labeling/parser/export_metadata_parser.py +94 -0
- ads/data_labeling/parser/export_record_parser.py +473 -0
- ads/data_labeling/reader/__init__.py +5 -0
- ads/data_labeling/reader/dataset_reader.py +574 -0
- ads/data_labeling/reader/dls_record_reader.py +121 -0
- ads/data_labeling/reader/export_record_reader.py +62 -0
- ads/data_labeling/reader/jsonl_reader.py +75 -0
- ads/data_labeling/reader/metadata_reader.py +203 -0
- ads/data_labeling/reader/record_reader.py +263 -0
- ads/data_labeling/record.py +52 -0
- ads/data_labeling/visualizer/__init__.py +5 -0
- ads/data_labeling/visualizer/image_visualizer.py +525 -0
- ads/data_labeling/visualizer/text_visualizer.py +357 -0
- ads/database/__init__.py +5 -0
- ads/database/connection.py +338 -0
- ads/dataset/__init__.py +10 -0
- ads/dataset/capabilities.md +51 -0
- ads/dataset/classification_dataset.py +339 -0
- ads/dataset/correlation.py +226 -0
- ads/dataset/correlation_plot.py +563 -0
- ads/dataset/dask_series.py +173 -0
- ads/dataset/dataframe_transformer.py +110 -0
- ads/dataset/dataset.py +1979 -0
- ads/dataset/dataset_browser.py +360 -0
- ads/dataset/dataset_with_target.py +995 -0
- ads/dataset/exception.py +25 -0
- ads/dataset/factory.py +987 -0
- ads/dataset/feature_engineering_transformer.py +35 -0
- ads/dataset/feature_selection.py +107 -0
- ads/dataset/forecasting_dataset.py +26 -0
- ads/dataset/helper.py +1450 -0
- ads/dataset/label_encoder.py +99 -0
- ads/dataset/mixin/__init__.py +5 -0
- ads/dataset/mixin/dataset_accessor.py +134 -0
- ads/dataset/pipeline.py +58 -0
- ads/dataset/plot.py +710 -0
- ads/dataset/progress.py +86 -0
- ads/dataset/recommendation.py +297 -0
- ads/dataset/recommendation_transformer.py +502 -0
- ads/dataset/regression_dataset.py +14 -0
- ads/dataset/sampled_dataset.py +1050 -0
- ads/dataset/target.py +98 -0
- ads/dataset/timeseries.py +18 -0
- ads/dbmixin/__init__.py +5 -0
- ads/dbmixin/db_pandas_accessor.py +153 -0
- ads/environment/__init__.py +9 -0
- ads/environment/ml_runtime.py +66 -0
- ads/evaluations/README.md +14 -0
- ads/evaluations/__init__.py +109 -0
- ads/evaluations/evaluation_plot.py +983 -0
- ads/evaluations/evaluator.py +1334 -0
- ads/evaluations/statistical_metrics.py +543 -0
- ads/experiments/__init__.py +9 -0
- ads/experiments/capabilities.md +0 -0
- ads/explanations/__init__.py +21 -0
- ads/explanations/base_explainer.py +142 -0
- ads/explanations/capabilities.md +83 -0
- ads/explanations/explainer.py +190 -0
- ads/explanations/mlx_global_explainer.py +1050 -0
- ads/explanations/mlx_interface.py +386 -0
- ads/explanations/mlx_local_explainer.py +287 -0
- ads/explanations/mlx_whatif_explainer.py +201 -0
- ads/feature_engineering/__init__.py +20 -0
- ads/feature_engineering/accessor/__init__.py +5 -0
- ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
- ads/feature_engineering/accessor/mixin/__init__.py +5 -0
- ads/feature_engineering/accessor/mixin/correlation.py +166 -0
- ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
- ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
- ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
- ads/feature_engineering/accessor/mixin/utils.py +65 -0
- ads/feature_engineering/accessor/series_accessor.py +431 -0
- ads/feature_engineering/adsimage/__init__.py +5 -0
- ads/feature_engineering/adsimage/image.py +192 -0
- ads/feature_engineering/adsimage/image_reader.py +170 -0
- ads/feature_engineering/adsimage/interface/__init__.py +5 -0
- ads/feature_engineering/adsimage/interface/reader.py +19 -0
- ads/feature_engineering/adsstring/__init__.py +7 -0
- ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
- ads/feature_engineering/adsstring/string/__init__.py +8 -0
- ads/feature_engineering/data_schema.json +57 -0
- ads/feature_engineering/dataset/__init__.py +5 -0
- ads/feature_engineering/dataset/zip_code_data.py +42062 -0
- ads/feature_engineering/exceptions.py +40 -0
- ads/feature_engineering/feature_type/__init__.py +133 -0
- ads/feature_engineering/feature_type/address.py +184 -0
- ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
- ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
- ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
- ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
- ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
- ads/feature_engineering/feature_type/adsstring/string.py +258 -0
- ads/feature_engineering/feature_type/base.py +58 -0
- ads/feature_engineering/feature_type/boolean.py +183 -0
- ads/feature_engineering/feature_type/category.py +146 -0
- ads/feature_engineering/feature_type/constant.py +137 -0
- ads/feature_engineering/feature_type/continuous.py +151 -0
- ads/feature_engineering/feature_type/creditcard.py +314 -0
- ads/feature_engineering/feature_type/datetime.py +190 -0
- ads/feature_engineering/feature_type/discrete.py +134 -0
- ads/feature_engineering/feature_type/document.py +43 -0
- ads/feature_engineering/feature_type/gis.py +251 -0
- ads/feature_engineering/feature_type/handler/__init__.py +5 -0
- ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
- ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
- ads/feature_engineering/feature_type/handler/warnings.py +128 -0
- ads/feature_engineering/feature_type/integer.py +142 -0
- ads/feature_engineering/feature_type/ip_address.py +144 -0
- ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
- ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
- ads/feature_engineering/feature_type/lat_long.py +256 -0
- ads/feature_engineering/feature_type/object.py +43 -0
- ads/feature_engineering/feature_type/ordinal.py +132 -0
- ads/feature_engineering/feature_type/phone_number.py +135 -0
- ads/feature_engineering/feature_type/string.py +171 -0
- ads/feature_engineering/feature_type/text.py +93 -0
- ads/feature_engineering/feature_type/unknown.py +43 -0
- ads/feature_engineering/feature_type/zip_code.py +164 -0
- ads/feature_engineering/feature_type_manager.py +406 -0
- ads/feature_engineering/schema.py +795 -0
- ads/feature_engineering/utils.py +245 -0
- ads/feature_store/.readthedocs.yaml +19 -0
- ads/feature_store/README.md +65 -0
- ads/feature_store/__init__.py +9 -0
- ads/feature_store/common/__init__.py +0 -0
- ads/feature_store/common/enums.py +339 -0
- ads/feature_store/common/exceptions.py +18 -0
- ads/feature_store/common/spark_session_singleton.py +125 -0
- ads/feature_store/common/utils/__init__.py +0 -0
- ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
- ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
- ads/feature_store/common/utils/transformation_utils.py +82 -0
- ads/feature_store/common/utils/utility.py +403 -0
- ads/feature_store/data_validation/__init__.py +0 -0
- ads/feature_store/data_validation/great_expectation.py +129 -0
- ads/feature_store/dataset.py +1230 -0
- ads/feature_store/dataset_job.py +530 -0
- ads/feature_store/docs/Dockerfile +7 -0
- ads/feature_store/docs/Makefile +44 -0
- ads/feature_store/docs/conf.py +28 -0
- ads/feature_store/docs/requirements.txt +14 -0
- ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
- ads/feature_store/docs/source/cicd.rst +137 -0
- ads/feature_store/docs/source/conf.py +86 -0
- ads/feature_store/docs/source/data_versioning.rst +33 -0
- ads/feature_store/docs/source/dataset.rst +388 -0
- ads/feature_store/docs/source/dataset_job.rst +27 -0
- ads/feature_store/docs/source/demo.rst +70 -0
- ads/feature_store/docs/source/entity.rst +78 -0
- ads/feature_store/docs/source/feature_group.rst +624 -0
- ads/feature_store/docs/source/feature_group_job.rst +29 -0
- ads/feature_store/docs/source/feature_store.rst +122 -0
- ads/feature_store/docs/source/feature_store_class.rst +123 -0
- ads/feature_store/docs/source/feature_validation.rst +66 -0
- ads/feature_store/docs/source/figures/cicd.png +0 -0
- ads/feature_store/docs/source/figures/data_validation.png +0 -0
- ads/feature_store/docs/source/figures/data_versioning.png +0 -0
- ads/feature_store/docs/source/figures/dataset.gif +0 -0
- ads/feature_store/docs/source/figures/dataset.png +0 -0
- ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
- ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
- ads/feature_store/docs/source/figures/entity.png +0 -0
- ads/feature_store/docs/source/figures/feature_group.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
- ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
- ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
- ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
- ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
- ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
- ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
- ads/feature_store/docs/source/figures/overview.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
- ads/feature_store/docs/source/figures/stats_1.png +0 -0
- ads/feature_store/docs/source/figures/stats_2.png +0 -0
- ads/feature_store/docs/source/figures/stats_d.png +0 -0
- ads/feature_store/docs/source/figures/stats_fg.png +0 -0
- ads/feature_store/docs/source/figures/transformation.png +0 -0
- ads/feature_store/docs/source/figures/transformations.gif +0 -0
- ads/feature_store/docs/source/figures/validation.png +0 -0
- ads/feature_store/docs/source/figures/validation_fg.png +0 -0
- ads/feature_store/docs/source/figures/validation_results.png +0 -0
- ads/feature_store/docs/source/figures/validation_summary.png +0 -0
- ads/feature_store/docs/source/index.rst +81 -0
- ads/feature_store/docs/source/module.rst +8 -0
- ads/feature_store/docs/source/notebook.rst +94 -0
- ads/feature_store/docs/source/overview.rst +47 -0
- ads/feature_store/docs/source/quickstart.rst +176 -0
- ads/feature_store/docs/source/release_notes.rst +194 -0
- ads/feature_store/docs/source/setup_feature_store.rst +81 -0
- ads/feature_store/docs/source/statistics.rst +58 -0
- ads/feature_store/docs/source/transformation.rst +199 -0
- ads/feature_store/docs/source/ui.rst +65 -0
- ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
- ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
- ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
- ads/feature_store/entity.py +718 -0
- ads/feature_store/execution_strategy/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
- ads/feature_store/execution_strategy/engine/__init__.py +0 -0
- ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
- ads/feature_store/execution_strategy/execution_strategy.py +113 -0
- ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
- ads/feature_store/execution_strategy/spark/__init__.py +0 -0
- ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
- ads/feature_store/feature.py +192 -0
- ads/feature_store/feature_group.py +1494 -0
- ads/feature_store/feature_group_expectation.py +346 -0
- ads/feature_store/feature_group_job.py +602 -0
- ads/feature_store/feature_lineage/__init__.py +0 -0
- ads/feature_store/feature_lineage/graphviz_service.py +180 -0
- ads/feature_store/feature_option_details.py +50 -0
- ads/feature_store/feature_statistics/__init__.py +0 -0
- ads/feature_store/feature_statistics/statistics_service.py +99 -0
- ads/feature_store/feature_store.py +699 -0
- ads/feature_store/feature_store_registrar.py +518 -0
- ads/feature_store/input_feature_detail.py +149 -0
- ads/feature_store/mixin/__init__.py +4 -0
- ads/feature_store/mixin/oci_feature_store.py +145 -0
- ads/feature_store/model_details.py +73 -0
- ads/feature_store/query/__init__.py +0 -0
- ads/feature_store/query/filter.py +266 -0
- ads/feature_store/query/generator/__init__.py +0 -0
- ads/feature_store/query/generator/query_generator.py +298 -0
- ads/feature_store/query/join.py +161 -0
- ads/feature_store/query/query.py +403 -0
- ads/feature_store/query/validator/__init__.py +0 -0
- ads/feature_store/query/validator/query_validator.py +57 -0
- ads/feature_store/response/__init__.py +0 -0
- ads/feature_store/response/response_builder.py +68 -0
- ads/feature_store/service/__init__.py +0 -0
- ads/feature_store/service/oci_dataset.py +139 -0
- ads/feature_store/service/oci_dataset_job.py +199 -0
- ads/feature_store/service/oci_entity.py +125 -0
- ads/feature_store/service/oci_feature_group.py +164 -0
- ads/feature_store/service/oci_feature_group_job.py +214 -0
- ads/feature_store/service/oci_feature_store.py +182 -0
- ads/feature_store/service/oci_lineage.py +87 -0
- ads/feature_store/service/oci_transformation.py +104 -0
- ads/feature_store/statistics/__init__.py +0 -0
- ads/feature_store/statistics/abs_feature_value.py +49 -0
- ads/feature_store/statistics/charts/__init__.py +0 -0
- ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
- ads/feature_store/statistics/charts/box_plot.py +148 -0
- ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
- ads/feature_store/statistics/charts/probability_distribution.py +68 -0
- ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
- ads/feature_store/statistics/feature_stat.py +126 -0
- ads/feature_store/statistics/generic_feature_value.py +33 -0
- ads/feature_store/statistics/statistics.py +41 -0
- ads/feature_store/statistics_config.py +101 -0
- ads/feature_store/templates/feature_store_template.yaml +45 -0
- ads/feature_store/transformation.py +499 -0
- ads/feature_store/validation_output.py +57 -0
- ads/hpo/__init__.py +9 -0
- ads/hpo/_imports.py +91 -0
- ads/hpo/ads_search_space.py +439 -0
- ads/hpo/distributions.py +325 -0
- ads/hpo/objective.py +280 -0
- ads/hpo/search_cv.py +1657 -0
- ads/hpo/stopping_criterion.py +75 -0
- ads/hpo/tuner_artifact.py +413 -0
- ads/hpo/utils.py +91 -0
- ads/hpo/validation.py +140 -0
- ads/hpo/visualization/__init__.py +5 -0
- ads/hpo/visualization/_contour.py +23 -0
- ads/hpo/visualization/_edf.py +20 -0
- ads/hpo/visualization/_intermediate_values.py +21 -0
- ads/hpo/visualization/_optimization_history.py +25 -0
- ads/hpo/visualization/_parallel_coordinate.py +169 -0
- ads/hpo/visualization/_param_importances.py +26 -0
- ads/jobs/__init__.py +53 -0
- ads/jobs/ads_job.py +663 -0
- ads/jobs/builders/__init__.py +5 -0
- ads/jobs/builders/base.py +156 -0
- ads/jobs/builders/infrastructure/__init__.py +6 -0
- ads/jobs/builders/infrastructure/base.py +165 -0
- ads/jobs/builders/infrastructure/dataflow.py +1252 -0
- ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
- ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
- ads/jobs/builders/infrastructure/utils.py +65 -0
- ads/jobs/builders/runtimes/__init__.py +5 -0
- ads/jobs/builders/runtimes/artifact.py +338 -0
- ads/jobs/builders/runtimes/base.py +325 -0
- ads/jobs/builders/runtimes/container_runtime.py +242 -0
- ads/jobs/builders/runtimes/python_runtime.py +1016 -0
- ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
- ads/jobs/cli.py +104 -0
- ads/jobs/env_var_parser.py +131 -0
- ads/jobs/extension.py +160 -0
- ads/jobs/schema/__init__.py +5 -0
- ads/jobs/schema/infrastructure_schema.json +116 -0
- ads/jobs/schema/job_schema.json +42 -0
- ads/jobs/schema/runtime_schema.json +183 -0
- ads/jobs/schema/validator.py +141 -0
- ads/jobs/serializer.py +296 -0
- ads/jobs/templates/__init__.py +5 -0
- ads/jobs/templates/container.py +6 -0
- ads/jobs/templates/driver_notebook.py +177 -0
- ads/jobs/templates/driver_oci.py +500 -0
- ads/jobs/templates/driver_python.py +48 -0
- ads/jobs/templates/driver_pytorch.py +852 -0
- ads/jobs/templates/driver_utils.py +615 -0
- ads/jobs/templates/hostname_from_env.c +55 -0
- ads/jobs/templates/oci_metrics.py +181 -0
- ads/jobs/utils.py +104 -0
- ads/llm/__init__.py +28 -0
- ads/llm/autogen/__init__.py +2 -0
- ads/llm/autogen/constants.py +15 -0
- ads/llm/autogen/reports/__init__.py +2 -0
- ads/llm/autogen/reports/base.py +67 -0
- ads/llm/autogen/reports/data.py +103 -0
- ads/llm/autogen/reports/session.py +526 -0
- ads/llm/autogen/reports/templates/chat_box.html +13 -0
- ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
- ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
- ads/llm/autogen/reports/utils.py +56 -0
- ads/llm/autogen/v02/__init__.py +4 -0
- ads/llm/autogen/v02/client.py +295 -0
- ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
- ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
- ads/llm/autogen/v02/loggers/__init__.py +6 -0
- ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
- ads/llm/autogen/v02/loggers/session_logger.py +580 -0
- ads/llm/autogen/v02/loggers/utils.py +86 -0
- ads/llm/autogen/v02/runtime_logging.py +163 -0
- ads/llm/chain.py +268 -0
- ads/llm/chat_template.py +31 -0
- ads/llm/deploy.py +63 -0
- ads/llm/guardrails/__init__.py +5 -0
- ads/llm/guardrails/base.py +442 -0
- ads/llm/guardrails/huggingface.py +44 -0
- ads/llm/langchain/__init__.py +5 -0
- ads/llm/langchain/plugins/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
- ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
- ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
- ads/llm/langchain/plugins/llms/__init__.py +5 -0
- ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
- ads/llm/requirements.txt +3 -0
- ads/llm/serialize.py +219 -0
- ads/llm/serializers/__init__.py +0 -0
- ads/llm/serializers/retrieval_qa.py +153 -0
- ads/llm/serializers/runnable_parallel.py +27 -0
- ads/llm/templates/score_chain.jinja2 +155 -0
- ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
- ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
- ads/model/__init__.py +52 -0
- ads/model/artifact.py +573 -0
- ads/model/artifact_downloader.py +254 -0
- ads/model/artifact_uploader.py +267 -0
- ads/model/base_properties.py +238 -0
- ads/model/common/.model-ignore +66 -0
- ads/model/common/__init__.py +5 -0
- ads/model/common/utils.py +142 -0
- ads/model/datascience_model.py +2635 -0
- ads/model/deployment/__init__.py +20 -0
- ads/model/deployment/common/__init__.py +5 -0
- ads/model/deployment/common/utils.py +308 -0
- ads/model/deployment/model_deployer.py +466 -0
- ads/model/deployment/model_deployment.py +1846 -0
- ads/model/deployment/model_deployment_infrastructure.py +671 -0
- ads/model/deployment/model_deployment_properties.py +493 -0
- ads/model/deployment/model_deployment_runtime.py +838 -0
- ads/model/extractor/__init__.py +5 -0
- ads/model/extractor/automl_extractor.py +74 -0
- ads/model/extractor/embedding_onnx_extractor.py +80 -0
- ads/model/extractor/huggingface_extractor.py +88 -0
- ads/model/extractor/keras_extractor.py +84 -0
- ads/model/extractor/lightgbm_extractor.py +93 -0
- ads/model/extractor/model_info_extractor.py +114 -0
- ads/model/extractor/model_info_extractor_factory.py +105 -0
- ads/model/extractor/pytorch_extractor.py +87 -0
- ads/model/extractor/sklearn_extractor.py +112 -0
- ads/model/extractor/spark_extractor.py +89 -0
- ads/model/extractor/tensorflow_extractor.py +85 -0
- ads/model/extractor/xgboost_extractor.py +94 -0
- ads/model/framework/__init__.py +5 -0
- ads/model/framework/automl_model.py +178 -0
- ads/model/framework/embedding_onnx_model.py +438 -0
- ads/model/framework/huggingface_model.py +399 -0
- ads/model/framework/lightgbm_model.py +266 -0
- ads/model/framework/pytorch_model.py +266 -0
- ads/model/framework/sklearn_model.py +250 -0
- ads/model/framework/spark_model.py +326 -0
- ads/model/framework/tensorflow_model.py +254 -0
- ads/model/framework/xgboost_model.py +258 -0
- ads/model/generic_model.py +3518 -0
- ads/model/model_artifact_boilerplate/README.md +381 -0
- ads/model/model_artifact_boilerplate/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
- ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
- ads/model/model_artifact_boilerplate/score.py +61 -0
- ads/model/model_file_description_schema.json +68 -0
- ads/model/model_introspect.py +331 -0
- ads/model/model_metadata.py +1810 -0
- ads/model/model_metadata_mixin.py +460 -0
- ads/model/model_properties.py +63 -0
- ads/model/model_version_set.py +739 -0
- ads/model/runtime/__init__.py +5 -0
- ads/model/runtime/env_info.py +306 -0
- ads/model/runtime/model_deployment_details.py +37 -0
- ads/model/runtime/model_provenance_details.py +58 -0
- ads/model/runtime/runtime_info.py +81 -0
- ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
- ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
- ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
- ads/model/runtime/utils.py +201 -0
- ads/model/serde/__init__.py +5 -0
- ads/model/serde/common.py +40 -0
- ads/model/serde/model_input.py +547 -0
- ads/model/serde/model_serializer.py +1184 -0
- ads/model/service/__init__.py +5 -0
- ads/model/service/oci_datascience_model.py +1076 -0
- ads/model/service/oci_datascience_model_deployment.py +500 -0
- ads/model/service/oci_datascience_model_version_set.py +176 -0
- ads/model/transformer/__init__.py +5 -0
- ads/model/transformer/onnx_transformer.py +324 -0
- ads/mysqldb/__init__.py +5 -0
- ads/mysqldb/mysql_db.py +227 -0
- ads/opctl/__init__.py +18 -0
- ads/opctl/anomaly_detection.py +11 -0
- ads/opctl/backend/__init__.py +5 -0
- ads/opctl/backend/ads_dataflow.py +353 -0
- ads/opctl/backend/ads_ml_job.py +710 -0
- ads/opctl/backend/ads_ml_pipeline.py +164 -0
- ads/opctl/backend/ads_model_deployment.py +209 -0
- ads/opctl/backend/base.py +146 -0
- ads/opctl/backend/local.py +1053 -0
- ads/opctl/backend/marketplace/__init__.py +9 -0
- ads/opctl/backend/marketplace/helm_helper.py +173 -0
- ads/opctl/backend/marketplace/local_marketplace.py +271 -0
- ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
- ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
- ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
- ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
- ads/opctl/backend/marketplace/models/__init__.py +5 -0
- ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
- ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
- ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
- ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
- ads/opctl/cli.py +707 -0
- ads/opctl/cmds.py +869 -0
- ads/opctl/conda/__init__.py +5 -0
- ads/opctl/conda/cli.py +193 -0
- ads/opctl/conda/cmds.py +749 -0
- ads/opctl/conda/config.yaml +34 -0
- ads/opctl/conda/manifest_template.yaml +13 -0
- ads/opctl/conda/multipart_uploader.py +188 -0
- ads/opctl/conda/pack.py +89 -0
- ads/opctl/config/__init__.py +5 -0
- ads/opctl/config/base.py +57 -0
- ads/opctl/config/diagnostics/__init__.py +5 -0
- ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
- ads/opctl/config/merger.py +255 -0
- ads/opctl/config/resolver.py +297 -0
- ads/opctl/config/utils.py +79 -0
- ads/opctl/config/validator.py +17 -0
- ads/opctl/config/versioner.py +68 -0
- ads/opctl/config/yaml_parsers/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/base.py +58 -0
- ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
- ads/opctl/constants.py +66 -0
- ads/opctl/decorator/__init__.py +5 -0
- ads/opctl/decorator/common.py +129 -0
- ads/opctl/diagnostics/__init__.py +5 -0
- ads/opctl/diagnostics/__main__.py +25 -0
- ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
- ads/opctl/diagnostics/check_requirements.py +144 -0
- ads/opctl/diagnostics/requirement_exception.py +9 -0
- ads/opctl/distributed/README.md +109 -0
- ads/opctl/distributed/__init__.py +5 -0
- ads/opctl/distributed/certificates.py +32 -0
- ads/opctl/distributed/cli.py +207 -0
- ads/opctl/distributed/cmds.py +731 -0
- ads/opctl/distributed/common/__init__.py +5 -0
- ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
- ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
- ads/opctl/distributed/common/cluster_config_helper.py +103 -0
- ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
- ads/opctl/distributed/common/cluster_runner.py +54 -0
- ads/opctl/distributed/common/framework_factory.py +29 -0
- ads/opctl/docker/Dockerfile.job +103 -0
- ads/opctl/docker/Dockerfile.job.arm +107 -0
- ads/opctl/docker/Dockerfile.job.gpu +175 -0
- ads/opctl/docker/base-env.yaml +13 -0
- ads/opctl/docker/cuda.repo +6 -0
- ads/opctl/docker/operator/.dockerignore +0 -0
- ads/opctl/docker/operator/Dockerfile +41 -0
- ads/opctl/docker/operator/Dockerfile.gpu +85 -0
- ads/opctl/docker/operator/cuda.repo +6 -0
- ads/opctl/docker/operator/environment.yaml +8 -0
- ads/opctl/forecast.py +11 -0
- ads/opctl/index.yaml +3 -0
- ads/opctl/model/__init__.py +5 -0
- ads/opctl/model/cli.py +65 -0
- ads/opctl/model/cmds.py +73 -0
- ads/opctl/operator/README.md +4 -0
- ads/opctl/operator/__init__.py +31 -0
- ads/opctl/operator/cli.py +344 -0
- ads/opctl/operator/cmd.py +596 -0
- ads/opctl/operator/common/__init__.py +5 -0
- ads/opctl/operator/common/backend_factory.py +460 -0
- ads/opctl/operator/common/const.py +27 -0
- ads/opctl/operator/common/data/synthetic.csv +16001 -0
- ads/opctl/operator/common/dictionary_merger.py +148 -0
- ads/opctl/operator/common/errors.py +42 -0
- ads/opctl/operator/common/operator_config.py +99 -0
- ads/opctl/operator/common/operator_loader.py +811 -0
- ads/opctl/operator/common/operator_schema.yaml +130 -0
- ads/opctl/operator/common/operator_yaml_generator.py +152 -0
- ads/opctl/operator/common/utils.py +208 -0
- ads/opctl/operator/lowcode/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
- ads/opctl/operator/lowcode/anomaly/README.md +207 -0
- ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
- ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
- ads/opctl/operator/lowcode/anomaly/const.py +167 -0
- ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
- ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
- ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
- ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
- ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
- ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
- ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
- ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
- ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
- ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
- ads/opctl/operator/lowcode/common/__init__.py +5 -0
- ads/opctl/operator/lowcode/common/const.py +10 -0
- ads/opctl/operator/lowcode/common/data.py +116 -0
- ads/opctl/operator/lowcode/common/errors.py +47 -0
- ads/opctl/operator/lowcode/common/transformations.py +296 -0
- ads/opctl/operator/lowcode/common/utils.py +384 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
- ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
- ads/opctl/operator/lowcode/forecast/README.md +209 -0
- ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
- ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
- ads/opctl/operator/lowcode/forecast/const.py +92 -0
- ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
- ads/opctl/operator/lowcode/forecast/errors.py +26 -0
- ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
- ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
- ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
- ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
- ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
- ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
- ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
- ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
- ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
- ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
- ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
- ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
- ads/opctl/operator/lowcode/forecast/utils.py +397 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
- ads/opctl/operator/lowcode/pii/MLoperator +17 -0
- ads/opctl/operator/lowcode/pii/README.md +208 -0
- ads/opctl/operator/lowcode/pii/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/__main__.py +78 -0
- ads/opctl/operator/lowcode/pii/cmd.py +39 -0
- ads/opctl/operator/lowcode/pii/constant.py +84 -0
- ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
- ads/opctl/operator/lowcode/pii/errors.py +27 -0
- ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
- ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
- ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
- ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
- ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
- ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
- ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
- ads/opctl/operator/lowcode/pii/model/report.py +487 -0
- ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
- ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
- ads/opctl/operator/lowcode/pii/utils.py +43 -0
- ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
- ads/opctl/operator/lowcode/recommender/README.md +206 -0
- ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
- ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
- ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
- ads/opctl/operator/lowcode/recommender/constant.py +30 -0
- ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
- ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
- ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
- ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
- ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
- ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
- ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
- ads/opctl/operator/lowcode/recommender/utils.py +13 -0
- ads/opctl/operator/runtime/__init__.py +5 -0
- ads/opctl/operator/runtime/const.py +17 -0
- ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
- ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
- ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/runtime.py +115 -0
- ads/opctl/schema.yaml.yml +36 -0
- ads/opctl/script.py +40 -0
- ads/opctl/spark/__init__.py +5 -0
- ads/opctl/spark/cli.py +43 -0
- ads/opctl/spark/cmds.py +147 -0
- ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
- ads/opctl/utils.py +344 -0
- ads/oracledb/__init__.py +5 -0
- ads/oracledb/oracle_db.py +346 -0
- ads/pipeline/__init__.py +39 -0
- ads/pipeline/ads_pipeline.py +2279 -0
- ads/pipeline/ads_pipeline_run.py +772 -0
- ads/pipeline/ads_pipeline_step.py +605 -0
- ads/pipeline/builders/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/custom_script.py +32 -0
- ads/pipeline/cli.py +119 -0
- ads/pipeline/extension.py +291 -0
- ads/pipeline/schema/__init__.py +5 -0
- ads/pipeline/schema/cs_step_schema.json +35 -0
- ads/pipeline/schema/ml_step_schema.json +31 -0
- ads/pipeline/schema/pipeline_schema.json +71 -0
- ads/pipeline/visualizer/__init__.py +5 -0
- ads/pipeline/visualizer/base.py +570 -0
- ads/pipeline/visualizer/graph_renderer.py +272 -0
- ads/pipeline/visualizer/text_renderer.py +84 -0
- ads/secrets/__init__.py +11 -0
- ads/secrets/adb.py +386 -0
- ads/secrets/auth_token.py +86 -0
- ads/secrets/big_data_service.py +365 -0
- ads/secrets/mysqldb.py +149 -0
- ads/secrets/oracledb.py +160 -0
- ads/secrets/secrets.py +407 -0
- ads/telemetry/__init__.py +7 -0
- ads/telemetry/base.py +69 -0
- ads/telemetry/client.py +122 -0
- ads/telemetry/telemetry.py +257 -0
- ads/templates/dataflow_pyspark.jinja2 +13 -0
- ads/templates/dataflow_sparksql.jinja2 +22 -0
- ads/templates/func.jinja2 +20 -0
- ads/templates/schemas/openapi.json +1740 -0
- ads/templates/score-pkl.jinja2 +173 -0
- ads/templates/score.jinja2 +322 -0
- ads/templates/score_embedding_onnx.jinja2 +202 -0
- ads/templates/score_generic.jinja2 +165 -0
- ads/templates/score_huggingface_pipeline.jinja2 +217 -0
- ads/templates/score_lightgbm.jinja2 +185 -0
- ads/templates/score_onnx.jinja2 +407 -0
- ads/templates/score_onnx_new.jinja2 +473 -0
- ads/templates/score_oracle_automl.jinja2 +185 -0
- ads/templates/score_pyspark.jinja2 +154 -0
- ads/templates/score_pytorch.jinja2 +219 -0
- ads/templates/score_scikit-learn.jinja2 +184 -0
- ads/templates/score_tensorflow.jinja2 +184 -0
- ads/templates/score_xgboost.jinja2 +178 -0
- ads/text_dataset/__init__.py +5 -0
- ads/text_dataset/backends.py +211 -0
- ads/text_dataset/dataset.py +445 -0
- ads/text_dataset/extractor.py +207 -0
- ads/text_dataset/options.py +53 -0
- ads/text_dataset/udfs.py +22 -0
- ads/text_dataset/utils.py +49 -0
- ads/type_discovery/__init__.py +9 -0
- ads/type_discovery/abstract_detector.py +21 -0
- ads/type_discovery/constant_detector.py +41 -0
- ads/type_discovery/continuous_detector.py +54 -0
- ads/type_discovery/credit_card_detector.py +99 -0
- ads/type_discovery/datetime_detector.py +92 -0
- ads/type_discovery/discrete_detector.py +118 -0
- ads/type_discovery/document_detector.py +146 -0
- ads/type_discovery/ip_detector.py +68 -0
- ads/type_discovery/latlon_detector.py +90 -0
- ads/type_discovery/phone_number_detector.py +63 -0
- ads/type_discovery/type_discovery_driver.py +87 -0
- ads/type_discovery/typed_feature.py +594 -0
- ads/type_discovery/unknown_detector.py +41 -0
- ads/type_discovery/zipcode_detector.py +48 -0
- ads/vault/__init__.py +7 -0
- ads/vault/vault.py +237 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10rc0.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/entry_points.txt +2 -1
- oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
- oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,386 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
try:
|
8
|
+
from mlx import LimeExplainer
|
9
|
+
from mlx import FDExplainer, AleExplainer
|
10
|
+
from mlx import PermutationImportance
|
11
|
+
from mlx.whatif import WhatIf
|
12
|
+
except:
|
13
|
+
pass
|
14
|
+
from ads.common import logger
|
15
|
+
from ads.dataset.helper import is_text_data
|
16
|
+
|
17
|
+
import pandas as pd
|
18
|
+
from ads.common.decorator.deprecate import deprecated
|
19
|
+
|
20
|
+
|
21
|
+
def _reset_index(x):
|
22
|
+
assert isinstance(x, pd.DataFrame) or isinstance(x, pd.Series)
|
23
|
+
return x.reset_index(drop=True)
|
24
|
+
|
25
|
+
|
26
|
+
def check_tabular_or_text(est, X):
|
27
|
+
"""
|
28
|
+
Returns "text" if a text dataset, "tabular" otherwise.
|
29
|
+
|
30
|
+
Parameters
|
31
|
+
----------
|
32
|
+
est : ADSModel
|
33
|
+
Model to explain.
|
34
|
+
X : pandas.DataFrame
|
35
|
+
Dataset.
|
36
|
+
|
37
|
+
Return
|
38
|
+
------
|
39
|
+
str
|
40
|
+
"text" or "tabular"
|
41
|
+
"""
|
42
|
+
return "text" if is_text_data(X) else "tabular"
|
43
|
+
|
44
|
+
|
45
|
+
@deprecated(
|
46
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
47
|
+
raise_error=True,
|
48
|
+
)
|
49
|
+
def init_lime_explainer(
|
50
|
+
explainer,
|
51
|
+
est,
|
52
|
+
X_train,
|
53
|
+
y_train,
|
54
|
+
mode,
|
55
|
+
class_names=None,
|
56
|
+
selected_features=None,
|
57
|
+
client=None,
|
58
|
+
batch_size=16,
|
59
|
+
surrogate_model="linear",
|
60
|
+
num_samples=5000,
|
61
|
+
exp_sorting="absolute",
|
62
|
+
discretization="decile",
|
63
|
+
scale_weight=True,
|
64
|
+
):
|
65
|
+
"""
|
66
|
+
Initializes a local LIME Explainer. Also supports aggregate local
|
67
|
+
explanations, which approximates a global behavior based on multiple local explanations.
|
68
|
+
|
69
|
+
Supports both tabular and text datasets. The explainer is initialized to the defaults
|
70
|
+
and can be updated with `MLXGlobalExplainer.configure_feature_importance()` or
|
71
|
+
`MLXLocalExplainer.configure_local_explainer()`.
|
72
|
+
|
73
|
+
Parameters
|
74
|
+
----------
|
75
|
+
explainer : LimeExplainer, None
|
76
|
+
If the explainer has previously been initialized, it can be passed in to avoid
|
77
|
+
creating a new explainer object. If `None`, a new `LimeExplainer` instance will be created.
|
78
|
+
est : ADSModel
|
79
|
+
Model to explain.
|
80
|
+
X_train : pandas.DataFrame
|
81
|
+
Training dataset.
|
82
|
+
y_train : pandas.DataFrame/Series
|
83
|
+
Training labels.
|
84
|
+
mode : str
|
85
|
+
'classification' or 'regression'.
|
86
|
+
class_names : list
|
87
|
+
List of target names.
|
88
|
+
selected_features : list[int], optional
|
89
|
+
Pass the selected features information to the explainer. Defaults value is `None`.
|
90
|
+
client : Dask Client
|
91
|
+
Specifies that Dask Client object to use in MLX. If None, no parallelization.
|
92
|
+
batch_size : int
|
93
|
+
Number of local explanations that are batched and processed by each Dask worker
|
94
|
+
in parallel.
|
95
|
+
surrogate_model : str
|
96
|
+
Surrogate model to approximate the local behavior of the ML model. Can be
|
97
|
+
'linear' or 'decision_tree'.
|
98
|
+
num_samples : int
|
99
|
+
Number of samples the local explainer generates in the local neighborhood
|
100
|
+
around the sample to explain to fit the surrogate model.
|
101
|
+
exp_sorting : str
|
102
|
+
Order of how to sort the feature importances. Can be 'absolute' or 'ordered'.
|
103
|
+
Absolute ordering orders based on the absolute values, while ordered considers
|
104
|
+
the sign of the feature importance values.
|
105
|
+
discretizer : str
|
106
|
+
Method to discretize continuous features in the local explainer. Supports 'decile',
|
107
|
+
'quartile', 'entropy', and `None`. If `None`, the continuous feature values are
|
108
|
+
used directly. If not None, each continuous feature is discretized and treated
|
109
|
+
as a categorical feature.
|
110
|
+
scale_weight : bool
|
111
|
+
Normalizes the feature importance coefficients from the local explainer to sum to one.
|
112
|
+
|
113
|
+
Return
|
114
|
+
------
|
115
|
+
:class:`mlx.LimeExplainer`
|
116
|
+
"""
|
117
|
+
if explainer is None:
|
118
|
+
exp = LimeExplainer()
|
119
|
+
else:
|
120
|
+
if not isinstance(explainer, LimeExplainer):
|
121
|
+
raise TypeError(
|
122
|
+
"Invalid explainer provided to "
|
123
|
+
"init_lime_explainer: {}".format(type(explainer))
|
124
|
+
)
|
125
|
+
exp = explainer
|
126
|
+
exp_type = check_tabular_or_text(est, X_train)
|
127
|
+
exp.set_config(
|
128
|
+
type=exp_type,
|
129
|
+
mode=mode,
|
130
|
+
discretizer=discretization,
|
131
|
+
client=client,
|
132
|
+
batch_size=batch_size,
|
133
|
+
scale_weight=scale_weight,
|
134
|
+
surrogate_model=surrogate_model,
|
135
|
+
num_samples=num_samples,
|
136
|
+
exp_sorting=exp_sorting,
|
137
|
+
kernel_width="dynamic",
|
138
|
+
)
|
139
|
+
exp.fit(
|
140
|
+
est,
|
141
|
+
X_train,
|
142
|
+
y=y_train,
|
143
|
+
target_names=class_names,
|
144
|
+
selected_features=selected_features,
|
145
|
+
)
|
146
|
+
return exp
|
147
|
+
|
148
|
+
|
149
|
+
@deprecated(
|
150
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
151
|
+
raise_error=True,
|
152
|
+
)
|
153
|
+
def init_permutation_importance_explainer(
|
154
|
+
explainer,
|
155
|
+
est,
|
156
|
+
X_train,
|
157
|
+
y_train,
|
158
|
+
mode,
|
159
|
+
class_names=None,
|
160
|
+
selected_features=None,
|
161
|
+
client=None,
|
162
|
+
random_state=42,
|
163
|
+
):
|
164
|
+
"""
|
165
|
+
Initializes a Global Feature Permutation Importance Explainer.
|
166
|
+
|
167
|
+
Supported for tabular datasets only.
|
168
|
+
|
169
|
+
The explainer is initialized to the defaults and can be updated with
|
170
|
+
MLXGlobalExplainer.configure_feature_importance().
|
171
|
+
|
172
|
+
Parameters
|
173
|
+
----------
|
174
|
+
explainer : PermutationImportance, None
|
175
|
+
If the explainer has previously been initialized, it can be passed in to avoid
|
176
|
+
creating a new explainer object. If `None`, a new `PermutationImportance` explainer
|
177
|
+
will be created.
|
178
|
+
est : ADSModel
|
179
|
+
Model to explain.
|
180
|
+
X_train : pandas.DataFrame
|
181
|
+
Training dataset.
|
182
|
+
y_train : pandas.DataFrame/Series
|
183
|
+
Training labels.
|
184
|
+
mode : str
|
185
|
+
'classification' or 'regression'.
|
186
|
+
class_names : list, optional
|
187
|
+
List of target names. Default value is `None`
|
188
|
+
selected_features : list[str], list[int], optional
|
189
|
+
Pass the selected features list to the explainer. Defaults value is `None`.
|
190
|
+
client : Dask Client, optional
|
191
|
+
Specifies that Dask Client object to use in MLX. If `None`, no parallelization.
|
192
|
+
random_state : int, optional
|
193
|
+
Random seed, by default 42.
|
194
|
+
|
195
|
+
Return
|
196
|
+
------
|
197
|
+
:class:`mlx.PermutationImportance`
|
198
|
+
"""
|
199
|
+
if explainer is None:
|
200
|
+
exp = PermutationImportance()
|
201
|
+
else:
|
202
|
+
if not isinstance(explainer, PermutationImportance):
|
203
|
+
raise TypeError(
|
204
|
+
"Invalid explainer provided to "
|
205
|
+
"init_permutation_importance_explainer: {}".format(type(explainer))
|
206
|
+
)
|
207
|
+
exp = explainer
|
208
|
+
if check_tabular_or_text(est, X_train) == "text":
|
209
|
+
raise TypeError(
|
210
|
+
"Global feature importance explainers are currently not "
|
211
|
+
"supported for text datasets."
|
212
|
+
)
|
213
|
+
exp.set_config(mode=mode, client=client, random_state=random_state)
|
214
|
+
try:
|
215
|
+
exp.fit(
|
216
|
+
est,
|
217
|
+
X_train,
|
218
|
+
y=y_train,
|
219
|
+
target_names=class_names,
|
220
|
+
selected_features=selected_features,
|
221
|
+
)
|
222
|
+
except Exception as e:
|
223
|
+
logger.error(
|
224
|
+
f"Unable to construct the PermutationImportance explainer based on the MLX config "
|
225
|
+
f"and fit to the train data due to: {e}."
|
226
|
+
)
|
227
|
+
raise e
|
228
|
+
return exp
|
229
|
+
|
230
|
+
|
231
|
+
@deprecated(
|
232
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
233
|
+
raise_error=True,
|
234
|
+
)
|
235
|
+
def init_partial_dependence_explainer(
|
236
|
+
explainer, est, X_train, y_train, mode, class_names=None, client=None
|
237
|
+
):
|
238
|
+
"""
|
239
|
+
Initializes a Global feature dependence explainer.
|
240
|
+
|
241
|
+
Supports one and two feature partial dependence plots (PDP) and one feature individual
|
242
|
+
conditional expectation plots (ICE). Currently only supported for tabular datasets
|
243
|
+
(text is not supported).
|
244
|
+
|
245
|
+
The explainer is initialized to the defaults and can be updated with
|
246
|
+
`MLXGlobalExplainer.configure_partial_dependence()`.
|
247
|
+
|
248
|
+
Parameters
|
249
|
+
----------
|
250
|
+
explainer : FDExplainer
|
251
|
+
If the explainer has previously been initialized, it can be passed in to avoid
|
252
|
+
creating a new explainer object. If None, a new `FDExplainer` will be created.
|
253
|
+
est : ADSModel
|
254
|
+
Model to explain.
|
255
|
+
X_train : pandas.DataFrame
|
256
|
+
Training dataset.
|
257
|
+
y_train : pandas.DataFrame/Series
|
258
|
+
Training labels.
|
259
|
+
mode : str
|
260
|
+
'classification' or 'regression'.
|
261
|
+
class_names : list
|
262
|
+
List of target names.
|
263
|
+
client : Dask Client
|
264
|
+
Specifies that Dask Client object to use in MLX. If None, no parallelization.
|
265
|
+
|
266
|
+
Return
|
267
|
+
------
|
268
|
+
:class:`mlx.FDExplainer`
|
269
|
+
"""
|
270
|
+
if explainer is None:
|
271
|
+
exp = FDExplainer()
|
272
|
+
else:
|
273
|
+
if not isinstance(explainer, FDExplainer):
|
274
|
+
raise TypeError(
|
275
|
+
"Invalid explainer provided to "
|
276
|
+
"init_partial_dependence_explainer: {}".format(type(explainer))
|
277
|
+
)
|
278
|
+
exp = explainer
|
279
|
+
if check_tabular_or_text(est, X_train) == "text":
|
280
|
+
raise TypeError(
|
281
|
+
"Global partial dependence explainers are currently not "
|
282
|
+
"supported for text datasets."
|
283
|
+
)
|
284
|
+
exp.set_config(mode=mode, client=client)
|
285
|
+
exp.fit(est, X_train, y=y_train, target_names=class_names)
|
286
|
+
return exp
|
287
|
+
|
288
|
+
|
289
|
+
@deprecated(
|
290
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
291
|
+
raise_error=True,
|
292
|
+
)
|
293
|
+
def init_ale_explainer(
|
294
|
+
explainer, est, X_train, y_train, mode, class_names=None, client=None
|
295
|
+
):
|
296
|
+
"""
|
297
|
+
Initializes a Global Accumulated Local Effects(ALE) Explainer.
|
298
|
+
|
299
|
+
Supports one feature ALE plots. Supported for tabular datasets
|
300
|
+
(text is not supported).
|
301
|
+
|
302
|
+
The explainer is initialized to the defaults and can be updated with
|
303
|
+
`MLXGlobalExplainer.configure_accumulated_local_effects()`.
|
304
|
+
|
305
|
+
Parameters
|
306
|
+
----------
|
307
|
+
explainer : AleExplainer
|
308
|
+
If the explainer has previously been initialized, it can be passed in to avoid
|
309
|
+
creating a new explainer object. If None, a new AleExplainer will be created.
|
310
|
+
est : ADSModel
|
311
|
+
Model to explain.
|
312
|
+
X_train : pandas.DataFrame
|
313
|
+
Training dataset.
|
314
|
+
y_train : pandas.DataFrame/Series
|
315
|
+
Training labels.
|
316
|
+
mode : str
|
317
|
+
"classification" or "regression".
|
318
|
+
class_names : list, optional
|
319
|
+
List of target names. Default value is `None`.
|
320
|
+
client : Dask Client, optional
|
321
|
+
Specifies that Dask Client object to use in MLX. If `None`, no parallelization.
|
322
|
+
|
323
|
+
Return
|
324
|
+
------
|
325
|
+
:class:`mlx.FDExplainer`
|
326
|
+
"""
|
327
|
+
if explainer is None:
|
328
|
+
exp = AleExplainer()
|
329
|
+
else:
|
330
|
+
if not isinstance(explainer, AleExplainer):
|
331
|
+
raise TypeError(
|
332
|
+
"Invalid explainer provided to "
|
333
|
+
"init_partial_dependence_explainer: {}".format(type(explainer))
|
334
|
+
)
|
335
|
+
exp = explainer
|
336
|
+
if check_tabular_or_text(est, X_train) == "text":
|
337
|
+
raise TypeError(
|
338
|
+
"Global partial dependence explainers are currently not "
|
339
|
+
"supported for text datasets."
|
340
|
+
)
|
341
|
+
exp.set_config(mode=mode, client=client)
|
342
|
+
exp.fit(est, X_train, y=y_train, target_names=class_names)
|
343
|
+
return exp
|
344
|
+
|
345
|
+
|
346
|
+
@deprecated(
|
347
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
348
|
+
raise_error=True,
|
349
|
+
)
|
350
|
+
def init_whatif_explainer(
|
351
|
+
explainer,
|
352
|
+
est,
|
353
|
+
X_test,
|
354
|
+
y_test,
|
355
|
+
mode,
|
356
|
+
class_names=None,
|
357
|
+
train=None,
|
358
|
+
target_title="target",
|
359
|
+
random_state=42,
|
360
|
+
**kwargs,
|
361
|
+
):
|
362
|
+
if explainer is None:
|
363
|
+
width = kwargs.get("width", 1100)
|
364
|
+
exp = WhatIf(mode=mode, random_state=random_state, width=width)
|
365
|
+
else:
|
366
|
+
if not isinstance(explainer, WhatIf):
|
367
|
+
raise TypeError(
|
368
|
+
"Invalid explorer provided to "
|
369
|
+
"init_explorer: {}".format(type(explainer))
|
370
|
+
)
|
371
|
+
exp = explainer
|
372
|
+
exp_type = check_tabular_or_text(est, X_test)
|
373
|
+
if exp_type == "text":
|
374
|
+
raise TypeError(
|
375
|
+
"WhatIf explainer are currently not "
|
376
|
+
"supported for text datasets.".format(type(explainer))
|
377
|
+
)
|
378
|
+
exp.fit(
|
379
|
+
model=est,
|
380
|
+
X=X_test,
|
381
|
+
y=y_test,
|
382
|
+
target_names=class_names,
|
383
|
+
train=train,
|
384
|
+
target_title=target_title,
|
385
|
+
)
|
386
|
+
return exp
|
@@ -0,0 +1,287 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2023 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import numpy as np
|
8
|
+
import pandas as pd
|
9
|
+
from ads.common import logger
|
10
|
+
from ads.explanations.base_explainer import LocalExplainer
|
11
|
+
from ads.explanations.mlx_interface import init_lime_explainer
|
12
|
+
from ads.common.decorator.deprecate import deprecated
|
13
|
+
|
14
|
+
|
15
|
+
class MLXLocalExplainer(LocalExplainer):
|
16
|
+
"""
|
17
|
+
Local Explainer class.
|
18
|
+
|
19
|
+
Generates explanations for single predictions from machine learning models.
|
20
|
+
For tabular and text datasets, supports
|
21
|
+
|
22
|
+
- Binary classification
|
23
|
+
- Multi-class classification
|
24
|
+
- Regression
|
25
|
+
"""
|
26
|
+
|
27
|
+
@deprecated(
|
28
|
+
details="Working with AutoML has moved from within ADS to working directly with the AutoMLx library. AutoMLx are preinstalled in conda pack automlx_p38_cpu_v2 and later, and can now be updated independently of ADS. AutoMLx documentation may be found at https://docs.oracle.com/en-us/iaas/tools/automlx/latest/html/multiversion/v23.1.1/index.html. Notebook examples are in Oracle's samples repository: https://github.com/oracle-samples/oci-data-science-ai-samples/tree/master/notebook_examples and a migration tutorial can be found at https://accelerated-data-science.readthedocs.io/en/latest/user_guide/model_training/automl/quick_start.html .",
|
29
|
+
raise_error=True,
|
30
|
+
)
|
31
|
+
def __init__(self):
|
32
|
+
super(LocalExplainer, self).__init__()
|
33
|
+
self.explainer = None
|
34
|
+
|
35
|
+
def explain(
|
36
|
+
self,
|
37
|
+
row,
|
38
|
+
y=None,
|
39
|
+
num_features=None,
|
40
|
+
report_fidelity=True,
|
41
|
+
validation_percentiles=None,
|
42
|
+
selected_features=None,
|
43
|
+
):
|
44
|
+
"""
|
45
|
+
Explains the sample, row. Returns a local explanation object.
|
46
|
+
|
47
|
+
Parameters
|
48
|
+
----------
|
49
|
+
row : pandas.DataFrame
|
50
|
+
Pandas DataFrame of one row (instance) to explain.
|
51
|
+
y : pandas.DataFrame/Series, optional
|
52
|
+
True target label/value for row. Default value is `None`.
|
53
|
+
num_features : int, optional
|
54
|
+
Number of features to show in the local explanation. By default `None`,
|
55
|
+
which includes all features.
|
56
|
+
report_fidelity : bool, optional
|
57
|
+
If `True`, the explanation quality (fidelity) is computed and shown in
|
58
|
+
the local explanation visualization. Default value is `True`.
|
59
|
+
validation_percentiles : list of int, optional
|
60
|
+
List of values specifying the different regions to evaluate the local explanation model
|
61
|
+
quality (fidelity). This is specified in percentiles of the distances from the
|
62
|
+
instance to explain to all of the samples in the dataset used to fit the explainer.
|
63
|
+
For example, [1, 5, 10], generates three evaluation datasets with a maximum distance from
|
64
|
+
the instance to explain (row) of 1, 5, and 10 percentiles of the distances from the instance
|
65
|
+
to explain (row) and all other samples in the train set. The evaluation dataset at percentile
|
66
|
+
1 is very local to the sample to explain, the evaluation dataset at percentile 10 evaluates
|
67
|
+
the explanation quality further away from the instance to explain (row). This can be helpful
|
68
|
+
to see how the explanation generalizes to nearby samples. By default None ([1, 5, 15]).
|
69
|
+
selected_features: list[int], optional
|
70
|
+
List of the selected features (list of numbers of features). It can be any subset of
|
71
|
+
the original features that are in the dataset provided to the model.
|
72
|
+
Default value is None.
|
73
|
+
|
74
|
+
Return
|
75
|
+
------
|
76
|
+
LocalExplanation
|
77
|
+
Local explanation object.
|
78
|
+
"""
|
79
|
+
self.configure_local_explainer(selected_features=selected_features)
|
80
|
+
assert row is not None and isinstance(row, pd.DataFrame) and row.shape[0] == 1
|
81
|
+
|
82
|
+
labels = list(range(len(self.class_names)))
|
83
|
+
|
84
|
+
if num_features is None:
|
85
|
+
num_features = len(row.columns.values)
|
86
|
+
|
87
|
+
try:
|
88
|
+
explanation = self.explainer.compute(
|
89
|
+
row.copy(),
|
90
|
+
y=None if y is None else y.copy(),
|
91
|
+
labels=labels,
|
92
|
+
verbose=False,
|
93
|
+
num_features=num_features,
|
94
|
+
report_fidelity=report_fidelity,
|
95
|
+
validation_percentiles=validation_percentiles,
|
96
|
+
)[0]
|
97
|
+
except IndexError as e:
|
98
|
+
if selected_features is not None:
|
99
|
+
raise IndexError(
|
100
|
+
f"Unable to generate local explanations due to: {e}. "
|
101
|
+
f"selected_features must be a list of features within the bounds of the existing features "
|
102
|
+
f"(that were provided to model). Provided selected_features: {selected_features}."
|
103
|
+
)
|
104
|
+
except Exception as e:
|
105
|
+
logger.error(f"Unable to generate local explanations due to: {e}.")
|
106
|
+
raise e
|
107
|
+
|
108
|
+
return LocalExplanation(explanation, self.class_names)
|
109
|
+
|
110
|
+
def configure_local_explainer(self, **kwargs):
|
111
|
+
"""
|
112
|
+
Validates the local explanation configuration parameters and initializes the local
|
113
|
+
explainer with the provided configuration parameters.
|
114
|
+
|
115
|
+
Supported configuration options in kwargs:
|
116
|
+
- `surrogate_model` (str): Surrogate model to use. Can be 'linear' or 'decision_tree'.
|
117
|
+
- `num_samples` (int): Number of generated samples to fit the surrogate model.
|
118
|
+
- `exp_sorting` (str): Feature importance sorting. Can be 'absolute' or 'ordered'.
|
119
|
+
- `scale_weight` (bool): Normalizes the feature importance coefficients from LIME to sum to one.
|
120
|
+
- `client`: Only allowed to be None to disable parallelization.
|
121
|
+
- `batch_size` (int): Number of local explanations per Dask worker.
|
122
|
+
- `random_state` (`None` or `int` or instance of `RandomState`): the random state.
|
123
|
+
- `selected_features` (`None`, or `list`): list of the selected features numbers.
|
124
|
+
|
125
|
+
Parameters
|
126
|
+
----------
|
127
|
+
**kwargs : dict
|
128
|
+
Keyword parameter dictionary.
|
129
|
+
|
130
|
+
Return
|
131
|
+
------
|
132
|
+
MLXLocalExplainer
|
133
|
+
Modified instance (self)
|
134
|
+
"""
|
135
|
+
avail_args = [
|
136
|
+
"client",
|
137
|
+
"surrogate_model",
|
138
|
+
"num_samples",
|
139
|
+
"exp_sorting",
|
140
|
+
"scale_weight",
|
141
|
+
"batch_size",
|
142
|
+
"selected_features",
|
143
|
+
]
|
144
|
+
for k, v in kwargs.items():
|
145
|
+
if k not in avail_args:
|
146
|
+
raise ValueError(
|
147
|
+
"Unexpected argument for the local explainer: {}".format(k)
|
148
|
+
)
|
149
|
+
if kwargs.get("client", None) is not None:
|
150
|
+
raise ValueError(
|
151
|
+
"Invalid client provided. Currently only supports disabling parallelization "
|
152
|
+
"by setting client=None"
|
153
|
+
)
|
154
|
+
if kwargs.get("surrogate_model", None) not in ["linear", "decision_tree", None]:
|
155
|
+
raise ValueError(
|
156
|
+
"Invalid surrogate_model provided. Currently only supports linear or decision_tree"
|
157
|
+
)
|
158
|
+
selected_features = kwargs.get("selected_features", None)
|
159
|
+
if selected_features is not None and not isinstance(selected_features, list):
|
160
|
+
raise ValueError(
|
161
|
+
f"selected_features ({selected_features}) value must be a list of features, "
|
162
|
+
f"but it is of type: {type(selected_features)}."
|
163
|
+
)
|
164
|
+
|
165
|
+
self._init_explainer(**kwargs)
|
166
|
+
return self
|
167
|
+
|
168
|
+
def summary(self):
|
169
|
+
"""
|
170
|
+
Displays detailed information about the local LIME explainer.
|
171
|
+
|
172
|
+
Return
|
173
|
+
------
|
174
|
+
str
|
175
|
+
HTML object representing the explainer summary.
|
176
|
+
"""
|
177
|
+
if self.explainer is None:
|
178
|
+
self.configure_local_explainer()
|
179
|
+
return self.explainer.show_in_notebook()
|
180
|
+
|
181
|
+
def _init_explainer(self, **kwargs):
|
182
|
+
"""
|
183
|
+
Internal function to initialize the local explainer.
|
184
|
+
|
185
|
+
Parameters
|
186
|
+
----------
|
187
|
+
**kwargs : dict
|
188
|
+
Keyword parameter dictionary.
|
189
|
+
"""
|
190
|
+
if self.mode == "regression":
|
191
|
+
self.class_names_ = ["Target"]
|
192
|
+
self.explainer = init_lime_explainer(
|
193
|
+
self.explainer,
|
194
|
+
self.est,
|
195
|
+
self.X_train,
|
196
|
+
self.y_train,
|
197
|
+
self.mode,
|
198
|
+
class_names=self.class_names,
|
199
|
+
**kwargs,
|
200
|
+
)
|
201
|
+
|
202
|
+
|
203
|
+
class LocalExplanation:
|
204
|
+
"""
|
205
|
+
Local explanation object constructed by the :class:`MLXLocalExplainer`.
|
206
|
+
|
207
|
+
Contains functions to visualize the explanation and extract the
|
208
|
+
raw explanation data.
|
209
|
+
"""
|
210
|
+
|
211
|
+
def __init__(self, explanation, class_names):
|
212
|
+
self.explanation = explanation
|
213
|
+
self.class_names = class_names
|
214
|
+
if isinstance(self.class_names, np.ndarray):
|
215
|
+
self.class_names = self.class_names.tolist()
|
216
|
+
|
217
|
+
def show_in_notebook(
|
218
|
+
self, mode="lime", labels=None, colormap=None, return_wordcloud=False, **kwargs
|
219
|
+
):
|
220
|
+
"""
|
221
|
+
Generate a local explanation visualization for this explanation object.
|
222
|
+
|
223
|
+
Contains:
|
224
|
+
- Information about the model's prediction and the true target label/value.
|
225
|
+
- The instance being explained.
|
226
|
+
- Information about the local explainer configuration parameters.
|
227
|
+
- Legend describing how to interpret the explanation.
|
228
|
+
- The actual explanation (ordered list of +/- feature importances).
|
229
|
+
- Quality (fidelity) evaluation of the explanation.
|
230
|
+
|
231
|
+
Parameters
|
232
|
+
----------
|
233
|
+
mode : str
|
234
|
+
Type of visualization to generate for the explanation. `mode` can be one of the following:
|
235
|
+
- **lime**: Horizontal bar chart where each feature contributes either to an increase
|
236
|
+
or decrease in the target value.
|
237
|
+
- **stacked**: Stacked horizontal bar chart where each feature contributes either to an
|
238
|
+
increase or decrease in the target value.
|
239
|
+
- **dual**: Horizontal bar chart where each feature can contribute both to an increase
|
240
|
+
or decrease in the target value (only supported when the :class:`MLXLocalExplainer`
|
241
|
+
surrogate model is set to "decision_tree").
|
242
|
+
- **wordcloud**: Word cloud highlighting the important features/words for a given target
|
243
|
+
label/value. Features/ or words with higher importance are larger than those
|
244
|
+
of a lower importance.
|
245
|
+
labels : tuple, list, int, bool, str
|
246
|
+
Label indices or name of label to visualize. If `None`, all of the labels that the
|
247
|
+
explanation was generated for will be visualized. Default value is `None`.
|
248
|
+
colormap : list of str, optional
|
249
|
+
List of standard colormaps to use for the wordclouds. One per label. Defaults to `None`.
|
250
|
+
return_wordcloud : bool, optional
|
251
|
+
If `True`, the wordcloud objects are returned instead of visualized. Defaults to `False`.
|
252
|
+
**kwargs : dict
|
253
|
+
Keyword dictionary for configuring the wordclouds.
|
254
|
+
|
255
|
+
Return
|
256
|
+
------
|
257
|
+
HTML or pyplot figure
|
258
|
+
Returns an HTML object for this local explanation. If `mode=wordcloud` and `return_wordcloud=True`,
|
259
|
+
returns the wordcloud
|
260
|
+
"""
|
261
|
+
if labels is None:
|
262
|
+
labels = (0,)
|
263
|
+
if np.isscalar(labels):
|
264
|
+
labels = [labels]
|
265
|
+
labels = [
|
266
|
+
self.class_names.index(label) if isinstance(label, str) else label
|
267
|
+
for label in labels
|
268
|
+
]
|
269
|
+
return self.explanation.show_in_notebook(
|
270
|
+
mode=mode,
|
271
|
+
labels=labels,
|
272
|
+
colormap=colormap,
|
273
|
+
return_wordcloud=return_wordcloud,
|
274
|
+
**kwargs,
|
275
|
+
)
|
276
|
+
|
277
|
+
def get_diagnostics(self):
|
278
|
+
"""
|
279
|
+
Extracts the raw explanation and evaluation data from the explanation object to generate
|
280
|
+
the visualizations.
|
281
|
+
|
282
|
+
Return
|
283
|
+
------
|
284
|
+
dict
|
285
|
+
Dictionary containing the raw explanation/evaluation data.
|
286
|
+
"""
|
287
|
+
return self.explanation.get_diagnostic()
|