:py:mod:`airflow.providers.amazon.aws.hooks.sagemaker`
======================================================

.. py:module:: airflow.providers.amazon.aws.hooks.sagemaker


Module Contents
---------------

Classes
~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.sagemaker.LogState
   airflow.providers.amazon.aws.hooks.sagemaker.SageMakerHook



Functions
~~~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.sagemaker.argmin
   airflow.providers.amazon.aws.hooks.sagemaker.secondary_training_status_changed
   airflow.providers.amazon.aws.hooks.sagemaker.secondary_training_status_message



Attributes
~~~~~~~~~~

.. autoapisummary::

   airflow.providers.amazon.aws.hooks.sagemaker.Position


.. py:class:: LogState

   Enum-style class holding all possible states of CloudWatch log streams.
   https://sagemaker.readthedocs.io/en/stable/session.html#sagemaker.session.LogState

   .. py:attribute:: STARTING
      :annotation: = 1

      

   .. py:attribute:: WAIT_IN_PROGRESS
      :annotation: = 2

      

   .. py:attribute:: TAILING
      :annotation: = 3

      

   .. py:attribute:: JOB_COMPLETE
      :annotation: = 4

      

   .. py:attribute:: COMPLETE
      :annotation: = 5

      


.. py:data:: Position
   

   

.. py:function:: argmin(arr, f)

   Return the index, i, in arr that minimizes f(arr[i])


.. py:function:: secondary_training_status_changed(current_job_description, prev_job_description)

   Returns true if training job's secondary status message has changed.

   :param current_job_description: Current job description, returned from DescribeTrainingJob call.
   :param prev_job_description: Previous job description, returned from DescribeTrainingJob call.

   :return: Whether the secondary status message of a training job changed or not.


.. py:function:: secondary_training_status_message(job_description, prev_description)

   Returns a string contains start time and the secondary training job status message.

   :param job_description: Returned response from DescribeTrainingJob call
   :param prev_description: Previous job description from DescribeTrainingJob call

   :return: Job status string to be printed.


.. py:class:: SageMakerHook(*args, **kwargs)

   Bases: :py:obj:`airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   Interact with Amazon SageMaker.

   Additional arguments (such as ``aws_conn_id``) may be specified and
   are passed down to the underlying AwsBaseHook.

   .. seealso::
       :class:`~airflow.providers.amazon.aws.hooks.base_aws.AwsBaseHook`

   .. py:attribute:: non_terminal_states
      

      

   .. py:attribute:: endpoint_non_terminal_states
      

      

   .. py:attribute:: failed_states
      

      

   .. py:method:: tar_and_s3_upload(path, key, bucket)

      Tar the local file or directory and upload to s3

      :param path: local file or directory
      :param key: s3 key
      :param bucket: s3 bucket
      :return: None


   .. py:method:: configure_s3_resources(config)

      Extract the S3 operations from the configuration and execute them.

      :param config: config of SageMaker operation
      :rtype: dict


   .. py:method:: check_s3_url(s3url)

      Check if an S3 URL exists

      :param s3url: S3 url
      :rtype: bool


   .. py:method:: check_training_config(training_config)

      Check if a training configuration is valid

      :param training_config: training_config
      :return: None


   .. py:method:: check_tuning_config(tuning_config)

      Check if a tuning configuration is valid

      :param tuning_config: tuning_config
      :return: None


   .. py:method:: multi_stream_iter(log_group, streams, positions=None)

      Iterate over the available events coming from a set of log streams in a single log group
      interleaving the events from each stream so they're yielded in timestamp order.

      :param log_group: The name of the log group.
      :param streams: A list of the log stream names. The position of the stream in this list is
          the stream number.
      :param positions: A list of pairs of (timestamp, skip) which represents the last record
          read from each stream.
      :return: A tuple of (stream number, cloudwatch log event).


   .. py:method:: create_training_job(config, wait_for_completion = True, print_log = True, check_interval = 30, max_ingestion_time = None)

      Starts a model training job. After training completes, Amazon SageMaker saves
      the resulting model artifacts to an Amazon S3 location that you specify.

      :param config: the config for training
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to training job creation


   .. py:method:: create_tuning_job(config, wait_for_completion = True, check_interval = 30, max_ingestion_time = None)

      Starts a hyperparameter tuning job. A hyperparameter tuning job finds the
      best version of a model by running many training jobs on your dataset using
      the algorithm you choose and values for hyperparameters within ranges that
      you specify. It then chooses the hyperparameter values that result in a model
      that performs the best, as measured by an objective metric that you choose.

      :param config: the config for tuning
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to tuning job creation


   .. py:method:: create_transform_job(config, wait_for_completion = True, check_interval = 30, max_ingestion_time = None)

      Starts a transform job. A transform job uses a trained model to get inferences
      on a dataset and saves these results to an Amazon S3 location that you specify.

      :param config: the config for transform job
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to transform job creation


   .. py:method:: create_processing_job(config, wait_for_completion = True, check_interval = 30, max_ingestion_time = None)

      Use Amazon SageMaker Processing to analyze data and evaluate machine learning
      models on Amazon SageMaker. With Processing, you can use a simplified, managed
      experience on SageMaker to run your data processing workloads, such as feature
      engineering, data validation, model evaluation, and model interpretation.

      :param config: the config for processing job
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to transform job creation


   .. py:method:: create_model(config)

      Creates a model in Amazon SageMaker. In the request, you name the model and
      describe a primary container. For the primary container, you specify the Docker
      image that contains inference code, artifacts (from prior training), and a custom
      environment map that the inference code uses when you deploy the model for predictions.

      :param config: the config for model
      :return: A response to model creation


   .. py:method:: create_endpoint_config(config)

      Creates an endpoint configuration that Amazon SageMaker hosting
      services uses to deploy models. In the configuration, you identify
      one or more models, created using the CreateModel API, to deploy and
      the resources that you want Amazon SageMaker to provision.

      .. seealso::
           :class:`~airflow.providers.amazon.aws.hooks.sagemaker.SageMakerHook.create_model`
           :class:`~airflow.providers.amazon.aws.hooks.sagemaker.SageMakerHook.create_endpoint`

      :param config: the config for endpoint-config
      :return: A response to endpoint config creation


   .. py:method:: create_endpoint(config, wait_for_completion = True, check_interval = 30, max_ingestion_time = None)

      When you create a serverless endpoint, SageMaker provisions and manages
      the compute resources for you. Then, you can make inference requests to
      the endpoint and receive model predictions in response. SageMaker scales
      the compute resources up and down as needed to handle your request traffic.

      Requires an Endpoint Config.
       .. seealso::
           :class:`~airflow.providers.amazon.aws.hooks.sagemaker.SageMakerHook.create_endpoint_config`


      :param config: the config for endpoint
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to endpoint creation


   .. py:method:: update_endpoint(config, wait_for_completion = True, check_interval = 30, max_ingestion_time = None)

      Deploys the new EndpointConfig specified in the request, switches to using
      newly created endpoint, and then deletes resources provisioned for the
      endpoint using the previous EndpointConfig (there is no availability loss).

      :param config: the config for endpoint
      :param wait_for_completion: if the program should keep running until job finishes
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: A response to endpoint update


   .. py:method:: describe_training_job(name)

      Return the training job info associated with the name

      :param name: the name of the training job
      :return: A dict contains all the training job info


   .. py:method:: describe_training_job_with_log(job_name, positions, stream_names, instance_count, state, last_description, last_describe_job_call)

      Return the training job info associated with job_name and print CloudWatch logs


   .. py:method:: describe_tuning_job(name)

      Return the tuning job info associated with the name

      :param name: the name of the tuning job
      :return: A dict contains all the tuning job info


   .. py:method:: describe_model(name)

      Return the SageMaker model info associated with the name

      :param name: the name of the SageMaker model
      :return: A dict contains all the model info


   .. py:method:: describe_transform_job(name)

      Return the transform job info associated with the name

      :param name: the name of the transform job
      :return: A dict contains all the transform job info


   .. py:method:: describe_processing_job(name)

      Return the processing job info associated with the name

      :param name: the name of the processing job
      :return: A dict contains all the processing job info


   .. py:method:: describe_endpoint_config(name)

      Return the endpoint config info associated with the name

      :param name: the name of the endpoint config
      :return: A dict contains all the endpoint config info


   .. py:method:: describe_endpoint(name)

      :param name: the name of the endpoint
      :return: A dict contains all the endpoint info


   .. py:method:: check_status(job_name, key, describe_function, check_interval, max_ingestion_time = None, non_terminal_states = None)

      Check status of a SageMaker job

      :param job_name: name of the job to check status
      :param key: the key of the response dict
          that points to the state
      :param describe_function: the function used to retrieve the status
      :param args: the arguments for the function
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :param non_terminal_states: the set of nonterminal states
      :return: response of describe call after job is done


   .. py:method:: check_training_status_with_log(job_name, non_terminal_states, failed_states, wait_for_completion, check_interval, max_ingestion_time = None)

      Display the logs for a given training job, optionally tailing them until the
      job is complete.

      :param job_name: name of the training job to check status and display logs for
      :param non_terminal_states: the set of non_terminal states
      :param failed_states: the set of failed states
      :param wait_for_completion: Whether to keep looking for new log entries
          until the job completes
      :param check_interval: The interval in seconds between polling for new log entries and job completion
      :param max_ingestion_time: the maximum ingestion time in seconds. Any
          SageMaker jobs that run longer than this will fail. Setting this to
          None implies no timeout for any SageMaker job.
      :return: None


   .. py:method:: list_training_jobs(name_contains = None, max_results = None, **kwargs)

      This method wraps boto3's `list_training_jobs`. The training job name and max results are configurable
      via arguments. Other arguments are not, and should be provided via kwargs. Note boto3 expects these in
      CamelCase format, for example:

      .. code-block:: python

          list_training_jobs(name_contains="myjob", StatusEquals="Failed")

      .. seealso::
          https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.list_training_jobs

      :param name_contains: (optional) partial name to match
      :param max_results: (optional) maximum number of results to return. None returns infinite results
      :param kwargs: (optional) kwargs to boto3's list_training_jobs method
      :return: results of the list_training_jobs request


   .. py:method:: list_transform_jobs(name_contains = None, max_results = None, **kwargs)

      This method wraps boto3's `list_transform_jobs`.
      The transform job name and max results are configurable via arguments.
      Other arguments are not, and should be provided via kwargs. Note boto3 expects these in
      CamelCase format, for example:

      .. code-block:: python

          list_transform_jobs(name_contains="myjob", StatusEquals="Failed")

      .. seealso::
          https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.list_transform_jobs

      :param name_contains: (optional) partial name to match
      :param max_results: (optional) maximum number of results to return. None returns infinite results
      :param kwargs: (optional) kwargs to boto3's list_transform_jobs method
      :return: results of the list_transform_jobs request


   .. py:method:: list_processing_jobs(**kwargs)

      This method wraps boto3's `list_processing_jobs`. All arguments should be provided via kwargs.
      Note boto3 expects these in CamelCase format, for example:

      .. code-block:: python

          list_processing_jobs(NameContains="myjob", StatusEquals="Failed")

      .. seealso::
          https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.list_processing_jobs

      :param kwargs: (optional) kwargs to boto3's list_training_jobs method
      :return: results of the list_processing_jobs request


   .. py:method:: find_processing_job_by_name(processing_job_name)

      Query processing job by name


   .. py:method:: delete_model(model_name)

      Delete SageMaker model

      :param model_name: name of the model



