oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10__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 +246 -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.10.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10.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.10.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,136 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2021, 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
|
+
"""Contains class wrapping OCI resource search service
|
8
|
+
"""
|
9
|
+
import oci.resource_search
|
10
|
+
from ads.common.oci_mixin import OCIClientMixin
|
11
|
+
|
12
|
+
|
13
|
+
class ResourceNotFoundError(Exception): # pragma: no cover
|
14
|
+
"""Exception when an OCI resource is not found or user does not have permission to access it.
|
15
|
+
This could mean the resource does not exist, or
|
16
|
+
there is not enough permission to find/access the resource.
|
17
|
+
"""
|
18
|
+
|
19
|
+
|
20
|
+
class SEARCH_TYPE(str):
|
21
|
+
FREETEXT = "FreeText"
|
22
|
+
STRUCTURED = "Structured"
|
23
|
+
|
24
|
+
|
25
|
+
class OCIResource(OCIClientMixin):
|
26
|
+
"""Contains helper methods for getting information from OCIResourceSearch service.
|
27
|
+
|
28
|
+
Usage:
|
29
|
+
Find the compartment ID of an OCI resource:
|
30
|
+
>>> OCIResource.get_compartment_id("YOUR_OCID")
|
31
|
+
Search for OCI resource matching free text (Similar to the search box in OCI console):
|
32
|
+
>>> OCIResource.search("YOUR_FREE_TEXT")
|
33
|
+
Search for OCI resource matching structured text:
|
34
|
+
>>> OCIResource.search("STRUCTURED_TEXT", type="Structured")
|
35
|
+
"""
|
36
|
+
|
37
|
+
@classmethod
|
38
|
+
def init_client(cls, **kwargs) -> oci.resource_search.ResourceSearchClient:
|
39
|
+
return cls._init_client(
|
40
|
+
client=oci.resource_search.ResourceSearchClient, **kwargs
|
41
|
+
)
|
42
|
+
|
43
|
+
@classmethod
|
44
|
+
def get_compartment_id(cls, ocid) -> str:
|
45
|
+
"""Gets the compartment OCID of an OCI resource, given the resource's OCID.
|
46
|
+
|
47
|
+
Parameters
|
48
|
+
----------
|
49
|
+
ocid : str
|
50
|
+
OCID of a resource
|
51
|
+
|
52
|
+
Returns
|
53
|
+
-------
|
54
|
+
str:
|
55
|
+
Compartment OCID of the resource
|
56
|
+
|
57
|
+
|
58
|
+
"""
|
59
|
+
results = set([r.compartment_id for r in cls.search(ocid)])
|
60
|
+
if len(results) == 1:
|
61
|
+
return list(results)[0]
|
62
|
+
elif not results:
|
63
|
+
raise ResourceNotFoundError(
|
64
|
+
f"Resource not found for {ocid}. It may not exist or you may not have permission to list/access it."
|
65
|
+
)
|
66
|
+
else:
|
67
|
+
raise ValueError(
|
68
|
+
f"Unable determine compartment ID, multiple matches: {results}"
|
69
|
+
)
|
70
|
+
|
71
|
+
@classmethod
|
72
|
+
def search(
|
73
|
+
cls,
|
74
|
+
query: str,
|
75
|
+
type: str = "FreeText",
|
76
|
+
config: dict = None,
|
77
|
+
tenant_id: str = None,
|
78
|
+
limit: int = 500,
|
79
|
+
page: str = None,
|
80
|
+
**kwargs,
|
81
|
+
) -> list:
|
82
|
+
"""Search OCI resource by free text.
|
83
|
+
|
84
|
+
Parameters
|
85
|
+
----------
|
86
|
+
query : str
|
87
|
+
The content to search for.
|
88
|
+
type : str (optional)
|
89
|
+
The type of SearchDetails, whether "FreeText" or "Structured".
|
90
|
+
Defaults to "FreeText".
|
91
|
+
config: dict (optional)
|
92
|
+
Configuration keys and values as per SDK and Tool Configuration.
|
93
|
+
The from_file() method can be used to load configuration from a file.
|
94
|
+
Alternatively, a dict can be passed. You can validate_config the dict
|
95
|
+
using validate_config(). Defaults to None.
|
96
|
+
tenant_id: str (optional)
|
97
|
+
The tenancy ID, which can be used to specify a different tenancy
|
98
|
+
(for cross-tenancy authorization) when searching for resources in
|
99
|
+
a different tenancy. Defaults to None.
|
100
|
+
limit: int (optional)
|
101
|
+
The maximum number of items to return. The value must be between
|
102
|
+
1 and 1000. Defaults to 500.
|
103
|
+
page: str (optional)
|
104
|
+
The page at which to start retrieving results.
|
105
|
+
|
106
|
+
Returns
|
107
|
+
-------
|
108
|
+
list
|
109
|
+
A list of search results
|
110
|
+
|
111
|
+
"""
|
112
|
+
if not config:
|
113
|
+
client = cls.init_client()
|
114
|
+
else:
|
115
|
+
client = oci.resource_search.ResourceSearchClient(config=config)
|
116
|
+
|
117
|
+
if type == "Structured":
|
118
|
+
search_details = oci.resource_search.models.StructuredSearchDetails(
|
119
|
+
type="Structured",
|
120
|
+
query=query,
|
121
|
+
matching_context_type=None,
|
122
|
+
)
|
123
|
+
elif type == "FreeText":
|
124
|
+
search_details = oci.resource_search.models.FreeTextSearchDetails(
|
125
|
+
text=query, type="FreeText"
|
126
|
+
)
|
127
|
+
else:
|
128
|
+
raise ValueError(f"Invalid Type: {type}")
|
129
|
+
|
130
|
+
return client.search_resources(
|
131
|
+
search_details,
|
132
|
+
limit=limit,
|
133
|
+
page=page,
|
134
|
+
tenant_id=tenant_id,
|
135
|
+
**kwargs,
|
136
|
+
).data.items
|
ads/common/serializer.py
ADDED
@@ -0,0 +1,559 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2021, 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
|
+
"""
|
7
|
+
This module provides a base class for serializable items, as well as methods for serializing and
|
8
|
+
deserializing objects to and from JSON and YAML formats. It also includes methods for reading and
|
9
|
+
writing serialized objects to and from files.
|
10
|
+
"""
|
11
|
+
|
12
|
+
import dataclasses
|
13
|
+
import json
|
14
|
+
from abc import ABC, abstractmethod
|
15
|
+
from datetime import datetime
|
16
|
+
from enum import Enum
|
17
|
+
from typing import Dict, Optional, Union
|
18
|
+
from urllib.parse import urlparse
|
19
|
+
|
20
|
+
import fsspec
|
21
|
+
import yaml
|
22
|
+
|
23
|
+
from ads.common import logger
|
24
|
+
from ads.common.auth import default_signer
|
25
|
+
|
26
|
+
try:
|
27
|
+
from yaml import CSafeLoader as loader
|
28
|
+
except:
|
29
|
+
from yaml import SafeLoader as loader
|
30
|
+
|
31
|
+
|
32
|
+
class SideEffect(Enum):
|
33
|
+
CONVERT_KEYS_TO_LOWER = "lower"
|
34
|
+
CONVERT_KEYS_TO_UPPER = "upper"
|
35
|
+
|
36
|
+
|
37
|
+
class Serializable(ABC):
|
38
|
+
"""Base class that represents a serializable item.
|
39
|
+
|
40
|
+
Methods
|
41
|
+
-------
|
42
|
+
to_dict(self) -> dict
|
43
|
+
Serializes the object into a dictionary.
|
44
|
+
from_dict(cls, obj_dict) -> cls
|
45
|
+
Returns an instance of the class instantiated from the dictionary provided.
|
46
|
+
_write_to_file(s, uri, **kwargs)
|
47
|
+
Write string s into location specified by uri
|
48
|
+
_read_from_file(uri, **kwargs)
|
49
|
+
Returns contents from location specified by URI
|
50
|
+
to_json(self, uri=None, **kwargs)
|
51
|
+
Returns object serialized as a JSON string
|
52
|
+
from_json(cls, json_string=None, uri=None, **kwargs)
|
53
|
+
Creates an object from JSON string provided or from URI location containing JSON string
|
54
|
+
to_yaml(self, uri=None, **kwargs)
|
55
|
+
Returns object serialized as a YAML string
|
56
|
+
from_yaml(cls, yaml_string=None, uri=None, **kwargs)
|
57
|
+
Creates an object from YAML string provided or from URI location containing YAML string
|
58
|
+
from_string(cls, obj_string=None: str, uri=None, **kwargs)
|
59
|
+
Creates an object from string provided or from URI location containing string
|
60
|
+
"""
|
61
|
+
|
62
|
+
@abstractmethod
|
63
|
+
def to_dict(self, **kwargs: Dict) -> Dict:
|
64
|
+
"""Serializes an instance of class into a dictionary.
|
65
|
+
|
66
|
+
Parameters
|
67
|
+
----------
|
68
|
+
**kwargs: Dict
|
69
|
+
Additional arguments.
|
70
|
+
|
71
|
+
Returns
|
72
|
+
-------
|
73
|
+
Dict
|
74
|
+
The result dictionary.
|
75
|
+
"""
|
76
|
+
|
77
|
+
@classmethod
|
78
|
+
@abstractmethod
|
79
|
+
def from_dict(cls, obj_dict: dict, **kwargs) -> "Serializable":
|
80
|
+
"""Returns an instance of the class instantiated by the dictionary provided.
|
81
|
+
|
82
|
+
Parameters
|
83
|
+
----------
|
84
|
+
obj_dict: (dict)
|
85
|
+
Dictionary representation of the object.
|
86
|
+
|
87
|
+
Returns
|
88
|
+
-------
|
89
|
+
Serializable
|
90
|
+
A Serializable instance.
|
91
|
+
"""
|
92
|
+
pass
|
93
|
+
|
94
|
+
@staticmethod
|
95
|
+
def serialize(obj):
|
96
|
+
"""JSON serializer for objects not serializable by default json code."""
|
97
|
+
if isinstance(obj, datetime):
|
98
|
+
return obj.isoformat()
|
99
|
+
if hasattr(obj, "to_dict"):
|
100
|
+
return obj.to_dict()
|
101
|
+
raise TypeError(f"Type {type(obj)} not serializable.")
|
102
|
+
|
103
|
+
@staticmethod
|
104
|
+
def _write_to_file(s: str, uri: str, **kwargs) -> None:
|
105
|
+
"""Write string s into location specified by uri.
|
106
|
+
|
107
|
+
Parameters
|
108
|
+
----------
|
109
|
+
s: (string)
|
110
|
+
content
|
111
|
+
uri: (string)
|
112
|
+
URI location to save string s
|
113
|
+
kwargs : dict
|
114
|
+
keyword arguments to be passed into fsspec.open().
|
115
|
+
For OCI object storage, this can be config="path/to/.oci/config".
|
116
|
+
|
117
|
+
Returns
|
118
|
+
-------
|
119
|
+
None
|
120
|
+
Nothing
|
121
|
+
"""
|
122
|
+
|
123
|
+
overwrite = kwargs.pop("overwrite", True)
|
124
|
+
if not overwrite:
|
125
|
+
dst_path_scheme = urlparse(uri).scheme or "file"
|
126
|
+
if fsspec.filesystem(dst_path_scheme, **kwargs).exists(uri):
|
127
|
+
raise FileExistsError(
|
128
|
+
f"The `{uri}` is already exists. Set `overwrite` to True "
|
129
|
+
"if you wish to overwrite."
|
130
|
+
)
|
131
|
+
|
132
|
+
with fsspec.open(uri, "w", **kwargs) as f:
|
133
|
+
f.write(s)
|
134
|
+
|
135
|
+
@staticmethod
|
136
|
+
def _read_from_file(uri: str, **kwargs) -> str:
|
137
|
+
"""Returns contents from location specified by URI
|
138
|
+
|
139
|
+
Parameters
|
140
|
+
----------
|
141
|
+
uri: (string)
|
142
|
+
URI location
|
143
|
+
kwargs : dict
|
144
|
+
keyword arguments to be passed into fsspec.open().
|
145
|
+
For OCI object storage, this can be config="path/to/.oci/config".
|
146
|
+
|
147
|
+
Returns
|
148
|
+
-------
|
149
|
+
string: Contents in file specified by URI
|
150
|
+
"""
|
151
|
+
# Add default signer if the uri is an object storage uri, and
|
152
|
+
# the user does not specify config or signer.
|
153
|
+
if (
|
154
|
+
uri.startswith("oci://")
|
155
|
+
and "config" not in kwargs
|
156
|
+
and "signer" not in kwargs
|
157
|
+
):
|
158
|
+
kwargs.update(default_signer())
|
159
|
+
with fsspec.open(uri, "r", **kwargs) as f:
|
160
|
+
return f.read()
|
161
|
+
|
162
|
+
def to_json(
|
163
|
+
self,
|
164
|
+
uri: str = None,
|
165
|
+
encoder: callable = json.JSONEncoder,
|
166
|
+
default: callable = None,
|
167
|
+
**kwargs,
|
168
|
+
) -> str:
|
169
|
+
"""Returns object serialized as a JSON string
|
170
|
+
|
171
|
+
Parameters
|
172
|
+
----------
|
173
|
+
uri: (string, optional)
|
174
|
+
URI location to save the JSON string. Defaults to None.
|
175
|
+
encoder: (callable, optional)
|
176
|
+
Encoder for custom data structures. Defaults to JSONEncoder.
|
177
|
+
default: (callable, optional)
|
178
|
+
A function that gets called for objects that can't otherwise be serialized.
|
179
|
+
It should return JSON-serializable version of the object or original object.
|
180
|
+
|
181
|
+
kwargs
|
182
|
+
------
|
183
|
+
overwrite: (bool, optional). Defaults to True.
|
184
|
+
Whether to overwrite existing file or not.
|
185
|
+
|
186
|
+
keyword arguments to be passed into fsspec.open().
|
187
|
+
For OCI object storage, this could be config="path/to/.oci/config".
|
188
|
+
For other storage connections consider e.g. host, port, username, password, etc.
|
189
|
+
|
190
|
+
Returns
|
191
|
+
-------
|
192
|
+
Union[str, None]
|
193
|
+
Serialized version of object.
|
194
|
+
`None` in case when `uri` provided.
|
195
|
+
"""
|
196
|
+
json_string = json.dumps(
|
197
|
+
self.to_dict(**kwargs),
|
198
|
+
cls=encoder,
|
199
|
+
default=default or self.serialize,
|
200
|
+
indent=4,
|
201
|
+
)
|
202
|
+
if uri:
|
203
|
+
self._write_to_file(s=json_string, uri=uri, **kwargs)
|
204
|
+
return None
|
205
|
+
return json_string
|
206
|
+
|
207
|
+
@classmethod
|
208
|
+
def from_json(
|
209
|
+
cls,
|
210
|
+
json_string: str = None,
|
211
|
+
uri: str = None,
|
212
|
+
decoder: callable = json.JSONDecoder,
|
213
|
+
**kwargs,
|
214
|
+
):
|
215
|
+
"""Creates an object from JSON string provided or from URI location containing JSON string
|
216
|
+
|
217
|
+
Parameters
|
218
|
+
----------
|
219
|
+
json_string: (string, optional)
|
220
|
+
JSON string. Defaults to None.
|
221
|
+
uri: (string, optional)
|
222
|
+
URI location of file containing JSON string. Defaults to None.
|
223
|
+
decoder: (callable, optional)
|
224
|
+
Custom decoder. Defaults to simple JSON decoder.
|
225
|
+
kwargs
|
226
|
+
------
|
227
|
+
keyword arguments to be passed into fsspec.open(). For OCI object storage, this should be config="path/to/.oci/config".
|
228
|
+
For other storage connections consider e.g. host, port, username, password, etc.
|
229
|
+
|
230
|
+
Raises
|
231
|
+
------
|
232
|
+
ValueError
|
233
|
+
Raised if neither string nor uri is provided
|
234
|
+
|
235
|
+
Returns
|
236
|
+
-------
|
237
|
+
cls
|
238
|
+
Returns instance of the class
|
239
|
+
"""
|
240
|
+
if json_string:
|
241
|
+
return cls.from_dict(json.loads(json_string, cls=decoder), **kwargs)
|
242
|
+
if uri:
|
243
|
+
json_dict = json.loads(cls._read_from_file(uri, **kwargs), cls=decoder)
|
244
|
+
return cls.from_dict(json_dict)
|
245
|
+
raise ValueError("Must provide either JSON string or URI location")
|
246
|
+
|
247
|
+
def to_yaml(
|
248
|
+
self, uri: str = None, dumper: callable = yaml.SafeDumper, **kwargs
|
249
|
+
) -> Union[str, None]:
|
250
|
+
"""Returns object serialized as a YAML string
|
251
|
+
|
252
|
+
Parameters
|
253
|
+
----------
|
254
|
+
uri : str, optional
|
255
|
+
URI location to save the YAML string, by default None
|
256
|
+
dumper : callable, optional
|
257
|
+
Custom YAML Dumper, by default yaml.SafeDumper
|
258
|
+
kwargs : dict
|
259
|
+
overwrite: (bool, optional). Defaults to True.
|
260
|
+
Whether to overwrite existing file or not.
|
261
|
+
note: (str, optional)
|
262
|
+
The note that needs to be added in the beginning of the YAML.
|
263
|
+
It will be added as is without any formatting.
|
264
|
+
side_effect: Optional[SideEffect]
|
265
|
+
side effect to take on the dictionary. The side effect can be either
|
266
|
+
convert the dictionary keys to "lower" (SideEffect.CONVERT_KEYS_TO_LOWER.value)
|
267
|
+
or "upper"(SideEffect.CONVERT_KEYS_TO_UPPER.value) cases.
|
268
|
+
|
269
|
+
The other keyword arguments to be passed into fsspec.open().
|
270
|
+
For OCI object storage, this could be config="path/to/.oci/config".
|
271
|
+
|
272
|
+
Returns
|
273
|
+
-------
|
274
|
+
Union[str, None]
|
275
|
+
Serialized version of object.
|
276
|
+
`None` in case when `uri` provided.
|
277
|
+
"""
|
278
|
+
note = kwargs.pop("note", "")
|
279
|
+
|
280
|
+
yaml_string = f"{note}\n" + yaml.dump(self.to_dict(**kwargs), Dumper=dumper)
|
281
|
+
if uri:
|
282
|
+
self._write_to_file(s=yaml_string, uri=uri, **kwargs)
|
283
|
+
return None
|
284
|
+
|
285
|
+
return yaml_string
|
286
|
+
|
287
|
+
@classmethod
|
288
|
+
def from_yaml(
|
289
|
+
cls,
|
290
|
+
yaml_string: str = None,
|
291
|
+
uri: str = None,
|
292
|
+
loader: callable = loader,
|
293
|
+
**kwargs,
|
294
|
+
):
|
295
|
+
"""Creates an object from YAML string provided or from URI location containing YAML string
|
296
|
+
|
297
|
+
Parameters
|
298
|
+
----------
|
299
|
+
yaml_string (string, optional)
|
300
|
+
YAML string. Defaults to None.
|
301
|
+
uri (string, optional)
|
302
|
+
URI location of file containing YAML string. Defaults to None.
|
303
|
+
loader (callable, optional)
|
304
|
+
Custom YAML loader. Defaults to CLoader/SafeLoader.
|
305
|
+
kwargs (dict)
|
306
|
+
keyword arguments to be passed into fsspec.open().
|
307
|
+
For OCI object storage, this should be config="path/to/.oci/config".
|
308
|
+
For other storage connections consider e.g. host, port, username, password, etc.
|
309
|
+
|
310
|
+
Raises
|
311
|
+
------
|
312
|
+
ValueError
|
313
|
+
Raised if neither string nor uri is provided
|
314
|
+
|
315
|
+
Returns
|
316
|
+
-------
|
317
|
+
cls
|
318
|
+
Returns instance of the class
|
319
|
+
"""
|
320
|
+
if yaml_string:
|
321
|
+
return cls.from_dict(yaml.load(yaml_string, Loader=loader), **kwargs)
|
322
|
+
if uri:
|
323
|
+
yaml_dict = yaml.load(cls._read_from_file(uri=uri, **kwargs), Loader=loader)
|
324
|
+
return cls.from_dict(yaml_dict, **kwargs)
|
325
|
+
raise ValueError("Must provide either YAML string or URI location")
|
326
|
+
|
327
|
+
@classmethod
|
328
|
+
def from_string(
|
329
|
+
cls,
|
330
|
+
obj_string: str = None,
|
331
|
+
uri: str = None,
|
332
|
+
loader: callable = loader,
|
333
|
+
**kwargs,
|
334
|
+
) -> "Serializable":
|
335
|
+
"""Creates an object from string provided or from URI location containing string
|
336
|
+
|
337
|
+
Parameters
|
338
|
+
----------
|
339
|
+
obj_string: (str, optional)
|
340
|
+
String representing the object
|
341
|
+
uri: (str, optional)
|
342
|
+
URI location of file containing string. Defaults to None.
|
343
|
+
loader: (callable, optional)
|
344
|
+
Custom YAML loader. Defaults to CLoader/SafeLoader.
|
345
|
+
kwargs: (dict)
|
346
|
+
keyword arguments to be passed into fsspec.open(). For OCI object storage, this should be config="path/to/.oci/config".
|
347
|
+
For other storage connections consider e.g. host, port, username, password, etc.
|
348
|
+
|
349
|
+
Returns
|
350
|
+
-------
|
351
|
+
Serializable
|
352
|
+
A Serializable instance
|
353
|
+
"""
|
354
|
+
return cls.from_yaml(yaml_string=obj_string, uri=uri, loader=loader, **kwargs)
|
355
|
+
|
356
|
+
def __repr__(self):
|
357
|
+
"""Returns printable version of object.
|
358
|
+
|
359
|
+
Returns
|
360
|
+
----------
|
361
|
+
string
|
362
|
+
Serialized version of object as a YAML string
|
363
|
+
"""
|
364
|
+
return self.to_yaml()
|
365
|
+
|
366
|
+
def __str__(self):
|
367
|
+
"""Returns printable version of object.
|
368
|
+
|
369
|
+
Returns
|
370
|
+
----------
|
371
|
+
string
|
372
|
+
Serialized version of object as a YAML string
|
373
|
+
"""
|
374
|
+
return self.to_json()
|
375
|
+
|
376
|
+
|
377
|
+
class DataClassSerializable(Serializable):
|
378
|
+
"""Wrapper class that inherit from Serializable class.
|
379
|
+
|
380
|
+
Methods
|
381
|
+
-------
|
382
|
+
to_dict(self) -> dict
|
383
|
+
Serializes the object into a dictionary.
|
384
|
+
from_dict(cls, obj_dict) -> cls
|
385
|
+
Returns an instance of the class instantiated from the dictionary provided.
|
386
|
+
"""
|
387
|
+
|
388
|
+
@classmethod
|
389
|
+
def _validate_dict(cls, obj_dict: Dict) -> bool:
|
390
|
+
"""validate the dictionary.
|
391
|
+
|
392
|
+
Parameters
|
393
|
+
----------
|
394
|
+
obj_dict: (dict)
|
395
|
+
Dictionary representation of the object
|
396
|
+
|
397
|
+
Returns
|
398
|
+
-------
|
399
|
+
bool
|
400
|
+
True if the validation passed, else False.
|
401
|
+
"""
|
402
|
+
pass
|
403
|
+
|
404
|
+
def to_dict(self, **kwargs) -> Dict:
|
405
|
+
"""Serializes instance of class into a dictionary
|
406
|
+
|
407
|
+
kwargs
|
408
|
+
------
|
409
|
+
side_effect: Optional[SideEffect]
|
410
|
+
side effect to take on the dictionary. The side effect can be either
|
411
|
+
convert the dictionary keys to "lower" (SideEffect.CONVERT_KEYS_TO_LOWER.value)
|
412
|
+
or "upper"(SideEffect.CONVERT_KEYS_TO_UPPER.value) cases.
|
413
|
+
|
414
|
+
Returns
|
415
|
+
-------
|
416
|
+
Dict
|
417
|
+
A dictionary.
|
418
|
+
"""
|
419
|
+
obj_dict = dataclasses.asdict(self)
|
420
|
+
if "side_effect" in kwargs and kwargs["side_effect"]:
|
421
|
+
obj_dict = DataClassSerializable._normalize_dict(
|
422
|
+
obj_dict=obj_dict, case=kwargs["side_effect"], recursively=True
|
423
|
+
)
|
424
|
+
return obj_dict
|
425
|
+
|
426
|
+
@classmethod
|
427
|
+
def from_dict(
|
428
|
+
cls,
|
429
|
+
obj_dict: dict,
|
430
|
+
side_effect: Optional[SideEffect] = SideEffect.CONVERT_KEYS_TO_LOWER.value,
|
431
|
+
ignore_unknown: Optional[bool] = False,
|
432
|
+
**kwargs,
|
433
|
+
) -> "DataClassSerializable":
|
434
|
+
"""Returns an instance of the class instantiated by the dictionary provided.
|
435
|
+
|
436
|
+
Parameters
|
437
|
+
----------
|
438
|
+
obj_dict: (dict)
|
439
|
+
Dictionary representation of the object
|
440
|
+
side_effect: Optional[SideEffect]
|
441
|
+
side effect to take on the dictionary. The side effect can be either
|
442
|
+
convert the dictionary keys to "lower" (SideEffect.CONVERT_KEYS_TO_LOWER.value)
|
443
|
+
or "upper"(SideEffect.CONVERT_KEYS_TO_UPPER.value) cases.
|
444
|
+
ignore_unknown: (bool, optional). Defaults to `False`.
|
445
|
+
Whether to ignore unknown fields or not.
|
446
|
+
|
447
|
+
Returns
|
448
|
+
-------
|
449
|
+
DataClassSerializable
|
450
|
+
A DataClassSerializable instance.
|
451
|
+
"""
|
452
|
+
assert obj_dict, "`obj_dict` must not be None."
|
453
|
+
if not isinstance(obj_dict, dict):
|
454
|
+
raise TypeError("`obj_dict` must be a dictionary.")
|
455
|
+
# check if dict not is None and not empty and type is dict
|
456
|
+
cls._validate_dict(obj_dict=obj_dict)
|
457
|
+
if side_effect:
|
458
|
+
obj_dict = cls._normalize_dict(obj_dict, case=side_effect)
|
459
|
+
|
460
|
+
allowed_fields = set([f.name for f in dataclasses.fields(cls)])
|
461
|
+
wrong_fields = set(obj_dict.keys()) - allowed_fields
|
462
|
+
if wrong_fields and not ignore_unknown:
|
463
|
+
logger.warning(
|
464
|
+
f"The class {cls.__name__} doesn't contain attributes: `{list(wrong_fields)}`. "
|
465
|
+
"These fields will be ignored."
|
466
|
+
)
|
467
|
+
|
468
|
+
obj = cls(**{key: obj_dict.get(key) for key in allowed_fields})
|
469
|
+
|
470
|
+
for key, value in obj_dict.items():
|
471
|
+
if (
|
472
|
+
key in allowed_fields
|
473
|
+
and isinstance(value, dict)
|
474
|
+
and hasattr(getattr(cls(), key).__class__, "from_dict")
|
475
|
+
):
|
476
|
+
attribute = getattr(cls(), key).__class__.from_dict(
|
477
|
+
value,
|
478
|
+
ignore_unknown=ignore_unknown,
|
479
|
+
side_effect=side_effect,
|
480
|
+
**kwargs,
|
481
|
+
)
|
482
|
+
setattr(obj, key, attribute)
|
483
|
+
|
484
|
+
return obj
|
485
|
+
|
486
|
+
@staticmethod
|
487
|
+
def _normalize_dict(
|
488
|
+
obj_dict: Dict,
|
489
|
+
recursively: bool = False,
|
490
|
+
case: str = SideEffect.CONVERT_KEYS_TO_LOWER.value,
|
491
|
+
**kwargs,
|
492
|
+
) -> Dict:
|
493
|
+
"""lower all the keys.
|
494
|
+
|
495
|
+
Parameters
|
496
|
+
----------
|
497
|
+
obj_dict: (Dict)
|
498
|
+
Dictionary representation of the object.
|
499
|
+
case: (optional, str). Defaults to "lower".
|
500
|
+
the case to normalized to. can be either "lower" (SideEffect.CONVERT_KEYS_TO_LOWER.value)
|
501
|
+
or "upper"(SideEffect.CONVERT_KEYS_TO_UPPER.value).
|
502
|
+
recursively: (bool, optional). Defaults to `False`.
|
503
|
+
Whether to recursively normalize the dictionary or not.
|
504
|
+
|
505
|
+
Returns
|
506
|
+
-------
|
507
|
+
Dict
|
508
|
+
Dictionary representation of the object.
|
509
|
+
"""
|
510
|
+
normalized_obj_dict = {}
|
511
|
+
for key, value in obj_dict.items():
|
512
|
+
if recursively and isinstance(value, dict):
|
513
|
+
value = DataClassSerializable._normalize_dict(
|
514
|
+
value, case=case, recursively=recursively, **kwargs
|
515
|
+
)
|
516
|
+
normalized_obj_dict = DataClassSerializable._normalize_key(
|
517
|
+
normalized_obj_dict=normalized_obj_dict,
|
518
|
+
key=key,
|
519
|
+
value=value,
|
520
|
+
case=case,
|
521
|
+
**kwargs,
|
522
|
+
)
|
523
|
+
return normalized_obj_dict
|
524
|
+
|
525
|
+
@staticmethod
|
526
|
+
def _normalize_key(
|
527
|
+
normalized_obj_dict: Dict, key: str, value: Union[str, Dict], case: str
|
528
|
+
) -> Dict:
|
529
|
+
"""helper function to normalize the key in the case specified and add it back to the dictionary.
|
530
|
+
|
531
|
+
Parameters
|
532
|
+
----------
|
533
|
+
normalized_obj_dict: (Dict)
|
534
|
+
the dictionary to append the key and value to.
|
535
|
+
key: (str)
|
536
|
+
key to be normalized.
|
537
|
+
value: (Union[str, Dict])
|
538
|
+
value to be added.
|
539
|
+
case: (str)
|
540
|
+
The case to normalized to. can be either "lower" (SideEffect.CONVERT_KEYS_TO_LOWER.value)
|
541
|
+
or "upper"(SideEffect.CONVERT_KEYS_TO_UPPER.value).
|
542
|
+
|
543
|
+
Raises
|
544
|
+
------
|
545
|
+
NotImplementedError
|
546
|
+
Raised when `case` is not supported.
|
547
|
+
|
548
|
+
Returns
|
549
|
+
-------
|
550
|
+
Dict
|
551
|
+
Normalized dictionary with the key and value added in the case specified.
|
552
|
+
"""
|
553
|
+
if case.lower() == SideEffect.CONVERT_KEYS_TO_LOWER.value:
|
554
|
+
normalized_obj_dict[key.lower()] = value
|
555
|
+
elif case.lower() == SideEffect.CONVERT_KEYS_TO_UPPER.value:
|
556
|
+
normalized_obj_dict[key.upper()] = value
|
557
|
+
else:
|
558
|
+
raise NotImplementedError("`case` is not supported.")
|
559
|
+
return normalized_obj_dict
|