oracle-ads 2.13.9rc0__py3-none-any.whl → 2.13.9rc1__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 +506 -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 +269 -0
- ads/aqua/common/enums.py +122 -0
- ads/aqua/common/errors.py +109 -0
- ads/aqua/common/utils.py +1285 -0
- ads/aqua/config/__init__.py +4 -0
- ads/aqua/config/container_config.py +248 -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 +298 -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 +282 -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 +2114 -0
- ads/aqua/modeldeployment/__init__.py +8 -0
- ads/aqua/modeldeployment/constants.py +10 -0
- ads/aqua/modeldeployment/deployment.py +1326 -0
- ads/aqua/modeldeployment/entities.py +653 -0
- ads/aqua/modeldeployment/inference.py +74 -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 +499 -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 +175 -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/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 +445 -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 +125 -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.9rc1.dist-info}/METADATA +150 -150
- oracle_ads-2.13.9rc1.dist-info/RECORD +858 -0
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.dist-info}/WHEEL +1 -2
- {oracle_ads-2.13.9rc0.dist-info → oracle_ads-2.13.9rc1.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.9rc1.dist-info}/licenses/LICENSE.txt +0 -0
@@ -0,0 +1,357 @@
|
|
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 module that helps to visualize NER Text Dataset.
|
9
|
+
|
10
|
+
Methods
|
11
|
+
-------
|
12
|
+
render(items: List[LabeledTextItem], options: Dict = None) -> str
|
13
|
+
Renders NER dataset to Html format.
|
14
|
+
|
15
|
+
Examples
|
16
|
+
--------
|
17
|
+
>>> record1 = LabeledTextItem("London is the capital of the United Kingdom", [NERItem('city', 0, 6), NERItem("country", 29, 14)])
|
18
|
+
>>> record2 = LabeledTextItem("Houston area contractor seeking a Sheet Metal Superintendent.", [NERItem("city", 0, 6)])
|
19
|
+
>>> result = render(items = [record1, record2], options={"default_color":"#DDEECC", "colors": {"city":"#DDEECC", "country":"#FFAAAA"}})
|
20
|
+
>>> display(HTML(result))
|
21
|
+
"""
|
22
|
+
|
23
|
+
import logging
|
24
|
+
from dataclasses import asdict, dataclass
|
25
|
+
from string import Template
|
26
|
+
from typing import Dict, List, Optional
|
27
|
+
|
28
|
+
import pandas as pd
|
29
|
+
from ads.data_labeling.constants import AnnotationType
|
30
|
+
from ads.data_labeling.ner import NERItem
|
31
|
+
from cerberus import Validator
|
32
|
+
|
33
|
+
|
34
|
+
logger = logging.getLogger(__name__)
|
35
|
+
|
36
|
+
HTML_OPTIONS_SCHEMA = {
|
37
|
+
"default_color": {"nullable": True, "required": False, "type": "string"},
|
38
|
+
"colors": {
|
39
|
+
"nullable": True,
|
40
|
+
"required": False,
|
41
|
+
"type": "dict",
|
42
|
+
},
|
43
|
+
}
|
44
|
+
|
45
|
+
DEFAULT_COLOR = "#cedddd"
|
46
|
+
LEN_OF_SPACY_ITEM = 3
|
47
|
+
|
48
|
+
|
49
|
+
@dataclass
|
50
|
+
class LabeledTextItem:
|
51
|
+
"""Data class representing NER Item.
|
52
|
+
|
53
|
+
Attributes
|
54
|
+
----------
|
55
|
+
txt: str
|
56
|
+
The labeled sentence.
|
57
|
+
ents: List[NERItem]
|
58
|
+
The list of entities.
|
59
|
+
"""
|
60
|
+
|
61
|
+
txt: str
|
62
|
+
ents: List[NERItem]
|
63
|
+
|
64
|
+
def _validate(self):
|
65
|
+
"""Validates the instance.
|
66
|
+
|
67
|
+
Returns
|
68
|
+
-------
|
69
|
+
None
|
70
|
+
Nothing.
|
71
|
+
|
72
|
+
Raises
|
73
|
+
------
|
74
|
+
ValueError
|
75
|
+
If txt is empty.
|
76
|
+
WrongEntityFormat
|
77
|
+
If the list of entities has a wrong format.
|
78
|
+
AssertionError
|
79
|
+
In case of overlapped entities.
|
80
|
+
"""
|
81
|
+
if not self.txt:
|
82
|
+
raise ValueError(
|
83
|
+
"The parameter `txt` is required and must not be an empty string."
|
84
|
+
)
|
85
|
+
|
86
|
+
if not isinstance(self.ents, List):
|
87
|
+
raise ValueError(
|
88
|
+
"Invalid format for the entities. The entities must be a List[NERItem]."
|
89
|
+
)
|
90
|
+
|
91
|
+
for entity in self.ents:
|
92
|
+
if entity.offset + entity.length > len(self.txt):
|
93
|
+
raise ValueError(
|
94
|
+
f"At least one of the entities (start index: {entity.length}, offset: {entity.offset}) "
|
95
|
+
f"exceeds the length of the text ({len(self.txt)})."
|
96
|
+
)
|
97
|
+
|
98
|
+
self.ents.sort(key=lambda x: x.offset)
|
99
|
+
|
100
|
+
for i in range(len(self.ents) - 1):
|
101
|
+
if self.ents[i].offset + self.ents[i].length >= self.ents[i + 1].offset:
|
102
|
+
raise AssertionError(
|
103
|
+
"The entity data contains overlapping tokens. The first token has a start index"
|
104
|
+
f" of {self.ents[i].length}, and an offset of {self.ents[i].offset}. The second token has a start "
|
105
|
+
f"index of {self.ents[i + 1].length}, and an offset of {self.ents[i + 1].offset}. "
|
106
|
+
)
|
107
|
+
|
108
|
+
def __post_init__(self):
|
109
|
+
self._validate()
|
110
|
+
|
111
|
+
|
112
|
+
@dataclass
|
113
|
+
class RenderOptions:
|
114
|
+
"""Data class representing render options.
|
115
|
+
|
116
|
+
Attributes
|
117
|
+
----------
|
118
|
+
default_color: str
|
119
|
+
The specified default color.
|
120
|
+
colors: Optional[dict]
|
121
|
+
The multiple specified colors.
|
122
|
+
"""
|
123
|
+
|
124
|
+
default_color: str
|
125
|
+
colors: Optional[dict]
|
126
|
+
|
127
|
+
@staticmethod
|
128
|
+
def _validate(options: dict) -> None:
|
129
|
+
"""Validate whether the options passed in fits the defined schema.
|
130
|
+
|
131
|
+
Parameters
|
132
|
+
----------
|
133
|
+
options: dict
|
134
|
+
The multiple specified colors.
|
135
|
+
|
136
|
+
Returns
|
137
|
+
-------
|
138
|
+
None
|
139
|
+
Nothing.
|
140
|
+
"""
|
141
|
+
if not options:
|
142
|
+
return None
|
143
|
+
|
144
|
+
validator = Validator(HTML_OPTIONS_SCHEMA)
|
145
|
+
valid = validator.validate(options)
|
146
|
+
if not valid:
|
147
|
+
raise ValueError(validator.errors)
|
148
|
+
|
149
|
+
@classmethod
|
150
|
+
def from_dict(cls, options: dict) -> "RenderOptions":
|
151
|
+
"""Constructs an instance of RenderOptions from a dictionary.
|
152
|
+
|
153
|
+
Parameters
|
154
|
+
----------
|
155
|
+
options: dict
|
156
|
+
Render options in dictionary format.
|
157
|
+
|
158
|
+
Returns
|
159
|
+
-------
|
160
|
+
RenderOptions
|
161
|
+
The instance of RenderOptions.
|
162
|
+
"""
|
163
|
+
if not options:
|
164
|
+
return cls(default_color=DEFAULT_COLOR, colors={})
|
165
|
+
|
166
|
+
RenderOptions._validate(options)
|
167
|
+
|
168
|
+
return cls(
|
169
|
+
options.get("default_color", DEFAULT_COLOR), options.get("colors", {}) or {}
|
170
|
+
)
|
171
|
+
|
172
|
+
def to_dict(self):
|
173
|
+
"""Converts RenderOptions instance to dictionary format.
|
174
|
+
|
175
|
+
Returns
|
176
|
+
-------
|
177
|
+
dict
|
178
|
+
The render options in dictionary format.
|
179
|
+
"""
|
180
|
+
return asdict(self)
|
181
|
+
|
182
|
+
def __repr__(self) -> str:
|
183
|
+
return self.to_dict()
|
184
|
+
|
185
|
+
|
186
|
+
class TextLabeledDataFormatter:
|
187
|
+
"""The TextLabeledDataFormatter class to render NER items into Html format."""
|
188
|
+
|
189
|
+
_ITEM_TEMPLATE = (
|
190
|
+
'<span style="background-color: $color; padding: 5px; margin: 0px 5px; border-radius: 5px;">'
|
191
|
+
'<span style="margin-right: 5px;">$entity</span>'
|
192
|
+
'<span style="text-transform: uppercase; font-weight: bold; font-size:0.8em;">$label</span>'
|
193
|
+
"</span>"
|
194
|
+
)
|
195
|
+
_ROW_TEMPLATE = '<div key=$key style="margin-top:10px; line-height:2em">$row</div>'
|
196
|
+
|
197
|
+
@staticmethod
|
198
|
+
def render(items: List[LabeledTextItem], options: Dict = None) -> str:
|
199
|
+
"""Renders NER dataset to Html format.
|
200
|
+
|
201
|
+
Parameters
|
202
|
+
----------
|
203
|
+
items: List[LabeledTextItem]
|
204
|
+
Items to render.
|
205
|
+
options: Optional[dict]
|
206
|
+
Render options.
|
207
|
+
|
208
|
+
Returns
|
209
|
+
-------
|
210
|
+
str
|
211
|
+
Html representation of rendered NER dataset.
|
212
|
+
|
213
|
+
Raises
|
214
|
+
------
|
215
|
+
ValueError
|
216
|
+
If items not provided.
|
217
|
+
TypeError
|
218
|
+
If items provided in a wrong format.
|
219
|
+
"""
|
220
|
+
if not items:
|
221
|
+
raise ValueError("The parameter `items` is required.")
|
222
|
+
|
223
|
+
if not isinstance(items, list) or not all(
|
224
|
+
isinstance(x, LabeledTextItem) for x in items
|
225
|
+
):
|
226
|
+
raise TypeError(
|
227
|
+
"Wrong format for the items. Items should be a `List[LabeledTextItem]`."
|
228
|
+
)
|
229
|
+
|
230
|
+
render_options = RenderOptions.from_dict(options)
|
231
|
+
item_template = Template(TextLabeledDataFormatter._ITEM_TEMPLATE)
|
232
|
+
row_template = Template(TextLabeledDataFormatter._ROW_TEMPLATE)
|
233
|
+
result = []
|
234
|
+
|
235
|
+
for item_index, item in enumerate(items):
|
236
|
+
current_index = 0
|
237
|
+
accum = []
|
238
|
+
for e in item.ents:
|
239
|
+
start = e.offset
|
240
|
+
end = e.offset + e.length
|
241
|
+
label = e.label
|
242
|
+
accum.append(item.txt[current_index:start])
|
243
|
+
accum.append(
|
244
|
+
item_template.substitute(
|
245
|
+
{
|
246
|
+
"color": render_options.colors.get(
|
247
|
+
label, render_options.default_color
|
248
|
+
),
|
249
|
+
"entity": item.txt[start:end],
|
250
|
+
"label": label,
|
251
|
+
}
|
252
|
+
)
|
253
|
+
)
|
254
|
+
current_index = end
|
255
|
+
|
256
|
+
accum.append(item.txt[current_index : len(item.txt)])
|
257
|
+
result.append(
|
258
|
+
row_template.substitute({"key": str(item_index), "row": "".join(accum)})
|
259
|
+
)
|
260
|
+
|
261
|
+
return "".join(result)
|
262
|
+
|
263
|
+
|
264
|
+
def _df_to_ner_items(
|
265
|
+
df: pd.DataFrame,
|
266
|
+
content_column: str = "Content",
|
267
|
+
annotations_column: str = "Annotations",
|
268
|
+
) -> List[LabeledTextItem]:
|
269
|
+
"""Converts pandas dataframe into a list of LabeledTextItem.
|
270
|
+
|
271
|
+
Parameters
|
272
|
+
----------
|
273
|
+
df: pd.DataFrame
|
274
|
+
The Pandas dataframe to convert.
|
275
|
+
content_column: Optional[str]
|
276
|
+
The column name with the content data.
|
277
|
+
annotations_column: Optional[str]
|
278
|
+
The column name for the annotations list.
|
279
|
+
|
280
|
+
Returns
|
281
|
+
-------
|
282
|
+
List[LabeledTextItem]
|
283
|
+
The list of LabeledTextItem objects.
|
284
|
+
|
285
|
+
Raises
|
286
|
+
------
|
287
|
+
TypeError
|
288
|
+
If input data not a pandas dataframe.
|
289
|
+
ValueError
|
290
|
+
If input data has wrong format.
|
291
|
+
"""
|
292
|
+
if not isinstance(df, pd.DataFrame):
|
293
|
+
raise TypeError("The parameter `df` must be a Pandas dataframe.")
|
294
|
+
if content_column not in list(df.columns):
|
295
|
+
raise ValueError(
|
296
|
+
f"The parameter `df` is invalid. It must have a column named `{content_column}`."
|
297
|
+
)
|
298
|
+
if annotations_column not in list(df.columns):
|
299
|
+
raise ValueError(
|
300
|
+
f"The parameter `df` is invalid. It must have a column named `{annotations_column}`."
|
301
|
+
)
|
302
|
+
|
303
|
+
if df[content_column].isnull().values.any():
|
304
|
+
logger.warning(
|
305
|
+
"The parameter `df` includes records where the text content is not "
|
306
|
+
"materialized. These records will be ignored. Use `materialize=True` "
|
307
|
+
"to load the content."
|
308
|
+
)
|
309
|
+
|
310
|
+
result = []
|
311
|
+
for item in df.T.to_dict().values():
|
312
|
+
if item[annotations_column] and not isinstance(item[annotations_column], list):
|
313
|
+
raise ValueError(
|
314
|
+
f"The parameter `df` is invalid. The column {annotations_column} "
|
315
|
+
"must be of type `List[NERItem]`."
|
316
|
+
)
|
317
|
+
|
318
|
+
if item[content_column]:
|
319
|
+
if (
|
320
|
+
isinstance(item[annotations_column][0], tuple)
|
321
|
+
and len(item[annotations_column][0]) == LEN_OF_SPACY_ITEM
|
322
|
+
):
|
323
|
+
ents = [NERItem.from_spacy(ent) for ent in item[annotations_column]]
|
324
|
+
else:
|
325
|
+
ents = item[annotations_column] or []
|
326
|
+
result.append(
|
327
|
+
LabeledTextItem(
|
328
|
+
txt=item[content_column],
|
329
|
+
ents=ents,
|
330
|
+
)
|
331
|
+
)
|
332
|
+
|
333
|
+
return result
|
334
|
+
|
335
|
+
|
336
|
+
def render(items: List[LabeledTextItem], options: Dict = None) -> str:
|
337
|
+
"""Renders NER dataset to Html format.
|
338
|
+
|
339
|
+
Parameters
|
340
|
+
----------
|
341
|
+
items: List[LabeledTextItem]
|
342
|
+
The list of NER items to render.
|
343
|
+
options: dict, optional
|
344
|
+
The options for rendering.
|
345
|
+
|
346
|
+
Returns
|
347
|
+
-------
|
348
|
+
str
|
349
|
+
Html string.
|
350
|
+
|
351
|
+
Examples
|
352
|
+
--------
|
353
|
+
>>> record = LabeledTextItem("London is the capital of the United Kingdom", [NERItem('city', 0, 6), NERItem("country", 29, 14)])
|
354
|
+
>>> result = render(items = [record], options={"default_color":"#DDEECC", "colors": {"city":"#DDEECC", "country":"#FFAAAA"}})
|
355
|
+
>>> display(HTML(result))
|
356
|
+
"""
|
357
|
+
return TextLabeledDataFormatter.render(items, options)
|
ads/database/__init__.py
ADDED
@@ -0,0 +1,338 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8; -*-
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2022 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
import ast
|
8
|
+
import json
|
9
|
+
import oci
|
10
|
+
import os
|
11
|
+
import pathlib
|
12
|
+
import re
|
13
|
+
import shutil
|
14
|
+
|
15
|
+
from oci.exceptions import ServiceError
|
16
|
+
from tempfile import NamedTemporaryFile
|
17
|
+
from zipfile import ZipFile
|
18
|
+
|
19
|
+
from oci.secrets import SecretsClient
|
20
|
+
from oci.config import from_file
|
21
|
+
|
22
|
+
from ads.common.decorator.runtime_dependency import (
|
23
|
+
runtime_dependency,
|
24
|
+
OptionalDependency,
|
25
|
+
)
|
26
|
+
from ads.common import utils
|
27
|
+
from ads.common import auth as authutil
|
28
|
+
from ads.common import oci_client as oc
|
29
|
+
from ads.vault.vault import Vault
|
30
|
+
|
31
|
+
|
32
|
+
class Connector:
|
33
|
+
def __init__(
|
34
|
+
self,
|
35
|
+
secret_id: str = None,
|
36
|
+
key: str = None,
|
37
|
+
repository_path: str = None,
|
38
|
+
**kwargs,
|
39
|
+
):
|
40
|
+
|
41
|
+
"""
|
42
|
+
Validate that a connection could be made for the given set of connection parameters, and contruct a Connector object provided that the
|
43
|
+
validation is successful.
|
44
|
+
|
45
|
+
Parameters
|
46
|
+
----------
|
47
|
+
secret_id: str, optional
|
48
|
+
The ocid of the secret to retrieve from Oracle Cloud Infrastructure Vault.
|
49
|
+
key: str, optional
|
50
|
+
The key to find the database directory.
|
51
|
+
repository_path: str, optional
|
52
|
+
The local database information store, default to ~/.database unless specified otherwise.
|
53
|
+
kwargs: dict, optional
|
54
|
+
Name-value pairs that are to be added to the list of connection parameters.
|
55
|
+
For example, database_name="mydb", database_type="oracle", username = "root", password = "example-password".
|
56
|
+
|
57
|
+
Returns
|
58
|
+
-------
|
59
|
+
A Connector object.
|
60
|
+
"""
|
61
|
+
|
62
|
+
prio_dict = {}
|
63
|
+
|
64
|
+
if kwargs:
|
65
|
+
|
66
|
+
command_creds = {}
|
67
|
+
for input_key in kwargs.keys():
|
68
|
+
command_creds[input_key] = kwargs.get(input_key)
|
69
|
+
|
70
|
+
# declaring priority order
|
71
|
+
prio_dict[1] = command_creds
|
72
|
+
|
73
|
+
# get creds content from vault if secret id is provided
|
74
|
+
if secret_id:
|
75
|
+
if not bool(re.match("^ocid[0-9]?\.vaultsecret.*", secret_id)):
|
76
|
+
raise ValueError(f"{secret_id} is not a valid secret id.")
|
77
|
+
|
78
|
+
auth = authutil.default_signer()
|
79
|
+
self.secret_client = oc.OCIClientFactory(**auth).secret
|
80
|
+
|
81
|
+
secret_bundle = self.secret_client.get_secret_bundle(secret_id)
|
82
|
+
secret_content = ast.literal_eval(
|
83
|
+
Vault._secret_to_dict(secret_bundle.data.secret_bundle_content.content)
|
84
|
+
)
|
85
|
+
# declaring priority order
|
86
|
+
prio_dict[2] = secret_content
|
87
|
+
|
88
|
+
# get creds content from local if key is provided
|
89
|
+
repository_path = _get_repository_path(repository_path=repository_path)
|
90
|
+
if not os.path.exists(repository_path):
|
91
|
+
raise ValueError(f"{repository_path} does not exist.")
|
92
|
+
|
93
|
+
if key:
|
94
|
+
if _not_valid_key(key=key):
|
95
|
+
raise ValueError(f"{key} is not a valid directory name.")
|
96
|
+
db_path = _get_db_path(repository_path=repository_path, key=key)
|
97
|
+
if not os.path.exists(db_path):
|
98
|
+
raise ValueError(f"{db_path} does not exist.")
|
99
|
+
local_content = get_repository(key=key, repository_path=repository_path)
|
100
|
+
# declaring priority order
|
101
|
+
prio_dict[3] = local_content
|
102
|
+
|
103
|
+
# Combine dictionary with priority using ** operator
|
104
|
+
config = {}
|
105
|
+
for k in reversed(sorted(prio_dict.keys())):
|
106
|
+
config.update(**prio_dict[k])
|
107
|
+
self.config = config
|
108
|
+
|
109
|
+
# check database types
|
110
|
+
valid_database_types = ["oracle"]
|
111
|
+
|
112
|
+
if "database_type" not in self.config:
|
113
|
+
raise ValueError(
|
114
|
+
f"The database_type needs to be specified. "
|
115
|
+
f"Valid database types are {valid_database_types}"
|
116
|
+
)
|
117
|
+
|
118
|
+
if self.config["database_type"] not in valid_database_types:
|
119
|
+
raise ValueError(
|
120
|
+
f"{self.config['database_type']} is not a valid database type. "
|
121
|
+
f"Valid database types are {valid_database_types}"
|
122
|
+
)
|
123
|
+
|
124
|
+
if self.config["database_type"] == "oracle":
|
125
|
+
connector = OracleConnector(self.config)
|
126
|
+
self.uri = connector.uri
|
127
|
+
self.engine = connector.engine
|
128
|
+
|
129
|
+
def connect(self):
|
130
|
+
return self.engine.connect()
|
131
|
+
|
132
|
+
def __enter__(self):
|
133
|
+
self.db_connection = self.engine.connect()
|
134
|
+
return self
|
135
|
+
|
136
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
137
|
+
return self
|
138
|
+
|
139
|
+
def __repr__(self): # pragma: no cover
|
140
|
+
return str(self.engine.url)
|
141
|
+
|
142
|
+
|
143
|
+
class OracleConnector:
|
144
|
+
@runtime_dependency(module="sqlalchemy", install_from=OptionalDependency.DATA)
|
145
|
+
def __init__(self, oracle_connection_config):
|
146
|
+
self.config = oracle_connection_config
|
147
|
+
|
148
|
+
# sanity check on valid keys before making a connection
|
149
|
+
valid_keys = ["username", "password", "database_name"]
|
150
|
+
for vk in valid_keys:
|
151
|
+
if vk not in self.config.keys():
|
152
|
+
raise ValueError(f"{vk} is a required parameter to connect.")
|
153
|
+
|
154
|
+
self.uri = _create_connection_str(config=self.config)
|
155
|
+
self.engine = sqlalchemy.create_engine(self.uri)
|
156
|
+
|
157
|
+
|
158
|
+
def update_repository(
|
159
|
+
value: dict, key: str, replace: bool = True, repository_path: str = None
|
160
|
+
) -> dict:
|
161
|
+
"""
|
162
|
+
Saves value into local database store.
|
163
|
+
|
164
|
+
Parameters
|
165
|
+
----------
|
166
|
+
value: dict
|
167
|
+
The values to store locally.
|
168
|
+
key: str
|
169
|
+
The key to find the local database directory.
|
170
|
+
replace: bool, default to True
|
171
|
+
If set to false, updates the stored value.
|
172
|
+
repository_path:str: str, optional
|
173
|
+
The local database store, default to ~/.database unless specified otherwise.
|
174
|
+
|
175
|
+
Returns
|
176
|
+
-------
|
177
|
+
A dictionary of all values in the repository for the given key.
|
178
|
+
"""
|
179
|
+
if _not_valid_key(key=key):
|
180
|
+
raise ValueError(f"{key} is not a valid directory name.")
|
181
|
+
|
182
|
+
# make local database directory
|
183
|
+
repository_path = _get_repository_path(repository_path=repository_path)
|
184
|
+
pathlib.Path(repository_path).mkdir(parents=True, exist_ok=True)
|
185
|
+
|
186
|
+
db_path = _get_db_path(repository_path=repository_path, key=key)
|
187
|
+
pathlib.Path(db_path).mkdir(parents=True, exist_ok=True)
|
188
|
+
|
189
|
+
db_config_path = os.path.join(db_path, "config.json")
|
190
|
+
|
191
|
+
if not replace:
|
192
|
+
value = _update(value, db_config_path)
|
193
|
+
|
194
|
+
with open(db_config_path, "w") as fp:
|
195
|
+
json.dump(value, fp)
|
196
|
+
|
197
|
+
return value
|
198
|
+
|
199
|
+
|
200
|
+
def _update(new_value, db_config_path):
|
201
|
+
# update existing key's values if found different and add new key-value pairs
|
202
|
+
with open(db_config_path) as f:
|
203
|
+
old_value = json.load(f)
|
204
|
+
prio_dict = {1: old_value, 2: new_value}
|
205
|
+
return {**prio_dict[2], **prio_dict[1]}
|
206
|
+
|
207
|
+
|
208
|
+
def get_repository(key: str, repository_path: str = None) -> dict:
|
209
|
+
"""
|
210
|
+
Get all values from local database store.
|
211
|
+
|
212
|
+
Parameters
|
213
|
+
----------
|
214
|
+
key: str
|
215
|
+
The key to find the database directory.
|
216
|
+
repository_path: str, optional
|
217
|
+
The path to local database store, default to ~/.database unless specified otherwise.
|
218
|
+
|
219
|
+
Returns
|
220
|
+
-------
|
221
|
+
A dictionary of all values in the store.
|
222
|
+
"""
|
223
|
+
if _not_valid_key(key=key):
|
224
|
+
raise ValueError(f"{key} is not a valid directory name.")
|
225
|
+
|
226
|
+
# check whether repository_path exists
|
227
|
+
repository_path = _get_repository_path(repository_path=repository_path)
|
228
|
+
if not os.path.exists(repository_path):
|
229
|
+
raise ValueError(f"{repository_path} does not exist.")
|
230
|
+
# check whether db_path exists
|
231
|
+
db_path = _get_db_path(repository_path=repository_path, key=key)
|
232
|
+
if not os.path.exists(db_path):
|
233
|
+
raise ValueError(f"{db_path} does not exist.")
|
234
|
+
|
235
|
+
db_config_path = os.path.join(db_path, "config.json")
|
236
|
+
with open(db_config_path) as f:
|
237
|
+
return json.load(f)
|
238
|
+
|
239
|
+
|
240
|
+
def import_wallet(wallet_path: str, key: str, repository_path: str = None) -> None:
|
241
|
+
"""
|
242
|
+
Saves wallet to local database store.
|
243
|
+
Unzip the wallet zip file, update sqlnet.ora and store wallet files.
|
244
|
+
|
245
|
+
Parameters
|
246
|
+
----------
|
247
|
+
wallet_path: str
|
248
|
+
The local path to the downloaded wallet zip file.
|
249
|
+
key: str
|
250
|
+
The key to find the database directory.
|
251
|
+
repository_path: str, optional
|
252
|
+
The local database store, default to ~/.database unless specified otherwise.
|
253
|
+
|
254
|
+
"""
|
255
|
+
if _not_valid_key(key=key):
|
256
|
+
raise ValueError(f"{key} is not a valid directory name.")
|
257
|
+
|
258
|
+
# checking paths are valid
|
259
|
+
repository_path = _get_repository_path(repository_path=repository_path)
|
260
|
+
db_path = _get_db_path(repository_path=repository_path, key=key)
|
261
|
+
|
262
|
+
if not os.path.exists(db_path):
|
263
|
+
raise ValueError(f"{db_path} does not exist.")
|
264
|
+
if not os.path.exists(wallet_path):
|
265
|
+
raise ValueError(f"{wallet_path} does not exist.")
|
266
|
+
|
267
|
+
# Create a ZipFile Object and load wallet zip in it
|
268
|
+
with ZipFile(wallet_path, "r") as zipObj:
|
269
|
+
# Extract all the contents of zip file in current directory
|
270
|
+
zipObj.extractall(
|
271
|
+
os.path.join(os.path.expanduser("~"), f"{repository_path}/{key}")
|
272
|
+
)
|
273
|
+
|
274
|
+
# Add TNS_ADMIN to the environment
|
275
|
+
os.environ["TNS_ADMIN"] = db_path
|
276
|
+
|
277
|
+
# Update the sqlnet.ora
|
278
|
+
_update_sqlnet(db_path=db_path)
|
279
|
+
|
280
|
+
# Update the config.json file so that the 'database_type' is set to oracle.
|
281
|
+
db_config_path = os.path.join(db_path, "config.json")
|
282
|
+
value = _update({"database_type": "oracle"}, db_config_path)
|
283
|
+
with open(db_config_path, "w") as fp:
|
284
|
+
json.dump(value, fp)
|
285
|
+
|
286
|
+
|
287
|
+
def _update_sqlnet(db_path):
|
288
|
+
sqlnet_path = os.path.join(db_path, "sqlnet.ora")
|
289
|
+
sqlnet_original_path = os.path.join(db_path, "sqlnet.ora.original")
|
290
|
+
sqlnet_backup_path = os.path.join(db_path, "sqlnet.ora.backup")
|
291
|
+
|
292
|
+
if not os.path.exists(sqlnet_original_path):
|
293
|
+
shutil.copy(sqlnet_path, sqlnet_original_path)
|
294
|
+
if os.path.exists(sqlnet_path):
|
295
|
+
shutil.copy(sqlnet_path, sqlnet_backup_path)
|
296
|
+
sqlnet_re = re.compile(
|
297
|
+
'(WALLET_LOCATION\s*=.*METHOD_DATA\s*=.*DIRECTORY\s*=\s*")(.*)(".*)',
|
298
|
+
re.IGNORECASE,
|
299
|
+
)
|
300
|
+
tmp = NamedTemporaryFile()
|
301
|
+
|
302
|
+
with open(sqlnet_path, "rt") as sqlnet:
|
303
|
+
for line in sqlnet:
|
304
|
+
tmp.write(
|
305
|
+
bytearray(
|
306
|
+
sqlnet_re.subn(r"\1{}\3".format(db_path), line)[0], encoding="utf-8"
|
307
|
+
)
|
308
|
+
)
|
309
|
+
tmp.flush()
|
310
|
+
shutil.copy(tmp.name, sqlnet_path)
|
311
|
+
tmp.close()
|
312
|
+
|
313
|
+
|
314
|
+
def _get_repository_path(repository_path):
|
315
|
+
return (
|
316
|
+
os.path.join(os.path.expanduser("~"), ".database")
|
317
|
+
if repository_path is None
|
318
|
+
else repository_path
|
319
|
+
)
|
320
|
+
|
321
|
+
|
322
|
+
def _get_db_path(repository_path, key):
|
323
|
+
return os.path.join(repository_path, key)
|
324
|
+
|
325
|
+
|
326
|
+
def _not_valid_key(key):
|
327
|
+
return bool(re.search("[../.]", key))
|
328
|
+
|
329
|
+
|
330
|
+
def _create_connection_str(config):
|
331
|
+
return (
|
332
|
+
"oracle+cx_oracle://"
|
333
|
+
+ config["username"]
|
334
|
+
+ ":"
|
335
|
+
+ config["password"]
|
336
|
+
+ "@"
|
337
|
+
+ config["database_name"]
|
338
|
+
)
|
ads/dataset/__init__.py
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
# -*- coding: utf-8 -*--
|
3
|
+
|
4
|
+
# Copyright (c) 2020, 2022 Oracle and/or its affiliates.
|
5
|
+
# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/
|
6
|
+
|
7
|
+
|
8
|
+
import logging
|
9
|
+
|
10
|
+
logger = logging.getLogger(__name__)
|