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
ads/common/data.py
ADDED
@@ -0,0 +1,165 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2022 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
|
+
from ads.common.utils import _is_dask_dataframe, _is_dask_series
|
9
|
+
|
10
|
+
|
11
|
+
class ADSData(object):
|
12
|
+
def __init__(self, X=None, y=None, name="", dataset_type=None):
|
13
|
+
r"""
|
14
|
+
This class wraps the input dataframe to various models, evaluation, and explanation frameworks.
|
15
|
+
It's primary purpose is to hold any metadata relevant to these tasks. This can include it's:
|
16
|
+
|
17
|
+
- X - the independent variables as some dataframe-like structure,
|
18
|
+
- y - the dependent variable or target column as some array-like structure,
|
19
|
+
- name - a string to name the data for user convenience,
|
20
|
+
- dataset_type - the type of the X value.
|
21
|
+
|
22
|
+
As part of this initiative, ADSData knows how to turn itself into an onnxruntime compatible data
|
23
|
+
structure with the method .to_onnxrt(), which takes and onnx session as input.
|
24
|
+
|
25
|
+
Parameters
|
26
|
+
----------
|
27
|
+
X : Union[pandas.DataFrame, dask.DataFrame, numpy.ndarray, scipy.sparse.csr.csr_matrix]
|
28
|
+
If str, URI for the dataset. The dataset could be read from local or network file system, hdfs, s3 and gcs
|
29
|
+
Should be none if X_train, y_train, X_test, Y_test are provided
|
30
|
+
y: Union[str, pandas.DataFrame, dask.DataFrame, pandas.Series, dask.Series, numpy.ndarray]
|
31
|
+
If str, name of the target in X, otherwise series of labels corresponding to X
|
32
|
+
name: str, optional
|
33
|
+
Name to identify this data
|
34
|
+
dataset_type: ADSDataset optional
|
35
|
+
When this value is available, would be used to evaluate the ads task type
|
36
|
+
kwargs:
|
37
|
+
Additional keyword arguments that would be passed to the underlying Pandas read API.
|
38
|
+
"""
|
39
|
+
self.X = X
|
40
|
+
self.y = y
|
41
|
+
self.name = name
|
42
|
+
self.dataset_type = dataset_type
|
43
|
+
|
44
|
+
@staticmethod
|
45
|
+
def build(X=None, y=None, name="", dataset_type=None, **kwargs):
|
46
|
+
r"""
|
47
|
+
Returns an ADSData object built from the (source, target) or (X,y)
|
48
|
+
|
49
|
+
Parameters
|
50
|
+
----------
|
51
|
+
X : Union[pandas.DataFrame, dask.DataFrame, numpy.ndarray, scipy.sparse.csr.csr_matrix]
|
52
|
+
If str, URI for the dataset. The dataset could be read from local or network file system, hdfs, s3 and gcs
|
53
|
+
Should be none if X_train, y_train, X_test, Y_test are provided
|
54
|
+
y: Union[str, pandas.DataFrame, dask.DataFrame, pandas.Series, dask.Series, numpy.ndarray]
|
55
|
+
If str, name of the target in X, otherwise series of labels corresponding to X
|
56
|
+
name: str, optional
|
57
|
+
Name to identify this data
|
58
|
+
dataset_type: ADSDataset, optional
|
59
|
+
When this value is available, would be used to evaluate the ads task
|
60
|
+
type
|
61
|
+
kwargs:
|
62
|
+
Additional keyword arguments that would be passed to the underlying Pandas read API.
|
63
|
+
|
64
|
+
Returns
|
65
|
+
-------
|
66
|
+
ads_data: ads.common.data.ADSData
|
67
|
+
A built ADSData object
|
68
|
+
|
69
|
+
Examples
|
70
|
+
--------
|
71
|
+
>>> data = open_csv("my.csv")
|
72
|
+
|
73
|
+
>>> data_ads = ADSData(data, 'target').build(data, 'target')
|
74
|
+
"""
|
75
|
+
if X is None or y is None:
|
76
|
+
raise ValueError("Both X and y are required.")
|
77
|
+
if _is_dask_dataframe(X):
|
78
|
+
X = X.compute()
|
79
|
+
if _is_dask_series(y):
|
80
|
+
y = y.compute()
|
81
|
+
if dataset_type is None:
|
82
|
+
dataset_type = type(X)
|
83
|
+
if isinstance(y, str):
|
84
|
+
try:
|
85
|
+
return ADSData(
|
86
|
+
X.drop(y, axis=1), X[y], name=name, dataset_type=dataset_type
|
87
|
+
)
|
88
|
+
except AttributeError:
|
89
|
+
raise ValueError(
|
90
|
+
"If y is a string, then X must be a pandas or dask dataframe"
|
91
|
+
)
|
92
|
+
else:
|
93
|
+
return ADSData(X, y, name=name, dataset_type=dataset_type)
|
94
|
+
|
95
|
+
def __repr__(self):
|
96
|
+
return "%sShape of X:%s\nShape of y:%s" % (
|
97
|
+
self.name + "\n",
|
98
|
+
str(self.X.shape),
|
99
|
+
str(self.y.shape),
|
100
|
+
)
|
101
|
+
|
102
|
+
def to_onnxrt(
|
103
|
+
self, sess, idx_range=None, model=None, impute_values={}, **kwargs
|
104
|
+
): # pragma: no cover
|
105
|
+
r"""
|
106
|
+
Returns itself formatted as an input for the onnxruntime session inputs passed in.
|
107
|
+
|
108
|
+
Parameters
|
109
|
+
----------
|
110
|
+
sess: Session
|
111
|
+
The session object
|
112
|
+
idx_range: Range
|
113
|
+
The range of inputs to convert to onnx
|
114
|
+
model: SupportedModel
|
115
|
+
A model that supports being serialized for the onnx runtime.
|
116
|
+
kwargs: additional keyword arguments
|
117
|
+
|
118
|
+
- sess_inputs - Pass in the output from onnxruntime.InferenceSession("model.onnx").get_inputs()
|
119
|
+
- input_dtypes (list) - If sess_inputs cannot be passed in, pass in the numpy dtypes of each input
|
120
|
+
- input_shapes (list) - If sess_inputs cannot be passed in, pass in the shape of each input
|
121
|
+
- input_names (list) -If sess_inputs cannot be passed in, pass in the name of each input
|
122
|
+
|
123
|
+
Returns
|
124
|
+
-------
|
125
|
+
ort: Array
|
126
|
+
array of inputs formatted for the given session.
|
127
|
+
"""
|
128
|
+
if model._underlying_model in ["torch"]:
|
129
|
+
sess_inputs = sess.get_inputs()
|
130
|
+
in_shape, in_name, in_type = [], [], []
|
131
|
+
for i, ftr in enumerate(sess_inputs):
|
132
|
+
in_type.append(ftr.type)
|
133
|
+
in_shape.append(ftr.shape)
|
134
|
+
in_name.append(ftr.name)
|
135
|
+
ret = {}
|
136
|
+
for i, name in enumerate(in_name):
|
137
|
+
idx_range = (0, len(self.X)) if idx_range is None else idx_range
|
138
|
+
batch_size = idx_range[1] - idx_range[0]
|
139
|
+
ret[name] = (
|
140
|
+
self.X[:batch_size]
|
141
|
+
.reshape([batch_size] + list(self.X[:1].shape))
|
142
|
+
.detach()
|
143
|
+
.cpu()
|
144
|
+
.numpy()
|
145
|
+
.astype(np.float32)
|
146
|
+
)
|
147
|
+
return ret
|
148
|
+
elif model._underlying_model in ["automl"]:
|
149
|
+
X_trans = model._onnx_data_transformer(
|
150
|
+
X=self.X, impute_values=impute_values
|
151
|
+
)
|
152
|
+
inputs = {}
|
153
|
+
for idx, c in enumerate(X_trans.columns):
|
154
|
+
inputs[sess.get_inputs()[idx].name] = (
|
155
|
+
X_trans[c]
|
156
|
+
.values.reshape((X_trans.shape[0], 1))
|
157
|
+
.astype(X_trans.dtypes[idx])
|
158
|
+
)
|
159
|
+
return inputs
|
160
|
+
elif model._underlying_model in ["lightgbm", "xgboost", "sklearn"]:
|
161
|
+
idx_range = (0, len(self.X)) if idx_range is None else idx_range
|
162
|
+
inputs = []
|
163
|
+
for name, row in self.X[idx_range[0] : idx_range[1]].iterrows():
|
164
|
+
inputs.append(list(row))
|
165
|
+
return {"input": inputs}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
# Copyright (c) 2024 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
|
6
|
+
from ads.common.decorator.require_nonempty_arg import require_nonempty_arg
|
7
|
+
from ads.common.decorator.argument_to_case import argument_to_case
|
8
|
+
from ads.common.decorator.deprecate import deprecated
|
9
|
+
from ads.common.decorator.runtime_dependency import runtime_dependency
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2022 Oracle and its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
"""
|
8
|
+
The module that provides the decorator helping to convert function arguments
|
9
|
+
to specific case (lower/upper).
|
10
|
+
|
11
|
+
Examples
|
12
|
+
--------
|
13
|
+
>>> @argument_to_case("lower", ["name"])
|
14
|
+
... def test_function(name: str, last_name: str)
|
15
|
+
... print(name)
|
16
|
+
...
|
17
|
+
>>> test_function("myname", "mylastname")
|
18
|
+
... MYNAME
|
19
|
+
"""
|
20
|
+
|
21
|
+
import inspect
|
22
|
+
from copy import copy
|
23
|
+
from enum import Enum
|
24
|
+
from functools import wraps
|
25
|
+
from typing import Callable, List
|
26
|
+
|
27
|
+
from .utils import _get_original_func
|
28
|
+
|
29
|
+
|
30
|
+
class ArgumentCase(Enum):
|
31
|
+
LOWER = "lower"
|
32
|
+
UPPER = "upper"
|
33
|
+
|
34
|
+
|
35
|
+
def argument_to_case(case: ArgumentCase, arguments: List[str]):
|
36
|
+
"""The decorator helping to convert function arguments to specific case.
|
37
|
+
|
38
|
+
Parameters
|
39
|
+
----------
|
40
|
+
case: ArgumentCase
|
41
|
+
The case to convert specific arguments.
|
42
|
+
arguments: List[str]
|
43
|
+
The list of arguments to convert to specific case.
|
44
|
+
|
45
|
+
Examples
|
46
|
+
--------
|
47
|
+
>>> @argument_to_case("lower", ["name"])
|
48
|
+
... def test_function(name: str, last_name: str)
|
49
|
+
... print(name)
|
50
|
+
...
|
51
|
+
>>> test_function("myname", "mylastname")
|
52
|
+
... MYNAME
|
53
|
+
"""
|
54
|
+
|
55
|
+
def decorator(func: Callable):
|
56
|
+
@wraps(func)
|
57
|
+
def wrapper(*args, **kwargs):
|
58
|
+
# Retrieving the original function from the decorated one.
|
59
|
+
# This is necessary when the chain of decorators is used.
|
60
|
+
# The only original function arguments should be processed.
|
61
|
+
original_func = _get_original_func(func)
|
62
|
+
# Getting the original function arguments
|
63
|
+
func_args = inspect.getfullargspec(original_func).args
|
64
|
+
# Saving original args and kwargs.
|
65
|
+
new_args = list(copy(args))
|
66
|
+
new_kwargs = copy(kwargs)
|
67
|
+
# Converting args and kwargs to the specific case.
|
68
|
+
for func_arg in func_args:
|
69
|
+
if func_arg in arguments:
|
70
|
+
if func_arg in new_kwargs:
|
71
|
+
new_kwargs[func_arg] = (
|
72
|
+
new_kwargs[func_arg].lower()
|
73
|
+
if case == ArgumentCase.LOWER
|
74
|
+
else new_kwargs[func_arg].upper()
|
75
|
+
)
|
76
|
+
else:
|
77
|
+
arg_index = func_args.index(func_arg)
|
78
|
+
if arg_index >= 0:
|
79
|
+
new_args[arg_index] = (
|
80
|
+
new_args[arg_index].lower()
|
81
|
+
if case == ArgumentCase.LOWER
|
82
|
+
else new_args[arg_index].upper()
|
83
|
+
)
|
84
|
+
return func(*new_args, **new_kwargs)
|
85
|
+
|
86
|
+
return wrapper
|
87
|
+
|
88
|
+
return decorator
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2021, 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 warnings
|
8
|
+
from enum import Enum
|
9
|
+
from functools import wraps
|
10
|
+
|
11
|
+
|
12
|
+
class NotSupportedError(Exception): # pragma: no cover
|
13
|
+
pass
|
14
|
+
|
15
|
+
|
16
|
+
class TARGET_TYPE(Enum):
|
17
|
+
CLASS = "Class"
|
18
|
+
METHOD = "Method"
|
19
|
+
ATTRIBUTE = "Attribute"
|
20
|
+
|
21
|
+
|
22
|
+
def deprecated(
|
23
|
+
deprecated_in: str = None,
|
24
|
+
removed_in: str = None,
|
25
|
+
details: str = None,
|
26
|
+
target_type: str = None,
|
27
|
+
raise_error: bool = False,
|
28
|
+
):
|
29
|
+
"""This is a decorator which can be used to mark functions
|
30
|
+
as deprecated. It will result in a warning being emitted
|
31
|
+
when the function is used.
|
32
|
+
|
33
|
+
Parameters
|
34
|
+
----------
|
35
|
+
deprecated_in: `str`
|
36
|
+
Version of ADS where this function deprecated.
|
37
|
+
removed_in: `str`
|
38
|
+
Future version where this function will be removed.
|
39
|
+
details: `str`
|
40
|
+
More information to be shown.
|
41
|
+
"""
|
42
|
+
|
43
|
+
def decorator(target):
|
44
|
+
@wraps(target)
|
45
|
+
def wrapper(*args, **kwargs):
|
46
|
+
if target.__name__ == "__init__":
|
47
|
+
_target_type = target_type or TARGET_TYPE.CLASS.value
|
48
|
+
target_name = target.__qualname__.split(".")[0]
|
49
|
+
else:
|
50
|
+
_target_type = target_type or TARGET_TYPE.METHOD.value
|
51
|
+
target_name = target.__name__
|
52
|
+
if deprecated_in:
|
53
|
+
msg = (
|
54
|
+
f"{_target_type} {target_name} is "
|
55
|
+
f"deprecated in {deprecated_in} and will be "
|
56
|
+
f"removed in {removed_in if removed_in else 'a future release'}."
|
57
|
+
f"{'' if not details else ' ' + details}"
|
58
|
+
)
|
59
|
+
else:
|
60
|
+
msg = details
|
61
|
+
if raise_error:
|
62
|
+
raise NotSupportedError(msg)
|
63
|
+
else:
|
64
|
+
warnings.warn(msg, DeprecationWarning, stacklevel=2)
|
65
|
+
return target(*args, **kwargs)
|
66
|
+
|
67
|
+
return wrapper
|
68
|
+
|
69
|
+
return decorator
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
# Copyright (c) 2024 Oracle and/or its affiliates.
|
4
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
5
|
+
|
6
|
+
import inspect
|
7
|
+
from functools import wraps
|
8
|
+
from typing import Any, Callable, List, Union
|
9
|
+
|
10
|
+
from ads.common.decorator.utils import _get_original_func
|
11
|
+
|
12
|
+
|
13
|
+
def require_nonempty_arg(
|
14
|
+
arg_name: Union[str, List[str]], error_msg: str = "A required argument is empty"
|
15
|
+
) -> Callable:
|
16
|
+
"""
|
17
|
+
A decorator to ensure that a specific argument of a function is not empty.
|
18
|
+
|
19
|
+
Parameters
|
20
|
+
----------
|
21
|
+
arg_name (Union[str, List[str]]): The name of the argument or the list of the arguments to check.
|
22
|
+
error_msg (str, optional)
|
23
|
+
The error message to raise if the check fails.
|
24
|
+
|
25
|
+
Returns
|
26
|
+
-------
|
27
|
+
Callable
|
28
|
+
A wrapped function that includes the check.
|
29
|
+
|
30
|
+
Raises
|
31
|
+
------
|
32
|
+
ValueError
|
33
|
+
If the specified argument is empty.
|
34
|
+
"""
|
35
|
+
|
36
|
+
def decorator(func: Callable) -> Callable:
|
37
|
+
@wraps(func)
|
38
|
+
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
39
|
+
# Retrieving the original function from the decorated one.
|
40
|
+
# This is necessary when the chain of decorators is used.
|
41
|
+
# The only original function arguments should be processed.
|
42
|
+
original_func = _get_original_func(func)
|
43
|
+
|
44
|
+
# Get the signature of the function
|
45
|
+
sig = inspect.signature(original_func)
|
46
|
+
bound_args = sig.bind(*args, **kwargs)
|
47
|
+
bound_args.apply_defaults()
|
48
|
+
|
49
|
+
# Check if the argument is present and not empty
|
50
|
+
if isinstance(arg_name, str):
|
51
|
+
arguments_to_check = [arg_name]
|
52
|
+
else:
|
53
|
+
arguments_to_check = arg_name
|
54
|
+
|
55
|
+
if not any(
|
56
|
+
check_name in bound_args.arguments and bound_args.arguments[check_name]
|
57
|
+
for check_name in arguments_to_check
|
58
|
+
):
|
59
|
+
raise ValueError(error_msg)
|
60
|
+
|
61
|
+
return func(*args, **kwargs)
|
62
|
+
|
63
|
+
return wrapper
|
64
|
+
|
65
|
+
return decorator
|
@@ -0,0 +1,178 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2021, 2024 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
|
+
"""
|
8
|
+
The module that provides the decorator helping to add runtime dependencies in functions.
|
9
|
+
|
10
|
+
Examples
|
11
|
+
--------
|
12
|
+
>>> @runtime_dependency(module="pandas", short_name="pd")
|
13
|
+
... def test_function()
|
14
|
+
... print(pd)
|
15
|
+
|
16
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df")
|
17
|
+
... def test_function()
|
18
|
+
... print(df)
|
19
|
+
|
20
|
+
>>> @runtime_dependency(module="pandas", short_name="pd")
|
21
|
+
... @runtime_dependency(module="pandas", object="DataFrame", short_name="df")
|
22
|
+
... def test_function()
|
23
|
+
... print(df)
|
24
|
+
... print(pd)
|
25
|
+
|
26
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df", install_from="ads[optional]")
|
27
|
+
... def test_function()
|
28
|
+
... pass
|
29
|
+
|
30
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df", err_msg="Custom error message.")
|
31
|
+
... def test_function()
|
32
|
+
... pass
|
33
|
+
"""
|
34
|
+
|
35
|
+
import importlib
|
36
|
+
import logging
|
37
|
+
from functools import wraps
|
38
|
+
from typing import Any, Callable
|
39
|
+
|
40
|
+
from .utils import _get_original_func
|
41
|
+
|
42
|
+
logger = logging.getLogger(__name__)
|
43
|
+
|
44
|
+
MODULE_NOT_FOUND_ERROR = (
|
45
|
+
"The `{module}` module was not found. Please run `pip install {package}`."
|
46
|
+
)
|
47
|
+
IMPORT_ERROR = "Cannot import name `{object}` from `{module}`."
|
48
|
+
|
49
|
+
|
50
|
+
class OptionalDependency:
|
51
|
+
LABS = "oracle-ads[labs]"
|
52
|
+
BOOSTED = "oracle-ads[boosted]"
|
53
|
+
NOTEBOOK = "oracle-ads[notebook]"
|
54
|
+
TEXT = "oracle-ads[text]"
|
55
|
+
VIZ = "oracle-ads[viz]"
|
56
|
+
DATA = "oracle-ads[data]"
|
57
|
+
OPCTL = "oracle-ads[opctl]"
|
58
|
+
MYSQL = "oracle-ads[mysql]"
|
59
|
+
BDS = "oracle-ads[bds]"
|
60
|
+
PYTORCH = "oracle-ads[torch]"
|
61
|
+
TENSORFLOW = "oracle-ads[tensorflow]"
|
62
|
+
GEO = "oracle-ads[geo]"
|
63
|
+
ONNX = "oracle-ads[onnx]"
|
64
|
+
OPTUNA = "oracle-ads[optuna]"
|
65
|
+
SPARK = "oracle-ads[spark]"
|
66
|
+
HUGGINGFACE = "oracle-ads[huggingface]"
|
67
|
+
FORECAST = "oracle-ads[forecast]"
|
68
|
+
FEATURE_STORE_MARKETPLACE = "oracle-ads[feature-store-marketplace]"
|
69
|
+
PII = "oracle-ads[pii]"
|
70
|
+
FEATURE_STORE = "oracle-ads[feature-store]"
|
71
|
+
GRAPHVIZ = "oracle-ads[graphviz]"
|
72
|
+
MLM_INSIGHTS = "oracle-ads[mlm_insights]"
|
73
|
+
|
74
|
+
|
75
|
+
def runtime_dependency(
|
76
|
+
module: str,
|
77
|
+
short_name: str = "",
|
78
|
+
object: str = None,
|
79
|
+
install_from: str = None,
|
80
|
+
err_msg: str = "",
|
81
|
+
is_for_notebook_only=False,
|
82
|
+
):
|
83
|
+
"""The decorator which is helping to add runtime dependencies to functions.
|
84
|
+
|
85
|
+
Parameters
|
86
|
+
----------
|
87
|
+
module: str
|
88
|
+
The module name to be imported.
|
89
|
+
short_name: (str, optional). Defaults to empty string.
|
90
|
+
The short name for the imported module.
|
91
|
+
object: (str, optional). Defaults to None.
|
92
|
+
The name of the object to be imported. Can be a function or a class, or
|
93
|
+
any variable provided by module.
|
94
|
+
install_from: (str, optional). Defaults to None.
|
95
|
+
The parameter helping to answer from where the required dependency can be installed.
|
96
|
+
err_msg: (str, optional). Defaults to empty string.
|
97
|
+
The custom error message.
|
98
|
+
is_for_notebook_only: (bool, optional). Defaults to False.
|
99
|
+
If the value of this flag is set to True, the dependency will be added only
|
100
|
+
in case when the current environment is a jupyter notebook.
|
101
|
+
|
102
|
+
Raises
|
103
|
+
------
|
104
|
+
ModuleNotFoundError
|
105
|
+
In case if requested module not found.
|
106
|
+
ImportError
|
107
|
+
In case if object cannot be imported from the module.
|
108
|
+
|
109
|
+
Examples
|
110
|
+
--------
|
111
|
+
>>> @runtime_dependency(module="pandas", short_name="pd")
|
112
|
+
... def test_function()
|
113
|
+
... print(pd)
|
114
|
+
|
115
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df")
|
116
|
+
... def test_function()
|
117
|
+
... print(df)
|
118
|
+
|
119
|
+
>>> @runtime_dependency(module="pandas", short_name="pd")
|
120
|
+
... @runtime_dependency(module="pandas", object="DataFrame", short_name="df")
|
121
|
+
... def test_function()
|
122
|
+
... print(df)
|
123
|
+
... print(pd)
|
124
|
+
|
125
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df", install_from="ads[optional]")
|
126
|
+
... def test_function()
|
127
|
+
... pass
|
128
|
+
|
129
|
+
>>> @runtime_dependency(module="pandas", object="DataFrame", short_name="df", err_msg="Custom error message.")
|
130
|
+
... def test_function()
|
131
|
+
... pass
|
132
|
+
"""
|
133
|
+
|
134
|
+
def decorator(func: Callable):
|
135
|
+
@wraps(func)
|
136
|
+
def wrapper(*args, **kwargs) -> Any:
|
137
|
+
from ads.common.utils import is_notebook
|
138
|
+
|
139
|
+
if not is_for_notebook_only or is_notebook():
|
140
|
+
assert module, "The parameter `module` must be provided."
|
141
|
+
assert isinstance(
|
142
|
+
module, str
|
143
|
+
), "The parameter `module` must be a string."
|
144
|
+
try:
|
145
|
+
_package_name = module.split(".")[0]
|
146
|
+
# importing module
|
147
|
+
_module = importlib.import_module(module)
|
148
|
+
# checking if object parameter is specified then inporting
|
149
|
+
# the object from the module. The object can be a function
|
150
|
+
# or a class or any module vatiable.
|
151
|
+
_module = getattr(_module, object) if object else _module
|
152
|
+
# retrieving the original function from the decorated one.
|
153
|
+
# This is necessary when the chain of decorators is used.
|
154
|
+
# The only original function should be injected with the
|
155
|
+
# dependency.
|
156
|
+
original_func = _get_original_func(func)
|
157
|
+
_module_name = module.split(".")[-1]
|
158
|
+
# Injecting the imported module into global variables of the
|
159
|
+
# original function.
|
160
|
+
original_func.__globals__[
|
161
|
+
short_name or object or _module_name
|
162
|
+
] = _module
|
163
|
+
except ModuleNotFoundError:
|
164
|
+
raise ModuleNotFoundError(
|
165
|
+
err_msg
|
166
|
+
or MODULE_NOT_FOUND_ERROR.format(
|
167
|
+
module=module, package=install_from or _package_name
|
168
|
+
)
|
169
|
+
)
|
170
|
+
except AttributeError:
|
171
|
+
raise ImportError(
|
172
|
+
err_msg or IMPORT_ERROR.format(object=object, module=module)
|
173
|
+
)
|
174
|
+
return func(*args, **kwargs)
|
175
|
+
|
176
|
+
return wrapper
|
177
|
+
|
178
|
+
return decorator
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2021, 2024 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
|
+
|
8
|
+
import concurrent.futures
|
9
|
+
import functools
|
10
|
+
import logging
|
11
|
+
from typing import Optional
|
12
|
+
|
13
|
+
from git import Optional
|
14
|
+
|
15
|
+
from ads.config import THREADED_DEFAULT_TIMEOUT
|
16
|
+
|
17
|
+
logger = logging.getLogger(__name__)
|
18
|
+
|
19
|
+
# Create a global thread pool with a maximum of 10 threads
|
20
|
+
thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=10)
|
21
|
+
|
22
|
+
|
23
|
+
class TimeoutError(Exception):
|
24
|
+
"""
|
25
|
+
Custom exception to be raised when a function times out.
|
26
|
+
|
27
|
+
Attributes
|
28
|
+
----------
|
29
|
+
message : str
|
30
|
+
The error message describing what went wrong.
|
31
|
+
|
32
|
+
Parameters
|
33
|
+
----------
|
34
|
+
message : str
|
35
|
+
The error message.
|
36
|
+
"""
|
37
|
+
|
38
|
+
def __init__(
|
39
|
+
self,
|
40
|
+
func_name: str,
|
41
|
+
timeout: int,
|
42
|
+
message: Optional[str] = "The operation could not be completed in time.",
|
43
|
+
):
|
44
|
+
super().__init__(
|
45
|
+
f"{message} The function '{func_name}' exceeded the timeout of {timeout} seconds."
|
46
|
+
)
|
47
|
+
|
48
|
+
|
49
|
+
def threaded(timeout: Optional[int] = THREADED_DEFAULT_TIMEOUT):
|
50
|
+
"""
|
51
|
+
Decorator to run a function in a separate thread using a global thread pool.
|
52
|
+
|
53
|
+
Parameters
|
54
|
+
----------
|
55
|
+
timeout (int, optional)
|
56
|
+
The maximum time in seconds to wait for the function to complete.
|
57
|
+
If the function does not complete within this time, "timeout" is returned.
|
58
|
+
|
59
|
+
Returns
|
60
|
+
-------
|
61
|
+
function: The wrapped function that will run in a separate thread with the specified timeout.
|
62
|
+
"""
|
63
|
+
|
64
|
+
def decorator(func):
|
65
|
+
@functools.wraps(func)
|
66
|
+
def wrapper(*args, **kwargs):
|
67
|
+
"""
|
68
|
+
Wrapper function to submit the decorated function to the thread pool and handle timeout.
|
69
|
+
|
70
|
+
Parameters
|
71
|
+
----------
|
72
|
+
*args: Positional arguments to pass to the decorated function.
|
73
|
+
**kwargs: Keyword arguments to pass to the decorated function.
|
74
|
+
|
75
|
+
Returns
|
76
|
+
-------
|
77
|
+
Any: The result of the decorated function if it completes within the timeout.
|
78
|
+
|
79
|
+
Raise
|
80
|
+
-----
|
81
|
+
TimeoutError
|
82
|
+
In case of the function exceeded the timeout.
|
83
|
+
"""
|
84
|
+
future = thread_pool.submit(func, *args, **kwargs)
|
85
|
+
try:
|
86
|
+
return future.result(timeout=timeout)
|
87
|
+
except concurrent.futures.TimeoutError as ex:
|
88
|
+
logger.debug(
|
89
|
+
f"The function '{func.__name__}' "
|
90
|
+
f"exceeded the timeout of {timeout} seconds. "
|
91
|
+
f"{ex}"
|
92
|
+
)
|
93
|
+
raise TimeoutError(func.__name__, timeout)
|
94
|
+
|
95
|
+
return wrapper
|
96
|
+
|
97
|
+
return decorator
|