Skip to content

Commit

Permalink
multidict to the rescue for duplicate var names
Browse files Browse the repository at this point in the history
  • Loading branch information
wpbonelli committed Oct 3, 2024
1 parent c34e146 commit 5b2e257
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 13 deletions.
8 changes: 4 additions & 4 deletions autotest/test_createpackages.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,17 +80,17 @@ def compare_ast(
t1 = type(node1)
t2 = type(node2)
if t1 is not t2:
print(f"[type mismatch] {t1} != {t2}")
print(f"type mismatch: {t1} != {t2}")
return False

if t1 is ClassDef:
assert t2 is ClassDef
assert node1.name == node2.name
for base1, base2 in zip(node1.bases, node2.bases):
assert base1.attr == base2.id # hack..
assert base1.id == base2.id

body1, body2 = node1.body, node2.body
assert len(body1) == len(body2), f"bodies don't match in {node1.name}"
assert len(body1) == len(body2), f"body mismatch in {node1.name}"

for b1, b2 in zip(body1, body2):
if isinstance(b1, Assign):
Expand All @@ -100,7 +100,7 @@ def compare_ast(
diff = b1tgts ^ b2tgts
if any(diff):
warn(
f"targets don't match for assignment in {node1.name}\n"
f"assignment targets don't match in {node1.name}\n"
f"=> symmetric difference:\n{pformat(diff)}\n"
f"=> prev - test:\n{pformat(b1tgts - b2tgts)}\n"
f"=> test - prev:\n{pformat(b2tgts - b1tgts)}\n"
Expand Down
23 changes: 14 additions & 9 deletions flopy/mf6/utils/createpackages.py
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@
from warnings import warn

import numpy as np
from boltons.dictutils import OMD
from jinja2 import Environment, PackageLoader
from modflow_devtools.misc import run_cmd
from numpy.typing import ArrayLike, NDArray
Expand Down Expand Up @@ -365,13 +366,14 @@ class Dfn(UserDict):

def __init__(
self,
variables: Dict[str, Dict[str, str]],
variables: Iterable[Tuple[str, Dict[str, Any]]],
name: Optional[DfnName] = None,
metadata: Optional[Metadata] = None,
):
super().__init__(variables)
self.omd = OMD(variables)
self.name = name
self.metadata = metadata
super().__init__(self.omd)


Dfns = Dict[str, Dfn]
Expand All @@ -383,7 +385,7 @@ def load_dfn(f, name: Optional[DfnName] = None) -> Dfn:
"""

meta = None
vars_ = dict()
vars_ = list()
var = dict()

for line in f:
Expand Down Expand Up @@ -417,7 +419,8 @@ def load_dfn(f, name: Optional[DfnName] = None) -> Dfn:
# block of attributes
if not any(line):
if any(var):
vars_[var["name"]] = var
n = var["name"]
vars_.append((n, var))
var = dict()
continue

Expand All @@ -432,7 +435,8 @@ def load_dfn(f, name: Optional[DfnName] = None) -> Dfn:

# add the final parameter
if any(var):
vars_[var["name"]] = var
n = var["name"]
vars_.append((n, var))

return Dfn(variables=vars_, name=name, metadata=meta)

Expand Down Expand Up @@ -757,7 +761,7 @@ def _parent() -> Optional[str]:
parent = _parent()

def _convert(
var: Dict[str, str],
var: Dict[str, Any],
wrap: bool = False,
) -> Var:
"""
Expand Down Expand Up @@ -796,6 +800,7 @@ def _convert(
children = None
is_record = False
class_attr = var.get("class_attr", False)
init_build = var.get("init_build", True)

def _description(descr: str) -> str:
"""
Expand Down Expand Up @@ -1074,7 +1079,7 @@ def _is_implicit_scalar_record():
default=default,
children=children,
init_param=True,
init_build=True,
init_build=init_build,
class_attr=class_attr,
)

Expand Down Expand Up @@ -1576,7 +1581,7 @@ def _metadata() -> List[Metadata]:
Python, consolidating nested types, etc.
"""

def _fmt_var(var: Var) -> List[str]:
def _fmt_var(var: Union[Var, List[Var]]) -> List[str]:
exclude = ["longname", "description"]

def _fmt_name(k, v):
Expand All @@ -1590,7 +1595,7 @@ def _fmt_name(k, v):

meta = dfn.metadata or list()
return [["header"] + [m for m in meta]] + [
_fmt_var(var) for var in dfn.values()
_fmt_var(var) for var in dfn.omd.values(multi=True)
]

return Context(
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ classifiers = [
]
requires-python = ">=3.8"
dependencies = [
"boltons",
"Jinja2>=3.0",
"numpy>=1.20.3",
"matplotlib >=1.4.0",
Expand Down

0 comments on commit 5b2e257

Please sign in to comment.