Changelog#
Version 3.0.0#
Version 3.0.0 introduces breaking changes compared to the 2.x series. The following changes may require updates to existing configurations and code:
The
ConditionsandEvolvingConditionsclasses have been removed.The callback functionality has been removed from
solve().CSV files now require a
time.scolumn.Column naming conventions have changed from square brackets to dots, e.g.:
CONC.A [mol m-3] -> CONC.A.mol m-3
A unified conditions API is now provided via
set_condition(),set_conditions(), andadd_conditions().
Users upgrading from 2.x should update their input files, analysis scripts, and any direct uses of the old conditions or callback APIs to the new interfaces described above.
JSON Configuration Changes#
The JSON configuration format has been simplified. The old sections
environmental conditions, initial conditions, and evolving conditions
have been replaced with a single unified conditions section.
Old format (2.x):
{
"environmental conditions": {
"temperature": {"initial value [K]": 298.15},
"pressure": {"initial value [Pa]": 101325.0}
},
"initial conditions": {
"filepaths": ["initial_concentrations.csv"]
},
"evolving conditions": {
"filepaths": ["evolving_conditions.csv"]
}
}
New format (3.x):
{
"conditions": {
"data": [
{
"headers": ["time.s", "ENV.temperature.K", "ENV.pressure.Pa"],
"rows": [[0.0, 298.15, 101325.0]]
}
],
"filepaths": ["conditions.csv"]
}
}
CSV Column Naming#
All CSV files must use dot-separated column names with units as the final component:
Python API Changes#
Old API (2.x):
from acom_music_box import MusicBox, Conditions, EvolvingConditions
box = MusicBox()
box.loadJson("config.json")
# Old way to set conditions
box.initial_conditions.temperature = 298.15
box.initial_conditions.concentrations["A"] = 1.0
box.add_evolving_condition(3600, Conditions(temperature=310))
# Old solve with callback
result = box.solve(callback=my_callback)
New API (3.x):
from acom_music_box import MusicBox
box = MusicBox()
box.loadJson("config.json")
# New unified conditions API
box.set_condition(time=0, temperature=298.15, concentrations={"A": 1.0})
box.set_condition(time=3600, temperature=310)
# Or use DataFrame input
import pandas as pd
df = pd.DataFrame({
"time.s": [0, 3600],
"ENV.temperature.K": [298.15, 310],
"CONC.A.mol m-3": [1.0, None]
})
box.set_conditions(df)
# Solve without callback
result = box.solve()