foamlib 0.6.11__py3-none-any.whl → 0.6.13__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.
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import array
2
4
  import sys
3
5
  from typing import Tuple, Union, cast
@@ -80,19 +82,21 @@ def _keyword_entry_of(
80
82
 
81
83
  def _unpack_binary_field(
82
84
  tks: ParseResults,
83
- ) -> Sequence[Union[Sequence[float], Sequence[Sequence[float]]]]:
84
- elsize = len(tks[0]) // 8
85
+ *,
86
+ elsize: int = 1,
87
+ ) -> Sequence[Sequence[float] | Sequence[Sequence[float]]]:
88
+ float_size = len(tks[0]) // elsize
85
89
 
86
- arr = array.array("d", "".join(tks).encode("latin-1"))
90
+ arr = array.array("f" if float_size == 4 else "d", "".join(tks).encode("latin-1"))
87
91
 
88
- all: Union[Sequence[float], Sequence[Sequence[float]]]
92
+ values: Sequence[float] | Sequence[Sequence[float]]
89
93
 
90
94
  if elsize != 1:
91
- all = [arr[i : i + elsize].tolist() for i in range(0, len(arr), elsize)]
95
+ values = [arr[i : i + elsize].tolist() for i in range(0, len(arr), elsize)]
92
96
  else:
93
- all = arr.tolist()
97
+ values = arr.tolist()
94
98
 
95
- return [all]
99
+ return [values]
96
100
 
97
101
 
98
102
  _IDENTCHARS = identchars + "$"
@@ -128,45 +132,92 @@ _IDENTIFIER = Combine(
128
132
  _DIMENSIONED = (Opt(_IDENTIFIER) + _DIMENSIONS + _TENSOR).set_parse_action(
129
133
  lambda tks: FoamFileBase.Dimensioned(*reversed(tks.as_list()))
130
134
  )
131
- _FIELD = (Keyword("uniform").suppress() + _TENSOR) | (
132
- Keyword("nonuniform").suppress()
135
+ _FIELD = (Keyword("uniform", _IDENTBODYCHARS).suppress() + _TENSOR) | (
136
+ Keyword("nonuniform", _IDENTBODYCHARS).suppress()
133
137
  + (
134
138
  _list_of(_TENSOR)
135
139
  | (
136
140
  Literal("List").suppress()
137
141
  + Literal("<").suppress()
138
142
  + (
139
- counted_array(
140
- CharsNotIn(exact=8),
143
+ (
141
144
  Literal("scalar").suppress()
142
145
  + Literal(">").suppress()
143
- + common.integer
144
- + Literal("(").suppress(),
145
- )
146
- | counted_array(
147
- CharsNotIn(exact=8 * 3),
146
+ + (
147
+ (
148
+ counted_array(
149
+ CharsNotIn(exact=8),
150
+ common.integer + Literal("(").suppress(),
151
+ )
152
+ )
153
+ | (
154
+ counted_array(
155
+ CharsNotIn(exact=4),
156
+ common.integer + Literal("(").suppress(),
157
+ )
158
+ )
159
+ )
160
+ + Literal(")").suppress()
161
+ ).set_parse_action(_unpack_binary_field)
162
+ | (
148
163
  Literal("vector").suppress()
149
164
  + Literal(">").suppress()
150
- + common.integer
151
- + Literal("(").suppress(),
152
- )
153
- | counted_array(
154
- CharsNotIn(exact=8 * 6),
165
+ + (
166
+ (
167
+ counted_array(
168
+ CharsNotIn(exact=8 * 3),
169
+ common.integer + Literal("(").suppress(),
170
+ )
171
+ )
172
+ | (
173
+ counted_array(
174
+ CharsNotIn(exact=4 * 3),
175
+ common.integer + Literal("(").suppress(),
176
+ )
177
+ )
178
+ )
179
+ + Literal(")").suppress()
180
+ ).set_parse_action(lambda tks: _unpack_binary_field(tks, elsize=3))
181
+ | (
155
182
  Literal("symmTensor").suppress()
156
183
  + Literal(">").suppress()
157
- + common.integer
158
- + Literal("(").suppress(),
159
- )
160
- | counted_array(
161
- CharsNotIn(exact=8 * 9),
184
+ + (
185
+ (
186
+ counted_array(
187
+ CharsNotIn(exact=8 * 6),
188
+ common.integer + Literal("(").suppress(),
189
+ )
190
+ )
191
+ | (
192
+ counted_array(
193
+ CharsNotIn(exact=4 * 6),
194
+ common.integer + Literal("(").suppress(),
195
+ )
196
+ )
197
+ )
198
+ + Literal(")").suppress()
199
+ ).set_parse_action(lambda tks: _unpack_binary_field(tks, elsize=6))
200
+ | (
162
201
  Literal("tensor").suppress()
163
202
  + Literal(">").suppress()
164
- + common.integer
165
- + Literal("(").suppress(),
166
- )
203
+ + (
204
+ (
205
+ counted_array(
206
+ CharsNotIn(exact=8 * 9),
207
+ common.integer + Literal("(").suppress(),
208
+ )
209
+ )
210
+ | (
211
+ counted_array(
212
+ CharsNotIn(exact=4 * 9),
213
+ common.integer + Literal("(").suppress(),
214
+ )
215
+ )
216
+ )
217
+ + Literal(")").suppress()
218
+ ).set_parse_action(lambda tks: _unpack_binary_field(tks, elsize=9))
167
219
  )
168
- + Literal(")").suppress()
169
- ).set_parse_action(_unpack_binary_field)
220
+ )
170
221
  )
171
222
  )
172
223
  _TOKEN = QuotedString('"', unquote_results=False) | _IDENTIFIER
@@ -210,8 +261,8 @@ _FILE = (
210
261
  class Parsed(Mapping[Tuple[str, ...], Union[FoamFileBase._DataEntry, EllipsisType]]):
211
262
  def __init__(self, contents: bytes) -> None:
212
263
  self._parsed: MutableMapping[
213
- Tuple[str, ...],
214
- Tuple[int, Union[FoamFileBase._DataEntry, EllipsisType], int],
264
+ tuple[str, ...],
265
+ tuple[int, FoamFileBase._DataEntry | EllipsisType, int],
215
266
  ] = {}
216
267
  for parse_result in _FILE.parse_string(
217
268
  contents.decode("latin-1"), parse_all=True
@@ -223,13 +274,13 @@ class Parsed(Mapping[Tuple[str, ...], Union[FoamFileBase._DataEntry, EllipsisTyp
223
274
 
224
275
  @staticmethod
225
276
  def _flatten_result(
226
- parse_result: ParseResults, *, _keywords: Tuple[str, ...] = ()
277
+ parse_result: ParseResults, *, _keywords: tuple[str, ...] = ()
227
278
  ) -> Mapping[
228
- Tuple[str, ...], Tuple[int, Union[FoamFileBase._DataEntry, EllipsisType], int]
279
+ tuple[str, ...], tuple[int, FoamFileBase._DataEntry | EllipsisType, int]
229
280
  ]:
230
281
  ret: MutableMapping[
231
- Tuple[str, ...],
232
- Tuple[int, Union[FoamFileBase._DataEntry, EllipsisType], int],
282
+ tuple[str, ...],
283
+ tuple[int, FoamFileBase._DataEntry | EllipsisType, int],
233
284
  ] = {}
234
285
  start = parse_result.locn_start
235
286
  assert isinstance(start, int)
@@ -256,18 +307,15 @@ class Parsed(Mapping[Tuple[str, ...], Union[FoamFileBase._DataEntry, EllipsisTyp
256
307
  return ret
257
308
 
258
309
  def __getitem__(
259
- self, keywords: Union[str, Tuple[str, ...]]
260
- ) -> Union[FoamFileBase._DataEntry, EllipsisType]:
261
- if isinstance(keywords, str):
262
- keywords = (keywords,)
263
-
310
+ self, keywords: tuple[str, ...]
311
+ ) -> FoamFileBase._DataEntry | EllipsisType:
264
312
  _, data, _ = self._parsed[keywords]
265
313
  return data
266
314
 
267
315
  def put(
268
316
  self,
269
- keywords: Tuple[str, ...],
270
- data: Union[FoamFileBase._DataEntry, EllipsisType],
317
+ keywords: tuple[str, ...],
318
+ data: FoamFileBase._DataEntry | EllipsisType,
271
319
  content: bytes,
272
320
  ) -> None:
273
321
  start, end = self.entry_location(keywords, missing_ok=True)
@@ -288,10 +336,7 @@ class Parsed(Mapping[Tuple[str, ...], Union[FoamFileBase._DataEntry, EllipsisTyp
288
336
  if keywords != k and keywords == k[: len(keywords)]:
289
337
  del self._parsed[k]
290
338
 
291
- def __delitem__(self, keywords: Union[str, Tuple[str, ...]]) -> None:
292
- if isinstance(keywords, str):
293
- keywords = (keywords,)
294
-
339
+ def __delitem__(self, keywords: tuple[str, ...]) -> None:
295
340
  start, end = self.entry_location(keywords)
296
341
  del self._parsed[keywords]
297
342
 
@@ -312,15 +357,15 @@ class Parsed(Mapping[Tuple[str, ...], Union[FoamFileBase._DataEntry, EllipsisTyp
312
357
  def __contains__(self, keywords: object) -> bool:
313
358
  return keywords in self._parsed
314
359
 
315
- def __iter__(self) -> Iterator[Tuple[str, ...]]:
360
+ def __iter__(self) -> Iterator[tuple[str, ...]]:
316
361
  return iter(self._parsed)
317
362
 
318
363
  def __len__(self) -> int:
319
364
  return len(self._parsed)
320
365
 
321
366
  def entry_location(
322
- self, keywords: Tuple[str, ...], *, missing_ok: bool = False
323
- ) -> Tuple[int, int]:
367
+ self, keywords: tuple[str, ...], *, missing_ok: bool = False
368
+ ) -> tuple[int, int]:
324
369
  try:
325
370
  start, _, end = self._parsed[keywords]
326
371
  except KeyError:
@@ -1,12 +1,17 @@
1
+ from __future__ import annotations
2
+
1
3
  import array
4
+ import contextlib
2
5
  import itertools
6
+ import re
3
7
  import sys
4
8
  from enum import Enum, auto
9
+ from typing import cast, overload
5
10
 
6
11
  if sys.version_info >= (3, 9):
7
- from collections.abc import Mapping
12
+ from collections.abc import Mapping, Sequence
8
13
  else:
9
- from typing import Mapping
14
+ from typing import Mapping, Sequence
10
15
 
11
16
  from ._base import FoamFileBase
12
17
  from ._util import is_sequence
@@ -22,38 +27,111 @@ except ModuleNotFoundError:
22
27
  class Kind(Enum):
23
28
  DEFAULT = auto()
24
29
  SINGLE_ENTRY = auto()
25
- FIELD = auto()
26
- BINARY_FIELD = auto()
30
+ ASCII_FIELD = auto()
31
+ DOUBLE_PRECISION_BINARY_FIELD = auto()
32
+ SINGLE_PRECISION_BINARY_FIELD = auto()
27
33
  DIMENSIONS = auto()
28
34
 
29
35
 
36
+ _TOKENS = re.compile(r'(?:[^\s"]|"(?:[^"])*")+')
37
+
38
+
39
+ @overload
40
+ def normalize(
41
+ data: FoamFileBase._DataEntry, *, kind: Kind = Kind.DEFAULT
42
+ ) -> FoamFileBase._DataEntry: ...
43
+
44
+
45
+ @overload
46
+ def normalize(
47
+ data: FoamFileBase.Data, *, kind: Kind = Kind.DEFAULT
48
+ ) -> FoamFileBase.Data: ...
49
+
50
+
51
+ def normalize(
52
+ data: FoamFileBase.Data, *, kind: Kind = Kind.DEFAULT
53
+ ) -> FoamFileBase.Data:
54
+ if numpy and isinstance(data, np.ndarray):
55
+ ret = data.tolist()
56
+ assert isinstance(ret, list)
57
+ return ret
58
+
59
+ if kind == Kind.SINGLE_ENTRY and isinstance(data, tuple):
60
+ ret = normalize(list(data))
61
+ assert isinstance(ret, list)
62
+ return ret
63
+
64
+ if isinstance(data, Mapping):
65
+ return {k: normalize(v, kind=kind) for k, v in data.items()}
66
+
67
+ if (
68
+ kind == Kind.DIMENSIONS
69
+ and is_sequence(data)
70
+ and len(data) <= 7
71
+ and all(isinstance(d, (int, float)) for d in data)
72
+ ):
73
+ data = cast(Sequence[float], data)
74
+ return FoamFileBase.DimensionSet(*data)
75
+
76
+ if is_sequence(data) and not isinstance(data, tuple):
77
+ return [normalize(d, kind=Kind.SINGLE_ENTRY) for d in data]
78
+
79
+ if isinstance(data, str):
80
+ with contextlib.suppress(ValueError):
81
+ return int(data)
82
+
83
+ with contextlib.suppress(ValueError):
84
+ return float(data)
85
+
86
+ tokens: list[str] = re.findall(_TOKENS, data)
87
+
88
+ if len(tokens) == 1:
89
+ return tokens[0]
90
+
91
+ return tuple(tokens) if kind != Kind.SINGLE_ENTRY else " ".join(tokens)
92
+
93
+ if isinstance(data, FoamFileBase.Dimensioned):
94
+ value = normalize(data.value, kind=Kind.SINGLE_ENTRY)
95
+ assert isinstance(value, (int, float, list))
96
+ return FoamFileBase.Dimensioned(value, data.dimensions, data.name)
97
+
98
+ if isinstance(
99
+ data,
100
+ (int, float, bool, tuple, FoamFileBase.DimensionSet),
101
+ ):
102
+ return data
103
+
104
+ msg = f"Unsupported data type: {type(data)}"
105
+ raise TypeError(msg)
106
+
107
+
30
108
  def dumps(
31
109
  data: FoamFileBase.Data,
32
110
  *,
33
111
  kind: Kind = Kind.DEFAULT,
34
112
  ) -> bytes:
35
- if numpy and isinstance(data, np.ndarray):
36
- return dumps(data.tolist(), kind=kind)
113
+ data = normalize(data, kind=kind)
37
114
 
38
115
  if isinstance(data, Mapping):
39
116
  entries = []
40
117
  for k, v in data.items():
41
- b = dumps(v, kind=kind)
42
118
  if isinstance(v, Mapping):
43
- entries.append(dumps(k) + b" {" + b + b"}")
44
- elif not b:
119
+ entries.append(dumps(k) + b" {" + dumps(v) + b"}")
120
+ elif not v:
45
121
  entries.append(dumps(k) + b";")
46
122
  else:
47
- entries.append(dumps(k) + b" " + b + b";")
123
+ entries.append(dumps(k) + b" " + dumps(v) + b";")
48
124
 
49
125
  return b" ".join(entries)
50
126
 
51
- if isinstance(data, FoamFileBase.DimensionSet) or (
52
- kind == Kind.DIMENSIONS and is_sequence(data) and len(data) == 7
53
- ):
127
+ if isinstance(data, FoamFileBase.DimensionSet):
54
128
  return b"[" + b" ".join(dumps(v) for v in data) + b"]"
55
129
 
56
- if (kind == Kind.FIELD or kind == Kind.BINARY_FIELD) and (
130
+ if kind in (
131
+ Kind.ASCII_FIELD,
132
+ Kind.DOUBLE_PRECISION_BINARY_FIELD,
133
+ Kind.SINGLE_PRECISION_BINARY_FIELD,
134
+ ) and (
57
135
  isinstance(data, (int, float))
58
136
  or is_sequence(data)
59
137
  and data
@@ -62,25 +140,40 @@ def dumps(
62
140
  ):
63
141
  return b"uniform " + dumps(data, kind=Kind.SINGLE_ENTRY)
64
142
 
65
- if (kind == Kind.FIELD or kind == Kind.BINARY_FIELD) and is_sequence(data):
66
- if isinstance(data[0], (int, float)):
143
+ if kind in (
144
+ Kind.ASCII_FIELD,
145
+ Kind.DOUBLE_PRECISION_BINARY_FIELD,
146
+ Kind.SINGLE_PRECISION_BINARY_FIELD,
147
+ ) and is_sequence(data):
148
+ if data and isinstance(data[0], (int, float)):
67
149
  tensor_kind = b"scalar"
68
- elif len(data[0]) == 3:
69
- tensor_kind = b"vector"
70
- elif len(data[0]) == 6:
71
- tensor_kind = b"symmTensor"
72
- elif len(data[0]) == 9:
73
- tensor_kind = b"tensor"
150
+ elif is_sequence(data[0]) and data[0] and isinstance(data[0][0], (int, float)):
151
+ if len(data[0]) == 3:
152
+ tensor_kind = b"vector"
153
+ elif len(data[0]) == 6:
154
+ tensor_kind = b"symmTensor"
155
+ elif len(data[0]) == 9:
156
+ tensor_kind = b"tensor"
157
+ else:
158
+ return dumps(data)
74
159
  else:
75
160
  return dumps(data)
76
161
 
77
- if kind == Kind.BINARY_FIELD:
162
+ if kind in (
163
+ Kind.DOUBLE_PRECISION_BINARY_FIELD,
164
+ Kind.SINGLE_PRECISION_BINARY_FIELD,
165
+ ):
166
+ typecode = "f" if kind == Kind.SINGLE_PRECISION_BINARY_FIELD else "d"
78
167
  if tensor_kind == b"scalar":
79
- contents = b"(" + array.array("d", data).tobytes() + b")"
168
+ data = cast(Sequence[float], data)
169
+ contents = b"(" + array.array(typecode, data).tobytes() + b")"
80
170
  else:
171
+ data = cast(Sequence[Sequence[float]], data)
81
172
  contents = (
82
173
  b"("
83
- + array.array("d", itertools.chain.from_iterable(data)).tobytes()
174
+ + array.array(
175
+ typecode, itertools.chain.from_iterable(data)
176
+ ).tobytes()
84
177
  + b")"
85
178
  )
86
179
  else:
@@ -88,9 +181,6 @@ def dumps(
88
181
 
89
182
  return b"nonuniform List<" + tensor_kind + b"> " + dumps(len(data)) + contents
90
183
 
91
- if kind != Kind.SINGLE_ENTRY and isinstance(data, tuple):
92
- return b" ".join(dumps(v) for v in data)
93
-
94
184
  if isinstance(data, FoamFileBase.Dimensioned):
95
185
  if data.name is not None:
96
186
  return (
@@ -106,6 +196,9 @@ def dumps(
106
196
  + dumps(data.value, kind=Kind.SINGLE_ENTRY)
107
197
  )
108
198
 
199
+ if isinstance(data, tuple):
200
+ return b" ".join(dumps(v) for v in data)
201
+
109
202
  if is_sequence(data):
110
203
  return b"(" + b" ".join(dumps(v, kind=Kind.SINGLE_ENTRY) for v in data) + b")"
111
204
 
foamlib/_files/_util.py CHANGED
@@ -1,5 +1,7 @@
1
+ from __future__ import annotations
2
+
1
3
  import sys
2
- from typing import Any
4
+ from typing import TYPE_CHECKING
3
5
 
4
6
  if sys.version_info >= (3, 9):
5
7
  from collections.abc import Sequence
@@ -11,8 +13,11 @@ if sys.version_info >= (3, 10):
11
13
  else:
12
14
  from typing_extensions import TypeGuard
13
15
 
16
+ if TYPE_CHECKING:
17
+ from ._base import FoamFileBase
18
+
14
19
 
15
20
  def is_sequence(
16
- value: Any,
17
- ) -> TypeGuard[Sequence[Any]]:
21
+ value: FoamFileBase.Data,
22
+ ) -> TypeGuard[Sequence[FoamFileBase.Data]]:
18
23
  return isinstance(value, Sequence) and not isinstance(value, str)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: foamlib
3
- Version: 0.6.11
3
+ Version: 0.6.13
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
@@ -0,0 +1,22 @@
1
+ foamlib/__init__.py,sha256=QdspvCoifzrxd6lYysyhLGr4QIan-fYuWBPYDol5YgI,487
2
+ foamlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ foamlib/_cases/__init__.py,sha256=wTUHcUgU1CBgpu0cUMtksQ5VKG6B8CFu9xc3dWwsQuo,358
4
+ foamlib/_cases/_async.py,sha256=i6g4EBHqvI-1PkdrxsRto2ynW7sxsOga2bSYk1XVG1U,7795
5
+ foamlib/_cases/_base.py,sha256=FKfZxP7HspWfSswQ6yZ5bGJRdZUlupQxj2tDqngXPmc,6785
6
+ foamlib/_cases/_run.py,sha256=lveqKZium_qK_eTxYE8jOjwx0eiIoolCBbi56-zLw1o,14420
7
+ foamlib/_cases/_slurm.py,sha256=kj4wqgr3foMyAoUkoHOZODRBmVqH1B9KqAIEEjM8ZBg,2328
8
+ foamlib/_cases/_subprocess.py,sha256=6BlBRxknj2-BFcGkx7oVcuL63_utSaY1Axmsc1qV9j8,3887
9
+ foamlib/_cases/_sync.py,sha256=2BJXB7Nzldb4OgPukqupgYqdceUGkI2mYhhtGPWEBrc,5901
10
+ foamlib/_cases/_util.py,sha256=lhVca3ERY0zwYjDam6W2QMROt0yX5vAF-9_DS5RuMbM,1547
11
+ foamlib/_files/__init__.py,sha256=-UqB9YTH6mrJfXCX00kPTAAY20XG64u1MGPw_1ewLVs,148
12
+ foamlib/_files/_base.py,sha256=ZY_6Zxr3LZHVzJEex6SUTi9Pgo7Oi7i3Jo-wre9G3yE,1968
13
+ foamlib/_files/_files.py,sha256=oYRlMfCUH9oNeu-yf2HAPmLxLHteIe7gHhsWXdn7wU0,15767
14
+ foamlib/_files/_io.py,sha256=IQLqoqnA1TpHf21NbUho2wsYWevyqC6MKo-wfpaObUU,2226
15
+ foamlib/_files/_parsing.py,sha256=vFOKf2Rf3Z8Vr7TtDXOUq-dLxWAQzMeKVyYQcl91P2s,12991
16
+ foamlib/_files/_serialization.py,sha256=p2yRpyyOAOKP7P6T7BLEgRVvORuzQEcv_P6dEsOZ9_8,5981
17
+ foamlib/_files/_util.py,sha256=VXUTD0B3NbnlaE_KCqWzrFcWvBz_2JfnIWpNp3snX3Y,526
18
+ foamlib-0.6.13.dist-info/LICENSE.txt,sha256=5Dte9TUnLZzPRs4NQzl-Jc2-Ljd-t_v0ZR5Ng5r0UsY,35131
19
+ foamlib-0.6.13.dist-info/METADATA,sha256=iWdp-dZBC-MJYEufP-ouDdsp3fy8CMfbXQWXM_EsWYo,7742
20
+ foamlib-0.6.13.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
21
+ foamlib-0.6.13.dist-info/top_level.txt,sha256=ZdVYtetXGwPwyfL-WhlhbTFQGAwKX5P_gXxtH9JYFPI,8
22
+ foamlib-0.6.13.dist-info/RECORD,,
@@ -1,22 +0,0 @@
1
- foamlib/__init__.py,sha256=tS4b8eyl8WWPCCt7EmgXM2lcx8V1Zead47kwB3zJlNY,487
2
- foamlib/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- foamlib/_cases/__init__.py,sha256=wTUHcUgU1CBgpu0cUMtksQ5VKG6B8CFu9xc3dWwsQuo,358
4
- foamlib/_cases/_async.py,sha256=oQ2XnD9sansJLJDuUl3_vHaUM4L9hq2G97IcRjQAOPY,7920
5
- foamlib/_cases/_base.py,sha256=HV7ifv60pAhgZdC3s5IxvdrDQ2vvlhzPwyB-80QQLe8,6733
6
- foamlib/_cases/_run.py,sha256=XFDBr5G1hJo0402RcZClLL_rv0d5jVgq2be25FgZcyQ,14725
7
- foamlib/_cases/_slurm.py,sha256=pUXcFSrwOK5URsoooiUOJg61X0WLLNHyv7bhUxIb7Bs,2346
8
- foamlib/_cases/_subprocess.py,sha256=tzsBGe44EnQw3GWqRW1ktEZ4sNQ1sSHdJ_89zIfF5L0,3952
9
- foamlib/_cases/_sync.py,sha256=ENvn8zseRh6YOjAgqXHzmKhKFYXdzGIW5NoMHS_NKPY,6049
10
- foamlib/_cases/_util.py,sha256=GNndpqw3Jg_S-Hxzl5vwRgD0czcTNb9NYHMhcfBoMBg,1493
11
- foamlib/_files/__init__.py,sha256=-UqB9YTH6mrJfXCX00kPTAAY20XG64u1MGPw_1ewLVs,148
12
- foamlib/_files/_base.py,sha256=A8084rU92w9Hh2BZAEIdE31qvm15fto1qOyQJhrP5DI,1945
13
- foamlib/_files/_files.py,sha256=rvhb9mZFg1z6JSpb02E_8B2YD7Zmt5hh2v7rq19qC_c,14712
14
- foamlib/_files/_io.py,sha256=07gaGhoJuXDB9i4AxvnIT_Np71RAU2ut2G5Lcyx8TaU,2244
15
- foamlib/_files/_parsing.py,sha256=pqwWzlZwCTe7PxncYywO3OWd9Ppl9Oq8JYVpofxKJsY,11046
16
- foamlib/_files/_serialization.py,sha256=Gy9v3iZGD-RF3pS7rauft7fpT33UIzRuOm0XH4rFHvA,3337
17
- foamlib/_files/_util.py,sha256=UMzXmTFgvbp46w6k3oEZJoYC98pFgEK6LN5uLOwrlCg,397
18
- foamlib-0.6.11.dist-info/LICENSE.txt,sha256=5Dte9TUnLZzPRs4NQzl-Jc2-Ljd-t_v0ZR5Ng5r0UsY,35131
19
- foamlib-0.6.11.dist-info/METADATA,sha256=VGwnlinUiBszBq9RzNnRWvWx0hkO9ziOY4jaKNmoJwc,7742
20
- foamlib-0.6.11.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
21
- foamlib-0.6.11.dist-info/top_level.txt,sha256=ZdVYtetXGwPwyfL-WhlhbTFQGAwKX5P_gXxtH9JYFPI,8
22
- foamlib-0.6.11.dist-info/RECORD,,