diff --git a/setup.cfg b/setup.cfg index 169b53edc..44979fd6b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,7 +17,6 @@ install_requires = numpy vl-convert-python pytest - xarray matplotlib statsmodels netCDF4 @@ -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 diff --git a/tests/test_model_representations.py b/tests/test_model_representations.py new file mode 100644 index 000000000..982e7bf9b --- /dev/null +++ b/tests/test_model_representations.py @@ -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}"