Phantom config files: parse, convert, modify, and generate.
Project description
Phantom config
Phantom config files: parse, convert, modify, and generate.
phantom-config can read Phantom .in
and .setup
files. (They have the same format.) You can, for example:
- modify config values,
- add new variables,
- write the config as a JSON file,
- generate a config file from a dictionary.
Installation
Install phantom-config with pip
pip install phantomconfig
Usage
Basic usage
Import phantom-config as pc
.
>>> import phantomconfig as pc
To read in a Phantom config file
>>> input_file = pc.read_config('prefix.in')
Print a summary
>>> input_file.summary()
The variables, with their values, comment string, and the block they are a member of, are stored in a dictionary accessed by the .config
method.
>>> dtmax = input_file.config['dtmax']
The keys of this dictionary correspond to the variable name, and values are a ConfigVariable
named tuple with the variable name, value, comment, and block.
>>> dtmax.name
>>> dtmax.value
>>> dtmax.comment
>>> dtmax.block
If you like, you can write the Phantom config as a JSON file, and you can read the JSON file.
>>> input_file.write_json('prefix-in.json')
>>> json_file = pc.read_json('prefix-in.json')
Check that the configs are equal
>>> input_file.config == json_file.config
You can add a new variable, remove a variable, and change the value of a variable.
# Add new variable
>>> input_file.add_variable(
... 'new_var',
... 12345678,
... comment='Sets thing',
... block='options controlling things',
... )
# Remove a variable
>>> input_file.remove_variable('dtmax')
# Change the value of a variable
>>> input_file.change_value('dumpfile', 'new_dumpfile_name')
Then you can write the Phantom config file with the modified values.
>>> input_file.write_phantom('new.in')
Examples
Generate a config from a dictionary
You can create a Phantom .setup
file from a Python dictionary. First create the dictionary
>>> setup = {
... 'cs': [cs, 'sound speed', 'gas properties'],
... 'npart': [npart, 'number of particles in x direction', 'gas properties'],
... 'rhozero': [rhozero, 'initial density', 'gas properties'],
... 'ilattice': [ilattice, 'lattice type', 'gas properties'],
... }
Then you can read the dictionary with phantomconfig
, and write to a Phantom .setup
file
>>> setup_config = pc.read_dict(setup)
>>> setup_config.header = ['input file for some particular setup routine']
>>> setup_config.write_phantom('filename.setup')
This writes a file like
# input file for some particular setup routine
# gas properties
cs = 1.000 ! sound speed
npart = 9999 ! number of particles in x direction
rhozero = 0.100 ! initial density
ilattice = 2 ! lattice type
Writing multiple configs
Say you want to write multiple configs, each with a different parameter value. For example, you have a template .in
file and you want to vary the alpha parameter. The following
- reads the template file
- loops over a list of
alpha
values, writing a new.in
file for each value in the list
alphas = [0.1, 0.2, 0.3]
infile = pc.read_config('template.in')
for alpha in alphas:
infile.change_value('alpha', alpha)
infile.write_phantom(f'alpha={alpha}.in')
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for phantomconfig-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41b1aa8ed225337af56b79020d3de596a598d2c4cb23c16c87fe40cf0f70ed75 |
|
MD5 | 9a785e2e4d42ad96040ed8f5f237fd4c |
|
BLAKE2b-256 | cf566fe29cece6dfb6fde7956bba2d90e9ecd2ca89d0b9014f9ce693d680a834 |