Development#

This document targets developers who want to contribute to the project’s core.

        graph TD
    subgraph _core
        base_modules
        core_implementations
        registry
    end

    subgraph runners
        SlurmRunner
        StandaloneRunner
    end

    subgraph installers
        SlurmInstaller
        StandaloneInstaller
    end

    subgraph systems
        SlurmSystem
        StandaloneSystem
    end

    installers --> _core
    runners --> _core
    systems --> _core
    

Core Modules#

We use import-linter to ensure no core modules import higher level modules.

Registry object is a singleton that holds implementation mappings. Users can register their own implementations to the registry or replace the default implementations.

Runners#

TBD

Installers#

TBD

Systems#

TBD

Cache#

Some prerequisites can be installed: docker images, git repos with executable scripts, etc. All such “installables” are kept under System’s install_path.

Installables are shared among all tests. So if any number of tests use the same installable, it is installed only once for a particular System TOML.

        classDiagram
    class Installable {
        <<abstract>>
        + __eq__(other: object)
        + __hash__()
    }

    class DockerImage {
        + url: str
        + install_path: str | Path
    }

    class GitRepo {
        + git_url: str
        + commit_hash: str
        + install_path: Path
    }

    class PythonExecutable {
        + git_repo: GitRepo
        + venv_path: Path
    }

    Installable <|-- DockerImage
    Installable <|-- GitRepo
    Installable <|-- PythonExecutable
    PythonExecutable --> GitRepo

    class BaseInstaller {
        <<abstract>>
        + install(items: Iterable[Installable])
        + uninstall(items: Iterable[Installable])
        + is_installed(items: Iterable[Installable]) -> bool

        * install_one(item: Installable)
        * uninstall_one(item: Installable)
        * is_installed_one(item: Installable) -> bool
    }

    BaseInstaller <|-- SlurmInstaller
    BaseInstaller <|-- StandaloneInstaller