An implementation of the BPX battery parameter exchange format in Pydantic.
Features a Pydantic-based parser for JSON files in the BPX format, which validates your file against the schema.
To see how to use BPX with PyBaMM, check out the BPX example repository.
- Python 3+
Create a new virtual environment, or activate an existing one (this example uses the python venv
module, but you could use Anaconda and a conda
environment)
python3 -m venv env
source env/bin/activate
Install the BPX
module from the repository on GitHub
pip install git+https://github.com/pybamm-team/BPX.git
Create a python script similar to that below
import bpx
filename = 'path/to/my/file.json'
my_params = bpx.parse_bpx_file(filename)
my_params
will now be of type BPX
, which acts like a python dataclass with the same attributes as the BPX format. For example, you can print out the initial temperature of the cell using
print('Initial temperature of cell:', my_params.parameterisation.cell.initial_temperature)
Alternatively, you can export the BPX
object as a dictionary and use the string names (aliases) of the parameters from the standard
my_params_dict = my_params.dict(by_alias=True)
print('Initial temperature of cell:', my_params_dict["Parameterisation"]["Cell"]["Initial temperature [K]"])
If you want to pretty print the entire object, you can use the devtools
package to do this (remember to pip install devtools
)
from devtools import pprint
pprint(my_params)
You can convert any Function
objects in BPX
to regular callable Python functions, for example:
positive_electrode_diffusivity = my_params.parameterisation.positive_electrode.diffusivity.to_python_function()
diff_at_one = positive_electrode_diffusivity(1.0)
print('positive electrode diffusivity at x = 1.0:', diff_at_one)
If you want to output the complete JSON schema in order to build a custom tool yourself, you can do so:
print(bpx.BPX.schema_json(indent=2))
According to the pydantic
docs, the generated schemas are compliant with the specifications: JSON Schema Core, JSON Schema Validation and OpenAPI.