:mod:`airflow.contrib.hooks.sagemaker_hook`
===========================================

.. py:module:: airflow.contrib.hooks.sagemaker_hook


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

.. py:class:: LogState

   Bases: :class:`object`

   .. attribute:: STARTING
      :annotation: = 1

      

   .. attribute:: WAIT_IN_PROGRESS
      :annotation: = 2

      

   .. attribute:: TAILING
      :annotation: = 3

      

   .. attribute:: JOB_COMPLETE
      :annotation: = 4

      

   .. attribute:: COMPLETE
      :annotation: = 5

      


.. data:: Position
   

   

.. function:: argmin(arr, f)
   Return the index, i, in arr that minimizes f(arr[i])


.. 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.
   :type current_job_description: dict
   :param prev_job_description: Previous job description, returned from DescribeTrainingJob call.
   :type prev_job_description: dict

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


.. 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
   :type job_description: dict
   :param prev_description: Previous job description from DescribeTrainingJob call
   :type prev_description: dict

   :return: Job status string to be printed.


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

   Bases: :class:`airflow.contrib.hooks.aws_hook.AwsHook`

   Interact with Amazon SageMaker.

   .. attribute:: non_terminal_states
      

      

   .. attribute:: endpoint_non_terminal_states
      

      

   .. attribute:: failed_states
      

      

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

      Tar the local file or directory and upload to s3

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



   
   .. method:: configure_s3_resources(self, config)

      Extract the S3 operations from the configuration and execute them.

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



   
   .. method:: check_s3_url(self, s3url)

      Check if an S3 URL exists

      :param s3url: S3 url
      :type s3url: str
      :rtype: bool



   
   .. method:: check_training_config(self, training_config)

      Check if a training configuration is valid

      :param training_config: training_config
      :type training_config: dict
      :return: None



   
   .. method:: check_tuning_config(self, tuning_config)

      Check if a tuning configuration is valid

      :param tuning_config: tuning_config
      :type tuning_config: dict
      :return: None



   
   .. method:: get_conn(self)

      Establish an AWS connection for SageMaker

      :rtype: :py:class:`SageMaker.Client`



   
   .. method:: get_log_conn(self)

      This method is deprecated.
      Please use :py:meth:`airflow.contrib.hooks.AwsLogsHook.get_conn` instead.



   
   .. method:: log_stream(self, log_group, stream_name, start_time=0, skip=0)

      This method is deprecated.
      Please use :py:meth:`airflow.contrib.hooks.AwsLogsHook.get_log_events` instead.



   
   .. method:: multi_stream_iter(self, 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.
      :type log_group: str
      :param streams: A list of the log stream names. The position of the stream in this list is
          the stream number.
      :type streams: list
      :param positions: A list of pairs of (timestamp, skip) which represents the last record
          read from each stream.
      :type positions: list
      :return: A tuple of (stream number, cloudwatch log event).



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

      Create a training job

      :param config: the config for training
      :type config: dict
      :param wait_for_completion: if the program should keep running until job finishes
      :type wait_for_completion: bool
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: A response to training job creation



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

      Create a tuning job

      :param config: the config for tuning
      :type config: dict
      :param wait_for_completion: if the program should keep running until job finishes
      :type wait_for_completion: bool
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: A response to tuning job creation



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

      Create a transform job

      :param config: the config for transform job
      :type config: dict
      :param wait_for_completion: if the program should keep running until job finishes
      :type wait_for_completion: bool
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: A response to transform job creation



   
   .. method:: create_model(self, config)

      Create a model job

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



   
   .. method:: create_endpoint_config(self, config)

      Create an endpoint config

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



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

      Create an endpoint

      :param config: the config for endpoint
      :type config: dict
      :param wait_for_completion: if the program should keep running until job finishes
      :type wait_for_completion: bool
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: A response to endpoint creation



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

      Update an endpoint

      :param config: the config for endpoint
      :type config: dict
      :param wait_for_completion: if the program should keep running until job finishes
      :type wait_for_completion: bool
      :param check_interval: the time interval in seconds which the operator
          will check the status of any SageMaker job
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: A response to endpoint update



   
   .. method:: describe_training_job(self, name)

      Return the training job info associated with the name

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



   
   .. method:: describe_training_job_with_log(self, 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



   
   .. method:: describe_tuning_job(self, name)

      Return the tuning job info associated with the name

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



   
   .. method:: describe_model(self, name)

      Return the SageMaker model info associated with the name

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



   
   .. method:: describe_transform_job(self, name)

      Return the transform job info associated with the name

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



   
   .. method:: describe_endpoint_config(self, name)

      Return the endpoint config info associated with the name

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



   
   .. method:: describe_endpoint(self, name)

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



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

      Check status of a SageMaker job

      :param job_name: name of the job to check status
      :type job_name: str
      :param key: the key of the response dict
          that points to the state
      :type key: str
      :param describe_function: the function used to retrieve the status
      :type describe_function: python callable
      :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
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :param non_terminal_states: the set of nonterminal states
      :type non_terminal_states: set
      :return: response of describe call after job is done



   
   .. method:: check_training_status_with_log(self, job_name, non_terminal_states, failed_states, wait_for_completion, check_interval, max_ingestion_time)

      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
      :type job_name: str
      :param non_terminal_states: the set of non_terminal states
      :type non_terminal_states: set
      :param failed_states: the set of failed states
      :type failed_states: set
      :param wait_for_completion: Whether to keep looking for new log entries
          until the job completes
      :type wait_for_completion: bool
      :param check_interval: The interval in seconds between polling for new log entries and job completion
      :type check_interval: int
      :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.
      :type max_ingestion_time: int
      :return: None




