-
-
Notifications
You must be signed in to change notification settings - Fork 703
Open
Labels
bugSomething isn't workingSomething isn't working
Description
PyBaMM Version
21.10
Python Version
3.11
Describe the bug
If a function has (optional) keyword arguments, roundtrip serialization does not work
Steps to Reproduce
import pybamm
def func_correct(x):
return 2 * x
def func_incorrect(x, y=1):
return 2 * x
x = 2
func_param = pybamm.FunctionParameter("func", {"x": x})
parameter_values = pybamm.ParameterValues({"func": func_correct})
print("Original with correct function: ", parameter_values.evaluate(func_param))
# 4
serialized = parameter_values.to_json()
parameter_values = pybamm.ParameterValues.from_json(serialized)
print("Deserialized with correct function: ", parameter_values.evaluate(func_param))
# 4
parameter_values = pybamm.ParameterValues({"func": func_incorrect})
print("Original with incorrect function: ", parameter_values.evaluate(func_param))
# 4
serialized = parameter_values.to_json()
parameter_values = pybamm.ParameterValues.from_json(serialized)
print("Deserialized with incorrect function: ", parameter_values.evaluate(func_param))
# fails
### Relevant log output
```shell
Original with correct function: 4.0
Deserialized with correct function: 4.0
Original with incorrect function: 4.0
Traceback (most recent call last):
File "/Users/vsulzer/Code/PyBaMM/src/pybamm/parameters/parameter_values.py", line 680, in process_symbol
return self._processed_symbols[symbol]
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
KeyError: FunctionParameter(-0x53a3f9a2a9835e97, func, children=['2.0'], domains={})
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/vsulzer/Code/PyBaMM/.local/serialization_bug_example.py", line 30, in <module>
print("Deserialized with incorrect function: ", parameter_values.evaluate(func_param))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/vsulzer/Code/PyBaMM/src/pybamm/parameters/parameter_values.py", line 947, in evaluate
processed_symbol = self.process_symbol(symbol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/vsulzer/Code/PyBaMM/src/pybamm/parameters/parameter_values.py", line 685, in process_symbol
processed_symbol = self._process_function_parameter(symbol)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/vsulzer/Code/PyBaMM/src/pybamm/parameters/parameter_values.py", line 871, in _process_function_parameter
inputs = {
^
File "/Users/vsulzer/Code/PyBaMM/src/pybamm/parameters/parameter_values.py", line 871, in <dictcomp>
inputs = {
^
ValueError: zip() argument 2 is shorter than argument 1
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working