sagemaker-core 1.0.62__py3-none-any.whl → 2.1.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.
Files changed (362) hide show
  1. sagemaker/core/__init__.py +16 -0
  2. sagemaker/core/_studio.py +116 -0
  3. sagemaker/core/_version.py +11 -0
  4. sagemaker/core/accept_types.py +131 -0
  5. sagemaker/core/analytics.py +744 -0
  6. sagemaker/core/apiutils/__init__.py +13 -0
  7. sagemaker/core/apiutils/_base_types.py +228 -0
  8. sagemaker/core/apiutils/_boto_functions.py +130 -0
  9. sagemaker/core/apiutils/_utils.py +34 -0
  10. sagemaker/core/base_deserializers.py +35 -0
  11. sagemaker/core/base_serializers.py +35 -0
  12. sagemaker/core/clarify/__init__.py +2898 -0
  13. sagemaker/core/collection.py +467 -0
  14. sagemaker/core/common_utils.py +2281 -0
  15. sagemaker/core/compute_resource_requirements/__init__.py +18 -0
  16. sagemaker/core/compute_resource_requirements/resource_requirements.py +94 -0
  17. sagemaker/core/config/__init__.py +181 -0
  18. sagemaker/core/config/config.py +238 -0
  19. sagemaker/core/config/config_manager.py +595 -0
  20. sagemaker/core/config/config_schema.py +1220 -0
  21. sagemaker/core/config/config_utils.py +297 -0
  22. {sagemaker_core/main → sagemaker/core}/config_schema.py +408 -3
  23. sagemaker/core/constants.py +73 -0
  24. sagemaker/core/content_types.py +137 -0
  25. sagemaker/core/debugger/__init__.py +39 -0
  26. sagemaker/core/debugger/debugger.py +945 -0
  27. sagemaker/core/debugger/framework_profile.py +292 -0
  28. sagemaker/core/debugger/metrics_config.py +468 -0
  29. sagemaker/core/debugger/profiler.py +42 -0
  30. sagemaker/core/debugger/profiler_config.py +190 -0
  31. sagemaker/core/debugger/profiler_constants.py +40 -0
  32. sagemaker/core/debugger/utils.py +148 -0
  33. sagemaker/core/deprecations.py +254 -0
  34. sagemaker/core/deserializers/__init__.py +10 -0
  35. sagemaker/core/deserializers/base.py +424 -0
  36. sagemaker/core/deserializers/implementations.py +157 -0
  37. sagemaker/core/drift_check_baselines.py +106 -0
  38. sagemaker/core/enums.py +51 -0
  39. sagemaker/core/environment_variables.py +101 -0
  40. sagemaker/core/exceptions.py +108 -0
  41. sagemaker/core/experiments/__init__.py +53 -0
  42. sagemaker/core/experiments/_api_types.py +251 -0
  43. sagemaker/core/experiments/_environment.py +124 -0
  44. sagemaker/core/experiments/_helper.py +294 -0
  45. sagemaker/core/experiments/_metrics.py +333 -0
  46. sagemaker/core/experiments/_run_context.py +58 -0
  47. sagemaker/core/experiments/_utils.py +216 -0
  48. sagemaker/core/experiments/experiment.py +244 -0
  49. sagemaker/core/experiments/run.py +970 -0
  50. sagemaker/core/experiments/trial.py +296 -0
  51. sagemaker/core/experiments/trial_component.py +387 -0
  52. sagemaker/core/explainer/__init__.py +24 -0
  53. sagemaker/core/explainer/clarify_explainer_config.py +298 -0
  54. sagemaker/core/explainer/explainer_config.py +44 -0
  55. sagemaker/core/fw_utils.py +1176 -0
  56. sagemaker/core/git_utils.py +349 -0
  57. sagemaker/core/helper/pipeline_variable.py +82 -0
  58. sagemaker/core/helper/session_helper.py +2965 -0
  59. sagemaker/core/huggingface/__init__.py +29 -0
  60. sagemaker/core/huggingface/llm_utils.py +150 -0
  61. sagemaker/core/huggingface/processing.py +139 -0
  62. sagemaker/core/huggingface/training_compiler/config.py +167 -0
  63. sagemaker/core/hyperparameters.py +172 -0
  64. sagemaker/core/image_retriever/__init__.py +3 -0
  65. sagemaker/core/image_retriever/image_retriever.py +640 -0
  66. sagemaker/core/image_retriever/image_retriever_utils.py +511 -0
  67. sagemaker/core/image_retriever/test.py +7 -0
  68. sagemaker/core/image_uri_config/__init__.py +13 -0
  69. sagemaker/core/image_uri_config/autogluon.json +1335 -0
  70. sagemaker/core/image_uri_config/blazingtext.json +50 -0
  71. sagemaker/core/image_uri_config/chainer.json +104 -0
  72. sagemaker/core/image_uri_config/clarify.json +39 -0
  73. sagemaker/core/image_uri_config/coach-mxnet.json +70 -0
  74. sagemaker/core/image_uri_config/coach-tensorflow.json +186 -0
  75. sagemaker/core/image_uri_config/data-wrangler.json +91 -0
  76. sagemaker/core/image_uri_config/debugger.json +34 -0
  77. sagemaker/core/image_uri_config/detailed-profiler.json +18 -0
  78. sagemaker/core/image_uri_config/djl-deepspeed.json +385 -0
  79. sagemaker/core/image_uri_config/djl-fastertransformer.json +167 -0
  80. sagemaker/core/image_uri_config/djl-lmi.json +136 -0
  81. sagemaker/core/image_uri_config/djl-neuronx.json +258 -0
  82. sagemaker/core/image_uri_config/djl-tensorrtllm.json +262 -0
  83. sagemaker/core/image_uri_config/factorization-machines.json +50 -0
  84. sagemaker/core/image_uri_config/forecasting-deepar.json +50 -0
  85. sagemaker/core/image_uri_config/huggingface-llm-neuronx.json +660 -0
  86. sagemaker/core/image_uri_config/huggingface-llm.json +1158 -0
  87. sagemaker/core/image_uri_config/huggingface-neuron.json +52 -0
  88. sagemaker/core/image_uri_config/huggingface-neuronx.json +510 -0
  89. sagemaker/core/image_uri_config/huggingface-tei-cpu.json +298 -0
  90. sagemaker/core/image_uri_config/huggingface-tei.json +298 -0
  91. sagemaker/core/image_uri_config/huggingface-training-compiler.json +195 -0
  92. sagemaker/core/image_uri_config/huggingface.json +2138 -0
  93. sagemaker/core/image_uri_config/hyperpod-recipes-neuron.json +52 -0
  94. sagemaker/core/image_uri_config/image-classification-neo.json +43 -0
  95. sagemaker/core/image_uri_config/image-classification.json +50 -0
  96. sagemaker/core/image_uri_config/inferentia-mxnet.json +88 -0
  97. sagemaker/core/image_uri_config/inferentia-pytorch.json +127 -0
  98. sagemaker/core/image_uri_config/inferentia-tensorflow.json +88 -0
  99. sagemaker/core/image_uri_config/instance_gpu_info.json +782 -0
  100. sagemaker/core/image_uri_config/ipinsights.json +50 -0
  101. sagemaker/core/image_uri_config/kmeans.json +50 -0
  102. sagemaker/core/image_uri_config/knn.json +50 -0
  103. sagemaker/core/image_uri_config/lda.json +26 -0
  104. sagemaker/core/image_uri_config/linear-learner.json +50 -0
  105. sagemaker/core/image_uri_config/model-monitor.json +42 -0
  106. sagemaker/core/image_uri_config/mxnet.json +1154 -0
  107. sagemaker/core/image_uri_config/neo-mxnet.json +64 -0
  108. sagemaker/core/image_uri_config/neo-pytorch.json +341 -0
  109. sagemaker/core/image_uri_config/neo-tensorflow.json +109 -0
  110. sagemaker/core/image_uri_config/ntm.json +50 -0
  111. sagemaker/core/image_uri_config/object-detection.json +50 -0
  112. sagemaker/core/image_uri_config/object2vec.json +50 -0
  113. sagemaker/core/image_uri_config/pca.json +50 -0
  114. sagemaker/core/image_uri_config/pytorch-neuron.json +43 -0
  115. sagemaker/core/image_uri_config/pytorch-smp.json +218 -0
  116. sagemaker/core/image_uri_config/pytorch-training-compiler.json +80 -0
  117. sagemaker/core/image_uri_config/pytorch.json +3101 -0
  118. sagemaker/core/image_uri_config/randomcutforest.json +50 -0
  119. sagemaker/core/image_uri_config/ray-pytorch.json +46 -0
  120. sagemaker/core/image_uri_config/ray-tensorflow.json +194 -0
  121. sagemaker/core/image_uri_config/sagemaker-base-python.json +46 -0
  122. sagemaker/core/image_uri_config/sagemaker-distribution.json +37 -0
  123. sagemaker/core/image_uri_config/sagemaker-geospatial.json +13 -0
  124. sagemaker/core/image_uri_config/sagemaker-tritonserver.json +212 -0
  125. sagemaker/core/image_uri_config/semantic-segmentation.json +50 -0
  126. sagemaker/core/image_uri_config/seq2seq.json +50 -0
  127. sagemaker/core/image_uri_config/sklearn.json +446 -0
  128. sagemaker/core/image_uri_config/spark.json +280 -0
  129. sagemaker/core/image_uri_config/sparkml-serving.json +97 -0
  130. sagemaker/core/image_uri_config/stabilityai.json +53 -0
  131. sagemaker/core/image_uri_config/tensorflow.json +5086 -0
  132. sagemaker/core/image_uri_config/vw.json +25 -0
  133. sagemaker/core/image_uri_config/xgboost-neo.json +43 -0
  134. sagemaker/core/image_uri_config/xgboost.json +888 -0
  135. sagemaker/core/image_uris.py +810 -0
  136. sagemaker/core/inference_config.py +144 -0
  137. sagemaker/core/inference_recommender/__init__.py +18 -0
  138. sagemaker/core/inference_recommender/inference_recommender_mixin.py +622 -0
  139. sagemaker/core/inputs.py +366 -0
  140. sagemaker/core/instance_group.py +61 -0
  141. sagemaker/core/instance_types.py +164 -0
  142. sagemaker/core/instance_types_gpu_info.py +43 -0
  143. sagemaker/core/interactive_apps/__init__.py +41 -0
  144. sagemaker/core/interactive_apps/base_interactive_app.py +204 -0
  145. sagemaker/core/interactive_apps/detail_profiler_app.py +139 -0
  146. sagemaker/core/interactive_apps/tensorboard.py +149 -0
  147. sagemaker/core/iterators.py +186 -0
  148. sagemaker/core/job.py +380 -0
  149. sagemaker/core/jumpstart/__init__.py +156 -0
  150. sagemaker/core/jumpstart/accessors.py +390 -0
  151. sagemaker/core/jumpstart/artifacts/__init__.py +69 -0
  152. sagemaker/core/jumpstart/artifacts/environment_variables.py +252 -0
  153. sagemaker/core/jumpstart/artifacts/hyperparameters.py +120 -0
  154. sagemaker/core/jumpstart/artifacts/image_uris.py +139 -0
  155. sagemaker/core/jumpstart/artifacts/incremental_training.py +87 -0
  156. sagemaker/core/jumpstart/artifacts/instance_types.py +223 -0
  157. sagemaker/core/jumpstart/artifacts/kwargs.py +289 -0
  158. sagemaker/core/jumpstart/artifacts/metric_definitions.py +117 -0
  159. sagemaker/core/jumpstart/artifacts/model_packages.py +202 -0
  160. sagemaker/core/jumpstart/artifacts/model_uris.py +252 -0
  161. sagemaker/core/jumpstart/artifacts/payloads.py +96 -0
  162. sagemaker/core/jumpstart/artifacts/predictors.py +540 -0
  163. sagemaker/core/jumpstart/artifacts/resource_names.py +86 -0
  164. sagemaker/core/jumpstart/artifacts/resource_requirements.py +162 -0
  165. sagemaker/core/jumpstart/artifacts/script_uris.py +172 -0
  166. sagemaker/core/jumpstart/cache.py +663 -0
  167. sagemaker/core/jumpstart/configs.py +50 -0
  168. sagemaker/core/jumpstart/constants.py +198 -0
  169. sagemaker/core/jumpstart/deserializers.py +81 -0
  170. sagemaker/core/jumpstart/document.py +76 -0
  171. sagemaker/core/jumpstart/enums.py +168 -0
  172. sagemaker/core/jumpstart/exceptions.py +236 -0
  173. sagemaker/core/jumpstart/factory/utils.py +833 -0
  174. sagemaker/core/jumpstart/filters.py +597 -0
  175. sagemaker/core/jumpstart/hub/constants.py +16 -0
  176. sagemaker/core/jumpstart/hub/hub.py +291 -0
  177. sagemaker/core/jumpstart/hub/interfaces.py +936 -0
  178. sagemaker/core/jumpstart/hub/parser_utils.py +70 -0
  179. sagemaker/core/jumpstart/hub/parsers.py +288 -0
  180. sagemaker/core/jumpstart/hub/types.py +35 -0
  181. sagemaker/core/jumpstart/hub/utils.py +260 -0
  182. sagemaker/core/jumpstart/models.py +499 -0
  183. sagemaker/core/jumpstart/notebook_utils.py +575 -0
  184. sagemaker/core/jumpstart/parameters.py +20 -0
  185. sagemaker/core/jumpstart/payload_utils.py +239 -0
  186. sagemaker/core/jumpstart/region_config.json +163 -0
  187. sagemaker/core/jumpstart/search.py +171 -0
  188. sagemaker/core/jumpstart/serializers.py +81 -0
  189. sagemaker/core/jumpstart/session_utils.py +234 -0
  190. sagemaker/core/jumpstart/types.py +3044 -0
  191. sagemaker/core/jumpstart/utils.py +1731 -0
  192. sagemaker/core/jumpstart/validators.py +257 -0
  193. sagemaker/core/lambda_helper.py +312 -0
  194. sagemaker/core/lineage/__init__.py +42 -0
  195. sagemaker/core/lineage/_api_types.py +239 -0
  196. sagemaker/core/lineage/_utils.py +49 -0
  197. sagemaker/core/lineage/action.py +345 -0
  198. sagemaker/core/lineage/artifact.py +646 -0
  199. sagemaker/core/lineage/association.py +190 -0
  200. sagemaker/core/lineage/context.py +505 -0
  201. sagemaker/core/lineage/lineage_trial_component.py +191 -0
  202. sagemaker/core/lineage/query.py +732 -0
  203. sagemaker/core/lineage/visualizer.py +346 -0
  204. sagemaker/core/local/__init__.py +18 -0
  205. sagemaker/core/local/data.py +413 -0
  206. sagemaker/core/local/entities.py +678 -0
  207. sagemaker/core/local/exceptions.py +17 -0
  208. sagemaker/core/local/image.py +1243 -0
  209. sagemaker/core/local/local_session.py +739 -0
  210. sagemaker/core/local/utils.py +245 -0
  211. sagemaker/core/logs.py +181 -0
  212. sagemaker/core/metadata_properties.py +56 -0
  213. sagemaker/core/metric_definitions.py +91 -0
  214. sagemaker/core/mlflow/__init__.py +38 -0
  215. sagemaker/core/mlflow/forward_sagemaker_metrics.py +44 -0
  216. sagemaker/core/model_card/__init__.py +26 -0
  217. sagemaker/core/model_life_cycle.py +51 -0
  218. sagemaker/core/model_metrics.py +160 -0
  219. sagemaker/core/model_monitor/__init__.py +66 -0
  220. sagemaker/core/model_monitor/clarify_model_monitoring.py +1495 -0
  221. sagemaker/core/model_monitor/cron_expression_generator.py +82 -0
  222. sagemaker/core/model_monitor/data_capture_config.py +115 -0
  223. sagemaker/core/model_monitor/data_quality_monitoring_config.py +66 -0
  224. sagemaker/core/model_monitor/dataset_format.py +102 -0
  225. sagemaker/core/model_monitor/model_monitoring.py +4266 -0
  226. sagemaker/core/model_monitor/monitoring_alert.py +76 -0
  227. sagemaker/core/model_monitor/monitoring_files.py +506 -0
  228. sagemaker/core/model_monitor/utils.py +793 -0
  229. sagemaker/core/model_registry.py +480 -0
  230. sagemaker/core/model_uris.py +97 -0
  231. sagemaker/core/modules/__init__.py +19 -0
  232. sagemaker/core/modules/configs.py +226 -0
  233. sagemaker/core/modules/constants.py +37 -0
  234. sagemaker/core/modules/distributed.py +182 -0
  235. sagemaker/core/modules/local_core/__init__.py +0 -0
  236. sagemaker/core/modules/local_core/local_container.py +605 -0
  237. sagemaker/core/modules/templates.py +83 -0
  238. sagemaker/core/modules/train/__init__.py +14 -0
  239. sagemaker/core/modules/train/container_drivers/__init__.py +14 -0
  240. sagemaker/core/modules/train/container_drivers/common/__init__.py +14 -0
  241. sagemaker/core/modules/train/container_drivers/common/utils.py +213 -0
  242. sagemaker/core/modules/train/container_drivers/distributed_drivers/__init__.py +14 -0
  243. sagemaker/core/modules/train/container_drivers/distributed_drivers/basic_script_driver.py +81 -0
  244. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_driver.py +123 -0
  245. sagemaker/core/modules/train/container_drivers/distributed_drivers/mpi_utils.py +302 -0
  246. sagemaker/core/modules/train/container_drivers/distributed_drivers/torchrun_driver.py +129 -0
  247. sagemaker/core/modules/train/container_drivers/scripts/__init__.py +14 -0
  248. sagemaker/core/modules/train/container_drivers/scripts/environment.py +305 -0
  249. sagemaker/core/modules/train/sm_recipes/__init__.py +0 -0
  250. sagemaker/core/modules/train/sm_recipes/utils.py +330 -0
  251. sagemaker/core/modules/types.py +19 -0
  252. sagemaker/core/modules/utils.py +194 -0
  253. sagemaker/core/network.py +185 -0
  254. sagemaker/core/parameter.py +173 -0
  255. sagemaker/core/payloads.py +185 -0
  256. sagemaker/core/processing.py +1597 -0
  257. sagemaker/core/remote_function/__init__.py +19 -0
  258. sagemaker/core/remote_function/checkpoint_location.py +47 -0
  259. sagemaker/core/remote_function/client.py +1285 -0
  260. sagemaker/core/remote_function/core/__init__.py +0 -0
  261. sagemaker/core/remote_function/core/_custom_dispatch_table.py +72 -0
  262. sagemaker/core/remote_function/core/pipeline_variables.py +353 -0
  263. sagemaker/core/remote_function/core/serialization.py +422 -0
  264. sagemaker/core/remote_function/core/stored_function.py +226 -0
  265. sagemaker/core/remote_function/custom_file_filter.py +128 -0
  266. sagemaker/core/remote_function/errors.py +104 -0
  267. sagemaker/core/remote_function/invoke_function.py +172 -0
  268. sagemaker/core/remote_function/job.py +2140 -0
  269. sagemaker/core/remote_function/logging_config.py +38 -0
  270. sagemaker/core/remote_function/runtime_environment/__init__.py +14 -0
  271. sagemaker/core/remote_function/runtime_environment/bootstrap_runtime_environment.py +605 -0
  272. sagemaker/core/remote_function/runtime_environment/mpi_utils_remote.py +252 -0
  273. sagemaker/core/remote_function/runtime_environment/runtime_environment_manager.py +554 -0
  274. sagemaker/core/remote_function/runtime_environment/spark_app.py +18 -0
  275. sagemaker/core/remote_function/spark_config.py +149 -0
  276. sagemaker/core/resource_requirements.py +168 -0
  277. {sagemaker_core/main → sagemaker/core}/resources.py +19098 -10895
  278. sagemaker/core/s3/__init__.py +41 -0
  279. sagemaker/core/s3/client.py +367 -0
  280. sagemaker/core/s3/utils.py +175 -0
  281. sagemaker/core/script_uris.py +93 -0
  282. sagemaker/core/serializers/__init__.py +11 -0
  283. sagemaker/core/serializers/base.py +510 -0
  284. sagemaker/core/serializers/implementations.py +159 -0
  285. sagemaker/core/serializers/utils.py +223 -0
  286. sagemaker/core/serverless_inference_config.py +63 -0
  287. sagemaker/core/session_settings.py +55 -0
  288. sagemaker/core/shapes/__init__.py +3 -0
  289. sagemaker/core/shapes/model_card_shapes.py +159 -0
  290. {sagemaker_core/main → sagemaker/core/shapes}/shapes.py +5810 -1806
  291. sagemaker/core/spark/__init__.py +16 -0
  292. sagemaker/core/spark/defaults.py +16 -0
  293. sagemaker/core/spark/processing.py +1380 -0
  294. sagemaker/core/telemetry/__init__.py +23 -0
  295. sagemaker/core/telemetry/constants.py +84 -0
  296. sagemaker/core/telemetry/telemetry_logging.py +284 -0
  297. sagemaker/core/tools/__init__.py +1 -0
  298. {sagemaker_core → sagemaker/core}/tools/codegen.py +4 -4
  299. {sagemaker_core → sagemaker/core}/tools/constants.py +23 -15
  300. {sagemaker_core → sagemaker/core}/tools/data_extractor.py +1 -1
  301. {sagemaker_core → sagemaker/core}/tools/method.py +1 -1
  302. sagemaker/core/tools/model_card/generate_model_card_from_schema.py +562 -0
  303. {sagemaker_core → sagemaker/core}/tools/resources_codegen.py +165 -98
  304. {sagemaker_core → sagemaker/core}/tools/resources_extractor.py +5 -13
  305. {sagemaker_core → sagemaker/core}/tools/shapes_codegen.py +16 -17
  306. {sagemaker_core → sagemaker/core}/tools/shapes_extractor.py +29 -67
  307. {sagemaker_core → sagemaker/core}/tools/templates.py +39 -17
  308. sagemaker/core/training/__init__.py +14 -0
  309. sagemaker/core/training/configs.py +333 -0
  310. sagemaker/core/training/constants.py +37 -0
  311. sagemaker/core/training/utils.py +77 -0
  312. sagemaker/core/training_compiler/__init__.py +16 -0
  313. sagemaker/core/training_compiler/config.py +197 -0
  314. sagemaker/core/training_compiler_config.py +197 -0
  315. sagemaker/core/transformer.py +793 -0
  316. sagemaker/core/user_agent.py +76 -0
  317. sagemaker/core/utilities/__init__.py +24 -0
  318. sagemaker/core/utilities/cache.py +169 -0
  319. sagemaker/core/utilities/search_expression.py +133 -0
  320. sagemaker/core/utils/__init__.py +48 -0
  321. sagemaker/core/utils/code_injection/__init__.py +0 -0
  322. {sagemaker_core/main → sagemaker/core/utils}/code_injection/codec.py +2 -2
  323. {sagemaker_core/main → sagemaker/core/utils}/code_injection/shape_dag.py +5979 -176
  324. {sagemaker_core/main → sagemaker/core/utils}/exceptions.py +8 -8
  325. sagemaker_core/main/default_configs_helper.py → sagemaker/core/utils/intelligent_defaults_helper.py +5 -6
  326. {sagemaker_core/main → sagemaker/core/utils}/logs.py +1 -2
  327. {sagemaker_core/main → sagemaker/core/utils}/utils.py +27 -22
  328. sagemaker/core/workflow/__init__.py +152 -0
  329. sagemaker/core/workflow/conditions.py +313 -0
  330. sagemaker/core/workflow/entities.py +58 -0
  331. sagemaker/core/workflow/execution_variables.py +89 -0
  332. sagemaker/core/workflow/functions.py +193 -0
  333. sagemaker/core/workflow/parameters.py +222 -0
  334. sagemaker/core/workflow/pipeline_context.py +394 -0
  335. sagemaker/core/workflow/pipeline_definition_config.py +31 -0
  336. sagemaker/core/workflow/properties.py +285 -0
  337. sagemaker/core/workflow/step_outputs.py +65 -0
  338. sagemaker/core/workflow/utilities.py +507 -0
  339. sagemaker/lineage/__init__.py +33 -0
  340. sagemaker/lineage/action.py +28 -0
  341. sagemaker/lineage/artifact.py +28 -0
  342. sagemaker/lineage/context.py +28 -0
  343. sagemaker/lineage/lineage_trial_component.py +28 -0
  344. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/METADATA +28 -9
  345. sagemaker_core-2.1.1.dist-info/RECORD +355 -0
  346. sagemaker_core-2.1.1.dist-info/top_level.txt +1 -0
  347. sagemaker_core/_version.py +0 -3
  348. sagemaker_core/helper/session_helper.py +0 -769
  349. sagemaker_core/resources/__init__.py +0 -1
  350. sagemaker_core/shapes/__init__.py +0 -1
  351. sagemaker_core/tools/__init__.py +0 -1
  352. sagemaker_core-1.0.62.dist-info/RECORD +0 -35
  353. sagemaker_core-1.0.62.dist-info/top_level.txt +0 -1
  354. {sagemaker_core → sagemaker/core/helper}/__init__.py +0 -0
  355. {sagemaker_core/helper → sagemaker/core/huggingface/training_compiler}/__init__.py +0 -0
  356. {sagemaker_core/main → sagemaker/core/jumpstart/factory}/__init__.py +0 -0
  357. {sagemaker_core/main/code_injection → sagemaker/core/jumpstart/hub}/__init__.py +0 -0
  358. {sagemaker_core/main → sagemaker/core/utils}/code_injection/base.py +0 -0
  359. {sagemaker_core/main → sagemaker/core/utils}/code_injection/constants.py +0 -0
  360. {sagemaker_core/main → sagemaker/core/utils}/user_agent.py +0 -0
  361. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/WHEEL +0 -0
  362. {sagemaker_core-1.0.62.dist-info → sagemaker_core-2.1.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,597 @@
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
+ """This module stores filters related to SageMaker JumpStart."""
14
+ from __future__ import absolute_import
15
+ from ast import literal_eval
16
+ from enum import Enum
17
+ from typing import Dict, List, Optional, Union, Any
18
+
19
+ from sagemaker.core.jumpstart.types import JumpStartDataHolderType
20
+
21
+
22
+ class BooleanValues(str, Enum):
23
+ """Enum class for boolean values.
24
+
25
+ This is a status value that an ``Operand`` can resolve to.
26
+ """
27
+
28
+ TRUE = "true"
29
+ FALSE = "false"
30
+ UNKNOWN = "unknown"
31
+ UNEVALUATED = "unevaluated"
32
+
33
+
34
+ class FilterOperators(str, Enum):
35
+ """Enum class for filter operators for JumpStart models."""
36
+
37
+ EQUALS = "equals"
38
+ NOT_EQUALS = "not_equals"
39
+ IN = "in"
40
+ NOT_IN = "not_in"
41
+ INCLUDES = "includes"
42
+ NOT_INCLUDES = "not_includes"
43
+ BEGINS_WITH = "begins_with"
44
+ ENDS_WITH = "ends_with"
45
+
46
+
47
+ class SpecialSupportedFilterKeys(str, Enum):
48
+ """Enum class for special supported filter keys."""
49
+
50
+ TASK = "task"
51
+ FRAMEWORK = "framework"
52
+ MODEL_TYPE = "model_type"
53
+
54
+
55
+ class ProprietaryModelFilterIdentifiers(str, Enum):
56
+ """Enum class for proprietary model filter keys."""
57
+
58
+ PROPRIETARY = "proprietary"
59
+ MARKETPLACE = "marketplace"
60
+
61
+
62
+ FILTER_OPERATOR_STRING_MAPPINGS = {
63
+ FilterOperators.EQUALS: ["===", "==", "equals", "is"],
64
+ FilterOperators.NOT_EQUALS: ["!==", "!=", "not equals", "is not"],
65
+ FilterOperators.IN: ["in"],
66
+ FilterOperators.NOT_IN: ["not in"],
67
+ FilterOperators.INCLUDES: ["includes", "contains"],
68
+ FilterOperators.NOT_INCLUDES: ["not includes", "not contains"],
69
+ FilterOperators.BEGINS_WITH: ["begins with", "starts with"],
70
+ FilterOperators.ENDS_WITH: ["ends with"],
71
+ }
72
+
73
+
74
+ _PAD_ALPHABETIC_OPERATOR = lambda operator: ( # noqa E731
75
+ f" {operator} " if any(character.isalpha() for character in operator) else operator
76
+ )
77
+
78
+ ACCEPTABLE_OPERATORS_IN_PARSE_ORDER = (
79
+ list(
80
+ map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.BEGINS_WITH])
81
+ )
82
+ + list(
83
+ map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.ENDS_WITH])
84
+ )
85
+ + list(
86
+ map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_INCLUDES])
87
+ )
88
+ + list(map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.INCLUDES]))
89
+ + list(
90
+ map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_EQUALS])
91
+ )
92
+ + list(map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_IN]))
93
+ + list(map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.EQUALS]))
94
+ + list(map(_PAD_ALPHABETIC_OPERATOR, FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.IN]))
95
+ )
96
+
97
+
98
+ SPECIAL_SUPPORTED_FILTER_KEYS = set(
99
+ [
100
+ SpecialSupportedFilterKeys.TASK,
101
+ SpecialSupportedFilterKeys.FRAMEWORK,
102
+ ]
103
+ )
104
+
105
+
106
+ class Operand:
107
+ """Operand class for filtering JumpStart content."""
108
+
109
+ def __init__(
110
+ self, unresolved_value: Any, resolved_value: BooleanValues = BooleanValues.UNEVALUATED
111
+ ):
112
+ self.unresolved_value: Any = unresolved_value
113
+ self._resolved_value: BooleanValues = resolved_value
114
+
115
+ def __iter__(self) -> Any:
116
+ """Returns an iterator."""
117
+ yield self
118
+
119
+ def eval(self) -> None:
120
+ """Evaluates operand."""
121
+ return
122
+
123
+ @property
124
+ def resolved_value(self) -> BooleanValues:
125
+ """Getter method for resolved_value."""
126
+ return self._resolved_value
127
+
128
+ @resolved_value.setter
129
+ def resolved_value(self, new_resolved_value: Any) -> None:
130
+ """Setter method for resolved_value. Resolved_value must be of type ``BooleanValues``."""
131
+ if isinstance(new_resolved_value, BooleanValues):
132
+ self._resolved_value = new_resolved_value
133
+ return
134
+ raise RuntimeError(
135
+ "Resolved value must be of type BooleanValues, "
136
+ f"but got type {type(new_resolved_value)}."
137
+ )
138
+
139
+ @staticmethod
140
+ def validate_operand(operand: Any) -> Any:
141
+ """Validate operand and return ``Operand`` object.
142
+
143
+ Args:
144
+ operand (Any): The operand to validate.
145
+
146
+ Raises:
147
+ RuntimeError: If the operand is not of ``Operand`` or ``str`` type.
148
+ """
149
+ if isinstance(operand, str):
150
+ if operand.lower() == BooleanValues.TRUE.lower():
151
+ operand = Operand(operand, resolved_value=BooleanValues.TRUE)
152
+ elif operand.lower() == BooleanValues.FALSE.lower():
153
+ operand = Operand(operand, resolved_value=BooleanValues.FALSE)
154
+ elif operand.lower() == BooleanValues.UNKNOWN.lower():
155
+ operand = Operand(operand, resolved_value=BooleanValues.UNKNOWN)
156
+ else:
157
+ operand = Operand(parse_filter_string(operand))
158
+ elif not issubclass(type(operand), Operand):
159
+ raise RuntimeError(f"Operand '{operand}' is not supported.")
160
+ return operand
161
+
162
+
163
+ class Operator(Operand):
164
+ """Operator class for filtering JumpStart content.
165
+
166
+ An operator in this case corresponds to an operand that is also an operation.
167
+ For example, given the expression ``(True or True) and True``,
168
+ ``(True or True)`` is an operand to an ``And`` expression, but is also itself an
169
+ operator. ``(True or True) and True`` would also be considered an operator.
170
+ """
171
+
172
+ def __init__(
173
+ self,
174
+ resolved_value: BooleanValues = BooleanValues.UNEVALUATED,
175
+ unresolved_value: Any = None,
176
+ ):
177
+ """Initializes ``Operator`` instance.
178
+
179
+ Args:
180
+ resolved_value (BooleanValues): Optional. The resolved value of the operator.
181
+ (Default: BooleanValues.UNEVALUATED).
182
+ unresolved_value (Any): Optional. The unresolved value of the operator.
183
+ (Default: None).
184
+ """
185
+ super().__init__(unresolved_value=unresolved_value, resolved_value=resolved_value)
186
+
187
+ def eval(self) -> None:
188
+ """Evaluates operator."""
189
+ return
190
+
191
+ def __iter__(self) -> Any:
192
+ """Returns an iterator."""
193
+ yield self
194
+
195
+
196
+ class And(Operator):
197
+ """And operator class for filtering JumpStart content."""
198
+
199
+ def __init__(
200
+ self,
201
+ *operands: Union[Operand, str],
202
+ ) -> None:
203
+ """Instantiates And object.
204
+
205
+ Args:
206
+ operand (Operand): Operand for And-ing.
207
+
208
+ Raises:
209
+ RuntimeError: If the operands cannot be validated.
210
+ """
211
+ self.operands: List[Operand] = list(operands) # type: ignore
212
+ for i in range(len(self.operands)):
213
+ self.operands[i] = Operand.validate_operand(self.operands[i])
214
+ super().__init__()
215
+
216
+ def eval(self) -> None:
217
+ """Evaluates operator.
218
+
219
+ Raises:
220
+ RuntimeError: If the operands remain unevaluated after calling ``eval``,
221
+ or if the resolved value isn't a ``BooleanValues`` type.
222
+ """
223
+ incomplete_expression = False
224
+ for operand in self.operands:
225
+ if not issubclass(type(operand), Operand):
226
+ raise RuntimeError(
227
+ f"Operand must be subclass of ``Operand``, but got {type(operand)}"
228
+ )
229
+ if operand.resolved_value == BooleanValues.UNEVALUATED:
230
+ operand.eval()
231
+ if operand.resolved_value == BooleanValues.UNEVALUATED:
232
+ raise RuntimeError(
233
+ "Operand remains unevaluated after calling ``eval`` function."
234
+ )
235
+ if operand.resolved_value == BooleanValues.FALSE:
236
+ self.resolved_value = BooleanValues.FALSE
237
+ return
238
+ if operand.resolved_value == BooleanValues.UNKNOWN:
239
+ incomplete_expression = True
240
+ if not incomplete_expression:
241
+ self.resolved_value = BooleanValues.TRUE
242
+ else:
243
+ self.resolved_value = BooleanValues.UNKNOWN
244
+
245
+ def __iter__(self) -> Any:
246
+ """Returns an iterator."""
247
+ for operand in self.operands:
248
+ yield from operand
249
+ yield self
250
+
251
+
252
+ class Constant(Operator):
253
+ """Constant operator class for filtering JumpStart content."""
254
+
255
+ def __init__(
256
+ self,
257
+ constant: BooleanValues,
258
+ ):
259
+ """Instantiates Constant operator object.
260
+
261
+ Args:
262
+ constant (BooleanValues): Value of constant.
263
+ """
264
+ super().__init__(constant)
265
+
266
+ def eval(self) -> None:
267
+ """Evaluates constant"""
268
+ return
269
+
270
+ def __iter__(self) -> Any:
271
+ """Returns an iterator."""
272
+ yield self
273
+
274
+
275
+ class Identity(Operator):
276
+ """Identity operator class for filtering JumpStart content."""
277
+
278
+ def __init__(
279
+ self,
280
+ operand: Union[Operand, str],
281
+ ):
282
+ """Instantiates Identity object.
283
+
284
+ Args:
285
+ operand (Union[Operand, str]): Operand for identity operation.
286
+ """
287
+ super().__init__()
288
+ self.operand = Operand.validate_operand(operand)
289
+
290
+ def __iter__(self) -> Any:
291
+ """Returns an iterator."""
292
+ yield self
293
+ yield from self.operand
294
+
295
+ def eval(self) -> None:
296
+ """Evaluates operator.
297
+
298
+ Raises:
299
+ RuntimeError: If the operand remains unevaluated after calling ``eval``,
300
+ or if the resolved value isn't a ``BooleanValues`` type.
301
+ """
302
+ if not issubclass(type(self.operand), Operand):
303
+ raise RuntimeError(
304
+ f"Operand must be subclass of ``Operand``, but got {type(self.operand)}"
305
+ )
306
+ if self.operand.resolved_value == BooleanValues.UNEVALUATED:
307
+ self.operand.eval()
308
+ if self.operand.resolved_value == BooleanValues.UNEVALUATED:
309
+ raise RuntimeError("Operand remains unevaluated after calling ``eval`` function.")
310
+ if not isinstance(self.operand.resolved_value, BooleanValues):
311
+ raise RuntimeError(self.operand.resolved_value)
312
+ self.resolved_value = self.operand.resolved_value
313
+
314
+
315
+ class Or(Operator):
316
+ """Or operator class for filtering JumpStart content."""
317
+
318
+ def __init__(
319
+ self,
320
+ *operands: Union[Operand, str],
321
+ ) -> None:
322
+ """Instantiates Or object.
323
+
324
+ Args:
325
+ operands (Operand): Operand for Or-ing.
326
+
327
+ Raises:
328
+ RuntimeError: If the operands cannot be validated.
329
+ """
330
+ self.operands: List[Operand] = list(operands) # type: ignore
331
+ for i in range(len(self.operands)):
332
+ self.operands[i] = Operand.validate_operand(self.operands[i])
333
+ super().__init__()
334
+
335
+ def eval(self) -> None:
336
+ """Evaluates operator.
337
+
338
+ Raises:
339
+ RuntimeError: If the operands remain unevaluated after calling ``eval``,
340
+ or if the resolved value isn't a ``BooleanValues`` type.
341
+ """
342
+ incomplete_expression = False
343
+ for operand in self.operands:
344
+ if not issubclass(type(operand), Operand):
345
+ raise RuntimeError(
346
+ f"Operand must be subclass of ``Operand``, but got {type(operand)}"
347
+ )
348
+ if operand.resolved_value == BooleanValues.UNEVALUATED:
349
+ operand.eval()
350
+ if operand.resolved_value == BooleanValues.UNEVALUATED:
351
+ raise RuntimeError(
352
+ "Operand remains unevaluated after calling ``eval`` function."
353
+ )
354
+ if operand.resolved_value == BooleanValues.TRUE:
355
+ self.resolved_value = BooleanValues.TRUE
356
+ return
357
+ if operand.resolved_value == BooleanValues.UNKNOWN:
358
+ incomplete_expression = True
359
+ if not incomplete_expression:
360
+ self.resolved_value = BooleanValues.FALSE
361
+ else:
362
+ self.resolved_value = BooleanValues.UNKNOWN
363
+
364
+ def __iter__(self) -> Any:
365
+ """Returns an iterator."""
366
+ for operand in self.operands:
367
+ yield from operand
368
+ yield self
369
+
370
+
371
+ class Not(Operator):
372
+ """Not operator class for filtering JumpStart content."""
373
+
374
+ def __init__(
375
+ self,
376
+ operand: Union[Operand, str],
377
+ ) -> None:
378
+ """Instantiates Not object.
379
+
380
+ Args:
381
+ operand (Operand): Operand for Not-ing.
382
+ """
383
+ self.operand: Operand = Operand.validate_operand(operand)
384
+ super().__init__()
385
+
386
+ def eval(self) -> None:
387
+ """Evaluates operator.
388
+
389
+ Raises:
390
+ RuntimeError: If the operand remains unevaluated after calling ``eval``,
391
+ or if the resolved value isn't a ``BooleanValues`` type.
392
+ """
393
+
394
+ if not issubclass(type(self.operand), Operand):
395
+ raise RuntimeError(
396
+ f"Operand must be subclass of ``Operand``, but got {type(self.operand)}"
397
+ )
398
+ if self.operand.resolved_value == BooleanValues.UNEVALUATED:
399
+ self.operand.eval()
400
+ if self.operand.resolved_value == BooleanValues.UNEVALUATED:
401
+ raise RuntimeError("Operand remains unevaluated after calling ``eval`` function.")
402
+ if self.operand.resolved_value == BooleanValues.TRUE:
403
+ self.resolved_value = BooleanValues.FALSE
404
+ return
405
+ if self.operand.resolved_value == BooleanValues.FALSE:
406
+ self.resolved_value = BooleanValues.TRUE
407
+ return
408
+ self.resolved_value = BooleanValues.UNKNOWN
409
+
410
+ def __iter__(self) -> Any:
411
+ """Returns an iterator."""
412
+ yield from self.operand
413
+ yield self
414
+
415
+
416
+ class ModelFilter(JumpStartDataHolderType):
417
+ """Data holder class to store model filters.
418
+
419
+ For a given filter string "task == ic", the key corresponds to
420
+ "task" and the value corresponds to "ic", with the operation being
421
+ "==".
422
+ """
423
+
424
+ __slots__ = ["key", "value", "operator"]
425
+
426
+ def __init__(self, key: str, value: str, operator: str):
427
+ """Instantiates ``ModelFilter`` object.
428
+
429
+ Args:
430
+ key (str): The key in metadata for the model filter.
431
+ value (str): The value of the metadata for the model filter.
432
+ operator (str): The operator used in the model filter.
433
+ """
434
+ self.key = key
435
+ self.value = value
436
+ self.operator = operator
437
+
438
+ def set_key(self, key: str) -> None:
439
+ """Sets the key for the model filter.
440
+
441
+ Args:
442
+ key (str): The key to be set.
443
+ """
444
+ self.key = key
445
+
446
+ def set_value(self, value: str) -> None:
447
+ """Sets the value for the model filter.
448
+
449
+ Args:
450
+ value (str): The value to be set.
451
+ """
452
+ self.value = value
453
+
454
+
455
+ def parse_filter_string(filter_string: str) -> ModelFilter:
456
+ """Parse filter string and return a serialized ``ModelFilter`` object.
457
+
458
+ Args:
459
+ filter_string (str): The filter string to be serialized to an object.
460
+ """
461
+
462
+ for operator in ACCEPTABLE_OPERATORS_IN_PARSE_ORDER:
463
+ split_filter_string = filter_string.split(operator)
464
+ if len(split_filter_string) == 2:
465
+ return ModelFilter(
466
+ key=split_filter_string[0].strip(),
467
+ value=split_filter_string[1].strip(),
468
+ operator=operator.strip(),
469
+ )
470
+ raise ValueError(f"Cannot parse filter string: {filter_string}")
471
+
472
+
473
+ def _negate_boolean(boolean: BooleanValues) -> BooleanValues:
474
+ """Negates boolean expression (False -> True, True -> False)."""
475
+ if boolean == BooleanValues.TRUE:
476
+ return BooleanValues.FALSE
477
+ if boolean == BooleanValues.FALSE:
478
+ return BooleanValues.TRUE
479
+ return boolean
480
+
481
+
482
+ def _evaluate_filter_expression_equals(
483
+ model_filter: ModelFilter,
484
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
485
+ ) -> BooleanValues:
486
+ """Evaluates filter expressions for equals."""
487
+ if cached_model_value is None:
488
+ return BooleanValues.FALSE
489
+ model_filter_value = model_filter.value
490
+ if isinstance(cached_model_value, bool):
491
+ cached_model_value = str(cached_model_value).lower()
492
+ model_filter_value = model_filter.value.lower()
493
+ if str(model_filter_value) == str(cached_model_value):
494
+ return BooleanValues.TRUE
495
+ return BooleanValues.FALSE
496
+
497
+
498
+ def _evaluate_filter_expression_in(
499
+ model_filter: ModelFilter,
500
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
501
+ ) -> BooleanValues:
502
+ """Evaluates filter expressions for string/list in."""
503
+ if cached_model_value is None:
504
+ return BooleanValues.FALSE
505
+ py_obj = model_filter.value
506
+ try:
507
+ py_obj = literal_eval(py_obj)
508
+ try:
509
+ iter(py_obj)
510
+ except TypeError:
511
+ return BooleanValues.FALSE
512
+ except Exception: # pylint: disable=W0703
513
+ pass
514
+ if isinstance(cached_model_value, list):
515
+ return BooleanValues.FALSE
516
+ if cached_model_value in py_obj:
517
+ return BooleanValues.TRUE
518
+ return BooleanValues.FALSE
519
+
520
+
521
+ def _evaluate_filter_expression_includes(
522
+ model_filter: ModelFilter,
523
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
524
+ ) -> BooleanValues:
525
+ """Evaluates filter expressions for string includes."""
526
+ if cached_model_value is None:
527
+ return BooleanValues.FALSE
528
+ filter_value = str(model_filter.value)
529
+ if filter_value in cached_model_value:
530
+ return BooleanValues.TRUE
531
+ return BooleanValues.FALSE
532
+
533
+
534
+ def _evaluate_filter_expression_begins_with(
535
+ model_filter: ModelFilter,
536
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
537
+ ) -> BooleanValues:
538
+ """Evaluates filter expressions for string begins with."""
539
+ if cached_model_value is None:
540
+ return BooleanValues.FALSE
541
+ filter_value = str(model_filter.value)
542
+ if cached_model_value.startswith(filter_value):
543
+ return BooleanValues.TRUE
544
+ return BooleanValues.FALSE
545
+
546
+
547
+ def _evaluate_filter_expression_ends_with(
548
+ model_filter: ModelFilter,
549
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
550
+ ) -> BooleanValues:
551
+ """Evaluates filter expressions for string ends with."""
552
+ if cached_model_value is None:
553
+ return BooleanValues.FALSE
554
+ filter_value = str(model_filter.value)
555
+ if cached_model_value.endswith(filter_value):
556
+ return BooleanValues.TRUE
557
+ return BooleanValues.FALSE
558
+
559
+
560
+ def evaluate_filter_expression( # pylint: disable=too-many-return-statements
561
+ model_filter: ModelFilter,
562
+ cached_model_value: Optional[Union[str, bool, int, float, Dict[str, Any], List[Any]]],
563
+ ) -> BooleanValues:
564
+ """Evaluates model filter with cached model spec value, returns boolean.
565
+
566
+ Args:
567
+ model_filter (ModelFilter): The model filter for evaluation.
568
+ cached_model_value (Any): The value in the model manifest/spec that should be used to
569
+ evaluate the filter.
570
+ """
571
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.EQUALS]:
572
+ return _evaluate_filter_expression_equals(model_filter, cached_model_value)
573
+
574
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_EQUALS]:
575
+ return _negate_boolean(_evaluate_filter_expression_equals(model_filter, cached_model_value))
576
+
577
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.IN]:
578
+ return _evaluate_filter_expression_in(model_filter, cached_model_value)
579
+
580
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_IN]:
581
+ return _negate_boolean(_evaluate_filter_expression_in(model_filter, cached_model_value))
582
+
583
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.INCLUDES]:
584
+ return _evaluate_filter_expression_includes(model_filter, cached_model_value)
585
+
586
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.NOT_INCLUDES]:
587
+ return _negate_boolean(
588
+ _evaluate_filter_expression_includes(model_filter, cached_model_value)
589
+ )
590
+
591
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.BEGINS_WITH]:
592
+ return _evaluate_filter_expression_begins_with(model_filter, cached_model_value)
593
+
594
+ if model_filter.operator in FILTER_OPERATOR_STRING_MAPPINGS[FilterOperators.ENDS_WITH]:
595
+ return _evaluate_filter_expression_ends_with(model_filter, cached_model_value)
596
+
597
+ raise RuntimeError(f"Bad operator: {model_filter.operator}")
@@ -0,0 +1,16 @@
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
+ """This module stores constants related to SageMaker JumpStart Hub."""
14
+ from __future__ import absolute_import
15
+
16
+ LATEST_VERSION_WILDCARD = "*"