foamlib 0.1.6__py3-none-any.whl → 0.1.7__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/_cases.py +0 -1
- foamlib/_dictionaries.py +39 -101
- {foamlib-0.1.6.dist-info → foamlib-0.1.7.dist-info}/METADATA +4 -1
- foamlib-0.1.7.dist-info/RECORD +10 -0
- foamlib-0.1.6.dist-info/RECORD +0 -10
- {foamlib-0.1.6.dist-info → foamlib-0.1.7.dist-info}/LICENSE.txt +0 -0
- {foamlib-0.1.6.dist-info → foamlib-0.1.7.dist-info}/WHEEL +0 -0
- {foamlib-0.1.6.dist-info → foamlib-0.1.7.dist-info}/top_level.txt +0 -0
foamlib/__init__.py
CHANGED
foamlib/_cases.py
CHANGED
foamlib/_dictionaries.py
CHANGED
@@ -23,6 +23,7 @@ except ModuleNotFoundError:
|
|
23
23
|
else:
|
24
24
|
numpy = True
|
25
25
|
|
26
|
+
from pyparsing import Group, Keyword, Opt, ZeroOrMore, Literal, Forward, common
|
26
27
|
|
27
28
|
FoamDimensionSet = namedtuple(
|
28
29
|
"FoamDimensionSet",
|
@@ -63,108 +64,45 @@ FoamValue = Union[
|
|
63
64
|
A value that can be stored in an OpenFOAM dictionary.
|
64
65
|
"""
|
65
66
|
|
67
|
+
_yes = Keyword("yes").set_parse_action(lambda s, loc, tks: True)
|
68
|
+
_no = Keyword("no").set_parse_action(lambda s, loc, tks: False)
|
69
|
+
_value = Forward()
|
70
|
+
_list = (
|
71
|
+
Opt(common.integer).suppress()
|
72
|
+
+ Literal("(").suppress()
|
73
|
+
+ Group(ZeroOrMore(_value))
|
74
|
+
+ Literal(")").suppress()
|
75
|
+
)
|
76
|
+
_uniform_field = Keyword("uniform").suppress() + _value
|
77
|
+
_nonuniform_field = (
|
78
|
+
Keyword("nonuniform").suppress()
|
79
|
+
+ Literal("List<").suppress()
|
80
|
+
+ common.identifier.suppress()
|
81
|
+
+ Literal(">").suppress()
|
82
|
+
+ _list
|
83
|
+
)
|
84
|
+
_dimensions = (
|
85
|
+
Literal("[").suppress() + common.number * 7 + Literal("]").suppress()
|
86
|
+
).set_parse_action(lambda s, loc, tks: FoamDimensionSet(*tks))
|
87
|
+
_dimensioned = (common.identifier + _dimensions + _value).set_parse_action(
|
88
|
+
lambda s, loc, tks: FoamDimensioned(tks[0], tks[1], tks[2].as_list())
|
89
|
+
)
|
66
90
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
return int(value)
|
79
|
-
with suppress(ValueError):
|
80
|
-
return float(value)
|
81
|
-
raise ValueError(f"Cannot parse '{value}' as a number")
|
82
|
-
|
83
|
-
|
84
|
-
def _parse_sequence(value: str) -> Sequence[FoamValue]:
|
85
|
-
start = value.find("(")
|
86
|
-
if start != -1:
|
87
|
-
assert value.endswith(")")
|
88
|
-
seq = []
|
89
|
-
nested = 0
|
90
|
-
start += 1
|
91
|
-
for i, c in enumerate(value[start:], start=start):
|
92
|
-
if c == "(":
|
93
|
-
nested += 1
|
94
|
-
elif c == ")":
|
95
|
-
nested -= 1
|
96
|
-
if c.isspace() and not nested:
|
97
|
-
v = value[start:i].strip()
|
98
|
-
if v:
|
99
|
-
seq.append(_parse(v))
|
100
|
-
start = i + 1
|
101
|
-
|
102
|
-
v = value[start:-1].strip()
|
103
|
-
if v:
|
104
|
-
seq.append(_parse(v))
|
105
|
-
|
106
|
-
return seq
|
107
|
-
|
108
|
-
else:
|
109
|
-
raise ValueError(f"Cannot parse '{value}' as a sequence")
|
110
|
-
|
111
|
-
|
112
|
-
def _parse_field(value: str) -> FoamValue:
|
113
|
-
if value.startswith("uniform "):
|
114
|
-
value = value[len("uniform ") :]
|
115
|
-
return _parse(value)
|
116
|
-
elif value.startswith("nonuniform "):
|
117
|
-
value = value[len("nonuniform ") :]
|
118
|
-
return _parse_sequence(value)
|
119
|
-
else:
|
120
|
-
raise ValueError(f"Cannot parse '{value}' as a field")
|
121
|
-
|
122
|
-
|
123
|
-
def _parse_dimensions(value: str) -> FoamDimensionSet:
|
124
|
-
if value.startswith("["):
|
125
|
-
assert value.endswith("]")
|
126
|
-
return FoamDimensionSet(*(_parse_number(v) for v in value[1:-1].split()))
|
127
|
-
else:
|
128
|
-
raise ValueError(f"Cannot parse '{value}' as a dimension set")
|
129
|
-
|
130
|
-
|
131
|
-
def _parse_dimensioned(value: str) -> FoamDimensioned:
|
132
|
-
start = value.find("[", 1)
|
133
|
-
if start != -1:
|
134
|
-
name = value[:start].strip()
|
135
|
-
end = value.find("]", start)
|
136
|
-
if end != -1:
|
137
|
-
dimensions = _parse_dimensions(value[start : end + 1])
|
138
|
-
value = value[end + 1 :].strip()
|
139
|
-
return FoamDimensioned(
|
140
|
-
name,
|
141
|
-
dimensions,
|
142
|
-
cast(Union[int, float, Sequence[Union[int, float]]], _parse(value)),
|
143
|
-
)
|
144
|
-
|
145
|
-
raise ValueError(f"Cannot parse '{value}' as a dimensioned value")
|
91
|
+
_value << (
|
92
|
+
_uniform_field
|
93
|
+
| _nonuniform_field
|
94
|
+
| _list
|
95
|
+
| _dimensioned
|
96
|
+
| _dimensions
|
97
|
+
| common.number
|
98
|
+
| _yes
|
99
|
+
| _no
|
100
|
+
| common.identifier
|
101
|
+
)
|
146
102
|
|
147
103
|
|
148
104
|
def _parse(value: str) -> FoamValue:
|
149
|
-
|
150
|
-
return _parse_bool(value)
|
151
|
-
|
152
|
-
with suppress(ValueError):
|
153
|
-
return _parse_field(value)
|
154
|
-
|
155
|
-
with suppress(ValueError):
|
156
|
-
return _parse_number(value)
|
157
|
-
|
158
|
-
with suppress(ValueError):
|
159
|
-
return _parse_dimensions(value)
|
160
|
-
|
161
|
-
with suppress(ValueError):
|
162
|
-
return _parse_dimensioned(value)
|
163
|
-
|
164
|
-
with suppress(ValueError):
|
165
|
-
return _parse_sequence(value)
|
166
|
-
|
167
|
-
return value
|
105
|
+
return cast(FoamValue, _value.parse_string(value, parse_all=True).as_list()[0])
|
168
106
|
|
169
107
|
|
170
108
|
def _serialize_bool(value: Any) -> str:
|
@@ -176,7 +114,7 @@ def _serialize_bool(value: Any) -> str:
|
|
176
114
|
raise TypeError(f"Not a bool: {type(value)}")
|
177
115
|
|
178
116
|
|
179
|
-
def
|
117
|
+
def _serialize_list(sequence: Any) -> str:
|
180
118
|
if (
|
181
119
|
isinstance(sequence, Sequence)
|
182
120
|
and not isinstance(sequence, str)
|
@@ -193,7 +131,7 @@ def _serialize_field(value: Any) -> str:
|
|
193
131
|
return f"uniform {value}"
|
194
132
|
else:
|
195
133
|
try:
|
196
|
-
s =
|
134
|
+
s = _serialize_list(value)
|
197
135
|
except TypeError:
|
198
136
|
raise TypeError(f"Not a valid field: {type(value)}") from None
|
199
137
|
else:
|
@@ -249,7 +187,7 @@ def _serialize(
|
|
249
187
|
return _serialize_dimensioned(value)
|
250
188
|
|
251
189
|
with suppress(TypeError):
|
252
|
-
return
|
190
|
+
return _serialize_list(value)
|
253
191
|
|
254
192
|
with suppress(TypeError):
|
255
193
|
return _serialize_bool(value)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: foamlib
|
3
|
-
Version: 0.1.
|
3
|
+
Version: 0.1.7
|
4
4
|
Summary: A Python interface for interacting with OpenFOAM
|
5
5
|
Author-email: "Gabriel S. Gerlero" <ggerlero@cimec.unl.edu.ar>
|
6
6
|
Project-URL: Homepage, https://github.com/gerlero/foamlib
|
@@ -26,6 +26,7 @@ Requires-Python: >=3.7
|
|
26
26
|
Description-Content-Type: text/markdown
|
27
27
|
License-File: LICENSE.txt
|
28
28
|
Requires-Dist: aioshutil <2,>=1
|
29
|
+
Requires-Dist: pyparsing <4,>=3
|
29
30
|
Provides-Extra: docs
|
30
31
|
Requires-Dist: sphinx <8,>=7 ; extra == 'docs'
|
31
32
|
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
|
@@ -36,6 +37,8 @@ Requires-Dist: pytest <9,>=7 ; extra == 'lint'
|
|
36
37
|
Requires-Dist: pytest-asyncio <0.24,>=0.21 ; extra == 'lint'
|
37
38
|
Requires-Dist: numpy <2,>=1 ; extra == 'lint'
|
38
39
|
Requires-Dist: black ; extra == 'lint'
|
40
|
+
Requires-Dist: flake8 ; extra == 'lint'
|
41
|
+
Requires-Dist: Flake8-pyproject ; extra == 'lint'
|
39
42
|
Provides-Extra: test
|
40
43
|
Requires-Dist: pytest <9,>=7 ; extra == 'test'
|
41
44
|
Requires-Dist: pytest-asyncio <0.24,>=0.21 ; extra == 'test'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
foamlib/__init__.py,sha256=4M78qiB1De99KYGW79G2QuvIQxP54HQ9fNaVeRcf-eo,550
|
2
|
+
foamlib/_cases.py,sha256=Q5c8vPzKT5coOy4q_H6s5gHgEArhLHByh6GSvDVCRdY,20683
|
3
|
+
foamlib/_dictionaries.py,sha256=IVq2dTEhSGKUVgBEIttk4NotE1FxQ5igY99rjPw-EcI,12871
|
4
|
+
foamlib/_subprocesses.py,sha256=5vqdQvpN_2v4GgDqxi-s88NGhZ6doFxkh0XY89ZWuHA,1926
|
5
|
+
foamlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
+
foamlib-0.1.7.dist-info/LICENSE.txt,sha256=5Dte9TUnLZzPRs4NQzl-Jc2-Ljd-t_v0ZR5Ng5r0UsY,35131
|
7
|
+
foamlib-0.1.7.dist-info/METADATA,sha256=tMiYqlMCkMvqhKrtKdnSZckprsZwIhX_guIOFqsljac,4526
|
8
|
+
foamlib-0.1.7.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
9
|
+
foamlib-0.1.7.dist-info/top_level.txt,sha256=ZdVYtetXGwPwyfL-WhlhbTFQGAwKX5P_gXxtH9JYFPI,8
|
10
|
+
foamlib-0.1.7.dist-info/RECORD,,
|
foamlib-0.1.6.dist-info/RECORD
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
foamlib/__init__.py,sha256=JgLq3i2DqpIp1R2I1z_aWDmUTDHhwXvWFCuPsQ5ZBqo,550
|
2
|
-
foamlib/_cases.py,sha256=NhtIOPumR_iWR9tL8K7WO2UVjB14WIacnaxnoa4EjYY,20696
|
3
|
-
foamlib/_dictionaries.py,sha256=ZjNDEe-ls8pSxqvV6qtO0XRBBTfkj-8U6igNHbtXvqs,14523
|
4
|
-
foamlib/_subprocesses.py,sha256=5vqdQvpN_2v4GgDqxi-s88NGhZ6doFxkh0XY89ZWuHA,1926
|
5
|
-
foamlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
foamlib-0.1.6.dist-info/LICENSE.txt,sha256=5Dte9TUnLZzPRs4NQzl-Jc2-Ljd-t_v0ZR5Ng5r0UsY,35131
|
7
|
-
foamlib-0.1.6.dist-info/METADATA,sha256=3Bkce079R0PXo5Leq9G9ZyuncUrOXTJXww73RtDP2wQ,4404
|
8
|
-
foamlib-0.1.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
9
|
-
foamlib-0.1.6.dist-info/top_level.txt,sha256=ZdVYtetXGwPwyfL-WhlhbTFQGAwKX5P_gXxtH9JYFPI,8
|
10
|
-
foamlib-0.1.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|