Ejemplo n.º 1
0
def trials(request):
    """
    Lists the trials that the user has run in their project
    """

    config = Mantra.get_config()

    context = {"project_name": config["project_name"]}

    # delete trial option - catch and process
    if request.method == 'POST':
        form = DeleteTrialGroupForm(request.POST)

        if form.is_valid():
            Trial.remove_group_hash_from_contents(
                settings=settings,
                trial_group_hash=form.cleaned_data['trial_group_hash'])

    form = DeleteTrialGroupForm()

    sys.path.append(settings.MANTRA_PROJECT_ROOT)
    trial_group_members, _ = Trial.get_trial_group_members(settings=settings)
    context['trial_groups'] = Trial.get_all_trial_group_metadata(
        settings=settings, trial_group_members=trial_group_members)
    context['trial_groups'].sort(key=lambda item: item['time'], reverse=True)
    context['form'] = form

    return render(request, "trials.html", context)
Ejemplo n.º 2
0
def view_model(request, model_name):
    """
    This view displays a model and its various dependencies and metadatas
    """

    config = Mantra.get_config()

    models_list = Artefact.all(settings=settings, artefacts_folder=config['models_folder'])

    if model_name not in models_list:
        raise Http404("Model does not exist")

    # delete trial option - catch and process
    if request.method == 'POST':
        form = DeleteTrialGroupForm(request.POST)
        
        if form.is_valid():
            Trial.remove_group_hash_from_contents(settings=settings, trial_group_hash=form.cleaned_data['trial_group_hash'])

    form = DeleteTrialGroupForm()

    sys.path.append(settings.MANTRA_PROJECT_ROOT)

    readme_content, readme_exists = CodeBase.get_readme('%s/models/%s' % (settings.MANTRA_PROJECT_ROOT, model_name))
    context = {**Mantra.find_model_metadata(model_name), 'readme_exists': readme_exists, 'readme_content': readme_content}
    context['files'] = CodeBase.get_files('%s/models/%s'% (settings.MANTRA_PROJECT_ROOT, model_name))
    context['directories'] = CodeBase.get_directories('%s/models/%s'% (settings.MANTRA_PROJECT_ROOT, model_name))

    trial_group_members, _ = Trial.get_trial_group_members(settings=settings, model_filter=model_name)
    context['trial_groups'] = Trial.get_all_trial_group_metadata(settings=settings, trial_group_members=trial_group_members)
    context['trial_groups'].sort(key=lambda item: item['time'], reverse=True)
    context['form'] = form

    return render(request, 'view_model.html', context)
Ejemplo n.º 3
0
def view_dataset_codebase(request, dataset_name, path):
    """
    This view displays a dataset codebase and its various dependencies and metadatas
    """

    config = Mantra.get_config()

    data_list = Artefact.all(settings=settings,
                             artefacts_folder=config['data_folder'])

    if dataset_name not in data_list:
        raise Http404("Dataset does not exist")

    # delete trial option - catch and process
    if request.method == 'POST':
        form = DeleteTrialGroupForm(request.POST)

        if form.is_valid():
            Trial.remove_group_hash_from_contents(
                settings=settings,
                trial_group_hash=form.cleaned_data['trial_group_hash'])

    form = DeleteTrialGroupForm()

    # Project readme
    readme_content, readme_exists = CodeBase.get_readme(
        '%s/data/%s' % (settings.MANTRA_PROJECT_ROOT, dataset_name))

    sys.path.append(settings.MANTRA_PROJECT_ROOT)

    context = {
        **Mantra.find_dataset_metadata(dataset_name), 'readme_exists':
        readme_exists,
        'readme_content': readme_content
    }
    context['files'] = CodeBase.get_files(
        '%s/data/%s' % (settings.MANTRA_PROJECT_ROOT, dataset_name))
    context['directories'] = CodeBase.get_directories(
        '%s/data/%s' % (settings.MANTRA_PROJECT_ROOT, dataset_name))

    trial_group_members, model_trials = Trial.get_trial_group_members(
        settings=settings, data_filter=dataset_name)

    context['task_list'] = Task.calculate_task_metadata(settings=settings,
                                                        trials=model_trials)
    context['trial_groups'] = Trial.get_all_trial_group_metadata(
        settings=settings, trial_group_members=trial_group_members)
    context['trial_groups'].sort(key=lambda item: item['time'], reverse=True)
    context['form'] = form

    path = path.rstrip('/')

    codebase_data = CodeBase.get_code_data(
        blob_path='%s/data/%s/%s' %
        (settings.MANTRA_PROJECT_ROOT, dataset_name, path),
        path=path)
    context.update(codebase_data)

    return render(request, 'view_data_codebase.html', context)
Ejemplo n.º 4
0
def view_dataset_task(request, dataset_name, task_name):
    """
    This view shows the dataset module page
    """

    config = Mantra.get_config()

    data_list = Artefact.all(settings=settings, artefacts_folder=config['data_folder'])

    if dataset_name not in data_list:
        raise Http404("Dataset does not exist")

    # delete trial option - catch and process
    if request.method == 'POST':
        form = DeleteTrialGroupForm(request.POST)

        if form.is_valid():
            Trial.remove_group_hash_from_contents(settings=settings, trial_group_hash=form.cleaned_data['trial_group_hash'])

    form = DeleteTrialGroupForm()

    # Project readme
    readme_content, readme_exists = CodeBase.get_readme('%s/data/%s' % (settings.MANTRA_PROJECT_ROOT, dataset_name))

    sys.path.append(settings.MANTRA_PROJECT_ROOT)

    context = {**Mantra.find_dataset_metadata(dataset_name), 'readme_exists': readme_exists, 'readme_content': readme_content}
    context['files'] = CodeBase.get_files('%s/data/%s'% (settings.MANTRA_PROJECT_ROOT, dataset_name))
    context['directories'] = CodeBase.get_directories('%s/data/%s'% (settings.MANTRA_PROJECT_ROOT, dataset_name))

    trial_group_members, model_trials = Trial.get_trial_group_members(settings=settings, data_filter=dataset_name)

    task_trials = [trial for trial in model_trials if trial['task_name'] == task_name]

    trials_with_metadata = []

    for trial in task_trials:
        trial.update({'time': datetime.datetime.utcfromtimestamp(int(str(trial['timestamp'])))})
        try:
            trial['metadata'] = yaml.load(open('%s/trials/%s/trial_metadata.yml' % (settings.MANTRA_PROJECT_ROOT, trial['folder_name']), 'r').read())
            trial['model_metadata'] = Mantra.find_model_metadata(trial['model_name'])
            if 'validation_loss' in trial['metadata']:
                trials_with_metadata.append(trial)
       
        except: # can't load yaml
            continue

    context['task_trials'] = trials_with_metadata
    context['task_trials'].sort(key=lambda item: item['metadata']['validation_loss'], reverse=False)

    context['task_name'] = task_name
    context['task_metadata'] = Mantra.find_task_metadata(task_name)
    
    context['trial_groups'] = Trial.get_all_trial_group_metadata(settings=settings, trial_group_members=trial_group_members)
    context['trial_groups'].sort(key=lambda item: item['time'], reverse=True)
    context['form'] = form

    return render(request, 'view_data_task.html', context)
Ejemplo n.º 5
0
def datasets(request):
    """
    Lists the models that the user has in their project
    """
    config = Mantra.get_config()

    context = {
        "project_name": config["project_name"],
        "datasets": Mantra.get_datasets(limit=False)
    }

    return render(request, "datasets.html", context)
Ejemplo n.º 6
0
def index(request):
    """
    Landing page for the Mantra UI
    """
    config = Mantra.get_config()

    context = {
        "project_name": config["project_name"],
        "trials": Mantra.get_trials(),
    }

    return render(request, "index.html", context)
Ejemplo n.º 7
0
def results(request):
    """
    Lists the trials that the user has run in their project
    """

    config = Mantra.get_config()

    context = {"project_name": config["project_name"]}
    context["results"] = Mantra.get_results(limit=False)

    sys.path.append(settings.MANTRA_PROJECT_ROOT)

    return render(request, "results.html", context)
Ejemplo n.º 8
0
def view_model_codebase(request, model_name, path):
    """
    This view shows the codebase for a model
    """

    # delete trial option - catch and process
    if request.method == 'POST':
        form = DeleteTrialGroupForm(request.POST)

        if form.is_valid():
            Trial.remove_group_hash_from_contents(settings=settings, trial_group_hash=form.cleaned_data['trial_group_hash'])

    form = DeleteTrialGroupForm()

    config = Mantra.get_config()
    models_dir = os.path.join(settings.MANTRA_PROJECT_ROOT, config["models_folder"])
    
    if os.path.isdir(models_dir):
        models_list = [o for o in os.listdir(models_dir) if os.path.isdir(os.path.join(models_dir, o))]
    else:
        models_list = []

    if model_name not in models_list:
        raise Http404("Model does not exist")

    # Project readme
    readme_content, readme_exists = CodeBase.get_readme('%s/models/%s' % (settings.MANTRA_PROJECT_ROOT, model_name))

    sys.path.append(settings.MANTRA_PROJECT_ROOT)

    context = {**Mantra.find_model_metadata(model_name), 'readme_exists': readme_exists, 'readme_content': readme_content}
    context['files'] = CodeBase.get_files('%s/models/%s'% (settings.MANTRA_PROJECT_ROOT, model_name))
    context['directories'] = CodeBase.get_directories('%s/models/%s'% (settings.MANTRA_PROJECT_ROOT, model_name))

    trial_group_members, model_trials = Trial.get_trial_group_members(settings=settings, model_filter=model_name)
    
    context['trial_groups'] = Trial.get_all_trial_group_metadata(settings=settings, trial_group_members=trial_group_members)
    context['trial_groups'].sort(key=lambda item: item['time'], reverse=True)

    context['form'] = form

    path = path.rstrip('/')

    codebase_data = CodeBase.get_code_data(
        blob_path='%s/models/%s/%s' % (settings.MANTRA_PROJECT_ROOT, model_name, path),
        path=path)
    context.update(codebase_data)

    return render(request, 'view_codebase.html', context)