foamlib 0.8.2__py3-none-any.whl → 0.8.4__py3-none-any.whl
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/__init__.py +1 -1
- foamlib/_files/_files.py +3 -3
- foamlib/_files/_parsing.py +26 -9
- foamlib/_files/_serialization.py +5 -2
- foamlib/_files/_types.py +1 -1
- {foamlib-0.8.2.dist-info → foamlib-0.8.4.dist-info}/METADATA +6 -5
- {foamlib-0.8.2.dist-info → foamlib-0.8.4.dist-info}/RECORD +9 -9
- {foamlib-0.8.2.dist-info → foamlib-0.8.4.dist-info}/WHEEL +1 -1
- {foamlib-0.8.2.dist-info → foamlib-0.8.4.dist-info}/licenses/LICENSE.txt +0 -0
foamlib/__init__.py
CHANGED
foamlib/_files/_files.py
CHANGED
@@ -308,15 +308,15 @@ class FoamFile(
|
|
308
308
|
self[(*keywords, k)] = v
|
309
309
|
|
310
310
|
elif keywords:
|
311
|
+
val = dumps(data, kind=kind)
|
311
312
|
parsed.put(
|
312
313
|
keywords,
|
313
314
|
normalize(data, kind=kind),
|
314
315
|
before
|
315
316
|
+ indentation
|
316
317
|
+ dumps(keywords[-1])
|
317
|
-
+ b" "
|
318
|
-
+
|
319
|
-
+ b";"
|
318
|
+
+ ((b" " + val) if val else b"")
|
319
|
+
+ (b";" if not keywords[-1].startswith("#") else b"")
|
320
320
|
+ after,
|
321
321
|
)
|
322
322
|
|
foamlib/_files/_parsing.py
CHANGED
@@ -89,7 +89,7 @@ def _parse_ascii_field(
|
|
89
89
|
s = re.sub(ignore.re, " ", s)
|
90
90
|
s = s.replace("(", " ").replace(")", " ")
|
91
91
|
|
92
|
-
return np.fromstring(s, sep=" ").reshape(-1, *tensor_kind.shape)
|
92
|
+
return np.fromstring(s, sep=" ").reshape(-1, *tensor_kind.shape) # type: ignore [return-value]
|
93
93
|
|
94
94
|
|
95
95
|
def _unpack_binary_field(
|
@@ -99,7 +99,7 @@ def _unpack_binary_field(
|
|
99
99
|
assert float_size in (4, 8)
|
100
100
|
|
101
101
|
dtype = np.float32 if float_size == 4 else float
|
102
|
-
return np.frombuffer(b, dtype=dtype).reshape(-1, *tensor_kind.shape)
|
102
|
+
return np.frombuffer(b, dtype=dtype).reshape(-1, *tensor_kind.shape) # type: ignore [return-value]
|
103
103
|
|
104
104
|
|
105
105
|
def _tensor_list(
|
@@ -153,12 +153,19 @@ def _tensor_list(
|
|
153
153
|
|
154
154
|
|
155
155
|
def _dict_of(
|
156
|
-
keyword: ParserElement,
|
156
|
+
keyword: ParserElement,
|
157
|
+
data: ParserElement,
|
158
|
+
*,
|
159
|
+
directive: ParserElement | None = None,
|
160
|
+
located: bool = False,
|
157
161
|
) -> ParserElement:
|
158
162
|
dict_ = Forward()
|
159
163
|
|
160
164
|
keyword_entry = keyword + (dict_ | (data + Literal(";").suppress()))
|
161
165
|
|
166
|
+
if directive is not None:
|
167
|
+
keyword_entry |= directive + data + LineEnd().suppress() # type: ignore [no-untyped-call]
|
168
|
+
|
162
169
|
if located:
|
163
170
|
keyword_entry = Located(keyword_entry)
|
164
171
|
|
@@ -175,12 +182,17 @@ def _keyword_entry_of(
|
|
175
182
|
keyword: ParserElement,
|
176
183
|
data: ParserElement,
|
177
184
|
*,
|
185
|
+
directive: ParserElement | None = None,
|
178
186
|
located: bool = False,
|
179
187
|
) -> ParserElement:
|
180
188
|
keyword_entry = keyword + (
|
181
|
-
_dict_of(keyword, data, located=located)
|
189
|
+
_dict_of(keyword, data, directive=directive, located=located)
|
190
|
+
| (data + Literal(";").suppress())
|
182
191
|
)
|
183
192
|
|
193
|
+
if directive is not None:
|
194
|
+
keyword_entry |= directive + data + LineEnd().suppress() # type: ignore [no-untyped-call]
|
195
|
+
|
184
196
|
if located:
|
185
197
|
keyword_entry = Located(keyword_entry)
|
186
198
|
else:
|
@@ -223,9 +235,10 @@ _TENSOR = (
|
|
223
235
|
| _tensor(TensorKind.SYMM_TENSOR)
|
224
236
|
| _tensor(TensorKind.TENSOR)
|
225
237
|
)
|
226
|
-
_IDENTIFIER =
|
238
|
+
_IDENTIFIER = Forward()
|
239
|
+
_IDENTIFIER <<= Combine(
|
227
240
|
Word(_IDENTCHARS, _IDENTBODYCHARS, exclude_chars="()")
|
228
|
-
+ Opt(Literal("(") +
|
241
|
+
+ Opt(Literal("(") + _IDENTIFIER + Literal(")"))
|
229
242
|
)
|
230
243
|
_DIMENSIONED = (Opt(_IDENTIFIER) + _DIMENSIONS + _TENSOR).set_parse_action(
|
231
244
|
lambda tks: Dimensioned(*reversed(tks.as_list()))
|
@@ -239,7 +252,8 @@ _FIELD = (Keyword("uniform", _IDENTBODYCHARS).suppress() + _TENSOR) | (
|
|
239
252
|
| _tensor_list(TensorKind.TENSOR, ignore=_COMMENT)
|
240
253
|
)
|
241
254
|
)
|
242
|
-
|
255
|
+
_DIRECTIVE = Word("#", _IDENTBODYCHARS)
|
256
|
+
_TOKEN = dbl_quoted_string | _IDENTIFIER | _DIRECTIVE
|
243
257
|
_DATA = Forward()
|
244
258
|
_KEYWORD_ENTRY = _keyword_entry_of(_TOKEN | _list_of(_IDENTIFIER), _DATA)
|
245
259
|
_DICT = _dict_of(_TOKEN, _DATA)
|
@@ -258,18 +272,21 @@ _DATA <<= (
|
|
258
272
|
|
259
273
|
|
260
274
|
def parse_data(s: str) -> Data:
|
275
|
+
if not s.strip():
|
276
|
+
return ""
|
261
277
|
return cast(Data, _DATA.parse_string(s, parse_all=True)[0])
|
262
278
|
|
263
279
|
|
264
280
|
_LOCATED_DICTIONARY = Group(
|
265
|
-
_keyword_entry_of(
|
281
|
+
_keyword_entry_of(
|
282
|
+
_TOKEN, Opt(_DATA, default=""), directive=_DIRECTIVE, located=True
|
283
|
+
)
|
266
284
|
)[...]
|
267
285
|
_LOCATED_DATA = Group(Located(_DATA.copy().add_parse_action(lambda tks: ["", tks[0]])))
|
268
286
|
|
269
287
|
_FILE = (
|
270
288
|
Dict(_LOCATED_DICTIONARY + Opt(_LOCATED_DATA) + _LOCATED_DICTIONARY)
|
271
289
|
.ignore(_COMMENT)
|
272
|
-
.ignore(Literal("#include") + ... + LineEnd()) # type: ignore [no-untyped-call]
|
273
290
|
.parse_with_tabs()
|
274
291
|
)
|
275
292
|
|
foamlib/_files/_serialization.py
CHANGED
@@ -50,7 +50,7 @@ def normalize(data: Entry, *, kind: Kind = Kind.DEFAULT) -> Entry:
|
|
50
50
|
arr = arr.astype(float)
|
51
51
|
|
52
52
|
if arr.ndim == 1 or (arr.ndim == 2 and arr.shape[1] in (3, 6, 9)):
|
53
|
-
return arr
|
53
|
+
return arr # type: ignore [return-value]
|
54
54
|
|
55
55
|
return data
|
56
56
|
|
@@ -111,7 +111,10 @@ def dumps(
|
|
111
111
|
|
112
112
|
if isinstance(data, tuple) and kind == Kind.SINGLE_ENTRY and len(data) == 2:
|
113
113
|
k, v = data
|
114
|
-
ret = dumps(k)
|
114
|
+
ret = dumps(k)
|
115
|
+
val = dumps(v)
|
116
|
+
if val:
|
117
|
+
ret += b" " + val
|
115
118
|
if not isinstance(v, Mapping):
|
116
119
|
ret += b";"
|
117
120
|
return ret
|
foamlib/_files/_types.py
CHANGED
@@ -79,7 +79,7 @@ class Dimensioned:
|
|
79
79
|
|
80
80
|
def __post_init__(self) -> None:
|
81
81
|
if is_sequence(self.value):
|
82
|
-
self.value = np.asarray(self.value, dtype=float)
|
82
|
+
self.value = np.asarray(self.value, dtype=float) # type: ignore [assignment]
|
83
83
|
else:
|
84
84
|
assert isinstance(self.value, (int, float, np.ndarray))
|
85
85
|
self.value = float(self.value)
|
@@ -1,11 +1,12 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: foamlib
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.4
|
4
4
|
Summary: A Python interface for interacting with OpenFOAM
|
5
5
|
Project-URL: Homepage, https://github.com/gerlero/foamlib
|
6
6
|
Project-URL: Repository, https://github.com/gerlero/foamlib
|
7
7
|
Project-URL: Documentation, https://foamlib.readthedocs.io
|
8
8
|
Author-email: "Gabriel S. Gerlero" <ggerlero@cimec.unl.edu.ar>
|
9
|
+
License-File: LICENSE.txt
|
9
10
|
Classifier: Development Status :: 4 - Beta
|
10
11
|
Classifier: Framework :: AsyncIO
|
11
12
|
Classifier: Intended Audience :: Developers
|
@@ -31,7 +32,7 @@ Requires-Dist: pyparsing<4,>=3.1.2
|
|
31
32
|
Requires-Dist: typing-extensions<5,>=4; python_version < '3.11'
|
32
33
|
Provides-Extra: dev
|
33
34
|
Requires-Dist: mypy<2,>=1; extra == 'dev'
|
34
|
-
Requires-Dist: pytest-asyncio<0.
|
35
|
+
Requires-Dist: pytest-asyncio<0.26,>=0.21; extra == 'dev'
|
35
36
|
Requires-Dist: pytest-cov; extra == 'dev'
|
36
37
|
Requires-Dist: pytest<9,>=7; extra == 'dev'
|
37
38
|
Requires-Dist: ruff; extra == 'dev'
|
@@ -43,12 +44,12 @@ Requires-Dist: sphinx<9,>=5; extra == 'docs'
|
|
43
44
|
Provides-Extra: lint
|
44
45
|
Requires-Dist: ruff; extra == 'lint'
|
45
46
|
Provides-Extra: test
|
46
|
-
Requires-Dist: pytest-asyncio<0.
|
47
|
+
Requires-Dist: pytest-asyncio<0.26,>=0.21; extra == 'test'
|
47
48
|
Requires-Dist: pytest-cov; extra == 'test'
|
48
49
|
Requires-Dist: pytest<9,>=7; extra == 'test'
|
49
50
|
Provides-Extra: typing
|
50
51
|
Requires-Dist: mypy<2,>=1; extra == 'typing'
|
51
|
-
Requires-Dist: pytest-asyncio<0.
|
52
|
+
Requires-Dist: pytest-asyncio<0.26,>=0.21; extra == 'typing'
|
52
53
|
Requires-Dist: pytest-cov; extra == 'typing'
|
53
54
|
Requires-Dist: pytest<9,>=7; extra == 'typing'
|
54
55
|
Description-Content-Type: text/markdown
|
@@ -1,4 +1,4 @@
|
|
1
|
-
foamlib/__init__.py,sha256=
|
1
|
+
foamlib/__init__.py,sha256=xYSLuRubvL_srTiNR5-bYmOHuvUEv_y3cMIOAXMcCt8,452
|
2
2
|
foamlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
foamlib/_cases/__init__.py,sha256=_A1TTHuQfS9FH2_33lSEyLtOJZGFHZBco1tWJCVOHks,358
|
4
4
|
foamlib/_cases/_async.py,sha256=onECxRLQCF7Kd-GeuLqH_Xv3gbMMhKOSbFaUG5Ttgmk,7822
|
@@ -9,12 +9,12 @@ foamlib/_cases/_subprocess.py,sha256=6BlBRxknj2-BFcGkx7oVcuL63_utSaY1Axmsc1qV9j8
|
|
9
9
|
foamlib/_cases/_sync.py,sha256=2BJXB7Nzldb4OgPukqupgYqdceUGkI2mYhhtGPWEBrc,5901
|
10
10
|
foamlib/_cases/_util.py,sha256=tK4SM5WT3eEgGsFLnidIySbom1qowBAua9z13gipKJk,1518
|
11
11
|
foamlib/_files/__init__.py,sha256=q1vkjXnjnSZvo45jPAICpWeF2LZv5V6xfzAR6S8fS5A,96
|
12
|
-
foamlib/_files/_files.py,sha256=
|
12
|
+
foamlib/_files/_files.py,sha256=V740S36NVunULv8pnyEsJ7lIWbSjk_-LwbP7BBqFsO0,15404
|
13
13
|
foamlib/_files/_io.py,sha256=BGbbm6HKxL2ka0YMCmHqZQZ1R4PPQlkvWWb4FHMAS8k,2217
|
14
|
-
foamlib/_files/_parsing.py,sha256=
|
15
|
-
foamlib/_files/_serialization.py,sha256=
|
16
|
-
foamlib/_files/_types.py,sha256=
|
17
|
-
foamlib-0.8.
|
18
|
-
foamlib-0.8.
|
19
|
-
foamlib-0.8.
|
20
|
-
foamlib-0.8.
|
14
|
+
foamlib/_files/_parsing.py,sha256=_YCi1-ltrlQWyh5RvGDZgi47MzJ7FzFcsK6L_rAWksA,13489
|
15
|
+
foamlib/_files/_serialization.py,sha256=PvMzNyTja6OKT_GUfExTulx9nMLBjfu0-9yThCKbvxs,5227
|
16
|
+
foamlib/_files/_types.py,sha256=m-fFjJnS4sFSavDsijlXpAfEhnbh10RBumSHAT0GOgQ,3408
|
17
|
+
foamlib-0.8.4.dist-info/METADATA,sha256=YsjrAXLrG3ELANlB9PRyyHiciEJAU7rL0IP4AOsMV8A,7968
|
18
|
+
foamlib-0.8.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
19
|
+
foamlib-0.8.4.dist-info/licenses/LICENSE.txt,sha256=5Dte9TUnLZzPRs4NQzl-Jc2-Ljd-t_v0ZR5Ng5r0UsY,35131
|
20
|
+
foamlib-0.8.4.dist-info/RECORD,,
|
File without changes
|