11"""Code regarding the PEtab YAML config files"""
22
33import os
4+ from pathlib import Path
45from typing import Any , Dict , Union , Optional , List
56
67import jsonschema
@@ -172,14 +173,16 @@ def write_yaml(yaml_config: Dict[str, Any], filename: str) -> None:
172173 sort_keys = False )
173174
174175
175- def create_problem_yaml (sbml_files : Union [str , List [str ]],
176- condition_files : Union [str , List [str ]],
177- measurement_files : Union [str , List [str ]],
178- parameter_file : str ,
179- observable_files : Union [str , List [str ]],
180- yaml_file : str ,
181- visualization_files : Optional [Union [str , List [str ]]]
182- = None ) -> None :
176+ def create_problem_yaml (
177+ sbml_files : Union [str , List [str ]],
178+ condition_files : Union [str , List [str ]],
179+ measurement_files : Union [str , List [str ]],
180+ parameter_file : str ,
181+ observable_files : Union [str , List [str ]],
182+ yaml_file : str ,
183+ visualization_files : Optional [Union [str , List [str ]]] = None ,
184+ relative_paths : bool = True ,
185+ ) -> None :
183186 """
184187 Create and write default YAML file for a single PEtab problem
185188
@@ -192,6 +195,9 @@ def create_problem_yaml(sbml_files: Union[str, List[str]],
192195 yaml_file: Path to which YAML file should be written
193196 visualization_files: Optional Path to visualization file or list of
194197 such
198+ relative_paths: whether all paths in the YAML file should be relative
199+ to the location of the YAML file. If `False`, then paths are left
200+ unchanged.
195201 """
196202 if isinstance (sbml_files , str ):
197203 sbml_files = [sbml_files ]
@@ -204,6 +210,25 @@ def create_problem_yaml(sbml_files: Union[str, List[str]],
204210 if isinstance (visualization_files , str ):
205211 visualization_files = [visualization_files ]
206212
213+ if relative_paths :
214+ yaml_file_dir = Path (yaml_file ).parent
215+
216+ def get_rel_to_yaml (paths : Union [List [str ], None ]):
217+ if paths is None :
218+ return paths
219+ return [
220+ os .path .relpath (path , start = yaml_file_dir )
221+ for path in paths
222+ ]
223+
224+ sbml_files = get_rel_to_yaml (sbml_files )
225+ condition_files = get_rel_to_yaml (condition_files )
226+ measurement_files = get_rel_to_yaml (measurement_files )
227+ observable_files = get_rel_to_yaml (observable_files )
228+ visualization_files = get_rel_to_yaml (visualization_files )
229+
230+ parameter_file = get_rel_to_yaml ([parameter_file ])[0 ]
231+
207232 problem_dic = {CONDITION_FILES : condition_files ,
208233 MEASUREMENT_FILES : measurement_files ,
209234 SBML_FILES : sbml_files ,
0 commit comments