File size: 2,110 Bytes
5fb57bc
 
 
 
 
 
 
 
 
 
 
 
 
a1a4d73
 
 
 
5fb57bc
 
 
814f7d2
 
 
 
 
 
 
 
 
 
5fb57bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"""Installed command-line interface for FlowPK workflows."""

from __future__ import annotations

import argparse
import sys
from importlib import import_module
from pathlib import Path
from typing import Sequence

from pff_pk.training.runtime import bootstrap

_COMMANDS = {
    "run": "pff_pk.pipeline.experiment",
    "train": "pff_pk.pipeline.train",
    "posttrain": "pff_pk.pipeline.curriculum",
    "consolidate": "pff_pk.pipeline.consolidate",
}

_EVALUATION_COMMANDS = {
    "annotate-lenuzza-censoring": "pff_pk.commands.annotate_lenuzza_censoring",
    "sample-generation": "pff_pk.commands.generate_empirical_samples",
    "plot-trajectories": "pff_pk.commands.plot_empirical_trajectories_from_samples",
    "plot-vpc": "pff_pk.commands.plot_empirical_vpc_from_samples",
    "plot-tsne": "pff_pk.commands.plot_empirical_tsne",
    "evaluate-generation": "pff_pk.commands.compare_generation_models",
    "evaluate-validation": "pff_pk.commands.evaluate_validation_bank",
    "evaluate-vpc": "pff_pk.commands.evaluate_pharmpy_vpc",
    "upload-vpc": "pff_pk.commands.upload_vpc_artifacts",
    "upload-empirical": "pff_pk.commands.upload_empirical_artifacts",
}


def build_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser(
        prog="pff-pk",
        description="Train, sample, evaluate, plot, and publish FlowPK runs.",
    )
    parser.add_argument(
        "command",
        choices=(*_COMMANDS, *_EVALUATION_COMMANDS),
        help="workflow to run",
    )
    parser.add_argument("arguments", nargs=argparse.REMAINDER)
    return parser


def main(argv: Sequence[str] | None = None) -> None:
    args = build_parser().parse_args(argv)
    bootstrap(Path.cwd())
    if args.command in _COMMANDS:
        module = import_module(_COMMANDS[args.command])
        module.main(args.arguments)
        return
    module = import_module(_EVALUATION_COMMANDS[args.command])
    previous = sys.argv
    try:
        sys.argv = [f"pff-pk {args.command}", *args.arguments]
        module.main()
    finally:
        sys.argv = previous


if __name__ == "__main__":
    main()