From 51533805662cafa045bf4c06819731f29bac8579 Mon Sep 17 00:00:00 2001 From: Daniel Weindl Date: Mon, 21 Jul 2025 14:39:56 +0200 Subject: [PATCH] v2: parameter_file -> parameter_files Adapt to https://github.com/PEtab-dev/PEtab/pull/641. --- petab/schemas/petab_schema.v2.0.0.yaml | 16 ++++++++-------- petab/v2/C.py | 4 ++-- petab/v2/petab1to2.py | 14 ++++++++++++-- petab/v2/problem.py | 2 +- tests/v2/test_problem.py | 2 +- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/petab/schemas/petab_schema.v2.0.0.yaml b/petab/schemas/petab_schema.v2.0.0.yaml index d87a8401..7f1b7443 100644 --- a/petab/schemas/petab_schema.v2.0.0.yaml +++ b/petab/schemas/petab_schema.v2.0.0.yaml @@ -23,14 +23,14 @@ properties: - type: integer description: Version of the PEtab format - parameter_file: - oneOf: - - type: string - - type: array + parameter_files: + type: array description: | - File name (absolute or relative) or URL to PEtab parameter table - containing parameters of all models listed in `problems`. A single - table may be split into multiple files and described as an array here. + List of PEtab parameter files. + items: + type: string + description: | + File name (absolute or relative) or URL to a PEtab parameter table. model_files: type: object @@ -95,7 +95,7 @@ properties: required: - format_version - - parameter_file + - parameter_files - model_files - observable_files - measurement_files diff --git a/petab/v2/C.py b/petab/v2/C.py index 99abf343..02bee5dd 100644 --- a/petab/v2/C.py +++ b/petab/v2/C.py @@ -344,8 +344,8 @@ # YAML #: PEtab version key in the YAML file FORMAT_VERSION = "format_version" -#: Parameter file key in the YAML file -PARAMETER_FILE = "parameter_file" +#: Parameter files key in the YAML file +PARAMETER_FILES = "parameter_files" #: Problems key in the YAML file PROBLEMS = "problems" #: Model files key in the YAML file diff --git a/petab/v2/petab1to2.py b/petab/v2/petab1to2.py index 2b6ec0e3..5a5ac385 100644 --- a/petab/v2/petab1to2.py +++ b/petab/v2/petab1to2.py @@ -96,8 +96,9 @@ def petab_files_1to2(yaml_config: Path | str, output_dir: Path | str): # parameter table parameter_df = v1v2_parameter_df(petab_problem.parameter_df.copy()) - file = yaml_config[v2.C.PARAMETER_FILE] - v2.write_parameter_df(parameter_df, get_dest_path(file)) + v2.write_parameter_df( + parameter_df, get_dest_path(new_yaml_config.parameter_files[0]) + ) # copy files that don't need conversion # (models, visualizations) @@ -294,6 +295,15 @@ def _update_yaml(yaml_config: dict) -> dict: if file_type in problem: yaml_config[file_type] = problem[file_type] del problem[file_type] + del yaml_config[v1.C.PROBLEMS] + + # parameter_file -> parameter_files + if not isinstance( + (par_files := yaml_config.pop(v1.C.PARAMETER_FILE, [])), list + ): + par_files = [par_files] + yaml_config[v2.C.PARAMETER_FILES] = par_files + return yaml_config diff --git a/petab/v2/problem.py b/petab/v2/problem.py index 97684241..10fe1b70 100644 --- a/petab/v2/problem.py +++ b/petab/v2/problem.py @@ -1182,7 +1182,7 @@ class ProblemConfig(BaseModel): # rename to parameter_files in yaml for consistency with other files? # always a list? parameter_files: list[str | AnyUrl] = Field( - default=[], alias=PARAMETER_FILE + default=[], alias=PARAMETER_FILES ) # TODO: consider changing str to Path diff --git a/tests/v2/test_problem.py b/tests/v2/test_problem.py index e616193d..73cc3988 100644 --- a/tests/v2/test_problem.py +++ b/tests/v2/test_problem.py @@ -67,7 +67,7 @@ def test_problem_from_yaml_multiple_files(): """ yaml_config = """ format_version: 2.0.0 - parameter_file: [] + parameter_files: [] condition_files: [conditions1.tsv, conditions2.tsv] measurement_files: [measurements1.tsv, measurements2.tsv] observable_files: [observables1.tsv, observables2.tsv]