Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 1500 - Print parameter info by submodel #3628

Closed
wants to merge 34 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
917a8d1
Add "by_submodel" feature and modify docstring
cringeyburger Dec 17, 2023
58586de
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Dec 17, 2023
d1513b8
Added line in CHANGELOG.md
cringeyburger Dec 17, 2023
699c329
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Dec 21, 2023
5d8c1fc
Implemented error handling if `get_parameter_info` method is used dir…
cringeyburger Dec 21, 2023
e4c05df
Implement changes to fix problem: Keep a track of what variables were…
cringeyburger Dec 21, 2023
27e7554
Implement changes to fix problem: Keep a track of what variables were…
cringeyburger Dec 21, 2023
bba8061
Created object `self.variables_by_submodel` which contains submodel's…
cringeyburger Dec 24, 2023
4ae39a5
Removed redundant comments.
cringeyburger Dec 24, 2023
087ba1b
Merge branch 'develop' into issue-1500-print-parameter-info-by-submodel
cringeyburger Dec 29, 2023
6c6b996
style: pre-commit fixes
pre-commit-ci[bot] Dec 29, 2023
5c22f90
Implemented "NotImplementedError" when user tries to use "get_paramet…
cringeyburger Dec 29, 2023
f5d5bf7
Implemented "NotImplementedError" when user tries to use "get_paramet…
cringeyburger Dec 29, 2023
c643b53
Updated Docstring of "get_parameter_info"
cringeyburger Dec 31, 2023
a792f49
Added Test Case for "NotImplementedError" when "get_parameter_info" o…
cringeyburger Jan 1, 2024
f0b6401
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Jan 3, 2024
2a156f7
Renamed variables, updated test, updated docstring
cringeyburger Jan 3, 2024
c23a55d
Added "_find_symbols_by_submodel" method and modified "get_parameter_…
cringeyburger Jan 4, 2024
d77b7cc
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Jan 13, 2024
30f66d5
Optimised "print_parameter_info" by simplification, improved readabil…
cringeyburger Jan 13, 2024
78c3785
Removed "calculate_max_lengths" and "format_table_row" from being nes…
cringeyburger Jan 15, 2024
b636650
Tests for "get_parameter_info" for both "by_submodel=False" and "by_s…
cringeyburger Jan 15, 2024
42a7fae
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Jan 21, 2024
c7ef815
Removed duplicate test in "test_base_submodel" for when "get_paramete…
cringeyburger Jan 21, 2024
7d3fb83
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Feb 1, 2024
a600580
added `test_get_parameter_info_submodel` test using custom model
cringeyburger Feb 1, 2024
f3ad7c4
added `test_print_parameter_info` and `test_print_parameter_info_subm…
cringeyburger Feb 3, 2024
29358f4
Merge branch 'develop' into issue-1500-print-parameter-info-by-submodel
cringeyburger Feb 3, 2024
77a126d
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Feb 11, 2024
be88384
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Feb 17, 2024
f1851e9
Modified `test_get_parameter_info_submodel` to include edge cases
cringeyburger Feb 17, 2024
77bbb0b
Merge branch 'develop' into issue-1500-print-parameter-info-by-submodel
rtimms Feb 20, 2024
70aef8f
Merge branch 'pybamm-team:develop' into issue-1500-print-parameter-in…
cringeyburger Feb 25, 2024
ae0737b
Merge branch 'develop' into issue-1500-print-parameter-info-by-submodel
cringeyburger Feb 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Tests for "get_parameter_info" for both "by_submodel=False" and "by_s…
…ubmodel=True"
cringeyburger committed Jan 15, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit b6366506a3ca68ae16b06885a2fd44a19f051c67
58 changes: 58 additions & 0 deletions tests/unit/test_models/test_base_model.py
Original file line number Diff line number Diff line change
@@ -160,6 +160,64 @@ def test_read_parameters(self):
}
model.print_parameter_info()

def test_get_parameter_info(self):
model = pybamm.BaseModel()
a = pybamm.InputParameter("a")
b = pybamm.InputParameter("b", "test")
c = pybamm.InputParameter("c")
d = pybamm.InputParameter("d")
e = pybamm.InputParameter("e")
f = pybamm.InputParameter("f")
g = pybamm.Parameter("g")
h = pybamm.Parameter("h")
i = pybamm.Parameter("i")

u = pybamm.Variable("u")
v = pybamm.Variable("v")
model.rhs = {u: -u * a}
model.algebraic = {v: v - b}
model.initial_conditions = {u: c, v: d}
model.events = [pybamm.Event("u=e", u - e)]
model.variables = {"v+f+i": v + f + i}
model.boundary_conditions = {
u: {"left": (g, "Dirichlet"), "right": (0, "Neumann")},
v: {"left": (0, "Dirichlet"), "right": (h, "Neumann")},
}

parameter_info = model.get_parameter_info()
self.assertEqual(parameter_info["a"][1], "InputParameter")
self.assertEqual(parameter_info["b"][1], "InputParameter in ['test']")
self.assertIn("c", parameter_info)
self.assertIn("d", parameter_info)
self.assertIn("e", parameter_info)
self.assertIn("f", parameter_info)
self.assertEqual(parameter_info["g"][1], "Parameter")
self.assertIn("h", parameter_info)
self.assertIn("i", parameter_info)

def test_get_parameter_info_submodel(self):
model = pybamm.lithium_ion.SPM()
submodel = pybamm.lithium_ion.SPM().submodels["electrolyte diffusion"]
parameter_info = model.get_parameter_info(by_submodel=True)

expected_error_message = "Cannot use get_parameter_info"

with self.assertRaisesRegex(NotImplementedError, expected_error_message):
submodel.get_parameter_info(by_submodel=True)

with self.assertRaisesRegex(NotImplementedError, expected_error_message):
submodel.get_parameter_info(by_submodel=False)

self.assertIn("Current variable [A]", parameter_info["external circuit"])
self.assertEqual(parameter_info["Negative interface utilisation"], {})
self.assertEqual(
parameter_info["external circuit"]["Electrode width [m]"][1], "Parameter"
)
self.assertEqual(
parameter_info["electrolyte transport efficiency"]["Separator porosity"][1],
"FunctionParameter with inputs(s) 'Through-cell distance (x) [m]'",
)

def test_read_input_parameters(self):
# Read input parameters from different parts of the model
model = pybamm.BaseModel()

Unchanged files with check annotations Beta

submodel_info = {}
for var_name, var_symbol in submodel_vars.items():
if isinstance(var_symbol, pybamm.Parameter):
submodel_info[var_name] = (var_symbol, "Parameter")

Check warning on line 443 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L443

Added line #L443 was not covered by tests
elif isinstance(var_symbol, pybamm.InputParameter):
if not var_symbol.domain:
submodel_info[var_name] = (var_symbol, "InputParameter")

Check warning on line 446 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L445-L446

Added lines #L445 - L446 were not covered by tests
else:
submodel_info[var_name] = (

Check warning on line 448 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L448

Added line #L448 was not covered by tests
var_symbol,
f"InputParameter in {var_symbol.domain}",
)
pybamm.InputParameter, submodel_name
)
for input_param in input_parameters:
if not input_param.domain:
submodel_info[input_param.name] = (

Check warning on line 470 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L469-L470

Added lines #L469 - L470 were not covered by tests
input_param,
"InputParameter",
)
else:
submodel_info[input_param.name] = (

Check warning on line 475 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L475

Added line #L475 was not covered by tests
input_param,
f"InputParameter in {input_param.domain}",
)
"""
if by_submodel:
parameter_info = self.get_parameter_info(by_submodel=True)
for submodel_name, submodel_vars in parameter_info.items():
if not submodel_vars:
print(f"'{submodel_name}' submodel parameters: \nNo parameters\n")

Check warning on line 584 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L581-L584

Added lines #L581 - L584 were not covered by tests
else:
print(f"'{submodel_name}' submodel parameters:")
(

Check warning on line 587 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L586-L587

Added lines #L586 - L587 were not covered by tests
max_param_name_length,
max_param_type_length,
) = self._calculate_max_lengths(submodel_vars)
table = [

Check warning on line 592 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L592

Added line #L592 was not covered by tests
f"| {'Parameter':<{max_param_name_length}} | {'Type of parameter':<{max_param_type_length}} |",
f"| {'=' * max_param_name_length} | {'=' * max_param_type_length} |",
]
for param, param_type in submodel_vars.values():
param_name = getattr(param, "name", str(param))
table.extend(

Check warning on line 599 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L597-L599

Added lines #L597 - L599 were not covered by tests
self._format_table_row(
param_name,
param_type,
)
)
print("\n".join(table) + "\n")

Check warning on line 608 in pybamm/models/base_model.py

Codecov / codecov/patch

pybamm/models/base_model.py#L608

Added line #L608 was not covered by tests
else:
info = self.get_parameter_info()