Source code for pharmpy.modeling.write_csv

from __future__ import annotations

from pathlib import Path
from typing import Optional, Union

from pharmpy.internals.fs.path import normalize_user_given_path, path_absolute
from pharmpy.model import Model


def create_dataset_path(model: Model, path: Optional[Union[str, Path]] = None) -> Path:
    path = path_absolute(Path("" if path is None else path))

    if path and not path.is_dir():
        return path

    if (di_path := model.datainfo.path) is None:
        filename = f"{model.name}.csv"
    else:
        filename = di_path.with_suffix('.csv').name

    return path / filename


[docs] def write_csv(model: Model, path: Optional[Union[str, Path]] = None, force: bool = False) -> Model: """Write dataset to a csv file and updates the datainfo path Parameters ---------- model : Model Model whose dataset to write to file path : None or str or Path Destination path. Default is to use original path with .csv suffix. force : bool Overwrite file with same path. Default is False. Returns ------- Model Updated model object Examples -------- >>> from pharmpy.modeling import load_example_model, write_csv >>> model = load_example_model("pheno") >>> model = write_csv(model, path="newdataset.csv") # doctest: +SKIP """ if model.dataset is None: raise ValueError("Model has no dataset") if path is not None: path = normalize_user_given_path(path) path = create_dataset_path(model, path) if not force and path.exists(): raise FileExistsError(f'File at {path} already exists.') path = path_absolute(path) model.dataset.to_csv(path, na_rep=model.datainfo.missing_data_token, index=False) model = model.replace(datainfo=model.datainfo.replace(path=path)) return model