foamlib 1.4.2__tar.gz → 1.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {foamlib-1.4.2 → foamlib-1.4.3}/PKG-INFO +1 -1
- {foamlib-1.4.2 → foamlib-1.4.3}/pyproject.toml +1 -1
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_parsing/parsing.py +70 -4
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_typing.py +25 -4
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/files.py +92 -178
- {foamlib-1.4.2 → foamlib-1.4.3}/LICENSE.txt +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/README.md +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/_run.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/_subprocess.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/_util.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/async_.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/base.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/slurm.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_cases/sync.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_common.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_io.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_parsing/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_parsing/_elements.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_parsing/_grammar.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_serialization.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/_util.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/_files/types.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/postprocessing/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/postprocessing/load_tables.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/postprocessing/table_reader.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/__init__.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/case_modifier.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/grid_parameter_sweep.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/of_dict.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/parameter_study.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/preprocessing/system.py +0 -0
- {foamlib-1.4.2 → foamlib-1.4.3}/src/foamlib/py.typed +0 -0
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import dataclasses
|
|
2
2
|
import sys
|
|
3
3
|
from collections.abc import Collection, Iterator, Sequence
|
|
4
|
-
from typing import cast
|
|
4
|
+
from typing import cast, overload
|
|
5
|
+
|
|
6
|
+
if sys.version_info >= (3, 11):
|
|
7
|
+
from typing import Never, Unpack
|
|
8
|
+
else:
|
|
9
|
+
from typing_extensions import Never, Unpack
|
|
5
10
|
|
|
6
11
|
if sys.version_info >= (3, 12):
|
|
7
12
|
from typing import override
|
|
@@ -116,20 +121,63 @@ class ParsedFile(
|
|
|
116
121
|
)
|
|
117
122
|
return ret
|
|
118
123
|
|
|
124
|
+
@overload
|
|
125
|
+
@with_default
|
|
126
|
+
def getall(self, keywords: tuple[()], /) -> Collection[StandaloneData]: ...
|
|
127
|
+
|
|
128
|
+
@overload
|
|
129
|
+
@with_default
|
|
130
|
+
def getall(
|
|
131
|
+
self, keywords: tuple[str, Unpack[tuple[str, ...]]], /
|
|
132
|
+
) -> Collection[Data | EllipsisType | None]: ...
|
|
133
|
+
|
|
119
134
|
@override
|
|
120
135
|
@with_default
|
|
121
136
|
def getall(
|
|
122
137
|
self, keywords: tuple[str, ...], /
|
|
123
|
-
) -> Collection[Data | StandaloneData | EllipsisType]:
|
|
138
|
+
) -> Collection[Data | StandaloneData | EllipsisType | None]:
|
|
124
139
|
return [entry.data for entry in self._parsed.getall(keywords)]
|
|
125
140
|
|
|
141
|
+
@overload
|
|
142
|
+
def __getitem__(self, keywords: tuple[()]) -> StandaloneData: ...
|
|
143
|
+
|
|
144
|
+
@overload
|
|
145
|
+
def __getitem__(
|
|
146
|
+
self, keywords: tuple[str, Unpack[tuple[str, ...]]]
|
|
147
|
+
) -> Data | EllipsisType | None: ...
|
|
148
|
+
|
|
149
|
+
@override
|
|
150
|
+
def __getitem__(
|
|
151
|
+
self, keywords: tuple[str, ...]
|
|
152
|
+
) -> Data | StandaloneData | EllipsisType | None: # ty: ignore[invalid-method-override]
|
|
153
|
+
entry = self._parsed[keywords]
|
|
154
|
+
return entry.data
|
|
155
|
+
|
|
126
156
|
@override
|
|
127
|
-
def __setitem__(
|
|
128
|
-
self, key:
|
|
157
|
+
def __setitem__( # ty: ignore[invalid-method-override]
|
|
158
|
+
self, key: Never, value: Never
|
|
129
159
|
) -> None: # pragma: no cover
|
|
130
160
|
msg = "Use 'put' method instead"
|
|
131
161
|
raise NotImplementedError(msg)
|
|
132
162
|
|
|
163
|
+
@overload
|
|
164
|
+
def put(
|
|
165
|
+
self,
|
|
166
|
+
keywords: tuple[()],
|
|
167
|
+
/,
|
|
168
|
+
data: StandaloneData,
|
|
169
|
+
content: bytes,
|
|
170
|
+
) -> None: ...
|
|
171
|
+
|
|
172
|
+
@overload
|
|
173
|
+
def put(
|
|
174
|
+
self,
|
|
175
|
+
keywords: tuple[str, Unpack[tuple[str, ...]]],
|
|
176
|
+
/,
|
|
177
|
+
data: Data | EllipsisType | None,
|
|
178
|
+
content: bytes,
|
|
179
|
+
) -> None: ...
|
|
180
|
+
|
|
133
181
|
def put(
|
|
134
182
|
self,
|
|
135
183
|
keywords: tuple[str, ...],
|
|
@@ -143,6 +191,24 @@ class ParsedFile(
|
|
|
143
191
|
self._parsed[keywords] = ParsedFile._Entry(data, start, start + len(content))
|
|
144
192
|
self._remove_child_entries(keywords)
|
|
145
193
|
|
|
194
|
+
@overload
|
|
195
|
+
def add(
|
|
196
|
+
self,
|
|
197
|
+
keywords: tuple[()],
|
|
198
|
+
data: StandaloneData,
|
|
199
|
+
content: bytes,
|
|
200
|
+
/,
|
|
201
|
+
) -> None: ...
|
|
202
|
+
|
|
203
|
+
@overload
|
|
204
|
+
def add(
|
|
205
|
+
self,
|
|
206
|
+
keywords: tuple[str, Unpack[tuple[str, ...]]],
|
|
207
|
+
data: Data | EllipsisType | None,
|
|
208
|
+
content: bytes,
|
|
209
|
+
/,
|
|
210
|
+
) -> None: ...
|
|
211
|
+
|
|
146
212
|
@override
|
|
147
213
|
def add( # ty: ignore[invalid-method-override]
|
|
148
214
|
self,
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
from collections.abc import Mapping, Sequence
|
|
2
3
|
from typing import Literal, TypeAlias
|
|
3
4
|
|
|
5
|
+
if sys.version_info >= (3, 11):
|
|
6
|
+
from typing import Unpack
|
|
7
|
+
else:
|
|
8
|
+
from typing_extensions import Unpack
|
|
9
|
+
|
|
4
10
|
import numpy as np
|
|
5
11
|
from multicollections import MultiDict
|
|
6
12
|
|
|
@@ -38,8 +44,11 @@ DataEntryLike: TypeAlias = (
|
|
|
38
44
|
DataEntry | Sequence["DataEntryLike | KeywordEntryLike | DictLike"] | FieldLike
|
|
39
45
|
)
|
|
40
46
|
|
|
41
|
-
Data: TypeAlias = DataEntry | tuple[DataEntry, ...]
|
|
42
|
-
DataLike: TypeAlias =
|
|
47
|
+
Data: TypeAlias = DataEntry | tuple[DataEntry, DataEntry, Unpack[tuple[DataEntry, ...]]]
|
|
48
|
+
DataLike: TypeAlias = (
|
|
49
|
+
DataEntryLike
|
|
50
|
+
| tuple[DataEntryLike, DataEntryLike, Unpack[tuple[DataEntryLike, ...]]]
|
|
51
|
+
)
|
|
43
52
|
|
|
44
53
|
StandaloneDataEntry: TypeAlias = (
|
|
45
54
|
DataEntry
|
|
@@ -57,9 +66,21 @@ StandaloneDataEntryLike: TypeAlias = (
|
|
|
57
66
|
| Sequence[Sequence[int]]
|
|
58
67
|
)
|
|
59
68
|
|
|
60
|
-
StandaloneData: TypeAlias =
|
|
69
|
+
StandaloneData: TypeAlias = (
|
|
70
|
+
StandaloneDataEntry
|
|
71
|
+
| tuple[
|
|
72
|
+
StandaloneDataEntry,
|
|
73
|
+
StandaloneDataEntry,
|
|
74
|
+
Unpack[tuple[StandaloneDataEntry, ...]],
|
|
75
|
+
]
|
|
76
|
+
)
|
|
61
77
|
StandaloneDataLike: TypeAlias = (
|
|
62
|
-
StandaloneDataEntryLike
|
|
78
|
+
StandaloneDataEntryLike
|
|
79
|
+
| tuple[
|
|
80
|
+
StandaloneDataEntryLike,
|
|
81
|
+
StandaloneDataEntryLike,
|
|
82
|
+
Unpack[tuple[StandaloneDataEntryLike, ...]],
|
|
83
|
+
]
|
|
63
84
|
)
|
|
64
85
|
|
|
65
86
|
SubDict: TypeAlias = (
|
|
@@ -6,9 +6,9 @@ from copy import deepcopy
|
|
|
6
6
|
from typing import Literal, cast, overload
|
|
7
7
|
|
|
8
8
|
if sys.version_info >= (3, 11):
|
|
9
|
-
from typing import assert_never
|
|
9
|
+
from typing import Unpack, assert_never
|
|
10
10
|
else:
|
|
11
|
-
from typing_extensions import assert_never
|
|
11
|
+
from typing_extensions import Unpack, assert_never
|
|
12
12
|
|
|
13
13
|
if sys.version_info >= (3, 12):
|
|
14
14
|
from typing import override
|
|
@@ -21,7 +21,6 @@ from multicollections import MultiDict
|
|
|
21
21
|
from multicollections.abc import MutableMultiMapping, with_default
|
|
22
22
|
|
|
23
23
|
from .._files import _common
|
|
24
|
-
from ._common import dict_from_items
|
|
25
24
|
from ._io import FoamFileIO
|
|
26
25
|
from ._parsing import parse
|
|
27
26
|
from ._serialization import dumps, normalized
|
|
@@ -131,7 +130,12 @@ class FoamFile(
|
|
|
131
130
|
) -> Iterator["Data | StandaloneData | FoamFile.SubDict | None"]:
|
|
132
131
|
for k, v in self._file._get_parsed().items():
|
|
133
132
|
if k != ("FoamFile",) or self._include_header:
|
|
134
|
-
|
|
133
|
+
if v is ...:
|
|
134
|
+
assert k
|
|
135
|
+
k = cast("tuple[str, Unpack[tuple[str, ...]]]", k)
|
|
136
|
+
yield FoamFile.SubDict(self._file, k)
|
|
137
|
+
else:
|
|
138
|
+
yield v
|
|
135
139
|
|
|
136
140
|
@override
|
|
137
141
|
def __len__(self) -> int:
|
|
@@ -162,14 +166,18 @@ class FoamFile(
|
|
|
162
166
|
def __iter__(
|
|
163
167
|
self,
|
|
164
168
|
) -> Iterator[
|
|
165
|
-
tuple[str
|
|
169
|
+
tuple[str, "Data | FoamFile.SubDict | None"] | tuple[None, StandaloneData]
|
|
166
170
|
]:
|
|
167
171
|
for k, v in self._file._get_parsed().items():
|
|
168
172
|
if k != ("FoamFile",) or self._include_header:
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
+
if not k:
|
|
174
|
+
yield None, v
|
|
175
|
+
else:
|
|
176
|
+
k = cast("tuple[str, Unpack[tuple[str, ...]]]", k)
|
|
177
|
+
yield (
|
|
178
|
+
k[-1],
|
|
179
|
+
v if v is not ... else FoamFile.SubDict(self._file, k),
|
|
180
|
+
)
|
|
173
181
|
|
|
174
182
|
@override
|
|
175
183
|
def __len__(self) -> int:
|
|
@@ -237,6 +245,7 @@ class FoamFile(
|
|
|
237
245
|
def __iter__(self) -> Iterator["Data | FoamFile.SubDict | None"]:
|
|
238
246
|
for k, v in self._subdict._file._get_parsed().items():
|
|
239
247
|
if k[:-1] == self._subdict._keywords:
|
|
248
|
+
k = cast("tuple[str, Unpack[tuple[str, ...]]]", k)
|
|
240
249
|
yield (
|
|
241
250
|
v
|
|
242
251
|
if v is not ...
|
|
@@ -263,8 +272,9 @@ class FoamFile(
|
|
|
263
272
|
) -> Iterator[tuple[str, "Data | FoamFile.SubDict | None"]]:
|
|
264
273
|
for k, v in self._subdict._file._get_parsed().items():
|
|
265
274
|
if k[:-1] == self._subdict._keywords:
|
|
275
|
+
k = cast("tuple[str, Unpack[tuple[str, ...]]]", k)
|
|
266
276
|
yield (
|
|
267
|
-
k[-1]
|
|
277
|
+
k[-1],
|
|
268
278
|
v
|
|
269
279
|
if v is not ...
|
|
270
280
|
else FoamFile.SubDict(self._subdict._file, k),
|
|
@@ -278,39 +288,22 @@ class FoamFile(
|
|
|
278
288
|
def __contains__(self, x: object) -> bool: # ty: ignore[invalid-method-override]
|
|
279
289
|
return any(i == x for i in iter(self))
|
|
280
290
|
|
|
281
|
-
def __init__(
|
|
291
|
+
def __init__(
|
|
292
|
+
self, _file: "FoamFile", _keywords: tuple[str, Unpack[tuple[str, ...]]]
|
|
293
|
+
) -> None:
|
|
282
294
|
self._file = _file
|
|
283
295
|
self._keywords = _keywords
|
|
284
296
|
|
|
285
297
|
@override
|
|
286
298
|
@with_default
|
|
287
|
-
def getall(
|
|
299
|
+
def getall(
|
|
300
|
+
self, keyword: str, /
|
|
301
|
+
) -> Collection["Data | FoamFile.SubDict | None"]:
|
|
288
302
|
return self._file.getall((*self._keywords, keyword))
|
|
289
303
|
|
|
290
|
-
@overload
|
|
291
|
-
def __getitem__(self, keyword: str) -> "Data | FoamFile.SubDict | None": ...
|
|
292
|
-
|
|
293
|
-
@overload
|
|
294
|
-
def __getitem__(
|
|
295
|
-
self, keyword: slice
|
|
296
|
-
) -> (
|
|
297
|
-
dict[str, "Data | FoamFile.SubDict | None"]
|
|
298
|
-
| MultiDict[str, "Data | FoamFile.SubDict | None"]
|
|
299
|
-
): ...
|
|
300
|
-
|
|
301
304
|
@override
|
|
302
|
-
def __getitem__(
|
|
303
|
-
self, keyword:
|
|
304
|
-
) -> "Data | FoamFile.SubDict | None | dict[str, Data | FoamFile.SubDict | None] | MultiDict[str, Data | FoamFile.SubDict | None]":
|
|
305
|
-
if keyword == slice(None):
|
|
306
|
-
return self.as_dict(deep=False)
|
|
307
|
-
|
|
308
|
-
if isinstance(keyword, slice):
|
|
309
|
-
msg = "Only empty slices (:) are supported"
|
|
310
|
-
raise ValueError(msg) # noqa: TRY004
|
|
311
|
-
|
|
312
|
-
ret = self._file[(*self._keywords, keyword)]
|
|
313
|
-
return cast("Data | FoamFile.SubDict | None", ret)
|
|
305
|
+
def __getitem__(self, keyword: str) -> "Data | FoamFile.SubDict | None":
|
|
306
|
+
return self._file[(*self._keywords, keyword)] # ty: ignore[invalid-return-type]
|
|
314
307
|
|
|
315
308
|
@overload
|
|
316
309
|
def __setitem__(
|
|
@@ -345,7 +338,7 @@ class FoamFile(
|
|
|
345
338
|
|
|
346
339
|
@override
|
|
347
340
|
@with_default
|
|
348
|
-
def popone(self, keyword: str) -> "Data | FoamFile.SubDict | None":
|
|
341
|
+
def popone(self, keyword: str, /) -> "Data | FoamFile.SubDict | None":
|
|
349
342
|
return self._file.popone((*self._keywords, keyword))
|
|
350
343
|
|
|
351
344
|
@override
|
|
@@ -428,42 +421,17 @@ class FoamFile(
|
|
|
428
421
|
def __repr__(self) -> str:
|
|
429
422
|
return f"{type(self).__qualname__}('{self._file}', {self._keywords})"
|
|
430
423
|
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
@overload
|
|
435
|
-
def as_dict(
|
|
436
|
-
self, *, deep: Literal[False] = ...
|
|
437
|
-
) -> (
|
|
438
|
-
dict[str, "Data | FoamFile.SubDict | None"]
|
|
439
|
-
| MultiDict[str, "Data | FoamFile.SubDict | None"]
|
|
440
|
-
): ...
|
|
441
|
-
|
|
442
|
-
def as_dict(
|
|
443
|
-
self, *, deep: bool = True
|
|
444
|
-
) -> (
|
|
445
|
-
SubDict
|
|
446
|
-
| dict[str, "Data | FoamFile.SubDict | None"]
|
|
447
|
-
| MultiDict[str, "Data | FoamFile.SubDict | None"]
|
|
448
|
-
):
|
|
449
|
-
"""
|
|
450
|
-
Return a dict representation of the sub-dictionary.
|
|
424
|
+
def as_dict(self) -> SubDict:
|
|
425
|
+
"""Return a nested dict representation of the sub-dictionary."""
|
|
426
|
+
file = self._file.as_dict(include_header=True)
|
|
451
427
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
file = self._file.as_dict(include_header=True)
|
|
457
|
-
|
|
458
|
-
ret = file[self._keywords[0]]
|
|
428
|
+
ret = file[self._keywords[0]]
|
|
429
|
+
assert isinstance(ret, Mapping)
|
|
430
|
+
for k in self._keywords[1:]:
|
|
431
|
+
ret = ret[k]
|
|
459
432
|
assert isinstance(ret, Mapping)
|
|
460
|
-
for k in self._keywords[1:]:
|
|
461
|
-
ret = ret[k]
|
|
462
|
-
assert isinstance(ret, Mapping)
|
|
463
|
-
|
|
464
|
-
return ret # ty: ignore[invalid-return-type]
|
|
465
433
|
|
|
466
|
-
return
|
|
434
|
+
return ret # ty: ignore[invalid-return-type]
|
|
467
435
|
|
|
468
436
|
@property
|
|
469
437
|
def version(self) -> float:
|
|
@@ -663,6 +631,7 @@ class FoamFile(
|
|
|
663
631
|
if not keywords:
|
|
664
632
|
msg = "Cannot set a mapping at the root level of a FoamFile\nUse update(), extend(), or merge() instead."
|
|
665
633
|
raise ValueError(msg)
|
|
634
|
+
keywords = cast("tuple[str, Unpack[tuple[str, ...]]]", keywords)
|
|
666
635
|
|
|
667
636
|
if keyword.startswith("#"):
|
|
668
637
|
msg = f"Cannot set a directive as the keyword for a dictionary: {keyword}"
|
|
@@ -688,6 +657,7 @@ class FoamFile(
|
|
|
688
657
|
self[(*keywords, k)] = v # ty: ignore[invalid-assignment]
|
|
689
658
|
|
|
690
659
|
elif keywords:
|
|
660
|
+
keywords = cast("tuple[str, Unpack[tuple[str, ...]]]", keywords)
|
|
691
661
|
val = dumps(data, keywords=keywords, format_=format_)
|
|
692
662
|
|
|
693
663
|
content = (
|
|
@@ -718,39 +688,42 @@ class FoamFile(
|
|
|
718
688
|
@overload
|
|
719
689
|
@with_default
|
|
720
690
|
def getall(
|
|
721
|
-
self,
|
|
691
|
+
self,
|
|
692
|
+
keywords: str | tuple[str, Unpack[tuple[str, ...]]],
|
|
693
|
+
/,
|
|
722
694
|
) -> Collection["Data | FoamFile.SubDict | None"]: ...
|
|
723
695
|
|
|
724
696
|
@overload
|
|
725
697
|
@with_default
|
|
726
|
-
def getall(self, keywords: None | tuple[()]) -> Collection[StandaloneData]: ...
|
|
727
|
-
|
|
728
|
-
@overload
|
|
729
|
-
@with_default
|
|
730
|
-
def getall(
|
|
731
|
-
self, keywords: tuple[str, ...]
|
|
732
|
-
) -> Collection["Data | StandaloneData | FoamFile.SubDict | None"]: ...
|
|
698
|
+
def getall(self, keywords: None | tuple[()], /) -> Collection[StandaloneData]: ...
|
|
733
699
|
|
|
734
700
|
@override
|
|
735
701
|
@with_default
|
|
736
702
|
def getall(
|
|
737
703
|
self,
|
|
738
704
|
keywords: str | tuple[str, ...] | None,
|
|
705
|
+
/,
|
|
739
706
|
) -> Collection["Data | StandaloneData | FoamFile.SubDict | None"]:
|
|
740
707
|
keywords = FoamFile._normalized_keywords(keywords)
|
|
708
|
+
keywords = cast("tuple[str, Unpack[tuple[str, ...]]] | tuple[()]", keywords)
|
|
741
709
|
|
|
742
710
|
parsed = self._get_parsed()
|
|
743
711
|
|
|
744
|
-
|
|
712
|
+
values = parsed.getall(keywords)
|
|
745
713
|
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
714
|
+
ret = []
|
|
715
|
+
for v in values:
|
|
716
|
+
if v is ...:
|
|
717
|
+
assert keywords
|
|
718
|
+
ret.append(FoamFile.SubDict(self, keywords))
|
|
719
|
+
else:
|
|
720
|
+
ret.append(deepcopy(v))
|
|
721
|
+
return ret
|
|
749
722
|
|
|
750
723
|
@overload
|
|
751
724
|
def __getitem__(
|
|
752
725
|
self,
|
|
753
|
-
keywords: str | tuple[str],
|
|
726
|
+
keywords: str | tuple[str, Unpack[tuple[str, ...]]],
|
|
754
727
|
) -> "Data | FoamFile.SubDict | None": ...
|
|
755
728
|
|
|
756
729
|
@overload
|
|
@@ -759,35 +732,18 @@ class FoamFile(
|
|
|
759
732
|
keywords: None | tuple[()],
|
|
760
733
|
) -> StandaloneData: ...
|
|
761
734
|
|
|
762
|
-
@overload
|
|
763
|
-
def __getitem__(
|
|
764
|
-
self,
|
|
765
|
-
keywords: tuple[str, ...],
|
|
766
|
-
) -> "Data | StandaloneData | FoamFile.SubDict | None": ...
|
|
767
|
-
|
|
768
|
-
@overload
|
|
769
|
-
def __getitem__(
|
|
770
|
-
self,
|
|
771
|
-
keywords: slice,
|
|
772
|
-
) -> (
|
|
773
|
-
dict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
774
|
-
| MultiDict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
775
|
-
): ...
|
|
776
|
-
|
|
777
735
|
@override
|
|
778
736
|
def __getitem__( # ty: ignore[invalid-method-override]
|
|
779
737
|
self,
|
|
780
|
-
keywords: str | tuple[str, ...] | None
|
|
781
|
-
) -> "Data | StandaloneData | FoamFile.SubDict | None
|
|
782
|
-
keywords = FoamFile._normalized_keywords(keywords
|
|
783
|
-
|
|
784
|
-
if keywords == slice(None):
|
|
785
|
-
return self.as_dict(deep=False)
|
|
738
|
+
keywords: str | tuple[str, ...] | None,
|
|
739
|
+
) -> "Data | StandaloneData | FoamFile.SubDict | None":
|
|
740
|
+
keywords = FoamFile._normalized_keywords(keywords)
|
|
786
741
|
|
|
787
|
-
assert not isinstance(keywords, slice)
|
|
788
742
|
parsed = self._get_parsed()
|
|
743
|
+
keywords = cast("tuple[str, Unpack[tuple[str, ...]]] | tuple[()]", keywords)
|
|
789
744
|
ret = parsed[keywords]
|
|
790
745
|
if ret is ...:
|
|
746
|
+
assert keywords
|
|
791
747
|
return FoamFile.SubDict(self, keywords)
|
|
792
748
|
return deepcopy(ret)
|
|
793
749
|
|
|
@@ -861,7 +817,9 @@ class FoamFile(
|
|
|
861
817
|
@with_default
|
|
862
818
|
@override
|
|
863
819
|
def popone(
|
|
864
|
-
self,
|
|
820
|
+
self,
|
|
821
|
+
keywords: str | tuple[str, ...] | None,
|
|
822
|
+
/,
|
|
865
823
|
) -> "Data | StandaloneData | FoamFile.SubDict | None":
|
|
866
824
|
keywords = FoamFile._normalized_keywords(keywords)
|
|
867
825
|
|
|
@@ -1020,40 +978,16 @@ class FoamFile(
|
|
|
1020
978
|
def __fspath__(self) -> str:
|
|
1021
979
|
return str(self.path)
|
|
1022
980
|
|
|
1023
|
-
|
|
1024
|
-
def as_dict(
|
|
1025
|
-
self, *, include_header: bool = ..., deep: Literal[True] = ...
|
|
1026
|
-
) -> File: ...
|
|
1027
|
-
|
|
1028
|
-
@overload
|
|
1029
|
-
def as_dict(
|
|
1030
|
-
self, *, include_header: bool = ..., deep: Literal[False] = ...
|
|
1031
|
-
) -> (
|
|
1032
|
-
dict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
1033
|
-
| MultiDict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
1034
|
-
): ...
|
|
1035
|
-
|
|
1036
|
-
def as_dict(
|
|
1037
|
-
self, *, include_header: bool = False, deep: bool = True
|
|
1038
|
-
) -> (
|
|
1039
|
-
File
|
|
1040
|
-
| dict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
1041
|
-
| MultiDict[str | None, "Data | StandaloneData | FoamFile.SubDict | None"]
|
|
1042
|
-
):
|
|
981
|
+
def as_dict(self, *, include_header: bool = False) -> File:
|
|
1043
982
|
"""
|
|
1044
|
-
Return a dict representation of the file.
|
|
983
|
+
Return a nested dict representation of the file.
|
|
1045
984
|
|
|
1046
985
|
:param include_header: Whether to include the "FoamFile" header in the output.
|
|
1047
|
-
:param deep: Whether to return a nested representation by recursing into
|
|
1048
|
-
nested sub-dictionaries.
|
|
1049
986
|
"""
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
return deepcopy(d)
|
|
1055
|
-
|
|
1056
|
-
return dict_from_items(self.items(include_header=include_header), target=File) # ty: ignore[invalid-return-type]
|
|
987
|
+
d = self._get_parsed().as_dict()
|
|
988
|
+
if not include_header:
|
|
989
|
+
d.pop("FoamFile", None)
|
|
990
|
+
return deepcopy(d)
|
|
1057
991
|
|
|
1058
992
|
@staticmethod
|
|
1059
993
|
def loads(
|
|
@@ -1135,14 +1069,14 @@ class FoamFile(
|
|
|
1135
1069
|
@overload
|
|
1136
1070
|
@staticmethod
|
|
1137
1071
|
def _normalized_keywords(
|
|
1138
|
-
keywords: None, /, *, slice_ok: bool = ...
|
|
1072
|
+
keywords: None | tuple[()], /, *, slice_ok: bool = ...
|
|
1139
1073
|
) -> tuple[()]: ...
|
|
1140
1074
|
|
|
1141
1075
|
@overload
|
|
1142
1076
|
@staticmethod
|
|
1143
1077
|
def _normalized_keywords(
|
|
1144
|
-
keywords: tuple[str, ...], /, *, slice_ok: bool = ...
|
|
1145
|
-
) -> tuple[str, ...]: ...
|
|
1078
|
+
keywords: tuple[str, Unpack[tuple[str, ...]]], /, *, slice_ok: bool = ...
|
|
1079
|
+
) -> tuple[str, Unpack[tuple[str, ...]]]: ...
|
|
1146
1080
|
|
|
1147
1081
|
@overload
|
|
1148
1082
|
@staticmethod
|
|
@@ -1225,7 +1159,7 @@ class FoamFieldFile(FoamFile):
|
|
|
1225
1159
|
@override
|
|
1226
1160
|
@with_default
|
|
1227
1161
|
def getall(
|
|
1228
|
-
self, keyword: str
|
|
1162
|
+
self, keyword: str, /
|
|
1229
1163
|
) -> Collection["FoamFieldFile.BoundarySubDict | Data | None"]:
|
|
1230
1164
|
ret = super().getall(keyword)
|
|
1231
1165
|
for r in ret:
|
|
@@ -1273,23 +1207,17 @@ class FoamFieldFile(FoamFile):
|
|
|
1273
1207
|
@overload
|
|
1274
1208
|
@with_default
|
|
1275
1209
|
def getall(
|
|
1276
|
-
self, keywords: str | tuple[str]
|
|
1277
|
-
) -> Collection["Data | FoamFieldFile.
|
|
1210
|
+
self, keywords: str | tuple[str, Unpack[tuple[str, ...]]], /
|
|
1211
|
+
) -> Collection["Data | FoamFieldFile.SubDict | None"]: ...
|
|
1278
1212
|
|
|
1279
1213
|
@overload
|
|
1280
1214
|
@with_default
|
|
1281
|
-
def getall(self, keywords: None | tuple[()]) -> Collection[StandaloneData]: ...
|
|
1282
|
-
|
|
1283
|
-
@overload
|
|
1284
|
-
@with_default
|
|
1285
|
-
def getall(
|
|
1286
|
-
self, keywords: tuple[str, ...]
|
|
1287
|
-
) -> Collection["Data | StandaloneData | FoamFieldFile.SubDict | None"]: ...
|
|
1215
|
+
def getall(self, keywords: None | tuple[()], /) -> Collection[StandaloneData]: ...
|
|
1288
1216
|
|
|
1289
1217
|
@override
|
|
1290
1218
|
@with_default
|
|
1291
1219
|
def getall(
|
|
1292
|
-
self, keywords: str | tuple[str, ...] | None
|
|
1220
|
+
self, keywords: str | tuple[str, ...] | None, /
|
|
1293
1221
|
) -> Collection["Data | StandaloneData | FoamFieldFile.SubDict | None"]:
|
|
1294
1222
|
keywords = FoamFieldFile._normalized_keywords(keywords)
|
|
1295
1223
|
|
|
@@ -1299,8 +1227,10 @@ class FoamFieldFile(FoamFile):
|
|
|
1299
1227
|
for i, r in enumerate(ret):
|
|
1300
1228
|
if isinstance(r, FoamFile.SubDict):
|
|
1301
1229
|
if len(keywords) == 1:
|
|
1230
|
+
keywords = cast("tuple[str]", keywords)
|
|
1302
1231
|
ret[i] = FoamFieldFile.BoundariesSubDict(self, keywords)
|
|
1303
1232
|
elif len(keywords) == 2:
|
|
1233
|
+
keywords = cast("tuple[str, str]", keywords)
|
|
1304
1234
|
ret[i] = FoamFieldFile.BoundarySubDict(self, keywords)
|
|
1305
1235
|
|
|
1306
1236
|
return ret
|
|
@@ -1308,14 +1238,8 @@ class FoamFieldFile(FoamFile):
|
|
|
1308
1238
|
@overload
|
|
1309
1239
|
def __getitem__(
|
|
1310
1240
|
self,
|
|
1311
|
-
keywords: str | tuple[str],
|
|
1312
|
-
) -> "Data | FoamFieldFile.
|
|
1313
|
-
|
|
1314
|
-
@overload
|
|
1315
|
-
def __getitem__(
|
|
1316
|
-
self,
|
|
1317
|
-
keywords: tuple[str, str],
|
|
1318
|
-
) -> "Data | FoamFieldFile.BoundarySubDict | None": ...
|
|
1241
|
+
keywords: str | tuple[str, Unpack[tuple[str, ...]]],
|
|
1242
|
+
) -> "Data | FoamFieldFile.SubDict | None": ...
|
|
1319
1243
|
|
|
1320
1244
|
@overload
|
|
1321
1245
|
def __getitem__(
|
|
@@ -1323,35 +1247,25 @@ class FoamFieldFile(FoamFile):
|
|
|
1323
1247
|
keywords: None | tuple[()],
|
|
1324
1248
|
) -> StandaloneData: ...
|
|
1325
1249
|
|
|
1326
|
-
@overload
|
|
1327
|
-
def __getitem__(
|
|
1328
|
-
self,
|
|
1329
|
-
keywords: tuple[str, ...],
|
|
1330
|
-
) -> "Data | StandaloneData | FoamFieldFile.SubDict | None": ...
|
|
1331
|
-
|
|
1332
|
-
@overload
|
|
1333
|
-
def __getitem__(
|
|
1334
|
-
self,
|
|
1335
|
-
keywords: slice,
|
|
1336
|
-
) -> File: ...
|
|
1337
|
-
|
|
1338
1250
|
@override
|
|
1339
1251
|
def __getitem__( # ty: ignore[invalid-method-override]
|
|
1340
1252
|
self,
|
|
1341
|
-
keywords: str | tuple[str, ...] | None
|
|
1342
|
-
) -> "Data | StandaloneData | FoamFieldFile.SubDict | None
|
|
1343
|
-
keywords = FoamFieldFile._normalized_keywords(keywords
|
|
1344
|
-
|
|
1345
|
-
if keywords == slice(None):
|
|
1346
|
-
return self.as_dict(deep=False)
|
|
1253
|
+
keywords: str | tuple[str, ...] | None,
|
|
1254
|
+
) -> "Data | StandaloneData | FoamFieldFile.SubDict | None":
|
|
1255
|
+
keywords = FoamFieldFile._normalized_keywords(keywords)
|
|
1347
1256
|
|
|
1348
|
-
|
|
1349
|
-
ret = super().__getitem__(keywords)
|
|
1257
|
+
ret = super().__getitem__(keywords) # ty: ignore[no-matching-overload]
|
|
1350
1258
|
|
|
1351
|
-
if
|
|
1259
|
+
if (
|
|
1260
|
+
keywords
|
|
1261
|
+
and keywords[0] == "boundaryField"
|
|
1262
|
+
and isinstance(ret, FoamFile.SubDict)
|
|
1263
|
+
):
|
|
1352
1264
|
if len(keywords) == 1:
|
|
1265
|
+
keywords = cast("tuple[str]", keywords)
|
|
1353
1266
|
ret = FoamFieldFile.BoundariesSubDict(self, keywords)
|
|
1354
1267
|
elif len(keywords) == 2:
|
|
1268
|
+
keywords = cast("tuple[str, str]", keywords)
|
|
1355
1269
|
ret = FoamFieldFile.BoundarySubDict(self, keywords)
|
|
1356
1270
|
|
|
1357
1271
|
return ret
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|