Source code for easyvvuq.db.base

"""Provides a base class for CampaignDBs

"""

__copyright__ = """

    Copyright 2018 Robin A. Richardson, David W. Wright

    This file is part of EasyVVUQ

    EasyVVUQ is free software: you can redistribute it and/or modify
    it under the terms of the Lesser GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    EasyVVUQ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    Lesser GNU General Public License for more details.

    You should have received a copy of the Lesser GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

"""
__license__ = "LGPL"


[docs]class BaseCampaignDB: """Baseclass for all EasyVVUQ CampaignDBs Skeleton for class that provides database access for the campaign. Parameters ---------- location: str or None Location to look for database. new_campaign: bool Does the database need to be initialised as a new campaign. name: str or None Name of the campaign. info: `easyvvuq.data_structs.CampaignInfo` Information defining the campaign. """ def __init__(self, location=None, new_campaign=False, name=None, info=None): pass
[docs] def app(self, name): """ Get app information. Specific applications selected by `name`, otherwise first entry in database 'app' selected. Parameters ---------- name : str or None Name of selected app, if `None` given then first app will be selected. Returns ------- dict: Application information. """ raise NotImplementedError
[docs] def add_app(self, app_info): """ Add application to the 'app' table. Parameters ---------- app_info: AppInfo Application definition. Returns ------- """ raise NotImplementedError
[docs] def add_sampler(self, sampler): """ Add new Sampler to the 'sampler' table. Parameters ---------- sampler: BaseSamplingElement Returns ------- """ raise NotImplementedError
[docs] def update_sampler(self, sampler_id, sampler_element): """ Update the state of the Sampler with id 'sampler_id' to that in the passed 'sampler_element' Parameters ---------- sampler_id: int The id of the sampler in the db to update sampler_element: BaseSamplingElement The sampler whose state should be used as the new state Returns ------- """ raise NotImplementedError
[docs] def resurrect_sampler(self, sampler_id): """ Return the sampler object corresponding to id sampler_id in the database. It is deserialized from the state stored in the database. Parameters ---------- sampler_id: int The id of the sampler to resurrect Returns ------- BaseSamplingElement The 'live' sampler object, deserialized from the state in the db """ raise NotImplementedError
[docs] def resurrect_app(self, app_name): """ Return the 'live' encoder and decoder objects corresponding to the app with name 'app_name' in the database. They are deserialized from the states previously stored in the database. Parameters ---------- app_name: string Name of the app to resurrect Returns ------- BaseEncoder, BaseDecoder, BaseCollationElement The 'live' encoder and decoder objects associated with this app """ raise NotImplementedError
[docs] def add_run(self, run_info=None, prefix='Run_'): """ Add run to the `runs` table in the database. Parameters ---------- run_info: `easyvvuq.data_structs.RunInfo` Contains relevant run fields: params, status (where in the EasyVVUQ workflow is this RunTable), campaign (id number), sample, app prefix: str Prefix for run id Returns ------- """ raise NotImplementedError
[docs] def set_dir_for_run(self, run_name, run_dir, campaign=None, sampler=None): """ Set the 'run_dir' path for the specified run in the database. Parameters ---------- run_name: str Name of run to filter for. run_dir: str Directory path associated to set for this run. campaign: int or None Campaign id to filter for. sampler: int or None Sample id to filter for. Returns ------- """ raise NotImplementedError
[docs] def run(self, run_name, campaign=None, sampler=None): """ Get the information for a specified run. Parameters ---------- run_name: str Name of run to filter for. campaign: int or None Campaign id to filter for. sampler: int or None Sample id to filter for. Returns ------- dict Containing run information (run_name, params, status, sample, campaign, app) """ raise NotImplementedError
[docs] def campaigns(self): """Get list of campaigns for which information is stored in the database. Returns ------- list: Campaign names. """ raise NotImplementedError
[docs] def campaign_dir(self, campaign_name=None): """Get campaign directory for `campaign_name`. Returns ------- str: Path to campaign directory. """ raise NotImplementedError
[docs] def runs(self, campaign=None, sampler=None, status=None, not_status=None): """ A generator to return all run information for selected `campaign` and `sampler`. Parameters ---------- campaign: int or None Campaign id to filter for. sampler: int or None Sampler id to filter for. status: enum(Status) or None Status string to filter for. not_status: enum(Status) or None Exclude runs with this status string Returns ------- dict: Information on each selected run (key = run_name, value = dict of run information fields.), one at a time. """ raise NotImplementedError
[docs] def runs_dir(self, campaign_name=None): """ Get the directory used to store run information for `campaign_name`. Parameters ---------- campaign_name: str Name of the selected campaign. Returns ------- str: Path containing run outputs. """ raise NotImplementedError
[docs] def get_num_runs(self, campaign=None, sampler=None, status=None, not_status=None): """ Returns the number of runs matching the filtering criteria. Parameters ---------- campaign: int or None Campaign id to filter for. sampler: int or None Sampler id to filter for. status: enum(Status) or None Status string to filter for. not_status: enum(Status) or None Exclude runs with this status string Returns ------- int: The number of runs in the database matching the filtering criteria """ raise NotImplementedError
[docs] def get_campaign_id(self, name): """ Return the (database) id corresponding to the campaign with name 'name'. Parameters ---------- name: str Name of the campaign. Returns ------- int: The id of the campaign with the specified name """ raise NotImplementedError
[docs] def get_run_status(self, run_name, campaign=None, sampler=None): """ Return the status (enum) for the run with name 'run_name' (and, optionally, filtering for campaign and sampler by id) Parameters ---------- run_name: str Name of the run campaign: int ID of the desired Campaign sampler: int ID of the desired Sampler Returns ------- status: enum(Status) Status of the run. """ raise NotImplementedError
[docs] def set_run_statuses(self, run_name_list, status): """ Set the specified 'status' (enum) for all runs in the list run_ID_list Parameters ---------- run_name_list: list of str A list of run names run names (format is usually: prefix + int) status: enum(Status) The new status all listed runs should now have Returns ------- """ raise NotImplementedError
[docs] def append_collation_dataframe(self, df, app_id): """ Append the data in dataframe 'df' to that already collated in the database Parameters ---------- df: pandas dataframe The dataframe whose contents need to be appended to the collation store app_id: int The id of this app in the sql database. Used to determine which collation table is appended to. Returns ------- """ raise NotImplementedError
[docs] def get_collation_dataframe(self, app_id): """ Returns a dataframe containing the full collated results stored in this database i.e. the total of what was added with the append_collation_dataframe() method. Parameters ---------- app_id: int The id of this app in the sql database. Used to determine which collation table is returned. Returns ------- df: pandas dataframe The dataframe with all contents that were appended to the table corresponding to this app_id. """ raise NotImplementedError