Source code for qcodes.dataset.experiment_settings

"""Settings that are indirectly related to experiments."""

from __future__ import annotations

from qcodes.dataset.sqlite.connection import ConnectionPlus, path_to_dbfile
from qcodes.dataset.sqlite.queries import get_last_experiment

_default_experiment: dict[str, int | None] = {}


def _set_default_experiment_id(db_path: str, exp_id: int) -> None:
    """
    Sets the default experiment with the exp_id of a created/ loaded
    experiment for the database that this experiment belongs to.

    Args:
        db_path: The database that a created/ loaded experiment belongs to.
        exp_id: The exp_id of a created/ loaded experiment.

    """
    global _default_experiment
    _default_experiment[db_path] = exp_id


def _get_latest_default_experiment_id(db_path: str) -> int | None:
    """
    Gets the latest created or loaded experiment's exp_id. If no experiment is set
    None will be returned.

    Args:
        db_path: Database path.

    Returns:
        The latest created/ loaded experiment's exp_id.

    """
    global _default_experiment
    return _default_experiment.get(db_path, None)


[docs] def reset_default_experiment_id(conn: ConnectionPlus | None = None) -> None: """ Resets the default experiment id to to the last experiment in the db. """ global _default_experiment if conn is None: _default_experiment = {} else: db_path = path_to_dbfile(conn) _default_experiment[db_path] = None
[docs] def get_default_experiment_id(conn: ConnectionPlus) -> int: """ Returns the latest created/ loaded experiment's exp_id as the default experiment. If it is not set the maximum exp_id returned as the default. If no experiment is found in the database, a ValueError is raised. Args: conn: Open connection to the db in question. Returns: exp_id of the default experiment. Raises: ValueError: If no experiment exists in the given db. """ db_path = path_to_dbfile(conn) exp_id = _get_latest_default_experiment_id(db_path) if exp_id is None: exp_id = get_last_experiment(conn) if exp_id is None: raise ValueError( "No experiments found." " You can create one with:" " new_experiment(name, sample_name)" ) return exp_id