print("Best model found so far:")
    pprint(tuning_job_result['BestTrainingJob'])
else:
    print("No training jobs have reported results yet.")

# ### Fetch all results as DataFrame
#
# You can list hyperparameters and objective metrics of all training jobs and pick up the training job with the best objective metric.

# In[ ]:

import pandas as pd

tuner = sagemaker.HyperparameterTuningJobAnalytics(job_name)

full_df = tuner.dataframe()

if len(full_df) > 0:
    df = full_df[full_df['FinalObjectiveValue'] > -float('inf')]
    if len(df) > 0:
        df = df.sort_values('FinalObjectiveValue', ascending=is_minimize)
        print("Number of training jobs with valid objective: %d" % len(df))
        print({
            "lowest": min(df['FinalObjectiveValue']),
            "highest": max(df['FinalObjectiveValue'])
        })
        pd.set_option('display.max_colwidth',
                      -1)  # Don't truncate TrainingJobName
    else:
        print("No training jobs have reported valid results yet.")