Skip to content

Commit

Permalink
Re-introducing model_inventory-based tests (#478)
Browse files Browse the repository at this point in the history
* Re-introducing model representations work.

* Converted to model tests to pytest

* Improved test messages (points at first-failure key)

* Updating model_inventory version and dependencies.

* Improved error messages.

* Updating Model-Representations dependency to tagged version.

* Formatting change: Removing unexpected spaces

* Removing a dependency (trying to resolve a github CI issue)

* Testing against a 3.8 compatible model-inventory.

* esting against a 3.8 compatible model-inventory.

* Updating to dependency to tag
  • Loading branch information
JosephCottam authored Feb 17, 2024
1 parent c59caaf commit 43a585d
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
4 changes: 2 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ install_requires =
numpy
vl-convert-python
pytest
xarray
matplotlib
statsmodels
netCDF4
Expand All @@ -44,7 +43,8 @@ tests =
types-requests
nbval
xmldiff

askem_model_representations@git+https://github.com/DARPA-ASKEM/Model-Representations@ModelInventory_v0.2

[flake8]
max-line-length = 120
exclude = docs, build, dist, .ipynb_checkpoints, .env
Expand Down
60 changes: 60 additions & 0 deletions tests/test_model_representations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import pytest
import requests
from askem_model_representations import model_inventory


def is_satisfactory(inventory):
"""All true/false statements in the invetory need to be true for it to be used.
This removes teh counts
"""
inventory = inventory.copy()
inventory.pop("source", None)
inventory.pop("observables found", None)
return all(inventory.values())


def simplify_inventory(inventory):
inventory = inventory.copy()
to_remove = ["source", "observables found"] + [k for k, v in inventory.items() if v]
for k in to_remove:
inventory.pop(k, None)
return inventory


repo_root = "https://raw.githubusercontent.com/DARPA-ASKEM/Model-Representations/main"
model_files = [
f"{repo_root}/petrinet/examples/flux_typed.json",
f"{repo_root}/petrinet/examples/flux_typed_aug.json",
f"{repo_root}/petrinet/examples/ont_pop_vax.json",
f"{repo_root}/petrinet/examples/sir_flux_span.json",
f"{repo_root}/regnet/examples/lotka_volterra.json",
f"{repo_root}/stockflow/examples/sir.json",
# f"{repo_root}/petrinet/examples/halfar.json",
# f"{repo_root}/petrinet/examples/sir.json",
# f"{repo_root}/petrinet/examples/sir_typed.json",
# f"{repo_root}/petrinet/examples/sir_typed_aug.json",
(
"https://raw.githubusercontent.com/DARPA-ASKEM/simulation-integration"
"/main/data/models/SEIRHD_NPI_Type1_petrinet.json"
),
]


@pytest.mark.parametrize("model_file", model_files)
def test_representations(model_file):
try:
model = requests.get(model_file).json()
except BaseException:
assert False, "Could not load model"
inventory = model_inventory.check_amr(model, summary=True)

keys_to_check = [
"parameter distribution exists",
"parameter dist/value set",
"rate laws present",
"rate law vars defined",
"initial values present",
]

for key in keys_to_check:
assert inventory[key], f"'{key}' check failed in {inventory}"

0 comments on commit 43a585d

Please sign in to comment.