oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.10rc0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ads/aqua/__init__.py +40 -0
- ads/aqua/app.py +507 -0
- ads/aqua/cli.py +96 -0
- ads/aqua/client/__init__.py +3 -0
- ads/aqua/client/client.py +836 -0
- ads/aqua/client/openai_client.py +305 -0
- ads/aqua/common/__init__.py +5 -0
- ads/aqua/common/decorator.py +125 -0
- ads/aqua/common/entities.py +274 -0
- ads/aqua/common/enums.py +134 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1295 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +247 -0
- ads/aqua/config/evaluation/__init__.py +4 -0
- ads/aqua/config/evaluation/evaluation_service_config.py +147 -0
- ads/aqua/config/utils/__init__.py +4 -0
- ads/aqua/config/utils/serializer.py +339 -0
- ads/aqua/constants.py +116 -0
- ads/aqua/data.py +14 -0
- ads/aqua/dummy_data/icon.txt +1 -0
- ads/aqua/dummy_data/oci_model_deployments.json +56 -0
- ads/aqua/dummy_data/oci_models.json +1 -0
- ads/aqua/dummy_data/readme.md +26 -0
- ads/aqua/evaluation/__init__.py +8 -0
- ads/aqua/evaluation/constants.py +53 -0
- ads/aqua/evaluation/entities.py +186 -0
- ads/aqua/evaluation/errors.py +70 -0
- ads/aqua/evaluation/evaluation.py +1814 -0
- ads/aqua/extension/__init__.py +42 -0
- ads/aqua/extension/aqua_ws_msg_handler.py +76 -0
- ads/aqua/extension/base_handler.py +90 -0
- ads/aqua/extension/common_handler.py +121 -0
- ads/aqua/extension/common_ws_msg_handler.py +36 -0
- ads/aqua/extension/deployment_handler.py +381 -0
- ads/aqua/extension/deployment_ws_msg_handler.py +54 -0
- ads/aqua/extension/errors.py +30 -0
- ads/aqua/extension/evaluation_handler.py +129 -0
- ads/aqua/extension/evaluation_ws_msg_handler.py +61 -0
- ads/aqua/extension/finetune_handler.py +96 -0
- ads/aqua/extension/model_handler.py +390 -0
- ads/aqua/extension/models/__init__.py +0 -0
- ads/aqua/extension/models/ws_models.py +145 -0
- ads/aqua/extension/models_ws_msg_handler.py +50 -0
- ads/aqua/extension/ui_handler.py +300 -0
- ads/aqua/extension/ui_websocket_handler.py +130 -0
- ads/aqua/extension/utils.py +133 -0
- ads/aqua/finetuning/__init__.py +7 -0
- ads/aqua/finetuning/constants.py +23 -0
- ads/aqua/finetuning/entities.py +181 -0
- ads/aqua/finetuning/finetuning.py +749 -0
- ads/aqua/model/__init__.py +8 -0
- ads/aqua/model/constants.py +60 -0
- ads/aqua/model/entities.py +385 -0
- ads/aqua/model/enums.py +32 -0
- ads/aqua/model/model.py +2134 -0
- ads/aqua/model/utils.py +52 -0
- ads/aqua/modeldeployment/__init__.py +6 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1315 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/utils.py +543 -0
- ads/aqua/resources/gpu_shapes_index.json +94 -0
- ads/aqua/server/__init__.py +4 -0
- ads/aqua/server/__main__.py +24 -0
- ads/aqua/server/app.py +47 -0
- ads/aqua/server/aqua_spec.yml +1291 -0
- ads/aqua/training/__init__.py +4 -0
- ads/aqua/training/exceptions.py +476 -0
- ads/aqua/ui.py +519 -0
- ads/automl/__init__.py +9 -0
- ads/automl/driver.py +330 -0
- ads/automl/provider.py +975 -0
- ads/bds/__init__.py +5 -0
- ads/bds/auth.py +127 -0
- ads/bds/big_data_service.py +255 -0
- ads/catalog/__init__.py +19 -0
- ads/catalog/model.py +1576 -0
- ads/catalog/notebook.py +461 -0
- ads/catalog/project.py +468 -0
- ads/catalog/summary.py +178 -0
- ads/common/__init__.py +11 -0
- ads/common/analyzer.py +65 -0
- ads/common/artifact/.model-ignore +63 -0
- ads/common/artifact/__init__.py +10 -0
- ads/common/auth.py +1122 -0
- ads/common/card_identifier.py +83 -0
- ads/common/config.py +647 -0
- ads/common/data.py +165 -0
- ads/common/decorator/__init__.py +9 -0
- ads/common/decorator/argument_to_case.py +88 -0
- ads/common/decorator/deprecate.py +69 -0
- ads/common/decorator/require_nonempty_arg.py +65 -0
- ads/common/decorator/runtime_dependency.py +178 -0
- ads/common/decorator/threaded.py +97 -0
- ads/common/decorator/utils.py +35 -0
- ads/common/dsc_file_system.py +303 -0
- ads/common/error.py +14 -0
- ads/common/extended_enum.py +81 -0
- ads/common/function/__init__.py +5 -0
- ads/common/function/fn_util.py +142 -0
- ads/common/function/func_conf.yaml +25 -0
- ads/common/ipython.py +76 -0
- ads/common/model.py +679 -0
- ads/common/model_artifact.py +1759 -0
- ads/common/model_artifact_schema.json +107 -0
- ads/common/model_export_util.py +664 -0
- ads/common/model_metadata.py +24 -0
- ads/common/object_storage_details.py +296 -0
- ads/common/oci_client.py +179 -0
- ads/common/oci_datascience.py +46 -0
- ads/common/oci_logging.py +1144 -0
- ads/common/oci_mixin.py +957 -0
- ads/common/oci_resource.py +136 -0
- ads/common/serializer.py +559 -0
- ads/common/utils.py +1852 -0
- ads/common/word_lists.py +1491 -0
- ads/common/work_request.py +189 -0
- ads/config.py +1 -0
- ads/data_labeling/__init__.py +13 -0
- ads/data_labeling/boundingbox.py +253 -0
- ads/data_labeling/constants.py +47 -0
- ads/data_labeling/data_labeling_service.py +244 -0
- ads/data_labeling/interface/__init__.py +5 -0
- ads/data_labeling/interface/loader.py +16 -0
- ads/data_labeling/interface/parser.py +16 -0
- ads/data_labeling/interface/reader.py +23 -0
- ads/data_labeling/loader/__init__.py +5 -0
- ads/data_labeling/loader/file_loader.py +241 -0
- ads/data_labeling/metadata.py +110 -0
- ads/data_labeling/mixin/__init__.py +5 -0
- ads/data_labeling/mixin/data_labeling.py +232 -0
- ads/data_labeling/ner.py +129 -0
- ads/data_labeling/parser/__init__.py +5 -0
- ads/data_labeling/parser/dls_record_parser.py +388 -0
- ads/data_labeling/parser/export_metadata_parser.py +94 -0
- ads/data_labeling/parser/export_record_parser.py +473 -0
- ads/data_labeling/reader/__init__.py +5 -0
- ads/data_labeling/reader/dataset_reader.py +574 -0
- ads/data_labeling/reader/dls_record_reader.py +121 -0
- ads/data_labeling/reader/export_record_reader.py +62 -0
- ads/data_labeling/reader/jsonl_reader.py +75 -0
- ads/data_labeling/reader/metadata_reader.py +203 -0
- ads/data_labeling/reader/record_reader.py +263 -0
- ads/data_labeling/record.py +52 -0
- ads/data_labeling/visualizer/__init__.py +5 -0
- ads/data_labeling/visualizer/image_visualizer.py +525 -0
- ads/data_labeling/visualizer/text_visualizer.py +357 -0
- ads/database/__init__.py +5 -0
- ads/database/connection.py +338 -0
- ads/dataset/__init__.py +10 -0
- ads/dataset/capabilities.md +51 -0
- ads/dataset/classification_dataset.py +339 -0
- ads/dataset/correlation.py +226 -0
- ads/dataset/correlation_plot.py +563 -0
- ads/dataset/dask_series.py +173 -0
- ads/dataset/dataframe_transformer.py +110 -0
- ads/dataset/dataset.py +1979 -0
- ads/dataset/dataset_browser.py +360 -0
- ads/dataset/dataset_with_target.py +995 -0
- ads/dataset/exception.py +25 -0
- ads/dataset/factory.py +987 -0
- ads/dataset/feature_engineering_transformer.py +35 -0
- ads/dataset/feature_selection.py +107 -0
- ads/dataset/forecasting_dataset.py +26 -0
- ads/dataset/helper.py +1450 -0
- ads/dataset/label_encoder.py +99 -0
- ads/dataset/mixin/__init__.py +5 -0
- ads/dataset/mixin/dataset_accessor.py +134 -0
- ads/dataset/pipeline.py +58 -0
- ads/dataset/plot.py +710 -0
- ads/dataset/progress.py +86 -0
- ads/dataset/recommendation.py +297 -0
- ads/dataset/recommendation_transformer.py +502 -0
- ads/dataset/regression_dataset.py +14 -0
- ads/dataset/sampled_dataset.py +1050 -0
- ads/dataset/target.py +98 -0
- ads/dataset/timeseries.py +18 -0
- ads/dbmixin/__init__.py +5 -0
- ads/dbmixin/db_pandas_accessor.py +153 -0
- ads/environment/__init__.py +9 -0
- ads/environment/ml_runtime.py +66 -0
- ads/evaluations/README.md +14 -0
- ads/evaluations/__init__.py +109 -0
- ads/evaluations/evaluation_plot.py +983 -0
- ads/evaluations/evaluator.py +1334 -0
- ads/evaluations/statistical_metrics.py +543 -0
- ads/experiments/__init__.py +9 -0
- ads/experiments/capabilities.md +0 -0
- ads/explanations/__init__.py +21 -0
- ads/explanations/base_explainer.py +142 -0
- ads/explanations/capabilities.md +83 -0
- ads/explanations/explainer.py +190 -0
- ads/explanations/mlx_global_explainer.py +1050 -0
- ads/explanations/mlx_interface.py +386 -0
- ads/explanations/mlx_local_explainer.py +287 -0
- ads/explanations/mlx_whatif_explainer.py +201 -0
- ads/feature_engineering/__init__.py +20 -0
- ads/feature_engineering/accessor/__init__.py +5 -0
- ads/feature_engineering/accessor/dataframe_accessor.py +535 -0
- ads/feature_engineering/accessor/mixin/__init__.py +5 -0
- ads/feature_engineering/accessor/mixin/correlation.py +166 -0
- ads/feature_engineering/accessor/mixin/eda_mixin.py +266 -0
- ads/feature_engineering/accessor/mixin/eda_mixin_series.py +85 -0
- ads/feature_engineering/accessor/mixin/feature_types_mixin.py +211 -0
- ads/feature_engineering/accessor/mixin/utils.py +65 -0
- ads/feature_engineering/accessor/series_accessor.py +431 -0
- ads/feature_engineering/adsimage/__init__.py +5 -0
- ads/feature_engineering/adsimage/image.py +192 -0
- ads/feature_engineering/adsimage/image_reader.py +170 -0
- ads/feature_engineering/adsimage/interface/__init__.py +5 -0
- ads/feature_engineering/adsimage/interface/reader.py +19 -0
- ads/feature_engineering/adsstring/__init__.py +7 -0
- ads/feature_engineering/adsstring/oci_language/__init__.py +8 -0
- ads/feature_engineering/adsstring/string/__init__.py +8 -0
- ads/feature_engineering/data_schema.json +57 -0
- ads/feature_engineering/dataset/__init__.py +5 -0
- ads/feature_engineering/dataset/zip_code_data.py +42062 -0
- ads/feature_engineering/exceptions.py +40 -0
- ads/feature_engineering/feature_type/__init__.py +133 -0
- ads/feature_engineering/feature_type/address.py +184 -0
- ads/feature_engineering/feature_type/adsstring/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/common_regex_mixin.py +164 -0
- ads/feature_engineering/feature_type/adsstring/oci_language.py +93 -0
- ads/feature_engineering/feature_type/adsstring/parsers/__init__.py +5 -0
- ads/feature_engineering/feature_type/adsstring/parsers/base.py +47 -0
- ads/feature_engineering/feature_type/adsstring/parsers/nltk_parser.py +96 -0
- ads/feature_engineering/feature_type/adsstring/parsers/spacy_parser.py +221 -0
- ads/feature_engineering/feature_type/adsstring/string.py +258 -0
- ads/feature_engineering/feature_type/base.py +58 -0
- ads/feature_engineering/feature_type/boolean.py +183 -0
- ads/feature_engineering/feature_type/category.py +146 -0
- ads/feature_engineering/feature_type/constant.py +137 -0
- ads/feature_engineering/feature_type/continuous.py +151 -0
- ads/feature_engineering/feature_type/creditcard.py +314 -0
- ads/feature_engineering/feature_type/datetime.py +190 -0
- ads/feature_engineering/feature_type/discrete.py +134 -0
- ads/feature_engineering/feature_type/document.py +43 -0
- ads/feature_engineering/feature_type/gis.py +251 -0
- ads/feature_engineering/feature_type/handler/__init__.py +5 -0
- ads/feature_engineering/feature_type/handler/feature_validator.py +524 -0
- ads/feature_engineering/feature_type/handler/feature_warning.py +319 -0
- ads/feature_engineering/feature_type/handler/warnings.py +128 -0
- ads/feature_engineering/feature_type/integer.py +142 -0
- ads/feature_engineering/feature_type/ip_address.py +144 -0
- ads/feature_engineering/feature_type/ip_address_v4.py +138 -0
- ads/feature_engineering/feature_type/ip_address_v6.py +138 -0
- ads/feature_engineering/feature_type/lat_long.py +256 -0
- ads/feature_engineering/feature_type/object.py +43 -0
- ads/feature_engineering/feature_type/ordinal.py +132 -0
- ads/feature_engineering/feature_type/phone_number.py +135 -0
- ads/feature_engineering/feature_type/string.py +171 -0
- ads/feature_engineering/feature_type/text.py +93 -0
- ads/feature_engineering/feature_type/unknown.py +43 -0
- ads/feature_engineering/feature_type/zip_code.py +164 -0
- ads/feature_engineering/feature_type_manager.py +406 -0
- ads/feature_engineering/schema.py +795 -0
- ads/feature_engineering/utils.py +245 -0
- ads/feature_store/.readthedocs.yaml +19 -0
- ads/feature_store/README.md +65 -0
- ads/feature_store/__init__.py +9 -0
- ads/feature_store/common/__init__.py +0 -0
- ads/feature_store/common/enums.py +339 -0
- ads/feature_store/common/exceptions.py +18 -0
- ads/feature_store/common/spark_session_singleton.py +125 -0
- ads/feature_store/common/utils/__init__.py +0 -0
- ads/feature_store/common/utils/base64_encoder_decoder.py +72 -0
- ads/feature_store/common/utils/feature_schema_mapper.py +283 -0
- ads/feature_store/common/utils/transformation_utils.py +82 -0
- ads/feature_store/common/utils/utility.py +403 -0
- ads/feature_store/data_validation/__init__.py +0 -0
- ads/feature_store/data_validation/great_expectation.py +129 -0
- ads/feature_store/dataset.py +1230 -0
- ads/feature_store/dataset_job.py +530 -0
- ads/feature_store/docs/Dockerfile +7 -0
- ads/feature_store/docs/Makefile +44 -0
- ads/feature_store/docs/conf.py +28 -0
- ads/feature_store/docs/requirements.txt +14 -0
- ads/feature_store/docs/source/ads.feature_store.query.rst +20 -0
- ads/feature_store/docs/source/cicd.rst +137 -0
- ads/feature_store/docs/source/conf.py +86 -0
- ads/feature_store/docs/source/data_versioning.rst +33 -0
- ads/feature_store/docs/source/dataset.rst +388 -0
- ads/feature_store/docs/source/dataset_job.rst +27 -0
- ads/feature_store/docs/source/demo.rst +70 -0
- ads/feature_store/docs/source/entity.rst +78 -0
- ads/feature_store/docs/source/feature_group.rst +624 -0
- ads/feature_store/docs/source/feature_group_job.rst +29 -0
- ads/feature_store/docs/source/feature_store.rst +122 -0
- ads/feature_store/docs/source/feature_store_class.rst +123 -0
- ads/feature_store/docs/source/feature_validation.rst +66 -0
- ads/feature_store/docs/source/figures/cicd.png +0 -0
- ads/feature_store/docs/source/figures/data_validation.png +0 -0
- ads/feature_store/docs/source/figures/data_versioning.png +0 -0
- ads/feature_store/docs/source/figures/dataset.gif +0 -0
- ads/feature_store/docs/source/figures/dataset.png +0 -0
- ads/feature_store/docs/source/figures/dataset_lineage.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics.png +0 -0
- ads/feature_store/docs/source/figures/dataset_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_results.png +0 -0
- ads/feature_store/docs/source/figures/dataset_validation_summary.png +0 -0
- ads/feature_store/docs/source/figures/drift_monitoring.png +0 -0
- ads/feature_store/docs/source/figures/entity.png +0 -0
- ads/feature_store/docs/source/figures/feature_group.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_lineage.png +0 -0
- ads/feature_store/docs/source/figures/feature_group_statistics_viz.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_deployment.png +0 -0
- ads/feature_store/docs/source/figures/feature_store_overview.png +0 -0
- ads/feature_store/docs/source/figures/featuregroup.gif +0 -0
- ads/feature_store/docs/source/figures/lineage_d1.png +0 -0
- ads/feature_store/docs/source/figures/lineage_d2.png +0 -0
- ads/feature_store/docs/source/figures/lineage_fg.png +0 -0
- ads/feature_store/docs/source/figures/logo-dark-mode.png +0 -0
- ads/feature_store/docs/source/figures/logo-light-mode.png +0 -0
- ads/feature_store/docs/source/figures/overview.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_feature_store_stack.png +0 -0
- ads/feature_store/docs/source/figures/resource_manager_home.png +0 -0
- ads/feature_store/docs/source/figures/stats_1.png +0 -0
- ads/feature_store/docs/source/figures/stats_2.png +0 -0
- ads/feature_store/docs/source/figures/stats_d.png +0 -0
- ads/feature_store/docs/source/figures/stats_fg.png +0 -0
- ads/feature_store/docs/source/figures/transformation.png +0 -0
- ads/feature_store/docs/source/figures/transformations.gif +0 -0
- ads/feature_store/docs/source/figures/validation.png +0 -0
- ads/feature_store/docs/source/figures/validation_fg.png +0 -0
- ads/feature_store/docs/source/figures/validation_results.png +0 -0
- ads/feature_store/docs/source/figures/validation_summary.png +0 -0
- ads/feature_store/docs/source/index.rst +81 -0
- ads/feature_store/docs/source/module.rst +8 -0
- ads/feature_store/docs/source/notebook.rst +94 -0
- ads/feature_store/docs/source/overview.rst +47 -0
- ads/feature_store/docs/source/quickstart.rst +176 -0
- ads/feature_store/docs/source/release_notes.rst +194 -0
- ads/feature_store/docs/source/setup_feature_store.rst +81 -0
- ads/feature_store/docs/source/statistics.rst +58 -0
- ads/feature_store/docs/source/transformation.rst +199 -0
- ads/feature_store/docs/source/ui.rst +65 -0
- ads/feature_store/docs/source/user_guides.setup.feature_store_operator.rst +66 -0
- ads/feature_store/docs/source/user_guides.setup.helm_chart.rst +192 -0
- ads/feature_store/docs/source/user_guides.setup.terraform.rst +338 -0
- ads/feature_store/entity.py +718 -0
- ads/feature_store/execution_strategy/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/__init__.py +0 -0
- ads/feature_store/execution_strategy/delta_lake/delta_lake_service.py +375 -0
- ads/feature_store/execution_strategy/engine/__init__.py +0 -0
- ads/feature_store/execution_strategy/engine/spark_engine.py +316 -0
- ads/feature_store/execution_strategy/execution_strategy.py +113 -0
- ads/feature_store/execution_strategy/execution_strategy_provider.py +47 -0
- ads/feature_store/execution_strategy/spark/__init__.py +0 -0
- ads/feature_store/execution_strategy/spark/spark_execution.py +618 -0
- ads/feature_store/feature.py +192 -0
- ads/feature_store/feature_group.py +1494 -0
- ads/feature_store/feature_group_expectation.py +346 -0
- ads/feature_store/feature_group_job.py +602 -0
- ads/feature_store/feature_lineage/__init__.py +0 -0
- ads/feature_store/feature_lineage/graphviz_service.py +180 -0
- ads/feature_store/feature_option_details.py +50 -0
- ads/feature_store/feature_statistics/__init__.py +0 -0
- ads/feature_store/feature_statistics/statistics_service.py +99 -0
- ads/feature_store/feature_store.py +699 -0
- ads/feature_store/feature_store_registrar.py +518 -0
- ads/feature_store/input_feature_detail.py +149 -0
- ads/feature_store/mixin/__init__.py +4 -0
- ads/feature_store/mixin/oci_feature_store.py +145 -0
- ads/feature_store/model_details.py +73 -0
- ads/feature_store/query/__init__.py +0 -0
- ads/feature_store/query/filter.py +266 -0
- ads/feature_store/query/generator/__init__.py +0 -0
- ads/feature_store/query/generator/query_generator.py +298 -0
- ads/feature_store/query/join.py +161 -0
- ads/feature_store/query/query.py +403 -0
- ads/feature_store/query/validator/__init__.py +0 -0
- ads/feature_store/query/validator/query_validator.py +57 -0
- ads/feature_store/response/__init__.py +0 -0
- ads/feature_store/response/response_builder.py +68 -0
- ads/feature_store/service/__init__.py +0 -0
- ads/feature_store/service/oci_dataset.py +139 -0
- ads/feature_store/service/oci_dataset_job.py +199 -0
- ads/feature_store/service/oci_entity.py +125 -0
- ads/feature_store/service/oci_feature_group.py +164 -0
- ads/feature_store/service/oci_feature_group_job.py +214 -0
- ads/feature_store/service/oci_feature_store.py +182 -0
- ads/feature_store/service/oci_lineage.py +87 -0
- ads/feature_store/service/oci_transformation.py +104 -0
- ads/feature_store/statistics/__init__.py +0 -0
- ads/feature_store/statistics/abs_feature_value.py +49 -0
- ads/feature_store/statistics/charts/__init__.py +0 -0
- ads/feature_store/statistics/charts/abstract_feature_plot.py +37 -0
- ads/feature_store/statistics/charts/box_plot.py +148 -0
- ads/feature_store/statistics/charts/frequency_distribution.py +65 -0
- ads/feature_store/statistics/charts/probability_distribution.py +68 -0
- ads/feature_store/statistics/charts/top_k_frequent_elements.py +98 -0
- ads/feature_store/statistics/feature_stat.py +126 -0
- ads/feature_store/statistics/generic_feature_value.py +33 -0
- ads/feature_store/statistics/statistics.py +41 -0
- ads/feature_store/statistics_config.py +101 -0
- ads/feature_store/templates/feature_store_template.yaml +45 -0
- ads/feature_store/transformation.py +499 -0
- ads/feature_store/validation_output.py +57 -0
- ads/hpo/__init__.py +9 -0
- ads/hpo/_imports.py +91 -0
- ads/hpo/ads_search_space.py +439 -0
- ads/hpo/distributions.py +325 -0
- ads/hpo/objective.py +280 -0
- ads/hpo/search_cv.py +1657 -0
- ads/hpo/stopping_criterion.py +75 -0
- ads/hpo/tuner_artifact.py +413 -0
- ads/hpo/utils.py +91 -0
- ads/hpo/validation.py +140 -0
- ads/hpo/visualization/__init__.py +5 -0
- ads/hpo/visualization/_contour.py +23 -0
- ads/hpo/visualization/_edf.py +20 -0
- ads/hpo/visualization/_intermediate_values.py +21 -0
- ads/hpo/visualization/_optimization_history.py +25 -0
- ads/hpo/visualization/_parallel_coordinate.py +169 -0
- ads/hpo/visualization/_param_importances.py +26 -0
- ads/jobs/__init__.py +53 -0
- ads/jobs/ads_job.py +663 -0
- ads/jobs/builders/__init__.py +5 -0
- ads/jobs/builders/base.py +156 -0
- ads/jobs/builders/infrastructure/__init__.py +6 -0
- ads/jobs/builders/infrastructure/base.py +165 -0
- ads/jobs/builders/infrastructure/dataflow.py +1252 -0
- ads/jobs/builders/infrastructure/dsc_job.py +1894 -0
- ads/jobs/builders/infrastructure/dsc_job_runtime.py +1233 -0
- ads/jobs/builders/infrastructure/utils.py +65 -0
- ads/jobs/builders/runtimes/__init__.py +5 -0
- ads/jobs/builders/runtimes/artifact.py +338 -0
- ads/jobs/builders/runtimes/base.py +325 -0
- ads/jobs/builders/runtimes/container_runtime.py +242 -0
- ads/jobs/builders/runtimes/python_runtime.py +1016 -0
- ads/jobs/builders/runtimes/pytorch_runtime.py +204 -0
- ads/jobs/cli.py +104 -0
- ads/jobs/env_var_parser.py +131 -0
- ads/jobs/extension.py +160 -0
- ads/jobs/schema/__init__.py +5 -0
- ads/jobs/schema/infrastructure_schema.json +116 -0
- ads/jobs/schema/job_schema.json +42 -0
- ads/jobs/schema/runtime_schema.json +183 -0
- ads/jobs/schema/validator.py +141 -0
- ads/jobs/serializer.py +296 -0
- ads/jobs/templates/__init__.py +5 -0
- ads/jobs/templates/container.py +6 -0
- ads/jobs/templates/driver_notebook.py +177 -0
- ads/jobs/templates/driver_oci.py +500 -0
- ads/jobs/templates/driver_python.py +48 -0
- ads/jobs/templates/driver_pytorch.py +852 -0
- ads/jobs/templates/driver_utils.py +615 -0
- ads/jobs/templates/hostname_from_env.c +55 -0
- ads/jobs/templates/oci_metrics.py +181 -0
- ads/jobs/utils.py +104 -0
- ads/llm/__init__.py +28 -0
- ads/llm/autogen/__init__.py +2 -0
- ads/llm/autogen/constants.py +15 -0
- ads/llm/autogen/reports/__init__.py +2 -0
- ads/llm/autogen/reports/base.py +67 -0
- ads/llm/autogen/reports/data.py +103 -0
- ads/llm/autogen/reports/session.py +526 -0
- ads/llm/autogen/reports/templates/chat_box.html +13 -0
- ads/llm/autogen/reports/templates/chat_box_lt.html +5 -0
- ads/llm/autogen/reports/templates/chat_box_rt.html +6 -0
- ads/llm/autogen/reports/utils.py +56 -0
- ads/llm/autogen/v02/__init__.py +4 -0
- ads/llm/autogen/v02/client.py +295 -0
- ads/llm/autogen/v02/log_handlers/__init__.py +2 -0
- ads/llm/autogen/v02/log_handlers/oci_file_handler.py +83 -0
- ads/llm/autogen/v02/loggers/__init__.py +6 -0
- ads/llm/autogen/v02/loggers/metric_logger.py +320 -0
- ads/llm/autogen/v02/loggers/session_logger.py +580 -0
- ads/llm/autogen/v02/loggers/utils.py +86 -0
- ads/llm/autogen/v02/runtime_logging.py +163 -0
- ads/llm/chain.py +268 -0
- ads/llm/chat_template.py +31 -0
- ads/llm/deploy.py +63 -0
- ads/llm/guardrails/__init__.py +5 -0
- ads/llm/guardrails/base.py +442 -0
- ads/llm/guardrails/huggingface.py +44 -0
- ads/llm/langchain/__init__.py +5 -0
- ads/llm/langchain/plugins/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/__init__.py +5 -0
- ads/llm/langchain/plugins/chat_models/oci_data_science.py +1027 -0
- ads/llm/langchain/plugins/embeddings/__init__.py +4 -0
- ads/llm/langchain/plugins/embeddings/oci_data_science_model_deployment_endpoint.py +184 -0
- ads/llm/langchain/plugins/llms/__init__.py +5 -0
- ads/llm/langchain/plugins/llms/oci_data_science_model_deployment_endpoint.py +979 -0
- ads/llm/requirements.txt +3 -0
- ads/llm/serialize.py +219 -0
- ads/llm/serializers/__init__.py +0 -0
- ads/llm/serializers/retrieval_qa.py +153 -0
- ads/llm/serializers/runnable_parallel.py +27 -0
- ads/llm/templates/score_chain.jinja2 +155 -0
- ads/llm/templates/tool_chat_template_hermes.jinja +130 -0
- ads/llm/templates/tool_chat_template_mistral_parallel.jinja +94 -0
- ads/model/__init__.py +52 -0
- ads/model/artifact.py +573 -0
- ads/model/artifact_downloader.py +254 -0
- ads/model/artifact_uploader.py +267 -0
- ads/model/base_properties.py +238 -0
- ads/model/common/.model-ignore +66 -0
- ads/model/common/__init__.py +5 -0
- ads/model/common/utils.py +142 -0
- ads/model/datascience_model.py +2635 -0
- ads/model/deployment/__init__.py +20 -0
- ads/model/deployment/common/__init__.py +5 -0
- ads/model/deployment/common/utils.py +308 -0
- ads/model/deployment/model_deployer.py +466 -0
- ads/model/deployment/model_deployment.py +1846 -0
- ads/model/deployment/model_deployment_infrastructure.py +671 -0
- ads/model/deployment/model_deployment_properties.py +493 -0
- ads/model/deployment/model_deployment_runtime.py +838 -0
- ads/model/extractor/__init__.py +5 -0
- ads/model/extractor/automl_extractor.py +74 -0
- ads/model/extractor/embedding_onnx_extractor.py +80 -0
- ads/model/extractor/huggingface_extractor.py +88 -0
- ads/model/extractor/keras_extractor.py +84 -0
- ads/model/extractor/lightgbm_extractor.py +93 -0
- ads/model/extractor/model_info_extractor.py +114 -0
- ads/model/extractor/model_info_extractor_factory.py +105 -0
- ads/model/extractor/pytorch_extractor.py +87 -0
- ads/model/extractor/sklearn_extractor.py +112 -0
- ads/model/extractor/spark_extractor.py +89 -0
- ads/model/extractor/tensorflow_extractor.py +85 -0
- ads/model/extractor/xgboost_extractor.py +94 -0
- ads/model/framework/__init__.py +5 -0
- ads/model/framework/automl_model.py +178 -0
- ads/model/framework/embedding_onnx_model.py +438 -0
- ads/model/framework/huggingface_model.py +399 -0
- ads/model/framework/lightgbm_model.py +266 -0
- ads/model/framework/pytorch_model.py +266 -0
- ads/model/framework/sklearn_model.py +250 -0
- ads/model/framework/spark_model.py +326 -0
- ads/model/framework/tensorflow_model.py +254 -0
- ads/model/framework/xgboost_model.py +258 -0
- ads/model/generic_model.py +3518 -0
- ads/model/model_artifact_boilerplate/README.md +381 -0
- ads/model/model_artifact_boilerplate/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/__init__.py +5 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/model_artifact_validate.py +427 -0
- ads/model/model_artifact_boilerplate/artifact_introspection_test/requirements.txt +2 -0
- ads/model/model_artifact_boilerplate/runtime.yaml +7 -0
- ads/model/model_artifact_boilerplate/score.py +61 -0
- ads/model/model_file_description_schema.json +68 -0
- ads/model/model_introspect.py +331 -0
- ads/model/model_metadata.py +1810 -0
- ads/model/model_metadata_mixin.py +460 -0
- ads/model/model_properties.py +63 -0
- ads/model/model_version_set.py +739 -0
- ads/model/runtime/__init__.py +5 -0
- ads/model/runtime/env_info.py +306 -0
- ads/model/runtime/model_deployment_details.py +37 -0
- ads/model/runtime/model_provenance_details.py +58 -0
- ads/model/runtime/runtime_info.py +81 -0
- ads/model/runtime/schemas/inference_env_info_schema.yaml +16 -0
- ads/model/runtime/schemas/model_provenance_schema.yaml +36 -0
- ads/model/runtime/schemas/training_env_info_schema.yaml +16 -0
- ads/model/runtime/utils.py +201 -0
- ads/model/serde/__init__.py +5 -0
- ads/model/serde/common.py +40 -0
- ads/model/serde/model_input.py +547 -0
- ads/model/serde/model_serializer.py +1184 -0
- ads/model/service/__init__.py +5 -0
- ads/model/service/oci_datascience_model.py +1076 -0
- ads/model/service/oci_datascience_model_deployment.py +500 -0
- ads/model/service/oci_datascience_model_version_set.py +176 -0
- ads/model/transformer/__init__.py +5 -0
- ads/model/transformer/onnx_transformer.py +324 -0
- ads/mysqldb/__init__.py +5 -0
- ads/mysqldb/mysql_db.py +227 -0
- ads/opctl/__init__.py +18 -0
- ads/opctl/anomaly_detection.py +11 -0
- ads/opctl/backend/__init__.py +5 -0
- ads/opctl/backend/ads_dataflow.py +353 -0
- ads/opctl/backend/ads_ml_job.py +710 -0
- ads/opctl/backend/ads_ml_pipeline.py +164 -0
- ads/opctl/backend/ads_model_deployment.py +209 -0
- ads/opctl/backend/base.py +146 -0
- ads/opctl/backend/local.py +1053 -0
- ads/opctl/backend/marketplace/__init__.py +9 -0
- ads/opctl/backend/marketplace/helm_helper.py +173 -0
- ads/opctl/backend/marketplace/local_marketplace.py +271 -0
- ads/opctl/backend/marketplace/marketplace_backend_runner.py +71 -0
- ads/opctl/backend/marketplace/marketplace_operator_interface.py +44 -0
- ads/opctl/backend/marketplace/marketplace_operator_runner.py +24 -0
- ads/opctl/backend/marketplace/marketplace_utils.py +212 -0
- ads/opctl/backend/marketplace/models/__init__.py +5 -0
- ads/opctl/backend/marketplace/models/bearer_token.py +94 -0
- ads/opctl/backend/marketplace/models/marketplace_type.py +70 -0
- ads/opctl/backend/marketplace/models/ocir_details.py +56 -0
- ads/opctl/backend/marketplace/prerequisite_checker.py +238 -0
- ads/opctl/cli.py +707 -0
- ads/opctl/cmds.py +869 -0
- ads/opctl/conda/__init__.py +5 -0
- ads/opctl/conda/cli.py +193 -0
- ads/opctl/conda/cmds.py +749 -0
- ads/opctl/conda/config.yaml +34 -0
- ads/opctl/conda/manifest_template.yaml +13 -0
- ads/opctl/conda/multipart_uploader.py +188 -0
- ads/opctl/conda/pack.py +89 -0
- ads/opctl/config/__init__.py +5 -0
- ads/opctl/config/base.py +57 -0
- ads/opctl/config/diagnostics/__init__.py +5 -0
- ads/opctl/config/diagnostics/distributed/default_requirements_config.yaml +62 -0
- ads/opctl/config/merger.py +255 -0
- ads/opctl/config/resolver.py +297 -0
- ads/opctl/config/utils.py +79 -0
- ads/opctl/config/validator.py +17 -0
- ads/opctl/config/versioner.py +68 -0
- ads/opctl/config/yaml_parsers/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/base.py +58 -0
- ads/opctl/config/yaml_parsers/distributed/__init__.py +7 -0
- ads/opctl/config/yaml_parsers/distributed/yaml_parser.py +201 -0
- ads/opctl/constants.py +66 -0
- ads/opctl/decorator/__init__.py +5 -0
- ads/opctl/decorator/common.py +129 -0
- ads/opctl/diagnostics/__init__.py +5 -0
- ads/opctl/diagnostics/__main__.py +25 -0
- ads/opctl/diagnostics/check_distributed_job_requirements.py +212 -0
- ads/opctl/diagnostics/check_requirements.py +144 -0
- ads/opctl/diagnostics/requirement_exception.py +9 -0
- ads/opctl/distributed/README.md +109 -0
- ads/opctl/distributed/__init__.py +5 -0
- ads/opctl/distributed/certificates.py +32 -0
- ads/opctl/distributed/cli.py +207 -0
- ads/opctl/distributed/cmds.py +731 -0
- ads/opctl/distributed/common/__init__.py +5 -0
- ads/opctl/distributed/common/abstract_cluster_provider.py +449 -0
- ads/opctl/distributed/common/abstract_framework_spec_builder.py +88 -0
- ads/opctl/distributed/common/cluster_config_helper.py +103 -0
- ads/opctl/distributed/common/cluster_provider_factory.py +21 -0
- ads/opctl/distributed/common/cluster_runner.py +54 -0
- ads/opctl/distributed/common/framework_factory.py +29 -0
- ads/opctl/docker/Dockerfile.job +103 -0
- ads/opctl/docker/Dockerfile.job.arm +107 -0
- ads/opctl/docker/Dockerfile.job.gpu +175 -0
- ads/opctl/docker/base-env.yaml +13 -0
- ads/opctl/docker/cuda.repo +6 -0
- ads/opctl/docker/operator/.dockerignore +0 -0
- ads/opctl/docker/operator/Dockerfile +41 -0
- ads/opctl/docker/operator/Dockerfile.gpu +85 -0
- ads/opctl/docker/operator/cuda.repo +6 -0
- ads/opctl/docker/operator/environment.yaml +8 -0
- ads/opctl/forecast.py +11 -0
- ads/opctl/index.yaml +3 -0
- ads/opctl/model/__init__.py +5 -0
- ads/opctl/model/cli.py +65 -0
- ads/opctl/model/cmds.py +73 -0
- ads/opctl/operator/README.md +4 -0
- ads/opctl/operator/__init__.py +31 -0
- ads/opctl/operator/cli.py +344 -0
- ads/opctl/operator/cmd.py +596 -0
- ads/opctl/operator/common/__init__.py +5 -0
- ads/opctl/operator/common/backend_factory.py +460 -0
- ads/opctl/operator/common/const.py +27 -0
- ads/opctl/operator/common/data/synthetic.csv +16001 -0
- ads/opctl/operator/common/dictionary_merger.py +148 -0
- ads/opctl/operator/common/errors.py +42 -0
- ads/opctl/operator/common/operator_config.py +99 -0
- ads/opctl/operator/common/operator_loader.py +811 -0
- ads/opctl/operator/common/operator_schema.yaml +130 -0
- ads/opctl/operator/common/operator_yaml_generator.py +152 -0
- ads/opctl/operator/common/utils.py +208 -0
- ads/opctl/operator/lowcode/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/MLoperator +16 -0
- ads/opctl/operator/lowcode/anomaly/README.md +207 -0
- ads/opctl/operator/lowcode/anomaly/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/__main__.py +103 -0
- ads/opctl/operator/lowcode/anomaly/cmd.py +35 -0
- ads/opctl/operator/lowcode/anomaly/const.py +167 -0
- ads/opctl/operator/lowcode/anomaly/environment.yaml +10 -0
- ads/opctl/operator/lowcode/anomaly/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_dataset.py +146 -0
- ads/opctl/operator/lowcode/anomaly/model/anomaly_merlion.py +162 -0
- ads/opctl/operator/lowcode/anomaly/model/automlx.py +99 -0
- ads/opctl/operator/lowcode/anomaly/model/autots.py +115 -0
- ads/opctl/operator/lowcode/anomaly/model/base_model.py +404 -0
- ads/opctl/operator/lowcode/anomaly/model/factory.py +110 -0
- ads/opctl/operator/lowcode/anomaly/model/isolationforest.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/oneclasssvm.py +78 -0
- ads/opctl/operator/lowcode/anomaly/model/randomcutforest.py +120 -0
- ads/opctl/operator/lowcode/anomaly/model/tods.py +119 -0
- ads/opctl/operator/lowcode/anomaly/operator_config.py +127 -0
- ads/opctl/operator/lowcode/anomaly/schema.yaml +401 -0
- ads/opctl/operator/lowcode/anomaly/utils.py +88 -0
- ads/opctl/operator/lowcode/common/__init__.py +5 -0
- ads/opctl/operator/lowcode/common/const.py +10 -0
- ads/opctl/operator/lowcode/common/data.py +116 -0
- ads/opctl/operator/lowcode/common/errors.py +47 -0
- ads/opctl/operator/lowcode/common/transformations.py +296 -0
- ads/opctl/operator/lowcode/common/utils.py +384 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/MLoperator +13 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/README.md +30 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__init__.py +5 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/__main__.py +116 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/cmd.py +85 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/const.py +15 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/environment.yaml +0 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/__init__.py +4 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/apigw_config.py +32 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/db_config.py +43 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/mysql_config.py +120 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/models/serializable_yaml_model.py +34 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/operator_utils.py +386 -0
- ads/opctl/operator/lowcode/feature_store_marketplace/schema.yaml +160 -0
- ads/opctl/operator/lowcode/forecast/MLoperator +25 -0
- ads/opctl/operator/lowcode/forecast/README.md +209 -0
- ads/opctl/operator/lowcode/forecast/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/__main__.py +89 -0
- ads/opctl/operator/lowcode/forecast/cmd.py +40 -0
- ads/opctl/operator/lowcode/forecast/const.py +92 -0
- ads/opctl/operator/lowcode/forecast/environment.yaml +20 -0
- ads/opctl/operator/lowcode/forecast/errors.py +26 -0
- ads/opctl/operator/lowcode/forecast/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/forecast/model/arima.py +279 -0
- ads/opctl/operator/lowcode/forecast/model/automlx.py +553 -0
- ads/opctl/operator/lowcode/forecast/model/autots.py +312 -0
- ads/opctl/operator/lowcode/forecast/model/base_model.py +875 -0
- ads/opctl/operator/lowcode/forecast/model/factory.py +106 -0
- ads/opctl/operator/lowcode/forecast/model/forecast_datasets.py +492 -0
- ads/opctl/operator/lowcode/forecast/model/ml_forecast.py +243 -0
- ads/opctl/operator/lowcode/forecast/model/neuralprophet.py +482 -0
- ads/opctl/operator/lowcode/forecast/model/prophet.py +450 -0
- ads/opctl/operator/lowcode/forecast/model_evaluator.py +244 -0
- ads/opctl/operator/lowcode/forecast/operator_config.py +234 -0
- ads/opctl/operator/lowcode/forecast/schema.yaml +506 -0
- ads/opctl/operator/lowcode/forecast/utils.py +397 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/__init__.py +7 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/deployment_manager.py +285 -0
- ads/opctl/operator/lowcode/forecast/whatifserve/score.py +246 -0
- ads/opctl/operator/lowcode/pii/MLoperator +17 -0
- ads/opctl/operator/lowcode/pii/README.md +208 -0
- ads/opctl/operator/lowcode/pii/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/__main__.py +78 -0
- ads/opctl/operator/lowcode/pii/cmd.py +39 -0
- ads/opctl/operator/lowcode/pii/constant.py +84 -0
- ads/opctl/operator/lowcode/pii/environment.yaml +17 -0
- ads/opctl/operator/lowcode/pii/errors.py +27 -0
- ads/opctl/operator/lowcode/pii/model/__init__.py +5 -0
- ads/opctl/operator/lowcode/pii/model/factory.py +82 -0
- ads/opctl/operator/lowcode/pii/model/guardrails.py +167 -0
- ads/opctl/operator/lowcode/pii/model/pii.py +145 -0
- ads/opctl/operator/lowcode/pii/model/processor/__init__.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/email_replacer.py +34 -0
- ads/opctl/operator/lowcode/pii/model/processor/mbi_replacer.py +35 -0
- ads/opctl/operator/lowcode/pii/model/processor/name_replacer.py +225 -0
- ads/opctl/operator/lowcode/pii/model/processor/number_replacer.py +73 -0
- ads/opctl/operator/lowcode/pii/model/processor/remover.py +26 -0
- ads/opctl/operator/lowcode/pii/model/report.py +487 -0
- ads/opctl/operator/lowcode/pii/operator_config.py +95 -0
- ads/opctl/operator/lowcode/pii/schema.yaml +108 -0
- ads/opctl/operator/lowcode/pii/utils.py +43 -0
- ads/opctl/operator/lowcode/recommender/MLoperator +16 -0
- ads/opctl/operator/lowcode/recommender/README.md +206 -0
- ads/opctl/operator/lowcode/recommender/__init__.py +5 -0
- ads/opctl/operator/lowcode/recommender/__main__.py +82 -0
- ads/opctl/operator/lowcode/recommender/cmd.py +33 -0
- ads/opctl/operator/lowcode/recommender/constant.py +30 -0
- ads/opctl/operator/lowcode/recommender/environment.yaml +11 -0
- ads/opctl/operator/lowcode/recommender/model/base_model.py +212 -0
- ads/opctl/operator/lowcode/recommender/model/factory.py +56 -0
- ads/opctl/operator/lowcode/recommender/model/recommender_dataset.py +25 -0
- ads/opctl/operator/lowcode/recommender/model/svd.py +106 -0
- ads/opctl/operator/lowcode/recommender/operator_config.py +81 -0
- ads/opctl/operator/lowcode/recommender/schema.yaml +265 -0
- ads/opctl/operator/lowcode/recommender/utils.py +13 -0
- ads/opctl/operator/runtime/__init__.py +5 -0
- ads/opctl/operator/runtime/const.py +17 -0
- ads/opctl/operator/runtime/container_runtime_schema.yaml +50 -0
- ads/opctl/operator/runtime/marketplace_runtime.py +50 -0
- ads/opctl/operator/runtime/python_marketplace_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/python_runtime_schema.yaml +21 -0
- ads/opctl/operator/runtime/runtime.py +115 -0
- ads/opctl/schema.yaml.yml +36 -0
- ads/opctl/script.py +40 -0
- ads/opctl/spark/__init__.py +5 -0
- ads/opctl/spark/cli.py +43 -0
- ads/opctl/spark/cmds.py +147 -0
- ads/opctl/templates/diagnostic_report_template.jinja2 +102 -0
- ads/opctl/utils.py +344 -0
- ads/oracledb/__init__.py +5 -0
- ads/oracledb/oracle_db.py +346 -0
- ads/pipeline/__init__.py +39 -0
- ads/pipeline/ads_pipeline.py +2279 -0
- ads/pipeline/ads_pipeline_run.py +772 -0
- ads/pipeline/ads_pipeline_step.py +605 -0
- ads/pipeline/builders/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/__init__.py +5 -0
- ads/pipeline/builders/infrastructure/custom_script.py +32 -0
- ads/pipeline/cli.py +119 -0
- ads/pipeline/extension.py +291 -0
- ads/pipeline/schema/__init__.py +5 -0
- ads/pipeline/schema/cs_step_schema.json +35 -0
- ads/pipeline/schema/ml_step_schema.json +31 -0
- ads/pipeline/schema/pipeline_schema.json +71 -0
- ads/pipeline/visualizer/__init__.py +5 -0
- ads/pipeline/visualizer/base.py +570 -0
- ads/pipeline/visualizer/graph_renderer.py +272 -0
- ads/pipeline/visualizer/text_renderer.py +84 -0
- ads/secrets/__init__.py +11 -0
- ads/secrets/adb.py +386 -0
- ads/secrets/auth_token.py +86 -0
- ads/secrets/big_data_service.py +365 -0
- ads/secrets/mysqldb.py +149 -0
- ads/secrets/oracledb.py +160 -0
- ads/secrets/secrets.py +407 -0
- ads/telemetry/__init__.py +7 -0
- ads/telemetry/base.py +69 -0
- ads/telemetry/client.py +122 -0
- ads/telemetry/telemetry.py +257 -0
- ads/templates/dataflow_pyspark.jinja2 +13 -0
- ads/templates/dataflow_sparksql.jinja2 +22 -0
- ads/templates/func.jinja2 +20 -0
- ads/templates/schemas/openapi.json +1740 -0
- ads/templates/score-pkl.jinja2 +173 -0
- ads/templates/score.jinja2 +322 -0
- ads/templates/score_embedding_onnx.jinja2 +202 -0
- ads/templates/score_generic.jinja2 +165 -0
- ads/templates/score_huggingface_pipeline.jinja2 +217 -0
- ads/templates/score_lightgbm.jinja2 +185 -0
- ads/templates/score_onnx.jinja2 +407 -0
- ads/templates/score_onnx_new.jinja2 +473 -0
- ads/templates/score_oracle_automl.jinja2 +185 -0
- ads/templates/score_pyspark.jinja2 +154 -0
- ads/templates/score_pytorch.jinja2 +219 -0
- ads/templates/score_scikit-learn.jinja2 +184 -0
- ads/templates/score_tensorflow.jinja2 +184 -0
- ads/templates/score_xgboost.jinja2 +178 -0
- ads/text_dataset/__init__.py +5 -0
- ads/text_dataset/backends.py +211 -0
- ads/text_dataset/dataset.py +445 -0
- ads/text_dataset/extractor.py +207 -0
- ads/text_dataset/options.py +53 -0
- ads/text_dataset/udfs.py +22 -0
- ads/text_dataset/utils.py +49 -0
- ads/type_discovery/__init__.py +9 -0
- ads/type_discovery/abstract_detector.py +21 -0
- ads/type_discovery/constant_detector.py +41 -0
- ads/type_discovery/continuous_detector.py +54 -0
- ads/type_discovery/credit_card_detector.py +99 -0
- ads/type_discovery/datetime_detector.py +92 -0
- ads/type_discovery/discrete_detector.py +118 -0
- ads/type_discovery/document_detector.py +146 -0
- ads/type_discovery/ip_detector.py +68 -0
- ads/type_discovery/latlon_detector.py +90 -0
- ads/type_discovery/phone_number_detector.py +63 -0
- ads/type_discovery/type_discovery_driver.py +87 -0
- ads/type_discovery/typed_feature.py +594 -0
- ads/type_discovery/unknown_detector.py +41 -0
- ads/type_discovery/zipcode_detector.py +48 -0
- ads/vault/__init__.py +7 -0
- ads/vault/vault.py +237 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/METADATA +150 -149
- oracle_ads-2.13.10rc0.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/entry_points.txt +2 -1
- oracle_ads-2.13.9rc0.dist-info/RECORD +0 -9
- oracle_ads-2.13.9rc0.dist-info/top_level.txt +0 -1
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.10rc0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,431 @@
|
|
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
|
+
"""
|
8
|
+
The ADS accessor for the Pandas Series.
|
9
|
+
The accessor will be initialized with the pandas object the user is interacting with.
|
10
|
+
|
11
|
+
Examples
|
12
|
+
--------
|
13
|
+
>>> from ads.feature_engineering.accessor.series_accessor import ADSSeriesAccessor
|
14
|
+
>>> from ads.feature_engineering.feature_type.string import String
|
15
|
+
>>> from ads.feature_engineering.feature_type.ordinal import Ordinal
|
16
|
+
>>> from ads.feature_engineering.feature_type.base import Tag
|
17
|
+
>>> series = pd.Series(['name1', 'name2', 'name3'])
|
18
|
+
>>> series.ads.default_type
|
19
|
+
'string'
|
20
|
+
>>> series.ads.feature_type
|
21
|
+
['string']
|
22
|
+
>>> series.ads.feature_type_description
|
23
|
+
Feature Type Description
|
24
|
+
----------------------------------------------------
|
25
|
+
0 string Type representing string values.
|
26
|
+
>>> series.ads.feature_type = ['string', Ordinal, Tag('abc')]
|
27
|
+
>>> series.ads.feature_type
|
28
|
+
['string', 'ordinal', 'abc']
|
29
|
+
>>> series1 = series.dropna()
|
30
|
+
>>> series1.ads.sync(series)
|
31
|
+
>>> series1.ads.feature_type
|
32
|
+
['string', 'ordinal', 'abc']
|
33
|
+
"""
|
34
|
+
|
35
|
+
import inspect
|
36
|
+
import logging
|
37
|
+
from typing import List, Union
|
38
|
+
|
39
|
+
import pandas as pd
|
40
|
+
from ads.feature_engineering.accessor.mixin.eda_mixin_series import EDAMixinSeries
|
41
|
+
from ads.feature_engineering.accessor.mixin.feature_types_mixin import (
|
42
|
+
ADSFeatureTypesMixin,
|
43
|
+
)
|
44
|
+
from ads.feature_engineering.exceptions import TypeNotFound
|
45
|
+
from ads.feature_engineering.feature_type.base import FeatureType, Tag
|
46
|
+
from ads.feature_engineering.feature_type.handler.feature_validator import (
|
47
|
+
FeatureValidator,
|
48
|
+
)
|
49
|
+
from ads.feature_engineering.feature_type.adsstring.string import ADSString
|
50
|
+
|
51
|
+
logger = logging.getLogger(__name__)
|
52
|
+
|
53
|
+
|
54
|
+
class ADSSeriesValidator:
|
55
|
+
"""Class helper to invoke registerred validator on a series level."""
|
56
|
+
|
57
|
+
def __init__(self, feature_type_list: List[FeatureType], series: pd.Series) -> None:
|
58
|
+
"""Initializes ADS series validator.
|
59
|
+
|
60
|
+
Parameters
|
61
|
+
----------
|
62
|
+
feature_type_list : List[FeatureType]
|
63
|
+
The list of feature types.
|
64
|
+
series : `pd.Series`
|
65
|
+
The pandas series.
|
66
|
+
"""
|
67
|
+
self._feature_type_list = feature_type_list
|
68
|
+
self._series = series
|
69
|
+
|
70
|
+
def __getattr__(self, attr):
|
71
|
+
"""Makes it possible to invoke registered validators as a regular method."""
|
72
|
+
for feature_type in self._feature_type_list:
|
73
|
+
if hasattr(feature_type.validator, attr):
|
74
|
+
feature_type.validator._bind_data(self._series)
|
75
|
+
return getattr(feature_type.validator, attr)
|
76
|
+
raise AttributeError(attr)
|
77
|
+
|
78
|
+
|
79
|
+
@pd.api.extensions.register_series_accessor("ads")
|
80
|
+
class ADSSeriesAccessor(ADSFeatureTypesMixin, EDAMixinSeries):
|
81
|
+
"""ADS accessor for Pandas Series.
|
82
|
+
|
83
|
+
Attributes
|
84
|
+
----------
|
85
|
+
name: str
|
86
|
+
The name of Series.
|
87
|
+
tags: List[str]
|
88
|
+
The list of tags for the Series.
|
89
|
+
|
90
|
+
Methods
|
91
|
+
-------
|
92
|
+
help(self, prop: str = None) -> None
|
93
|
+
Provids docstring for affordable methods and properties.
|
94
|
+
sync(self, src: Union[pd.DataFrame, pd.Series]) -> None
|
95
|
+
Syncs feature types of current series with that from src.
|
96
|
+
|
97
|
+
Attributes
|
98
|
+
----------
|
99
|
+
default_type(self) -> str
|
100
|
+
Gets the name of default feature type for the series.
|
101
|
+
feature_type(self) -> List[str]
|
102
|
+
Gets the list of registered feature types for the series.
|
103
|
+
feature_type_description(self) -> pd.DataFrame
|
104
|
+
Gets the list of registered feature types in a DataFrame format.
|
105
|
+
|
106
|
+
Examples
|
107
|
+
--------
|
108
|
+
>>> from ads.feature_engineering.accessor.series_accessor import ADSSeriesAccessor
|
109
|
+
>>> from ads.feature_engineering.feature_type.string import String
|
110
|
+
>>> from ads.feature_engineering.feature_type.ordinal import Ordinal
|
111
|
+
>>> from ads.feature_engineering.feature_type.base import Tag
|
112
|
+
>>> series = pd.Series(['name1', 'name2', 'name3'])
|
113
|
+
>>> series.ads.default_type
|
114
|
+
'string'
|
115
|
+
>>> series.ads.feature_type
|
116
|
+
['string']
|
117
|
+
>>> series.ads.feature_type_description
|
118
|
+
Feature Type Description
|
119
|
+
----------------------------------------------------
|
120
|
+
0 string Type representing string values.
|
121
|
+
>>> series.ads.feature_type = ['string', Ordinal, Tag('abc')]
|
122
|
+
>>> series.ads.feature_type
|
123
|
+
['string', 'ordinal', 'abc']
|
124
|
+
>>> series1 = series.dropna()
|
125
|
+
>>> series1.ads.sync(series)
|
126
|
+
>>> series1.ads.feature_type
|
127
|
+
['string', 'ordinal', 'abc']
|
128
|
+
"""
|
129
|
+
|
130
|
+
def __init__(self, pandas_obj: pd.Series) -> None:
|
131
|
+
"""Initializes ADS Pandas Series Accessor.
|
132
|
+
|
133
|
+
Parameters
|
134
|
+
----------
|
135
|
+
pandas_obj : `pd.Series`
|
136
|
+
The pandas series
|
137
|
+
"""
|
138
|
+
self._obj = pandas_obj
|
139
|
+
super().__init__()
|
140
|
+
self._feature_type = [self._default_type]
|
141
|
+
self.tags = []
|
142
|
+
self.name = self._obj.name
|
143
|
+
|
144
|
+
@property
|
145
|
+
def _default_type(self) -> FeatureType:
|
146
|
+
"""Gets default feature type for the series.
|
147
|
+
|
148
|
+
Returns
|
149
|
+
-------
|
150
|
+
FeatureType
|
151
|
+
The default feature type for the series.
|
152
|
+
"""
|
153
|
+
return self._feature_type_by_dtype(self._obj.dtype)
|
154
|
+
|
155
|
+
@property
|
156
|
+
def default_type(self) -> str:
|
157
|
+
"""Gets the name of default feature type for the series.
|
158
|
+
|
159
|
+
Returns
|
160
|
+
-------
|
161
|
+
str
|
162
|
+
The name of default feature type.
|
163
|
+
"""
|
164
|
+
return self._default_type.name
|
165
|
+
|
166
|
+
@property
|
167
|
+
def feature_type(self) -> List[str]:
|
168
|
+
"""Gets the list of registered feature types for the series.
|
169
|
+
|
170
|
+
Returns
|
171
|
+
-------
|
172
|
+
List[str]
|
173
|
+
Names of feature types.
|
174
|
+
|
175
|
+
Examples
|
176
|
+
--------
|
177
|
+
>>> series = pd.Series(['name1'])
|
178
|
+
>>> series.ads.feature_type = ['name', 'string', Tag('tag for name')]
|
179
|
+
>>> series.ads.feature_type
|
180
|
+
['name', 'string', 'tag for name']
|
181
|
+
"""
|
182
|
+
types = []
|
183
|
+
for feature_type in self._feature_type:
|
184
|
+
types.append(feature_type.name)
|
185
|
+
return types + self.tags
|
186
|
+
|
187
|
+
@property
|
188
|
+
def feature_type_description(self) -> pd.DataFrame:
|
189
|
+
"""Gets the list of registered feature types in a DataFrame format.
|
190
|
+
|
191
|
+
Returns
|
192
|
+
-------
|
193
|
+
pd.DataFrame
|
194
|
+
The DataFrame with feature types for this series.
|
195
|
+
|
196
|
+
Examples
|
197
|
+
--------
|
198
|
+
>>> series = pd.Series(['name1'])
|
199
|
+
>>> series.ads.feature_type = ['name', 'string', Tag('Name tag')]
|
200
|
+
>>> series.ads.feature_type_description
|
201
|
+
Feature Type Description
|
202
|
+
----------------------------------------------------------
|
203
|
+
0 name Type representing name values.
|
204
|
+
1 string Type representing string values.
|
205
|
+
2 Name tag Tag.
|
206
|
+
"""
|
207
|
+
feature_types = (
|
208
|
+
(feature_type.name, feature_type.description)
|
209
|
+
for feature_type in self._feature_type
|
210
|
+
if self._is_type_registered(feature_type)
|
211
|
+
)
|
212
|
+
tags = ((tag, "Tag") for tag in self.tags)
|
213
|
+
return pd.DataFrame(
|
214
|
+
tuple(feature_types) + tuple(tags), columns=["Feature Type", "Description"]
|
215
|
+
)
|
216
|
+
|
217
|
+
@feature_type.setter
|
218
|
+
def feature_type(self, feature_types: List[Union[FeatureType, str, Tag]]) -> None:
|
219
|
+
"""Sets feature types for the series.
|
220
|
+
|
221
|
+
Parameters
|
222
|
+
----------
|
223
|
+
feature_types : List[Union[FeatureType, str, Tag]]
|
224
|
+
The list of feature types.
|
225
|
+
|
226
|
+
Return
|
227
|
+
------
|
228
|
+
None
|
229
|
+
Nothing.
|
230
|
+
|
231
|
+
Raises
|
232
|
+
------
|
233
|
+
TypeError: If input data has wrong format.
|
234
|
+
|
235
|
+
Examples
|
236
|
+
--------
|
237
|
+
>>> series = pd.Series(['name1', 'name2', 'name3'])
|
238
|
+
>>> series.ads.feature_type = ['name']
|
239
|
+
>>> series.feature_type
|
240
|
+
['name', 'string']
|
241
|
+
>>> series.ads.feature_type = ['string', 'name']
|
242
|
+
>>> series.feature_type
|
243
|
+
['string', 'name']
|
244
|
+
>>> series.ads.feature_type = []
|
245
|
+
>>> series.feature_type
|
246
|
+
['string']
|
247
|
+
"""
|
248
|
+
if feature_types is None or not isinstance(feature_types, list):
|
249
|
+
raise TypeError("Argument must be a list of feature types.")
|
250
|
+
|
251
|
+
self._feature_type = []
|
252
|
+
self.tags = []
|
253
|
+
for feature_type in feature_types:
|
254
|
+
self._add_feature_type(feature_type)
|
255
|
+
|
256
|
+
default_feature_type = self._default_type
|
257
|
+
if default_feature_type not in self._feature_type:
|
258
|
+
self._add_feature_type(default_feature_type)
|
259
|
+
|
260
|
+
def sync(self, src: Union[pd.DataFrame, pd.Series]) -> None:
|
261
|
+
"""Syncs feature types of current series with that from src.
|
262
|
+
|
263
|
+
The src could be a dataframe or a series. In either case, only columns
|
264
|
+
with matched names are synced.
|
265
|
+
|
266
|
+
Parameters
|
267
|
+
----------
|
268
|
+
src: (`pd.DataFrame` | `pd.Series`)
|
269
|
+
The source to sync from.
|
270
|
+
|
271
|
+
Returns
|
272
|
+
-------
|
273
|
+
None
|
274
|
+
Nothing.
|
275
|
+
|
276
|
+
Examples
|
277
|
+
--------
|
278
|
+
>>> series = pd.Series(['name1', 'name2', 'name3', None])
|
279
|
+
>>> series.ads.feature_type = ['name']
|
280
|
+
>>> series.ads.feature_type
|
281
|
+
['name', string]
|
282
|
+
>>> series.dropna().ads.feature_type
|
283
|
+
['string']
|
284
|
+
>>> series1 = series.dropna()
|
285
|
+
>>> series1.ads.sync(series)
|
286
|
+
>>> series1.ads.feature_type
|
287
|
+
['name', 'string']
|
288
|
+
"""
|
289
|
+
if isinstance(src, pd.DataFrame):
|
290
|
+
if self._obj.name not in src.columns:
|
291
|
+
logger.warning(
|
292
|
+
"The source DataFrame doesn't have a clumn %s.", self._obj.name
|
293
|
+
)
|
294
|
+
return
|
295
|
+
self._sync(src[self._obj.name])
|
296
|
+
elif isinstance(src, pd.Series):
|
297
|
+
self._sync(src)
|
298
|
+
|
299
|
+
def _sync(self, src: pd.Series) -> None:
|
300
|
+
"""Copies all feature types from src series to the current."""
|
301
|
+
new_feature_type = [ft for ft in src.ads._feature_type]
|
302
|
+
new_tags = [Tag(tag) for tag in src.ads.tags]
|
303
|
+
self.feature_type = new_feature_type + new_tags
|
304
|
+
|
305
|
+
def _add_feature_type(self, feature_type: Union[FeatureType, str, Tag]) -> None:
|
306
|
+
"""Adds a feature type to the series.
|
307
|
+
|
308
|
+
Parameters
|
309
|
+
----------
|
310
|
+
feature_type : Union[FeatureType, str, Tag]
|
311
|
+
The feature type to add.
|
312
|
+
|
313
|
+
Returns
|
314
|
+
-------
|
315
|
+
None
|
316
|
+
Nothing.
|
317
|
+
"""
|
318
|
+
if isinstance(feature_type, Tag):
|
319
|
+
if feature_type.name in self.feature_type:
|
320
|
+
logger.warning(
|
321
|
+
"The tag '%s' is already added to the series '%s'.",
|
322
|
+
feature_type.name,
|
323
|
+
self.name,
|
324
|
+
)
|
325
|
+
self.tags.append(feature_type.name)
|
326
|
+
else:
|
327
|
+
feature_type_cls = self._get_type(feature_type)
|
328
|
+
if feature_type_cls.name in self.feature_type:
|
329
|
+
logger.warning(
|
330
|
+
"The type '%s' is already added to the series '%s'.",
|
331
|
+
feature_type_cls.name,
|
332
|
+
self.name,
|
333
|
+
)
|
334
|
+
self._feature_type.append(feature_type_cls)
|
335
|
+
|
336
|
+
def _remove_feature_type(self, feature_type: Union[FeatureType, str, Tag]) -> None:
|
337
|
+
"""Removes a feature type.
|
338
|
+
|
339
|
+
Parameters
|
340
|
+
----------
|
341
|
+
feature_type : Union[FeatureType, str, Tag]
|
342
|
+
feature type
|
343
|
+
|
344
|
+
Raises
|
345
|
+
------
|
346
|
+
TypeNotFound
|
347
|
+
Type does not exist for this series
|
348
|
+
"""
|
349
|
+
tag = self._get_tag(feature_type)
|
350
|
+
if tag:
|
351
|
+
if tag in self.tags:
|
352
|
+
self.tags.remove(tag)
|
353
|
+
return
|
354
|
+
else:
|
355
|
+
raise TypeNotFound(tag)
|
356
|
+
|
357
|
+
feature_type_cls = self._get_type(feature_type)
|
358
|
+
if feature_type_cls in self._feature_type:
|
359
|
+
self._feature_type.remove(feature_type_cls)
|
360
|
+
return
|
361
|
+
|
362
|
+
raise TypeNotFound(feature_type_cls.__name__)
|
363
|
+
|
364
|
+
def _get_tag(self, feature_type: Union[str, Tag]) -> str:
|
365
|
+
if isinstance(feature_type, str) and feature_type in self.tags:
|
366
|
+
return feature_type
|
367
|
+
if isinstance(feature_type, Tag):
|
368
|
+
return feature_type.name
|
369
|
+
|
370
|
+
def __getattr__(self, attr):
|
371
|
+
if attr == "validator":
|
372
|
+
return ADSSeriesValidator(self._feature_type, self._obj)
|
373
|
+
|
374
|
+
for feature_type in self._feature_type:
|
375
|
+
if feature_type == ADSString:
|
376
|
+
# We need to initialize first to use the plugins.
|
377
|
+
if hasattr(feature_type("default"), attr):
|
378
|
+
methods = inspect.classify_class_attrs(feature_type)
|
379
|
+
for method in methods:
|
380
|
+
if method.name == attr:
|
381
|
+
if method.kind == "method":
|
382
|
+
return lambda *args, **kwargs: [
|
383
|
+
getattr(ADSString(v), attr)(*args, **kwargs)
|
384
|
+
for v in self._obj.values
|
385
|
+
]
|
386
|
+
|
387
|
+
elif method.kind == "property":
|
388
|
+
attr_objects = []
|
389
|
+
for v in self._obj.values:
|
390
|
+
attr_objects.append(getattr(feature_type(v), attr))
|
391
|
+
return attr_objects
|
392
|
+
|
393
|
+
if hasattr(feature_type, attr):
|
394
|
+
# non-instance methods, aka class method or static method
|
395
|
+
non_ins_methods = [
|
396
|
+
method.name
|
397
|
+
for method in inspect.classify_class_attrs(feature_type)
|
398
|
+
if method.kind == "class method" or method.kind == "static method"
|
399
|
+
]
|
400
|
+
# instance method
|
401
|
+
ins_methods = [
|
402
|
+
method.name
|
403
|
+
for method in inspect.classify_class_attrs(feature_type)
|
404
|
+
if method.kind == "method"
|
405
|
+
]
|
406
|
+
attr_object = getattr(feature_type, attr)
|
407
|
+
|
408
|
+
# if isinstance(attr_object, FeatureValidator):
|
409
|
+
# attr_object._bind_data(self._obj)
|
410
|
+
|
411
|
+
# there was one case that inspect could not track one of the function.
|
412
|
+
# hence replace with __dict__. however, problem with __dict__ is that
|
413
|
+
# it does not track back its ancestors functions. hence, use a union
|
414
|
+
# to safeguard different scenarios.
|
415
|
+
if (attr in non_ins_methods) or (
|
416
|
+
attr in feature_type.__dict__
|
417
|
+
and isinstance(feature_type.__dict__[attr], staticmethod)
|
418
|
+
or isinstance(feature_type.__dict__[attr], classmethod)
|
419
|
+
):
|
420
|
+
return lambda *args, **kwargs: attr_object(
|
421
|
+
self._obj, *args, **kwargs
|
422
|
+
)
|
423
|
+
elif attr in ins_methods:
|
424
|
+
return lambda *args, **kwargs: getattr(feature_type(), attr)(
|
425
|
+
self._obj, *args, **kwargs
|
426
|
+
)
|
427
|
+
return attr_object
|
428
|
+
|
429
|
+
raise AttributeError(
|
430
|
+
f"'{self.__class__.__name__}' does not have an attribute {attr}."
|
431
|
+
)
|
@@ -0,0 +1,192 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 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
|
+
"""
|
8
|
+
The module helping to load/save images from/to the local path or OCI object storage bucket.
|
9
|
+
|
10
|
+
Classes
|
11
|
+
-------
|
12
|
+
ADSImage
|
13
|
+
Work with image files that are stored in Oracle Cloud Infrastructure Object Storage.
|
14
|
+
|
15
|
+
Examples
|
16
|
+
--------
|
17
|
+
>>> from ads.feature_engineering import ADSImage
|
18
|
+
>>> from IPython.core.display import display
|
19
|
+
>>> img = ADSImage.open("1.jpg")
|
20
|
+
>>> display(img)
|
21
|
+
>>> img.save("oci://<bucket_name>@<namespace>/1.jpg")
|
22
|
+
>>> img1 = ADSImage.open("oci://<bucket_name>@<namespace>/1.jpg")
|
23
|
+
>>> display(img1)
|
24
|
+
"""
|
25
|
+
|
26
|
+
import os
|
27
|
+
from io import BytesIO
|
28
|
+
from typing import Dict, Optional
|
29
|
+
|
30
|
+
import fsspec
|
31
|
+
from ads.common import auth as authutil
|
32
|
+
from PIL import Image
|
33
|
+
|
34
|
+
|
35
|
+
class ADSImage:
|
36
|
+
"""
|
37
|
+
Work with image files that are stored in Oracle Cloud Infrastructure Object Storage.
|
38
|
+
PIL (Python Imaging Library) is used as a backend to represent and manipulate images.
|
39
|
+
The PIL adds support
|
40
|
+
for opening, manipulating, processing and saving various image file formats.
|
41
|
+
|
42
|
+
Attributes
|
43
|
+
----------
|
44
|
+
img: Image.Image
|
45
|
+
A PIL Image object.
|
46
|
+
filename: str
|
47
|
+
The image filename.
|
48
|
+
|
49
|
+
Methods
|
50
|
+
-------
|
51
|
+
save(self, path: str, ...) -> None
|
52
|
+
Saves the image under the given filename.
|
53
|
+
open(cls, path: str, ...) -> ADSImage
|
54
|
+
Opens the given image file.
|
55
|
+
|
56
|
+
Examples
|
57
|
+
--------
|
58
|
+
>>> from ads.feature_engineering import ADSImage
|
59
|
+
>>> from IPython.core.display import display
|
60
|
+
>>> img = ADSImage.open("1.jpg")
|
61
|
+
>>> img.save("oci://<bucket_name>@<namespace>/1.jpg")
|
62
|
+
>>> img1 = ADSImage.open("oci://<bucket_name>@<namespace>/1.jpg")
|
63
|
+
>>> display(img1)
|
64
|
+
"""
|
65
|
+
|
66
|
+
def __init__(self, img: Image.Image, filename: Optional[str] = None) -> None:
|
67
|
+
"""Initializes ADSImage object.
|
68
|
+
|
69
|
+
Parameters
|
70
|
+
----------
|
71
|
+
img: PIL.Image.Image
|
72
|
+
The PIL Image object.
|
73
|
+
filename: (str, optional). Defaults to None.
|
74
|
+
The image filename.
|
75
|
+
|
76
|
+
Returns
|
77
|
+
-------
|
78
|
+
None
|
79
|
+
Nothing.
|
80
|
+
|
81
|
+
Raises
|
82
|
+
------
|
83
|
+
TypeError
|
84
|
+
If `img` is not an instance of `PIL.Image.Image`.
|
85
|
+
ValueError
|
86
|
+
If `img` is not provided.
|
87
|
+
"""
|
88
|
+
if not img:
|
89
|
+
raise ValueError("The parameter `img` is required.")
|
90
|
+
|
91
|
+
if not isinstance(img, Image.Image):
|
92
|
+
raise TypeError("The `img` parameter must be a `PIL.Image.Image` object.")
|
93
|
+
|
94
|
+
self.img = img
|
95
|
+
self.filename = filename
|
96
|
+
|
97
|
+
def save(
|
98
|
+
self,
|
99
|
+
path: str,
|
100
|
+
format: Optional[str] = None,
|
101
|
+
auth: Optional[Dict] = None,
|
102
|
+
**kwargs: Optional[Dict]
|
103
|
+
) -> None:
|
104
|
+
"""Save the image under the given filename.
|
105
|
+
If no format is specified, the format to use is determined from the image object
|
106
|
+
or filename extension, if possible.
|
107
|
+
|
108
|
+
Parameters
|
109
|
+
----------
|
110
|
+
path: str
|
111
|
+
The file path to save image. It can be a local path or an Oracle Cloud Infrastructure Object Storage URI.
|
112
|
+
Example: `oci://<bucket_name>@<namespace>/1.jpg`
|
113
|
+
format: (str, optional). Defaults to None.
|
114
|
+
If omitted and `path` has a file extension the format of the image will be based on the extension.
|
115
|
+
Can be any format supported by PIL Image.
|
116
|
+
The available options are described in the PIL image format documentation:
|
117
|
+
https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
|
118
|
+
|
119
|
+
auth: (Dict, optional). Defaults to None.
|
120
|
+
The default authentication is set using `ads.set_auth()` API. To override the
|
121
|
+
default behavior, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create an
|
122
|
+
authentication signer and provide an `IdentityClient` object.
|
123
|
+
kwargs:
|
124
|
+
Additional keyword arguments that would be passed to the PIL Image `save()` method.
|
125
|
+
|
126
|
+
Returns
|
127
|
+
-------
|
128
|
+
None
|
129
|
+
Nothing.
|
130
|
+
"""
|
131
|
+
imgByteArr = BytesIO()
|
132
|
+
self.img.save(imgByteArr, format=format or self.img.format, params=kwargs)
|
133
|
+
auth = auth or authutil.default_signer()
|
134
|
+
with fsspec.open(path, mode="wb", **auth) as f:
|
135
|
+
f.write(imgByteArr.getvalue())
|
136
|
+
|
137
|
+
@classmethod
|
138
|
+
def open(cls, path: str, storage_options: Optional[Dict] = None) -> "ADSImage":
|
139
|
+
"""Opens the given image file.
|
140
|
+
|
141
|
+
Parameters
|
142
|
+
----------
|
143
|
+
path: str
|
144
|
+
The file path to open image. Can be local path or OCI object storage URI.
|
145
|
+
Example: `oci://<bucket_name>@<namespace>/1.jpg`
|
146
|
+
storage_options: (Dict, optional). Defaults to None.
|
147
|
+
The default authetication is set using `ads.set_auth` API. If you need to override the
|
148
|
+
default, use the `ads.common.auth.api_keys` or `ads.common.auth.resource_principal` to create appropriate
|
149
|
+
authentication signer and kwargs required to instantiate IdentityClient object.
|
150
|
+
|
151
|
+
Returns
|
152
|
+
-------
|
153
|
+
ADSImage
|
154
|
+
The instance of `ADSImage`.
|
155
|
+
"""
|
156
|
+
if storage_options == None:
|
157
|
+
storage_options = authutil.default_signer()
|
158
|
+
with fsspec.open(path, mode="rb", **storage_options) as f:
|
159
|
+
return cls(
|
160
|
+
img=Image.open(BytesIO(f.read())),
|
161
|
+
filename=os.path.basename(f.path),
|
162
|
+
)
|
163
|
+
|
164
|
+
def to_bytes(self, **kwargs: Optional[Dict]) -> BytesIO:
|
165
|
+
"""Converts image to bytes.
|
166
|
+
If no format is specified, the format to use is determined from the image object if it possible.
|
167
|
+
|
168
|
+
Parameters
|
169
|
+
---------------
|
170
|
+
kwargs:
|
171
|
+
format: (str, optional). Defaults to None.
|
172
|
+
If omitted and `path` has a file extension the format of the image will be based on the extension.
|
173
|
+
Can be any format supported by PIL Image.
|
174
|
+
The available options are described in the PIL image format documentation:
|
175
|
+
https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
|
176
|
+
Additional keyword arguments that would be passed to the PIL Image `save()` method.
|
177
|
+
|
178
|
+
Returns
|
179
|
+
-------
|
180
|
+
BytesIO
|
181
|
+
The image converted to bytes.
|
182
|
+
"""
|
183
|
+
imgByteArr = BytesIO()
|
184
|
+
self.img.save(
|
185
|
+
imgByteArr, format=kwargs.get("format") or self.img.format, params=kwargs
|
186
|
+
)
|
187
|
+
return imgByteArr.getvalue()
|
188
|
+
|
189
|
+
def __getattr__(self, key: str):
|
190
|
+
if key == "img":
|
191
|
+
raise AttributeError()
|
192
|
+
return getattr(self.img, key)
|