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/config.py
ADDED
@@ -0,0 +1,647 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2022, 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 os
|
8
|
+
from collections import defaultdict
|
9
|
+
from configparser import ConfigParser
|
10
|
+
from copy import copy
|
11
|
+
from enum import Enum
|
12
|
+
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
|
13
|
+
from urllib.parse import urlparse
|
14
|
+
|
15
|
+
import fsspec
|
16
|
+
import yaml
|
17
|
+
|
18
|
+
from ads.common import auth as authutil
|
19
|
+
from ads.common.decorator.argument_to_case import ArgumentCase, argument_to_case
|
20
|
+
|
21
|
+
try:
|
22
|
+
from yaml import CSafeDumper as dumper
|
23
|
+
except:
|
24
|
+
from yaml import SafeDumper as dumper
|
25
|
+
|
26
|
+
|
27
|
+
DEFAULT_CONFIG_PROFILE = "DEFAULT"
|
28
|
+
DEFAULT_CONFIG_PATH = "~/.ads/config"
|
29
|
+
|
30
|
+
|
31
|
+
class EventType(Enum):
|
32
|
+
CHANGE = "change"
|
33
|
+
|
34
|
+
|
35
|
+
class Mode:
|
36
|
+
READ = "r"
|
37
|
+
WRITE = "w"
|
38
|
+
|
39
|
+
|
40
|
+
class Eventing:
|
41
|
+
"""The class helper to register event handlers."""
|
42
|
+
|
43
|
+
def __init__(self):
|
44
|
+
self._events = defaultdict(set)
|
45
|
+
|
46
|
+
def trigger(self, event: str) -> None:
|
47
|
+
"""Triggers all the registered callbacks for the particular event."""
|
48
|
+
for callback in self._events[event]:
|
49
|
+
callback()
|
50
|
+
|
51
|
+
def on(self, event_name: str, callback: Callable) -> None:
|
52
|
+
"""Registers a callback for the particular event."""
|
53
|
+
self._events[event_name].add(callback)
|
54
|
+
|
55
|
+
|
56
|
+
class ConfigSection:
|
57
|
+
"""The class representing a config section."""
|
58
|
+
|
59
|
+
def __init__(self):
|
60
|
+
"""Initializes the config section instance."""
|
61
|
+
self.events = Eventing()
|
62
|
+
self._info = {}
|
63
|
+
|
64
|
+
def clear(self) -> None:
|
65
|
+
"""Clears the config section values.
|
66
|
+
|
67
|
+
Returns
|
68
|
+
-------
|
69
|
+
None
|
70
|
+
Nothing
|
71
|
+
"""
|
72
|
+
self._info = {}
|
73
|
+
self.events.trigger(EventType.CHANGE.value)
|
74
|
+
|
75
|
+
def copy(self) -> "ConfigSection":
|
76
|
+
"""Makes a copy of a config section.
|
77
|
+
|
78
|
+
Returns
|
79
|
+
-------
|
80
|
+
ConfigSection
|
81
|
+
The instance of a copied ConfigSection.
|
82
|
+
"""
|
83
|
+
return self.__class__()._with_dict(info=copy(self._info), replace=True)
|
84
|
+
|
85
|
+
def _with_dict(
|
86
|
+
self, info: Dict[str, Any], replace: Optional[bool] = False
|
87
|
+
) -> "ConfigSection":
|
88
|
+
"""Populates the config section from a dictionary.
|
89
|
+
|
90
|
+
Parameters
|
91
|
+
----------
|
92
|
+
info: Dict[str, Any]
|
93
|
+
The config section information in a dictionary format.
|
94
|
+
replace: (bool, optional). Defaults to False.
|
95
|
+
If set as True, overwrites config section with the new information.
|
96
|
+
|
97
|
+
Returns
|
98
|
+
-------
|
99
|
+
ConfigSection
|
100
|
+
The instance of a ConfigSection.
|
101
|
+
|
102
|
+
Raises
|
103
|
+
-----
|
104
|
+
TypeError
|
105
|
+
If input data is not a dictionary.
|
106
|
+
ValueError
|
107
|
+
If config section is already contain provided fields
|
108
|
+
and `replace` flag set to False.
|
109
|
+
"""
|
110
|
+
|
111
|
+
if not isinstance(info, dict):
|
112
|
+
raise TypeError("The `info` must be a dictionary.")
|
113
|
+
|
114
|
+
common_keys = list(
|
115
|
+
set(self._info.keys()).intersection(set(list(map(str.lower, info.keys()))))
|
116
|
+
)
|
117
|
+
|
118
|
+
if common_keys and not replace:
|
119
|
+
raise ValueError(
|
120
|
+
f"The config section is already contain fields: {common_keys}. "
|
121
|
+
"Use `replace=True` to overwrite."
|
122
|
+
)
|
123
|
+
|
124
|
+
for k, v in info.items():
|
125
|
+
self._set(key=k.lower(), value=v, replace=replace)
|
126
|
+
|
127
|
+
return self
|
128
|
+
|
129
|
+
def with_dict(
|
130
|
+
self, info: Dict[str, Any], replace: Optional[bool] = False
|
131
|
+
) -> "ConfigSection":
|
132
|
+
"""Populates the config section from a dictionary.
|
133
|
+
|
134
|
+
Parameters
|
135
|
+
----------
|
136
|
+
info: Dict[str, Any]
|
137
|
+
The config section information in a dictionary format.
|
138
|
+
replace: (bool, optional). Defaults to False.
|
139
|
+
If set as True, overwrites config section with the new information.
|
140
|
+
"""
|
141
|
+
self._with_dict(info=info, replace=replace)
|
142
|
+
self.events.trigger(EventType.CHANGE.value)
|
143
|
+
return self
|
144
|
+
|
145
|
+
def keys(self) -> Tuple[str]:
|
146
|
+
"""Gets the list of the keys of a config section.
|
147
|
+
|
148
|
+
Returns
|
149
|
+
-------
|
150
|
+
Tuple[str]
|
151
|
+
The list of config section keys.
|
152
|
+
"""
|
153
|
+
return tuple(self._info.keys())
|
154
|
+
|
155
|
+
def to_dict(self) -> Dict[str, Any]:
|
156
|
+
"""Converts config section to a dictionary.
|
157
|
+
|
158
|
+
Returns
|
159
|
+
-------
|
160
|
+
Dict[str, Any]
|
161
|
+
The config section in a dictionary format.
|
162
|
+
"""
|
163
|
+
return self._info
|
164
|
+
|
165
|
+
@argument_to_case(case=ArgumentCase.LOWER, arguments=["key"])
|
166
|
+
def get(self, key: str) -> str:
|
167
|
+
"""Gets the config section value by key.
|
168
|
+
|
169
|
+
Returns
|
170
|
+
-------
|
171
|
+
str
|
172
|
+
A specific config section value.
|
173
|
+
"""
|
174
|
+
return self._info.get(key)
|
175
|
+
|
176
|
+
@argument_to_case(case=ArgumentCase.LOWER, arguments=["key"])
|
177
|
+
def _set(self, key: str, value: str, replace: Optional[bool] = False) -> None:
|
178
|
+
"""Sets the config section value by key.
|
179
|
+
|
180
|
+
Parameters
|
181
|
+
----------
|
182
|
+
key: str
|
183
|
+
The config section field key.
|
184
|
+
value: str
|
185
|
+
The config section field value.
|
186
|
+
|
187
|
+
Returns
|
188
|
+
-------
|
189
|
+
None
|
190
|
+
Nothing
|
191
|
+
|
192
|
+
Raises
|
193
|
+
------
|
194
|
+
ValueError
|
195
|
+
In case when field with provided key already exists and
|
196
|
+
`replace` flag set to False.
|
197
|
+
"""
|
198
|
+
if self._info.get(key) == value:
|
199
|
+
return
|
200
|
+
|
201
|
+
if key in self._info and not replace:
|
202
|
+
raise ValueError(
|
203
|
+
f"The field with key `{key}` already exists. "
|
204
|
+
"Use `replace=True` to overwrite."
|
205
|
+
)
|
206
|
+
|
207
|
+
self._info[key] = value
|
208
|
+
|
209
|
+
def set(self, key: str, value: str, replace: Optional[bool] = False) -> None:
|
210
|
+
"""Sets the config section value by key.
|
211
|
+
|
212
|
+
Parameters
|
213
|
+
----------
|
214
|
+
key: str
|
215
|
+
The config section field key.
|
216
|
+
value: str
|
217
|
+
The config section field value.
|
218
|
+
|
219
|
+
Returns
|
220
|
+
-------
|
221
|
+
None
|
222
|
+
Nothing
|
223
|
+
"""
|
224
|
+
self._set(key, value, replace)
|
225
|
+
self.events.trigger(EventType.CHANGE.value)
|
226
|
+
|
227
|
+
@argument_to_case(case=ArgumentCase.LOWER, arguments=["key"])
|
228
|
+
def remove(self, key: str) -> None:
|
229
|
+
"""Removes the config section field by key.
|
230
|
+
|
231
|
+
Parameters
|
232
|
+
----------
|
233
|
+
key: str
|
234
|
+
The config section field key.
|
235
|
+
|
236
|
+
Returns
|
237
|
+
-------
|
238
|
+
None
|
239
|
+
Nothing
|
240
|
+
"""
|
241
|
+
self._info.pop(key, None)
|
242
|
+
self.events.trigger(EventType.CHANGE.value)
|
243
|
+
|
244
|
+
def __getitem__(self, key: str):
|
245
|
+
return self.get(key)
|
246
|
+
|
247
|
+
def __setitem__(self, key: str, value: str):
|
248
|
+
self.set(key=key, value=value, replace=True)
|
249
|
+
|
250
|
+
def __bool__(self):
|
251
|
+
return any(self._info.values())
|
252
|
+
|
253
|
+
def __repr__(self):
|
254
|
+
return yaml.dump(self.to_dict(), Dumper=dumper)
|
255
|
+
|
256
|
+
|
257
|
+
class Config:
|
258
|
+
"""The class representing a config."""
|
259
|
+
|
260
|
+
__DEFAULT_SECTIONS = {
|
261
|
+
DEFAULT_CONFIG_PROFILE: ConfigSection,
|
262
|
+
}
|
263
|
+
|
264
|
+
def __init__(
|
265
|
+
self,
|
266
|
+
uri: Optional[str] = DEFAULT_CONFIG_PATH,
|
267
|
+
auth: Optional[Dict] = None,
|
268
|
+
):
|
269
|
+
"""Initializes a config instance.
|
270
|
+
|
271
|
+
Parameters
|
272
|
+
----------
|
273
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
274
|
+
The path to the config file. Can be local or Object Storage file.
|
275
|
+
auth: (Dict, optional). Defaults to None.
|
276
|
+
The default authetication is set using `ads.set_auth` API. If you need to override the
|
277
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
278
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
279
|
+
"""
|
280
|
+
self._config = {}
|
281
|
+
self.auth = auth or authutil.default_signer()
|
282
|
+
|
283
|
+
# configure default config sections
|
284
|
+
for key, default_section in self.__DEFAULT_SECTIONS.items():
|
285
|
+
self._config[key] = default_section()
|
286
|
+
self._config[key].events.on(EventType.CHANGE.value, self._on_change)
|
287
|
+
|
288
|
+
self.uri = os.path.expanduser(uri)
|
289
|
+
self._config_parser = ExtendedConfigParser(uri=self.uri, auth=self.auth)
|
290
|
+
|
291
|
+
def _on_change(self):
|
292
|
+
"""This method will be called when config modified."""
|
293
|
+
pass
|
294
|
+
|
295
|
+
def default(self) -> ConfigSection:
|
296
|
+
"""Gets default config section.
|
297
|
+
|
298
|
+
Returns
|
299
|
+
-------
|
300
|
+
ConfigSection
|
301
|
+
A default config section.
|
302
|
+
"""
|
303
|
+
return self.section_get(DEFAULT_CONFIG_PROFILE)
|
304
|
+
|
305
|
+
@argument_to_case(case=ArgumentCase.UPPER, arguments=["key"])
|
306
|
+
def section_exists(self, key: str) -> bool:
|
307
|
+
"""Checks if a config section exists.
|
308
|
+
|
309
|
+
Parameters
|
310
|
+
----------
|
311
|
+
key: str
|
312
|
+
A key of a config section.
|
313
|
+
|
314
|
+
Returns
|
315
|
+
-------
|
316
|
+
bool
|
317
|
+
True if a config section exists, Fasle otherwise.
|
318
|
+
"""
|
319
|
+
return key in self._config
|
320
|
+
|
321
|
+
@argument_to_case(case=ArgumentCase.UPPER, arguments=["key"])
|
322
|
+
def section_get(self, key: str) -> ConfigSection:
|
323
|
+
"""Gets the config section by key.
|
324
|
+
|
325
|
+
Returns
|
326
|
+
-------
|
327
|
+
ConfigSection
|
328
|
+
A config section object.
|
329
|
+
|
330
|
+
Raises
|
331
|
+
------
|
332
|
+
KeyError
|
333
|
+
If a config section not exists.
|
334
|
+
"""
|
335
|
+
if key not in self._config:
|
336
|
+
raise KeyError(f"The config section `{key}` not found.")
|
337
|
+
return self._config.get(key)
|
338
|
+
|
339
|
+
@argument_to_case(case=ArgumentCase.UPPER, arguments=["key"])
|
340
|
+
def section_set(
|
341
|
+
self,
|
342
|
+
key: str,
|
343
|
+
info: Union[dict, ConfigSection],
|
344
|
+
replace: Optional[bool] = False,
|
345
|
+
) -> ConfigSection:
|
346
|
+
"""
|
347
|
+
Sets a config section to config.
|
348
|
+
The new config section will be added in case if it doesn't exist.
|
349
|
+
Otherwise the existing config section will be merged with the new fields.
|
350
|
+
|
351
|
+
Parameters
|
352
|
+
----------
|
353
|
+
key: str
|
354
|
+
A key of a config section.
|
355
|
+
info: Union[dict, ConfigSection]
|
356
|
+
The config section information in a dictionary or ConfigSection format.
|
357
|
+
replace: (bool, optional). Defaults to False.
|
358
|
+
If set as True, overwrites config section with the new information.
|
359
|
+
|
360
|
+
Returns
|
361
|
+
-------
|
362
|
+
ConfigSection
|
363
|
+
A config section object.
|
364
|
+
|
365
|
+
Raises
|
366
|
+
------
|
367
|
+
ValueError
|
368
|
+
If section with given key is already exist and `replace` flag set to False.
|
369
|
+
TypeError
|
370
|
+
If input `info` has a wrong format.
|
371
|
+
"""
|
372
|
+
if key in self._config and not replace:
|
373
|
+
raise ValueError(
|
374
|
+
f"A config section `{key}` is already exist. "
|
375
|
+
"Use `replace=True` if you want to overwrite."
|
376
|
+
)
|
377
|
+
|
378
|
+
if not isinstance(info, (dict, ConfigSection)):
|
379
|
+
raise TypeError(
|
380
|
+
"Parameter `info` must be either a `dictionary` or `ConfigSection` object."
|
381
|
+
)
|
382
|
+
|
383
|
+
if key not in self._config:
|
384
|
+
self._config[key] = ConfigSection()
|
385
|
+
self._config[key].events.on(EventType.CHANGE.value, self._on_change)
|
386
|
+
|
387
|
+
if isinstance(info, ConfigSection):
|
388
|
+
self._config[key].with_dict(info.copy().to_dict(), replace=replace)
|
389
|
+
else:
|
390
|
+
self._config[key].with_dict(copy(info), replace=replace)
|
391
|
+
|
392
|
+
return self._config[key]
|
393
|
+
|
394
|
+
@argument_to_case(case=ArgumentCase.UPPER, arguments=["key"])
|
395
|
+
def section_remove(self, key: str) -> "Config":
|
396
|
+
"""Removes config section form config.
|
397
|
+
|
398
|
+
Parameters
|
399
|
+
----------
|
400
|
+
key: str
|
401
|
+
A key of a config section that needs to be removed.
|
402
|
+
|
403
|
+
Returns
|
404
|
+
-------
|
405
|
+
None
|
406
|
+
Nothing
|
407
|
+
"""
|
408
|
+
self._config.pop(key, None)
|
409
|
+
self._on_change()
|
410
|
+
return self
|
411
|
+
|
412
|
+
def save(
|
413
|
+
self,
|
414
|
+
uri: Optional[str] = None,
|
415
|
+
auth: Optional[Dict] = None,
|
416
|
+
force_overwrite: Optional[bool] = False,
|
417
|
+
) -> "Config":
|
418
|
+
"""Saves config to a config file.
|
419
|
+
|
420
|
+
Parameters
|
421
|
+
----------
|
422
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
423
|
+
The path to the config file. Can be local or Object Storage file.
|
424
|
+
auth: (Dict, optional). Defaults to None.
|
425
|
+
The default authentication is set using `ads.set_auth` API. If you need to override the
|
426
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
427
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
428
|
+
force_overwrite: (bool, optional). Defaults to `False`.
|
429
|
+
Overwrites the config if exists.
|
430
|
+
|
431
|
+
Returns
|
432
|
+
-------
|
433
|
+
None
|
434
|
+
Nothing
|
435
|
+
"""
|
436
|
+
uri = uri or self.uri
|
437
|
+
auth = auth or self.auth or authutil.default_signer()
|
438
|
+
self._config_parser.with_dict(self.to_dict()).save(
|
439
|
+
uri=uri, auth=auth, force_overwrite=force_overwrite
|
440
|
+
)
|
441
|
+
return self
|
442
|
+
|
443
|
+
def load(self, uri: Optional[str] = None, auth: Optional[Dict] = None) -> "Config":
|
444
|
+
"""Loads config from a config file.
|
445
|
+
|
446
|
+
Parameters
|
447
|
+
----------
|
448
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
449
|
+
The path where the config file needs to be saved. Can be local or Object Storage file.
|
450
|
+
auth: (Dict, optional). Defaults to None.
|
451
|
+
The default authentication is set using `ads.set_auth` API. If you need to override the
|
452
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
453
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
454
|
+
|
455
|
+
Returns
|
456
|
+
-------
|
457
|
+
Config
|
458
|
+
A config object.
|
459
|
+
"""
|
460
|
+
uri = uri or self.uri
|
461
|
+
auth = auth or self.auth or authutil.default_signer()
|
462
|
+
|
463
|
+
return self.with_dict(
|
464
|
+
self._config_parser.read(uri=uri, auth=auth).to_dict(), replace=True
|
465
|
+
)
|
466
|
+
|
467
|
+
def with_dict(
|
468
|
+
self,
|
469
|
+
info: Dict[str, Union[Dict[str, Any], ConfigSection]],
|
470
|
+
replace: Optional[bool] = False,
|
471
|
+
) -> "Config":
|
472
|
+
"""Merging dictionary to config.
|
473
|
+
|
474
|
+
Parameters
|
475
|
+
----------
|
476
|
+
info: Dict[str, Union[Dict[str, Any], ConfigSection]]
|
477
|
+
A dictionary that needs to be merged to config.
|
478
|
+
replace: (bool, optional). Defaults to False.
|
479
|
+
If set as True, overwrites config section with the new information.
|
480
|
+
|
481
|
+
Returns
|
482
|
+
-------
|
483
|
+
Config
|
484
|
+
A config object.
|
485
|
+
"""
|
486
|
+
|
487
|
+
self._validate(info)
|
488
|
+
try:
|
489
|
+
for key, value in info.items():
|
490
|
+
self.section_set(key, value, replace=replace)
|
491
|
+
finally:
|
492
|
+
self._on_change()
|
493
|
+
|
494
|
+
return self
|
495
|
+
|
496
|
+
def to_dict(self) -> Dict[str, Dict[str, Any]]:
|
497
|
+
"""Converts config to a dictionary format.
|
498
|
+
|
499
|
+
Returns
|
500
|
+
-------
|
501
|
+
Dict[str, Dict[str, Any]]
|
502
|
+
A config in a dictionary format.
|
503
|
+
"""
|
504
|
+
return {key: value.to_dict() for key, value in self._config.items()}
|
505
|
+
|
506
|
+
def keys(self) -> List[str]:
|
507
|
+
"""Gets the all registered config section keys.
|
508
|
+
|
509
|
+
Returns
|
510
|
+
-------
|
511
|
+
List[str]
|
512
|
+
The list of the all registered config section keys.
|
513
|
+
"""
|
514
|
+
return self._config.keys()
|
515
|
+
|
516
|
+
def _validate(self, info: Dict[str, Union[Dict[str, Any], ConfigSection]]) -> None:
|
517
|
+
"""Validates input dictionary."""
|
518
|
+
if not info or not isinstance(info, Dict):
|
519
|
+
raise TypeError("The input data should be a dictionary.")
|
520
|
+
for key, value in info.items():
|
521
|
+
if value and not isinstance(value, (Dict, ConfigSection)):
|
522
|
+
raise ValueError(
|
523
|
+
f"The `{key}` must be a dictionary or a `ConfigSection` instance."
|
524
|
+
)
|
525
|
+
|
526
|
+
def __getitem__(self, key: str):
|
527
|
+
return self.section_get(key)
|
528
|
+
|
529
|
+
def __setitem__(self, key, value: Union[Dict, ConfigSection]):
|
530
|
+
self.section_set(key, value, replace=True)
|
531
|
+
|
532
|
+
def __repr__(self):
|
533
|
+
return yaml.dump(self.to_dict(), Dumper=dumper)
|
534
|
+
|
535
|
+
|
536
|
+
class ExtendedConfigParser(ConfigParser):
|
537
|
+
"""Class helper to read/write information to the config file."""
|
538
|
+
|
539
|
+
def __init__(
|
540
|
+
self, uri: Optional[str] = DEFAULT_CONFIG_PATH, auth: Optional[Dict] = None
|
541
|
+
):
|
542
|
+
"""Initializes a config parser instance.
|
543
|
+
|
544
|
+
Parameters
|
545
|
+
----------
|
546
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
547
|
+
The path to the config file. Can be local or Object Storage file.
|
548
|
+
auth: (Dict, optional). Defaults to None.
|
549
|
+
The default authentication is set using `ads.set_auth` API. If you need to override the
|
550
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
551
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
552
|
+
"""
|
553
|
+
super().__init__(default_section="EXCLUDE_DEFAULT_SECTION")
|
554
|
+
self.auth = auth or authutil.default_signer()
|
555
|
+
self.uri = uri
|
556
|
+
|
557
|
+
def save(
|
558
|
+
self,
|
559
|
+
uri: Optional[str] = None,
|
560
|
+
auth: Optional[Dict] = None,
|
561
|
+
force_overwrite: Optional[bool] = False,
|
562
|
+
) -> None:
|
563
|
+
"""Saves the config to the file.
|
564
|
+
|
565
|
+
Parameters
|
566
|
+
----------
|
567
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
568
|
+
The path to the config file. Can be local or Object Storage file.
|
569
|
+
auth: (Dict, optional). Defaults to None.
|
570
|
+
The default authentication is set using `ads.set_auth` API. If you need to override the
|
571
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
572
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
573
|
+
force_overwrite: (bool, optional). Defaults to `False`.
|
574
|
+
Overwrites the config if exists.
|
575
|
+
|
576
|
+
Returns
|
577
|
+
-------
|
578
|
+
None
|
579
|
+
|
580
|
+
Raise
|
581
|
+
-----
|
582
|
+
FileExistsError
|
583
|
+
In case if file exists and force_overwrite is false.
|
584
|
+
"""
|
585
|
+
uri = uri or self.uri
|
586
|
+
auth = auth or self.auth or authutil.default_signer()
|
587
|
+
|
588
|
+
if not force_overwrite:
|
589
|
+
dst_path_scheme = urlparse(uri).scheme or "file"
|
590
|
+
if fsspec.filesystem(dst_path_scheme, **auth).exists(uri):
|
591
|
+
raise FileExistsError(
|
592
|
+
f"The `{uri}` exists. Set `force_overwrite` to True "
|
593
|
+
"if you wish to overwrite."
|
594
|
+
)
|
595
|
+
|
596
|
+
with fsspec.open(uri, mode="w", **auth) as f:
|
597
|
+
self.write(f)
|
598
|
+
|
599
|
+
def to_dict(self) -> Dict[str, Any]:
|
600
|
+
"""Converts config to a dictionary.
|
601
|
+
|
602
|
+
Returns
|
603
|
+
-------
|
604
|
+
Dict[str, Any]
|
605
|
+
Config in a dictionary format.
|
606
|
+
"""
|
607
|
+
return {s: dict(self[s]) for s in self.keys() if self[s]}
|
608
|
+
|
609
|
+
def read(
|
610
|
+
self, uri: Optional[str] = None, auth: Optional[Dict] = None
|
611
|
+
) -> "ExtendedConfigParser":
|
612
|
+
"""Reads config file.
|
613
|
+
|
614
|
+
uri: (str, optional). Defaults to `~/.ads/config`.
|
615
|
+
The path to the config file. Can be local or Object Storage file.
|
616
|
+
auth: (Dict, optional). Defaults to None.
|
617
|
+
The default authentication is set using `ads.set_auth` API. If you need to override the
|
618
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
619
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
620
|
+
|
621
|
+
Returns
|
622
|
+
-------
|
623
|
+
ExtendedConfigParser
|
624
|
+
Config parser object.
|
625
|
+
"""
|
626
|
+
uri = uri or self.uri
|
627
|
+
auth = auth or self.auth or authutil.default_signer()
|
628
|
+
|
629
|
+
with fsspec.open(uri, "r", **auth) as f:
|
630
|
+
self.read_string(f.read())
|
631
|
+
return self
|
632
|
+
|
633
|
+
def with_dict(self, info: Dict[str, Dict[str, Any]]) -> "ExtendedConfigParser":
|
634
|
+
"""Populates config with values from a dictionary.
|
635
|
+
|
636
|
+
Parameters
|
637
|
+
----------
|
638
|
+
info: Dict[str, Dict[str, Any]]
|
639
|
+
Config in a dictionary format.
|
640
|
+
|
641
|
+
Returns
|
642
|
+
-------
|
643
|
+
ExtendedConfigParser
|
644
|
+
Config parser object.
|
645
|
+
"""
|
646
|
+
self.read_dict(info)
|
647
|
+
return self
|