Skip to content

Commit 9a5ec67

Browse files
authored
adapt to latest devtools (#193)
1 parent 61a2dc7 commit 9a5ec67

File tree

16 files changed

+227
-1332
lines changed

16 files changed

+227
-1332
lines changed

flopy4/mf6/codec/reader/transformer.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import numpy as np
77
import xarray as xr
88
from lark import Token, Transformer
9-
from modflow_devtools.dfn import _SCALAR_TYPES, Dfn, get_blocks, get_fields
9+
from modflow_devtools.dfn import SCALAR_TYPES, Dfn
1010

1111

1212
class BasicTransformer(Transformer):
@@ -65,8 +65,8 @@ class TypedTransformer(Transformer):
6565
def __init__(self, visit_tokens=False, dfn: Dfn = None):
6666
super().__init__(visit_tokens)
6767
self.dfn = dfn
68-
self.blocks = get_blocks(dfn) if dfn else None
69-
self.fields = get_fields(dfn) if dfn else None
68+
self.blocks = dfn.blocks if dfn else None
69+
self.fields = dfn.fields if dfn else None
7070

7171
def start(self, items: list[Any]) -> Mapping:
7272
return ChainMap(*items)
@@ -178,9 +178,9 @@ def __default__(self, data, children, meta):
178178
elif data.endswith("_vars"):
179179
return {item[0].lower(): item[1] for item in children}
180180
elif (field := self.fields.get(data, None)) is not None:
181-
if field["type"] == "keyword":
181+
if field.type == "keyword":
182182
return data, True
183-
elif field["type"] in _SCALAR_TYPES and field.get("shape", None):
183+
elif field.type in SCALAR_TYPES and field.shape is not None:
184184
return data, TypedTransformer.try_create_dataarray(children[0])
185185
else:
186186
return data, children[0]

flopy4/mf6/component.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
import numpy as np
77
from attrs import fields
88
from modflow_devtools.dfn import Dfn, Field
9+
from packaging.version import Version
910
from xattree import xattree
1011

1112
from flopy4.mf6.constants import FILL_DNODATA
12-
from flopy4.mf6.spec import field, fields_dict, to_dfn_field
13+
from flopy4.mf6.spec import field, fields_dict, to_field
1314
from flopy4.uio import IO, Loader, Writer
1415

1516

@@ -162,21 +163,21 @@ def __len__(self):
162163
@classmethod
163164
def get_dfn(cls) -> Dfn:
164165
"""Get the component's definition (i.e. specification)."""
165-
fields = {field_name: to_dfn_field(field) for field_name, field in fields_dict(cls).items()}
166+
fields = {field_name: to_field(field) for field_name, field in fields_dict(cls).items()}
166167
blocks: dict[str, dict[str, Field]] = {}
167168
for field_name, field_ in fields.items():
168-
if (block := field_.get("block", None)) is not None:
169+
if (block := field_.block) is not None:
169170
blocks.setdefault(block, {})[field_name] = field_
170171
else:
171172
blocks[field_name] = field_
172173

173174
return Dfn(
175+
schema_version=Version("2"),
174176
name=cls.__name__.lower(),
175177
advanced=getattr(cls, "advanced_package", False),
176178
multi=getattr(cls, "multi_package", False),
177179
ref=getattr(cls, "sub_package", None),
178-
sln=getattr(cls, "solution_package", None),
179-
**blocks,
180+
blocks=blocks,
180181
)
181182

182183
def _preio(self, format: str) -> None:

flopy4/mf6/converter.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import xattree
1010
from attrs import define
1111
from cattrs import Converter
12+
from modflow_devtools.dfn.schema.block import block_sort_key
1213
from numpy.typing import NDArray
1314
from xattree import get_xatspec
1415

@@ -21,7 +22,7 @@
2122
from flopy4.mf6.model import Model
2223
from flopy4.mf6.package import Package
2324
from flopy4.mf6.solution import Solution
24-
from flopy4.mf6.spec import fields_dict, get_blocks
25+
from flopy4.mf6.spec import fields_dict
2526

2627

2728
@define
@@ -87,7 +88,7 @@ def _path_to_record(field_name: str, path_value: Path) -> tuple:
8788

8889

8990
def unstructure_component(value: Component) -> dict[str, Any]:
90-
blockspec = get_blocks(value.dfn)
91+
blockspec = dict(sorted(value.dfn.blocks.items(), key=block_sort_key)) # type: ignore
9192
blocks: dict[str, dict[str, Any]] = {}
9293
xatspec = xattree.get_xatspec(type(value))
9394

flopy4/mf6/gwf/chd.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class Chd(Package):
3333
),
3434
default=None,
3535
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
36-
reader="urword",
3736
on_setattr=update_maxbound,
3837
)
3938
aux: Optional[NDArray[np.float64]] = array(
@@ -44,7 +43,6 @@ class Chd(Package):
4443
),
4544
default=None,
4645
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
47-
reader="urword",
4846
on_setattr=update_maxbound,
4947
)
5048
boundname: Optional[NDArray[np.str_]] = array(
@@ -55,6 +53,5 @@ class Chd(Package):
5553
),
5654
default=None,
5755
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
58-
reader="urword",
5956
on_setattr=update_maxbound,
6057
)

flopy4/mf6/gwf/drn.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,13 @@ class Drn(Package):
3232
dims=("nper", "nodes"),
3333
default=None,
3434
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
35-
reader="urword",
3635
on_setattr=update_maxbound,
3736
)
3837
cond: Optional[NDArray[np.float64]] = array(
3938
block="period",
4039
dims=("nper", "nodes"),
4140
default=None,
4241
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
43-
reader="urword",
4442
on_setattr=update_maxbound,
4543
)
4644
aux: Optional[NDArray[np.float64]] = array(
@@ -51,7 +49,6 @@ class Drn(Package):
5149
),
5250
default=None,
5351
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
54-
reader="urword",
5552
on_setattr=update_maxbound,
5653
)
5754
boundname: Optional[NDArray[np.str_]] = array(
@@ -62,6 +59,5 @@ class Drn(Package):
6259
),
6360
default=None,
6461
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
65-
reader="urword",
6662
on_setattr=update_maxbound,
6763
)

flopy4/mf6/gwf/oc.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ class Period:
5858
default="all",
5959
dims=("nper",),
6060
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
61-
reader="urword",
6261
format="keystring",
6362
)
6463
save_budget: Optional[NDArray[np.object_]] = array(
@@ -67,7 +66,6 @@ class Period:
6766
default="all",
6867
dims=("nper",),
6968
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
70-
reader="urword",
7169
format="keystring",
7270
)
7371
print_head: Optional[NDArray[np.object_]] = array(
@@ -76,7 +74,6 @@ class Period:
7674
default="all",
7775
dims=("nper",),
7876
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
79-
reader="urword",
8077
format="keystring",
8178
)
8279
print_budget: Optional[NDArray[np.object_]] = array(
@@ -85,6 +82,5 @@ class Period:
8582
default="all",
8683
dims=("nper",),
8784
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
88-
reader="urword",
8985
format="keystring",
9086
)

flopy4/mf6/gwf/rch.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class Rch(Package):
3333
),
3434
default=None,
3535
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
36-
reader="urword",
3736
on_setattr=update_maxbound,
3837
)
3938
aux: Optional[NDArray[np.float64]] = array(
@@ -44,7 +43,6 @@ class Rch(Package):
4443
),
4544
default=None,
4645
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
47-
reader="urword",
4846
on_setattr=update_maxbound,
4947
)
5048
boundname: Optional[NDArray[np.str_]] = array(
@@ -55,6 +53,5 @@ class Rch(Package):
5553
),
5654
default=None,
5755
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
58-
reader="urword",
5956
on_setattr=update_maxbound,
6057
)

flopy4/mf6/gwf/sto.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,10 @@ class Sto(Package):
4444
dims=("nper",),
4545
default=None,
4646
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
47-
reader="urword",
4847
)
4948
transient: Optional[NDArray[np.bool_]] = array(
5049
block="period",
5150
dims=("nper",),
5251
default=None,
5352
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
54-
reader="urword",
5553
)

flopy4/mf6/gwf/wel.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class Wel(Package):
3535
),
3636
default=None,
3737
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
38-
reader="urword",
3938
on_setattr=update_maxbound,
4039
)
4140
aux: Optional[NDArray[np.float64]] = array(
@@ -46,7 +45,6 @@ class Wel(Package):
4645
),
4746
default=None,
4847
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
49-
reader="urword",
5048
on_setattr=update_maxbound,
5149
)
5250
boundname: Optional[NDArray[np.str_]] = array(
@@ -57,6 +55,5 @@ class Wel(Package):
5755
),
5856
default=None,
5957
converter=Converter(dict_to_array, takes_self=True, takes_field=True),
60-
reader="urword",
6158
on_setattr=update_maxbound,
6259
)

flopy4/mf6/ims.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from pathlib import Path
22
from typing import ClassVar, Optional
33

4-
from modflow_devtools.dfn import Sln
54
from xattree import xattree
65

76
from flopy4.mf6.solution import Solution
@@ -10,7 +9,6 @@
109

1110
@xattree
1211
class Ims(Solution):
13-
solution_package: ClassVar[Sln] = Sln(abbr="ims", pattern="*")
1412
slntype: ClassVar[str] = "ims"
1513

1614
print_option: Optional[str] = field(block="options", default=None)

0 commit comments

Comments
 (0)