sagemaker-core 1.0.62__py3-none-any.whl → 2.3.1__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.
- sagemaker/__init__.py +2 -0
- sagemaker/core/__init__.py +16 -0
- sagemaker/core/_studio.py +116 -0
- sagemaker/core/_version.py +11 -0
- sagemaker/core/accept_types.py +131 -0
- sagemaker/core/analytics.py +744 -0
- sagemaker/core/apiutils/__init__.py +13 -0
- sagemaker/core/apiutils/_base_types.py +228 -0
- sagemaker/core/apiutils/_boto_functions.py +130 -0
- sagemaker/core/apiutils/_utils.py +34 -0
- sagemaker/core/base_deserializers.py +35 -0
- sagemaker/core/base_serializers.py +35 -0
- sagemaker/core/clarify/__init__.py +2898 -0
- sagemaker/core/collection.py +467 -0
- sagemaker/core/common_utils.py +2399 -0
- sagemaker/core/compute_resource_requirements/__init__.py +18 -0
- sagemaker/core/compute_resource_requirements/resource_requirements.py +94 -0
- sagemaker/core/config/__init__.py +181 -0
- sagemaker/core/config/config.py +238 -0
- sagemaker/core/config/config_manager.py +595 -0
- sagemaker/core/config/config_schema.py +1220 -0
- sagemaker/core/config/config_utils.py +297 -0
- {sagemaker_core/main → sagemaker/core}/config_schema.py +408 -3
- sagemaker/core/constants.py +73 -0
- sagemaker/core/content_types.py +137 -0
- sagemaker/core/debugger/__init__.py +39 -0
- sagemaker/core/debugger/debugger.py +945 -0
- sagemaker/core/debugger/framework_profile.py +292 -0
- sagemaker/core/debugger/metrics_config.py +468 -0
- sagemaker/core/debugger/profiler.py +42 -0
- sagemaker/core/debugger/profiler_config.py +190 -0
- sagemaker/core/debugger/profiler_constants.py +40 -0
- sagemaker/core/debugger/utils.py +148 -0
- sagemaker/core/deprecations.py +254 -0
- sagemaker/core/deserializers/__init__.py +10 -0
- sagemaker/core/deserializers/base.py +424 -0
- sagemaker/core/deserializers/implementations.py +157 -0
- sagemaker/core/drift_check_baselines.py +106 -0
- sagemaker/core/enums.py +51 -0
- sagemaker/core/environment_variables.py +101 -0
- sagemaker/core/exceptions.py +108 -0
- sagemaker/core/experiments/__init__.py +53 -0
- sagemaker/core/experiments/_api_types.py +251 -0
- sagemaker/core/experiments/_environment.py +124 -0
- sagemaker/core/experiments/_helper.py +294 -0
- sagemaker/core/experiments/_metrics.py +333 -0
- sagemaker/core/experiments/_run_context.py +58 -0
- sagemaker/core/experiments/_utils.py +216 -0
- sagemaker/core/experiments/experiment.py +247 -0
- sagemaker/core/experiments/run.py +970 -0
- sagemaker/core/experiments/trial.py +296 -0
- sagemaker/core/experiments/trial_component.py +387 -0
- sagemaker/core/explainer/__init__.py +24 -0
- sagemaker/core/explainer/clarify_explainer_config.py +298 -0
- sagemaker/core/explainer/explainer_config.py +44 -0
- sagemaker/core/fw_utils.py +1220 -0
- sagemaker/core/git_utils.py +415 -0
- sagemaker/core/helper/pipeline_variable.py +82 -0
- sagemaker/core/helper/session_helper.py +2977 -0
- sagemaker/core/hyperparameters.py +172 -0
- sagemaker/core/image_retriever/__init__.py +3 -0
- sagemaker/core/image_retriever/image_retriever.py +640 -0
- sagemaker/core/image_retriever/image_retriever_utils.py +509 -0
- sagemaker/core/image_retriever/test.py +7 -0
- sagemaker/core/image_uri_config/autogluon.json +1335 -0
- sagemaker/core/image_uri_config/blazingtext.json +50 -0
- sagemaker/core/image_uri_config/chainer.json +104 -0
- sagemaker/core/image_uri_config/clarify.json +39 -0
- sagemaker/core/image_uri_config/coach-mxnet.json +70 -0
- sagemaker/core/image_uri_config/coach-tensorflow.json +186 -0
- sagemaker/core/image_uri_config/data-wrangler.json +91 -0
- sagemaker/core/image_uri_config/debugger.json +34 -0
- sagemaker/core/image_uri_config/detailed-profiler.json +18 -0
- sagemaker/core/image_uri_config/djl-deepspeed.json +385 -0
- sagemaker/core/image_uri_config/djl-fastertransformer.json +167 -0
- sagemaker/core/image_uri_config/djl-lmi.json +136 -0
- sagemaker/core/image_uri_config/djl-neuronx.json +258 -0
- sagemaker/core/image_uri_config/djl-tensorrtllm.json +262 -0
- sagemaker/core/image_uri_config/factorization-machines.json +50 -0
- sagemaker/core/image_uri_config/forecasting-deepar.json +50 -0
- sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +770 -0
- sagemaker/core/image_uri_config/huggingface-llm.json +1267 -0
- sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
- sagemaker/core/image_uri_config/huggingface-neuronx.json +686 -0
- sagemaker/core/image_uri_config/huggingface-tei-cpu.json +298 -0
- sagemaker/core/image_uri_config/huggingface-tei.json +298 -0
- sagemaker/core/image_uri_config/huggingface-training-compiler.json +195 -0
- sagemaker/core/image_uri_config/huggingface-vllm-neuronx.json +38 -0
- sagemaker/core/image_uri_config/huggingface.json +2287 -0
- sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +52 -0
- sagemaker/core/image_uri_config/image-classification-neo.json +43 -0
- sagemaker/core/image_uri_config/image-classification.json +50 -0
- sagemaker/core/image_uri_config/inferentia-mxnet.json +88 -0
- sagemaker/core/image_uri_config/inferentia-pytorch.json +127 -0
- sagemaker/core/image_uri_config/inferentia-tensorflow.json +88 -0
- sagemaker/core/image_uri_config/instance_gpu_info.json +782 -0
- sagemaker/core/image_uri_config/ipinsights.json +50 -0
- sagemaker/core/image_uri_config/kmeans.json +50 -0
- sagemaker/core/image_uri_config/knn.json +50 -0
- sagemaker/core/image_uri_config/lda.json +26 -0
- sagemaker/core/image_uri_config/linear-learner.json +50 -0
- sagemaker/core/image_uri_config/model-monitor.json +42 -0
- sagemaker/core/image_uri_config/mxnet.json +1154 -0
- sagemaker/core/image_uri_config/neo-mxnet.json +64 -0
- sagemaker/core/image_uri_config/neo-pytorch.json +341 -0
- sagemaker/core/image_uri_config/neo-tensorflow.json +109 -0
- sagemaker/core/image_uri_config/ntm.json +50 -0
- sagemaker/core/image_uri_config/object-detection.json +50 -0
- sagemaker/core/image_uri_config/object2vec.json +50 -0
- sagemaker/core/image_uri_config/pca.json +50 -0
- sagemaker/core/image_uri_config/pytorch-neuron.json +43 -0
- sagemaker/core/image_uri_config/pytorch-smp.json +218 -0
- sagemaker/core/image_uri_config/pytorch-training-compiler.json +80 -0
- sagemaker/core/image_uri_config/pytorch.json +3101 -0
- sagemaker/core/image_uri_config/randomcutforest.json +50 -0
- sagemaker/core/image_uri_config/ray-pytorch.json +46 -0
- sagemaker/core/image_uri_config/ray-tensorflow.json +194 -0
- sagemaker/core/image_uri_config/sagemaker-base-python.json +46 -0
- sagemaker/core/image_uri_config/sagemaker-distribution.json +37 -0
- sagemaker/core/image_uri_config/sagemaker-geospatial.json +13 -0
- sagemaker/core/image_uri_config/sagemaker-tritonserver.json +252 -0
- sagemaker/core/image_uri_config/semantic-segmentation.json +50 -0
- sagemaker/core/image_uri_config/seq2seq.json +50 -0
- sagemaker/core/image_uri_config/sklearn.json +494 -0
- sagemaker/core/image_uri_config/spark.json +280 -0
- sagemaker/core/image_uri_config/sparkml-serving.json +97 -0
- sagemaker/core/image_uri_config/stabilityai.json +53 -0
- sagemaker/core/image_uri_config/tensorflow.json +5086 -0
- sagemaker/core/image_uri_config/vw.json +25 -0
- sagemaker/core/image_uri_config/xgboost-neo.json +43 -0
- sagemaker/core/image_uri_config/xgboost.json +972 -0
- sagemaker/core/image_uris.py +816 -0
- sagemaker/core/inference_config.py +144 -0
- sagemaker/core/inference_recommender/__init__.py +18 -0
- sagemaker/core/inference_recommender/inference_recommender_mixin.py +622 -0
- sagemaker/core/inputs.py +366 -0
- sagemaker/core/instance_group.py +61 -0
- sagemaker/core/instance_types.py +164 -0
- sagemaker/core/instance_types_gpu_info.py +43 -0
- sagemaker/core/interactive_apps/__init__.py +41 -0
- sagemaker/core/interactive_apps/base_interactive_app.py +204 -0
- sagemaker/core/interactive_apps/detail_profiler_app.py +139 -0
- sagemaker/core/interactive_apps/tensorboard.py +149 -0
- sagemaker/core/iterators.py +197 -0
- sagemaker/core/job.py +380 -0
- sagemaker/core/jumpstart/__init__.py +156 -0
- sagemaker/core/jumpstart/accessors.py +390 -0
- sagemaker/core/jumpstart/artifacts/__init__.py +69 -0
- sagemaker/core/jumpstart/artifacts/environment_variables.py +252 -0
- sagemaker/core/jumpstart/artifacts/hyperparameters.py +120 -0
- sagemaker/core/jumpstart/artifacts/image_uris.py +139 -0
- sagemaker/core/jumpstart/artifacts/incremental_training.py +87 -0
- sagemaker/core/jumpstart/artifacts/instance_types.py +223 -0
- sagemaker/core/jumpstart/artifacts/kwargs.py +289 -0
- sagemaker/core/jumpstart/artifacts/metric_definitions.py +117 -0
- sagemaker/core/jumpstart/artifacts/model_packages.py +202 -0
- sagemaker/core/jumpstart/artifacts/model_uris.py +252 -0
- sagemaker/core/jumpstart/artifacts/payloads.py +96 -0
- sagemaker/core/jumpstart/artifacts/predictors.py +540 -0
- sagemaker/core/jumpstart/artifacts/resource_names.py +86 -0
- sagemaker/core/jumpstart/artifacts/resource_requirements.py +162 -0
- sagemaker/core/jumpstart/artifacts/script_uris.py +172 -0
- sagemaker/core/jumpstart/cache.py +663 -0
- sagemaker/core/jumpstart/configs.py +50 -0
- sagemaker/core/jumpstart/constants.py +198 -0
- sagemaker/core/jumpstart/deserializers.py +81 -0
- sagemaker/core/jumpstart/document.py +76 -0
- sagemaker/core/jumpstart/enums.py +168 -0
- sagemaker/core/jumpstart/exceptions.py +236 -0
- sagemaker/core/jumpstart/factory/utils.py +833 -0
- sagemaker/core/jumpstart/filters.py +597 -0
- sagemaker/core/jumpstart/hub/constants.py +16 -0
- sagemaker/core/jumpstart/hub/hub.py +291 -0
- sagemaker/core/jumpstart/hub/interfaces.py +936 -0
- sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
- sagemaker/core/jumpstart/hub/parsers.py +288 -0
- sagemaker/core/jumpstart/hub/types.py +35 -0
- sagemaker/core/jumpstart/hub/utils.py +260 -0
- sagemaker/core/jumpstart/models.py +501 -0
- sagemaker/core/jumpstart/notebook_utils.py +575 -0
- sagemaker/core/jumpstart/parameters.py +20 -0
- sagemaker/core/jumpstart/payload_utils.py +239 -0
- sagemaker/core/jumpstart/region_config.json +171 -0
- sagemaker/core/jumpstart/search.py +171 -0
- sagemaker/core/jumpstart/serializers.py +81 -0
- sagemaker/core/jumpstart/session_utils.py +234 -0
- sagemaker/core/jumpstart/types.py +3044 -0
- sagemaker/core/jumpstart/utils.py +1731 -0
- sagemaker/core/jumpstart/validators.py +257 -0
- sagemaker/core/lambda_helper.py +312 -0
- sagemaker/core/lineage/__init__.py +42 -0
- sagemaker/core/lineage/_api_types.py +239 -0
- sagemaker/core/lineage/_utils.py +49 -0
- sagemaker/core/lineage/action.py +345 -0
- sagemaker/core/lineage/artifact.py +646 -0
- sagemaker/core/lineage/association.py +190 -0
- sagemaker/core/lineage/context.py +505 -0
- sagemaker/core/lineage/lineage_trial_component.py +191 -0
- sagemaker/core/lineage/query.py +732 -0
- sagemaker/core/lineage/visualizer.py +346 -0
- sagemaker/core/local/__init__.py +18 -0
- sagemaker/core/local/data.py +423 -0
- sagemaker/core/local/entities.py +678 -0
- sagemaker/core/local/exceptions.py +17 -0
- sagemaker/core/local/image.py +1243 -0
- sagemaker/core/local/local_session.py +739 -0
- sagemaker/core/local/utils.py +246 -0
- sagemaker/core/logs.py +181 -0
- sagemaker/core/metadata_properties.py +56 -0
- sagemaker/core/metric_definitions.py +91 -0
- sagemaker/core/mlflow/__init__.py +38 -0
- sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
- sagemaker/core/model_card/__init__.py +26 -0
- sagemaker/core/model_life_cycle.py +51 -0
- sagemaker/core/model_metrics.py +160 -0
- sagemaker/core/model_monitor/__init__.py +66 -0
- sagemaker/core/model_monitor/clarify_model_monitoring.py +1497 -0
- sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
- sagemaker/core/model_monitor/data_capture_config.py +115 -0
- sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
- sagemaker/core/model_monitor/dataset_format.py +102 -0
- sagemaker/core/model_monitor/model_monitoring.py +4266 -0
- sagemaker/core/model_monitor/monitoring_alert.py +76 -0
- sagemaker/core/model_monitor/monitoring_files.py +506 -0
- sagemaker/core/model_monitor/utils.py +793 -0
- sagemaker/core/model_registry.py +480 -0
- sagemaker/core/model_uris.py +97 -0
- sagemaker/core/modules/__init__.py +19 -0
- sagemaker/core/modules/configs.py +239 -0
- sagemaker/core/modules/constants.py +37 -0
- sagemaker/core/modules/distributed.py +182 -0
- sagemaker/core/modules/local_core/local_container.py +605 -0
- sagemaker/core/modules/templates.py +83 -0
- sagemaker/core/modules/train/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/common/utils.py +205 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
- sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
- sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
- sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
- sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
- sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
- sagemaker/core/modules/types.py +19 -0
- sagemaker/core/modules/utils.py +194 -0
- sagemaker/core/network.py +185 -0
- sagemaker/core/parameter.py +173 -0
- sagemaker/core/payloads.py +185 -0
- sagemaker/core/processing.py +1599 -0
- sagemaker/core/remote_function/__init__.py +19 -0
- sagemaker/core/remote_function/checkpoint_location.py +47 -0
- sagemaker/core/remote_function/client.py +1310 -0
- sagemaker/core/remote_function/core/__init__.py +0 -0
- sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
- sagemaker/core/remote_function/core/pipeline_variables.py +347 -0
- sagemaker/core/remote_function/core/serialization.py +410 -0
- sagemaker/core/remote_function/core/stored_function.py +223 -0
- sagemaker/core/remote_function/custom_file_filter.py +128 -0
- sagemaker/core/remote_function/errors.py +102 -0
- sagemaker/core/remote_function/invoke_function.py +167 -0
- sagemaker/core/remote_function/job.py +2121 -0
- sagemaker/core/remote_function/logging_config.py +38 -0
- sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
- sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
- sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
- sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
- sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
- sagemaker/core/remote_function/spark_config.py +149 -0
- sagemaker/core/resource_requirements.py +168 -0
- {sagemaker_core/main → sagemaker/core}/resources.py +19098 -10895
- sagemaker/core/s3/__init__.py +41 -0
- sagemaker/core/s3/client.py +367 -0
- sagemaker/core/s3/utils.py +175 -0
- sagemaker/core/script_uris.py +93 -0
- sagemaker/core/serializers/__init__.py +11 -0
- sagemaker/core/serializers/base.py +510 -0
- sagemaker/core/serializers/implementations.py +159 -0
- sagemaker/core/serializers/utils.py +223 -0
- sagemaker/core/serverless_inference_config.py +63 -0
- sagemaker/core/session_settings.py +55 -0
- sagemaker/core/shapes/__init__.py +3 -0
- sagemaker/core/shapes/model_card_shapes.py +159 -0
- {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +5810 -1806
- sagemaker/core/spark/__init__.py +16 -0
- sagemaker/core/spark/defaults.py +16 -0
- sagemaker/core/spark/processing.py +1380 -0
- sagemaker/core/telemetry/__init__.py +23 -0
- sagemaker/core/telemetry/constants.py +82 -0
- sagemaker/core/telemetry/telemetry_logging.py +285 -0
- sagemaker/core/tools/__init__.py +1 -0
- {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
- {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
- {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
- {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
- sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
- {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
- {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
- {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
- {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
- {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
- sagemaker/core/training/__init__.py +14 -0
- sagemaker/core/training/configs.py +345 -0
- sagemaker/core/training/constants.py +37 -0
- sagemaker/core/training/utils.py +77 -0
- sagemaker/core/training_compiler/__init__.py +16 -0
- sagemaker/core/training_compiler/config.py +197 -0
- sagemaker/core/training_compiler_config.py +197 -0
- sagemaker/core/transformer.py +793 -0
- sagemaker/core/user_agent.py +76 -0
- sagemaker/core/utilities/__init__.py +24 -0
- sagemaker/core/utilities/cache.py +169 -0
- sagemaker/core/utilities/search_expression.py +133 -0
- sagemaker/core/utils/__init__.py +48 -0
- sagemaker/core/utils/code_injection/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +5979 -176
- {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
- sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
- {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
- {sagemaker_core/main → sagemaker/core/utils}/utils.py +27 -22
- sagemaker/core/workflow/__init__.py +152 -0
- sagemaker/core/workflow/conditions.py +313 -0
- sagemaker/core/workflow/entities.py +58 -0
- sagemaker/core/workflow/execution_variables.py +89 -0
- sagemaker/core/workflow/functions.py +193 -0
- sagemaker/core/workflow/parameters.py +222 -0
- sagemaker/core/workflow/pipeline_context.py +394 -0
- sagemaker/core/workflow/pipeline_definition_config.py +31 -0
- sagemaker/core/workflow/properties.py +285 -0
- sagemaker/core/workflow/step_outputs.py +65 -0
- sagemaker/core/workflow/utilities.py +514 -0
- sagemaker/lineage/__init__.py +33 -0
- sagemaker/lineage/action.py +28 -0
- sagemaker/lineage/artifact.py +28 -0
- sagemaker/lineage/context.py +28 -0
- sagemaker/lineage/lineage_trial_component.py +28 -0
- {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/METADATA +28 -9
- sagemaker_core-2.3.1.dist-info/RECORD +351 -0
- sagemaker_core-2.3.1.dist-info/top_level.txt +1 -0
- sagemaker_core/_version.py +0 -3
- sagemaker_core/helper/session_helper.py +0 -769
- sagemaker_core/resources/__init__.py +0 -1
- sagemaker_core/shapes/__init__.py +0 -1
- sagemaker_core/tools/__init__.py +0 -1
- sagemaker_core-1.0.62.dist-info/RECORD +0 -35
- sagemaker_core-1.0.62.dist-info/top_level.txt +0 -1
- {sagemaker_core → sagemaker/core/helper}/__init__.py +0 -0
- {sagemaker_core/helper → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/jumpstart/hub}/__init__.py +0 -0
- {sagemaker_core/main/code_injection → sagemaker/core/modules/local_core}/__init__.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
- {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
- {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/WHEEL +0 -0
- {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.3.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
"""The properties definitions for workflow."""
|
|
14
|
+
from __future__ import absolute_import
|
|
15
|
+
|
|
16
|
+
from abc import ABCMeta
|
|
17
|
+
from typing import Dict, Union, List, TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
import attr
|
|
20
|
+
|
|
21
|
+
import botocore.loaders
|
|
22
|
+
|
|
23
|
+
from sagemaker.core.helper.pipeline_variable import PipelineVariable
|
|
24
|
+
from sagemaker.core.workflow.step_outputs import StepOutput
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from sagemaker.mlops.workflow.steps import Step
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class PropertiesMeta(ABCMeta):
|
|
31
|
+
"""Load an internal shapes attribute from the botocore service model
|
|
32
|
+
|
|
33
|
+
for sagemaker and emr service.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
_shapes_map = dict()
|
|
37
|
+
_primitive_types = {"string", "boolean", "integer", "float"}
|
|
38
|
+
|
|
39
|
+
def __new__(mcs, *args, **kwargs):
|
|
40
|
+
"""Loads up the shapes from the botocore service model."""
|
|
41
|
+
if len(mcs._shapes_map.keys()) == 0:
|
|
42
|
+
loader = botocore.loaders.Loader()
|
|
43
|
+
|
|
44
|
+
sagemaker_model = loader.load_service_model("sagemaker", "service-2")
|
|
45
|
+
emr_model = loader.load_service_model("emr", "service-2")
|
|
46
|
+
mcs._shapes_map["sagemaker"] = sagemaker_model["shapes"]
|
|
47
|
+
mcs._shapes_map["emr"] = emr_model["shapes"]
|
|
48
|
+
|
|
49
|
+
return super().__new__(mcs, *args, **kwargs)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class Properties(StepOutput, metaclass=PropertiesMeta):
|
|
53
|
+
"""Properties for use in workflow expressions."""
|
|
54
|
+
|
|
55
|
+
def __init__(
|
|
56
|
+
self,
|
|
57
|
+
step_name: str,
|
|
58
|
+
path: str = None,
|
|
59
|
+
shape_name: str = None,
|
|
60
|
+
shape_names: List[str] = None,
|
|
61
|
+
service_name: str = "sagemaker",
|
|
62
|
+
step: "Step" = None,
|
|
63
|
+
):
|
|
64
|
+
"""Create a Properties instance representing the given shape.
|
|
65
|
+
|
|
66
|
+
Args:
|
|
67
|
+
step_name (str): The name of the Step this Property belongs to.
|
|
68
|
+
path (str): The relative path of this Property value.
|
|
69
|
+
shape_name (str): The botocore service model shape name.
|
|
70
|
+
shape_names (str): A List of the botocore service model shape name.
|
|
71
|
+
step (Step): The Step object this Property belongs to.
|
|
72
|
+
"""
|
|
73
|
+
super().__init__(step)
|
|
74
|
+
self.step_name = step_name
|
|
75
|
+
self.path = path
|
|
76
|
+
|
|
77
|
+
shape_names = [] if shape_names is None else shape_names
|
|
78
|
+
self._shape_names = shape_names if shape_name is None else [shape_name] + shape_names
|
|
79
|
+
|
|
80
|
+
shapes = Properties._shapes_map.get(service_name, {})
|
|
81
|
+
|
|
82
|
+
for name in self._shape_names:
|
|
83
|
+
shape = shapes.get(name, {})
|
|
84
|
+
shape_type = shape.get("type")
|
|
85
|
+
if shape_type in Properties._primitive_types:
|
|
86
|
+
self.__str__ = name
|
|
87
|
+
elif shape_type == "structure":
|
|
88
|
+
members = shape["members"]
|
|
89
|
+
for key, info in members.items():
|
|
90
|
+
if shapes.get(info["shape"], {}).get("type") == "list":
|
|
91
|
+
self.__dict__[key] = PropertiesList(
|
|
92
|
+
step_name=step_name,
|
|
93
|
+
path=".".join(filter(None, (path, key))),
|
|
94
|
+
shape_name=info["shape"],
|
|
95
|
+
service_name=service_name,
|
|
96
|
+
step=self._step,
|
|
97
|
+
)
|
|
98
|
+
elif shapes.get(info["shape"], {}).get("type") == "map":
|
|
99
|
+
self.__dict__[key] = PropertiesMap(
|
|
100
|
+
step_name=step_name,
|
|
101
|
+
path=".".join(filter(None, (path, key))),
|
|
102
|
+
shape_name=info["shape"],
|
|
103
|
+
service_name=service_name,
|
|
104
|
+
step=self._step,
|
|
105
|
+
)
|
|
106
|
+
else:
|
|
107
|
+
self.__dict__[key] = Properties(
|
|
108
|
+
step_name=step_name,
|
|
109
|
+
path=".".join(filter(None, (path, key))),
|
|
110
|
+
shape_name=info["shape"],
|
|
111
|
+
service_name=service_name,
|
|
112
|
+
step=self._step,
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
@property
|
|
116
|
+
def expr(self):
|
|
117
|
+
"""The 'Get' expression dict for a `Properties`."""
|
|
118
|
+
prefix = f"Steps.{self.step_name}"
|
|
119
|
+
full_path = prefix if self.path is None else f"{prefix}.{self.path}"
|
|
120
|
+
return {"Get": full_path}
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def _referenced_steps(self) -> List[Union[str, "Step"]]:
|
|
124
|
+
"""List of step names that this function depends on."""
|
|
125
|
+
if self._step:
|
|
126
|
+
return [self._step]
|
|
127
|
+
return [self.step_name]
|
|
128
|
+
|
|
129
|
+
def __reduce__(self):
|
|
130
|
+
"""Reduce the Properties object to a tuple of args for pickling.
|
|
131
|
+
|
|
132
|
+
self._step is not picklable, so we need to remove it from the object.
|
|
133
|
+
"""
|
|
134
|
+
return Properties, (self.step_name, self.path, None, self._shape_names)
|
|
135
|
+
|
|
136
|
+
@property
|
|
137
|
+
def _pickleable(self):
|
|
138
|
+
"""The pickleable object that can be passed to a remote function invocation."""
|
|
139
|
+
|
|
140
|
+
from sagemaker.core.remote_function.core.pipeline_variables import _Properties
|
|
141
|
+
|
|
142
|
+
prefix = f"Steps.{self.step_name}"
|
|
143
|
+
full_path = prefix if self.path is None else f"{prefix}.{self.path}"
|
|
144
|
+
return _Properties(path=full_path)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class PropertiesList(Properties):
|
|
148
|
+
"""PropertiesList for use in workflow expressions."""
|
|
149
|
+
|
|
150
|
+
def __init__(
|
|
151
|
+
self,
|
|
152
|
+
step_name: str,
|
|
153
|
+
path: str,
|
|
154
|
+
shape_name: str = None,
|
|
155
|
+
service_name: str = "sagemaker",
|
|
156
|
+
step: "Step" = None,
|
|
157
|
+
):
|
|
158
|
+
"""Create a PropertiesList instance representing the given shape.
|
|
159
|
+
|
|
160
|
+
Args:
|
|
161
|
+
step_name (str): The name of the Step this Property belongs to.
|
|
162
|
+
path (str): The relative path of this Property value.
|
|
163
|
+
shape_name (str): The botocore service model shape name.
|
|
164
|
+
service_name (str): The botocore service name.
|
|
165
|
+
"""
|
|
166
|
+
super(PropertiesList, self).__init__(step_name, path, shape_name, step=step)
|
|
167
|
+
self.shape_name = shape_name
|
|
168
|
+
self.service_name = service_name
|
|
169
|
+
self._items: Dict[Union[int, str], Properties] = dict()
|
|
170
|
+
|
|
171
|
+
def __getitem__(self, item: Union[int, str]):
|
|
172
|
+
"""Populate the indexing item with a Property, for both lists and dictionaries.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
item (Union[int, str]): The index of the item in sequence.
|
|
176
|
+
"""
|
|
177
|
+
if item not in self._items.keys():
|
|
178
|
+
shape = Properties._shapes_map.get(self.service_name, {}).get(self.shape_name)
|
|
179
|
+
member = shape["member"]["shape"]
|
|
180
|
+
if isinstance(item, str):
|
|
181
|
+
property_item = Properties(
|
|
182
|
+
self.step_name,
|
|
183
|
+
f"{self.path}['{item}']",
|
|
184
|
+
member,
|
|
185
|
+
step=self._step,
|
|
186
|
+
)
|
|
187
|
+
else:
|
|
188
|
+
property_item = Properties(
|
|
189
|
+
self.step_name,
|
|
190
|
+
f"{self.path}[{item}]",
|
|
191
|
+
member,
|
|
192
|
+
step=self._step,
|
|
193
|
+
)
|
|
194
|
+
self._items[item] = property_item
|
|
195
|
+
|
|
196
|
+
return self._items.get(item)
|
|
197
|
+
|
|
198
|
+
def __reduce__(self):
|
|
199
|
+
"""Reduce the Properties object to a tuple of args for pickling.
|
|
200
|
+
|
|
201
|
+
self._step is not pickleable, so we need to remove it from the object.
|
|
202
|
+
"""
|
|
203
|
+
return Properties, (self.step_name, self.path, self.shape_name)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
class PropertiesMap(Properties):
|
|
207
|
+
"""PropertiesMap for use in workflow expressions."""
|
|
208
|
+
|
|
209
|
+
def __init__(
|
|
210
|
+
self,
|
|
211
|
+
step_name: str,
|
|
212
|
+
path: str,
|
|
213
|
+
shape_name: str = None,
|
|
214
|
+
service_name: str = "sagemaker",
|
|
215
|
+
step: "Step" = None,
|
|
216
|
+
):
|
|
217
|
+
"""Create a PropertiesMap instance representing the given shape.
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
step_name (str): The name of the Step this Property belongs to.
|
|
221
|
+
path (str): The relative path of this Property value.
|
|
222
|
+
shape_name (str): The botocore service model shape name.
|
|
223
|
+
service_name (str): The botocore service name.
|
|
224
|
+
"""
|
|
225
|
+
super(PropertiesMap, self).__init__(step_name, path, shape_name, step=step)
|
|
226
|
+
self.shape_name = shape_name
|
|
227
|
+
self.service_name = service_name
|
|
228
|
+
self._items: Dict[Union[int, str], Properties] = dict()
|
|
229
|
+
|
|
230
|
+
def __getitem__(self, item: Union[int, str]):
|
|
231
|
+
"""Populate the indexing item with a Property, for both lists and dictionaries.
|
|
232
|
+
|
|
233
|
+
Args:
|
|
234
|
+
item (Union[int, str]): The index of the item in sequence.
|
|
235
|
+
"""
|
|
236
|
+
if item not in self._items.keys():
|
|
237
|
+
shape = Properties._shapes_map.get(self.service_name, {}).get(self.shape_name)
|
|
238
|
+
member = shape["value"]["shape"]
|
|
239
|
+
if isinstance(item, str):
|
|
240
|
+
property_item = Properties(
|
|
241
|
+
self.step_name, f"{self.path}['{item}']", member, step=self._step
|
|
242
|
+
)
|
|
243
|
+
else:
|
|
244
|
+
property_item = Properties(
|
|
245
|
+
self.step_name, f"{self.path}[{item}]", member, step=self._step
|
|
246
|
+
)
|
|
247
|
+
self._items[item] = property_item
|
|
248
|
+
|
|
249
|
+
return self._items.get(item)
|
|
250
|
+
|
|
251
|
+
def __reduce__(self):
|
|
252
|
+
"""Reduce the Properties object to a tuple of args for pickling.
|
|
253
|
+
|
|
254
|
+
self._step is not pickleable, so we need to remove it from the object.
|
|
255
|
+
"""
|
|
256
|
+
return Properties, (self.step_name, self.path, self.shape_name)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
@attr.s
|
|
260
|
+
class PropertyFile(PipelineVariable):
|
|
261
|
+
"""Provides a property file struct.
|
|
262
|
+
|
|
263
|
+
Attributes:
|
|
264
|
+
name (str): The name of the property file for reference with `JsonGet` functions.
|
|
265
|
+
output_name (str): The name of the processing job output channel.
|
|
266
|
+
path (str): The path to the file at the output channel location.
|
|
267
|
+
"""
|
|
268
|
+
|
|
269
|
+
name: str = attr.ib()
|
|
270
|
+
output_name: str = attr.ib()
|
|
271
|
+
path: str = attr.ib()
|
|
272
|
+
|
|
273
|
+
@property
|
|
274
|
+
def expr(self) -> Dict[str, str]:
|
|
275
|
+
"""The expression dict for a `PropertyFile`."""
|
|
276
|
+
return {
|
|
277
|
+
"PropertyFileName": self.name,
|
|
278
|
+
"OutputName": self.output_name,
|
|
279
|
+
"FilePath": self.path,
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
@property
|
|
283
|
+
def _referenced_steps(self) -> List[Union[str, "Step"]]:
|
|
284
|
+
"""List of steps that this property file depends on."""
|
|
285
|
+
return []
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License"). You
|
|
4
|
+
# may not use this file except in compliance with the License. A copy of
|
|
5
|
+
# the License is located at
|
|
6
|
+
#
|
|
7
|
+
# http://aws.amazon.com/apache2.0/
|
|
8
|
+
#
|
|
9
|
+
# or in the "license" file accompanying this file. This file is
|
|
10
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
|
|
11
|
+
# ANY KIND, either express or implied. See the License for the specific
|
|
12
|
+
# language governing permissions and limitations under the License.
|
|
13
|
+
"""Base class representing step decorator outputs"""
|
|
14
|
+
from __future__ import absolute_import
|
|
15
|
+
|
|
16
|
+
import abc
|
|
17
|
+
from typing import List, TYPE_CHECKING
|
|
18
|
+
|
|
19
|
+
from sagemaker.core.helper.pipeline_variable import (
|
|
20
|
+
RequestType,
|
|
21
|
+
PipelineVariable,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
if TYPE_CHECKING:
|
|
25
|
+
from sagemaker.mlops.workflow.steps import Step
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class StepOutput(PipelineVariable):
|
|
29
|
+
"""Base class representing ``@step`` decorator outputs."""
|
|
30
|
+
|
|
31
|
+
def __init__(self, step: "Step" = None):
|
|
32
|
+
"""Initializes a `StepOutput` object.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
step: A `sagemaker.workflow.steps.Step` instance.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
self._step = step
|
|
39
|
+
|
|
40
|
+
def __repr__(self):
|
|
41
|
+
"""Formatted representation of the output class"""
|
|
42
|
+
return str(self.__dict__)
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
@abc.abstractmethod
|
|
46
|
+
def expr(self) -> RequestType:
|
|
47
|
+
"""Get the expression structure for workflow service calls."""
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
def _referenced_steps(self) -> List[str]:
|
|
51
|
+
"""List of step names that this function depends on."""
|
|
52
|
+
# TODO: Implement this
|
|
53
|
+
return []
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def get_step(step_output: StepOutput):
|
|
57
|
+
"""Get the step associated with this output.
|
|
58
|
+
|
|
59
|
+
Args:
|
|
60
|
+
step_output: A `sagemaker.workflow.steps.StepOutput` instance.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
A `sagemaker.workflow.steps.Step` instance.
|
|
64
|
+
"""
|
|
65
|
+
return step_output._step
|