tecio-python 0.2.1__py3-none-any.whl → 0.2.2__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.
- tecio/_containers.py +2 -2
- tecio/_io.py +46 -38
- tecio/_meta.py +4 -4
- tecio/cli/__init__.py +3 -3
- tecio/cli/tec2mat.py +21 -21
- tecio/cli/tecaux.py +322 -51
- tecio/cli/tecdump.py +4 -4
- tecio/cli/tecextract.py +6 -6
- tecio/cli/tecfix.py +4 -4
- tecio/cli/tecmerge.py +12 -12
- tecio/cli/teconvert.py +3 -3
- tecio/cli/tecscale.py +7 -7
- tecio/cli/tecslice.py +12 -12
- tecio/cli/tecstats.py +4 -4
- tecio/dat/__init__.py +1 -1
- tecio/dat/_read.py +17 -17
- tecio/dat/_write.py +22 -22
- tecio/libtecio.py +1 -1
- tecio/plt/_read.py +21 -21
- tecio/plt/_write.py +35 -35
- tecio/szl/_read.py +3 -3
- tecio/szl/_write.py +28 -28
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/METADATA +1 -1
- tecio_python-0.2.2.dist-info/RECORD +33 -0
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/licenses/NOTICE +2 -2
- tecio_python-0.2.1.dist-info/RECORD +0 -33
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/WHEEL +0 -0
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/entry_points.txt +0 -0
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/licenses/LICENSE +0 -0
- {tecio_python-0.2.1.dist-info → tecio_python-0.2.2.dist-info}/top_level.txt +0 -0
tecio/plt/_read.py
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
r"""Native binary reader for Tecplot PLT (``.plt``) files.
|
|
2
2
|
|
|
3
3
|
This module provides a pure-Python / NumPy reader for Tecplot PLT binary files (format
|
|
4
|
-
versions v112 and v191).
|
|
4
|
+
versions v112 and v191). It is a **standalone debugging module** intended to be
|
|
5
5
|
integrated into the existing :mod:`plt` module once validated.
|
|
6
6
|
|
|
7
7
|
Notes:
|
|
8
8
|
* **No byte-swapping boilerplate.** The INT32 value of ``1`` written immediately
|
|
9
|
-
after the magic number is used to detect endianness at open time.
|
|
9
|
+
after the magic number is used to detect endianness at open time. All subsequent
|
|
10
10
|
reads use the correct NumPy byte-order prefix (``"<"`` or ``">"``).
|
|
11
11
|
* **Lazy variable data.** Zone and variable *metadata* is parsed during ``__init__``
|
|
12
|
-
and stored as lightweight dataclass attributes.
|
|
12
|
+
and stored as lightweight dataclass attributes. Actual numeric data is read from
|
|
13
13
|
disk only when ``.values`` (or ``.get_values()``) is called, matching the
|
|
14
14
|
behaviour of :class:`szl.ReadVariable`.
|
|
15
15
|
* **No text / geometry support.** Header records with markers 399.0 (geometry) and
|
|
16
16
|
499.0 (text) are detected and skipped without parsing their contents.
|
|
17
17
|
* **v112 and v191 zone headers.** Zone marker ``299.0`` → v112 header; ``298.0`` →
|
|
18
|
-
v191 header.
|
|
18
|
+
v191 header. Both are fully supported.
|
|
19
19
|
|
|
20
20
|
Limitations
|
|
21
21
|
* FEPOLYGON and FEPOLYHEDRON zones are parsed for metadata but face-map reading is
|
|
@@ -92,7 +92,7 @@ _DATATYPE_DTYPE: dict[DataType, str] = {
|
|
|
92
92
|
DataType.BYTE: "u1",
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
# PLT format variable location integers → ValueLocation enum.
|
|
95
|
+
# PLT format variable location integers → ValueLocation enum. The PLT spec uses 0 =
|
|
96
96
|
# Node, 1 = Cell Centered (format guide §IV.iv), which is the opposite of the
|
|
97
97
|
# ValueLocation enum (CELL_CENTERED=0, NODAL=1).
|
|
98
98
|
_PLT_VALUELOCATION_MAP: dict[int, ValueLocation] = {
|
|
@@ -155,7 +155,7 @@ def _read_string(fp: io.BufferedIOBase, byte_order: str) -> str:
|
|
|
155
155
|
"""Read a null-terminated string stored as INT32 code-points.
|
|
156
156
|
|
|
157
157
|
The PLT format stores each character as a 4-byte integer (see Note 1 of the format
|
|
158
|
-
spec).
|
|
158
|
+
spec). The string is terminated by a zero INT32.
|
|
159
159
|
"""
|
|
160
160
|
chars: list[str] = []
|
|
161
161
|
while True:
|
|
@@ -250,7 +250,7 @@ class _ZoneMeta:
|
|
|
250
250
|
class ReadAuxData:
|
|
251
251
|
"""Dictionary-like interface for PLT auxiliary data.
|
|
252
252
|
|
|
253
|
-
Values are stored as plain Python strings.
|
|
253
|
+
Values are stored as plain Python strings. Convenience converters ``as_int``,
|
|
254
254
|
``as_float``, and ``as_bool`` are provided to match the :class:`szl.ReadAuxData`
|
|
255
255
|
API.
|
|
256
256
|
"""
|
|
@@ -376,11 +376,11 @@ class ReadVariable:
|
|
|
376
376
|
def _resolve_data_meta(self) -> _ZoneMeta | None:
|
|
377
377
|
"""Return the :class:`_ZoneMeta` that owns this variable's data.
|
|
378
378
|
|
|
379
|
-
For a variable this zone stores itself this is simply ``self._meta``.
|
|
379
|
+
For a variable this zone stores itself this is simply ``self._meta``. For a
|
|
380
380
|
shared variable, the chain of per-variable ``shared_zone`` references is
|
|
381
381
|
followed to the owning zone (with a cycle/range guard against malformed
|
|
382
382
|
files) -- the variable-level analogue of
|
|
383
|
-
:meth:`ReadZone._resolve_connectivity_meta`.
|
|
383
|
+
:meth:`ReadZone._resolve_connectivity_meta`. Returns ``None`` when the
|
|
384
384
|
share cannot be resolved, e.g. when ``all_metas`` was not supplied at
|
|
385
385
|
construction.
|
|
386
386
|
"""
|
|
@@ -511,7 +511,7 @@ class ReadVariable:
|
|
|
511
511
|
return None
|
|
512
512
|
|
|
513
513
|
# Resolve to the zone that actually owns this variable's data (self for unshared
|
|
514
|
-
# variables, the share-chain source otherwise).
|
|
514
|
+
# variables, the share-chain source otherwise). The resolved meta describes the
|
|
515
515
|
# on-disk block being read, so it also drives the count, dtype, and ordered-zone
|
|
516
516
|
# reshape/ghost-trim logic below.
|
|
517
517
|
meta = self._resolve_data_meta()
|
|
@@ -561,7 +561,7 @@ class ReadVariable:
|
|
|
561
561
|
if full_read and meta.zone_type == ZoneType.ORDERED:
|
|
562
562
|
ni, nj, nk = meta.i_max, meta.j_max, meta.k_max
|
|
563
563
|
if meta.value_locations[self.var_index - 1] == ValueLocation.CELL_CENTERED:
|
|
564
|
-
# On disk: i * j * (k-1) values in Fortran order.
|
|
564
|
+
# On disk: i * j * (k-1) values in Fortran order. Ghost padding
|
|
565
565
|
# occupies the last row in I and J after reshape, so reshape to (ni, nj,
|
|
566
566
|
# nk-1) then slice to (ni-1, nj-1, nk-1) to discard the ghost values and
|
|
567
567
|
# return only significant cells.
|
|
@@ -727,7 +727,7 @@ class ReadZone:
|
|
|
727
727
|
) -> npt.NDArray | None | tuple[npt.NDArray | None, ...]:
|
|
728
728
|
"""Return variable data array(s) for this zone.
|
|
729
729
|
|
|
730
|
-
A single key (0-based index or exact name) returns one array.
|
|
730
|
+
A single key (0-based index or exact name) returns one array. A list of exact
|
|
731
731
|
names returns a tuple of arrays in the order given, suitable for unpacking::
|
|
732
732
|
|
|
733
733
|
p = zone.get_array("p")
|
|
@@ -735,7 +735,7 @@ class ReadZone:
|
|
|
735
735
|
|
|
736
736
|
Returns:
|
|
737
737
|
One array (or ``None`` if the variable is passive or shared) for a scalar
|
|
738
|
-
key; a tuple of such arrays for a list of names.
|
|
738
|
+
key; a tuple of such arrays for a list of names. A single-element list
|
|
739
739
|
yields a 1-tuple, not a bare array.
|
|
740
740
|
|
|
741
741
|
Raises:
|
|
@@ -750,10 +750,10 @@ class ReadZone:
|
|
|
750
750
|
def _resolve_connectivity_meta(self) -> _ZoneMeta | None:
|
|
751
751
|
"""Return the :class:`_ZoneMeta` that owns this zone's connectivity.
|
|
752
752
|
|
|
753
|
-
For a zone with its own connectivity this is simply ``self._meta``.
|
|
753
|
+
For a zone with its own connectivity this is simply ``self._meta``. For a zone
|
|
754
754
|
that shares connectivity, the chain of ``connectivity_shared_zone`` references
|
|
755
755
|
is followed to the owning zone (with a cycle/range guard against malformed
|
|
756
|
-
files).
|
|
756
|
+
files). Returns ``None`` when the share cannot be resolved -- e.g. when
|
|
757
757
|
``all_metas`` was not supplied at construction.
|
|
758
758
|
"""
|
|
759
759
|
meta = self._meta
|
|
@@ -839,7 +839,7 @@ class ReadZone:
|
|
|
839
839
|
class _PltParser:
|
|
840
840
|
"""Low-level PLT binary parser.
|
|
841
841
|
|
|
842
|
-
Called once from :class:`Read.__init__`.
|
|
842
|
+
Called once from :class:`Read.__init__`. After construction the following
|
|
843
843
|
attributes are available:
|
|
844
844
|
|
|
845
845
|
=================== ===============================================
|
|
@@ -1137,7 +1137,7 @@ class _PltParser:
|
|
|
1137
1137
|
def _parse_data_section(self, fp: io.BufferedIOBase) -> None:
|
|
1138
1138
|
"""Parse the data section and record variable file offsets.
|
|
1139
1139
|
|
|
1140
|
-
The EOHMARKER has already been consumed by :meth:`_parse_header`.
|
|
1140
|
+
The EOHMARKER has already been consumed by :meth:`_parse_header`. We iterate
|
|
1141
1141
|
over zones in declaration order, matching each data block to the corresponding
|
|
1142
1142
|
:class:`_ZoneMeta` in ``self.zones``.
|
|
1143
1143
|
"""
|
|
@@ -1201,7 +1201,7 @@ class _PltParser:
|
|
|
1201
1201
|
"""Record file offsets for each active variable data block.
|
|
1202
1202
|
|
|
1203
1203
|
Data is stored in **block** order (all values for variable 0, then all values
|
|
1204
|
-
for variable 1, …).
|
|
1204
|
+
for variable 1, …). We seek rather than read so we do not load the data into
|
|
1205
1205
|
memory.
|
|
1206
1206
|
"""
|
|
1207
1207
|
for v in range(num_vars):
|
|
@@ -1228,7 +1228,7 @@ class _PltParser:
|
|
|
1228
1228
|
"""Return the number of values on disk for variable *var_idx*.
|
|
1229
1229
|
|
|
1230
1230
|
For cell-centered variables in ORDERED zones the PLT format writes ``IMax * JMax
|
|
1231
|
-
* (KMax - 1)`` values on disk (see Note 5 of the format spec).
|
|
1231
|
+
* (KMax - 1)`` values on disk (see Note 5 of the format spec). The significant
|
|
1232
1232
|
cell count is ``(I-1) * (J-1) * (K-1)``; the remainder are ghost (zero-padded)
|
|
1233
1233
|
values that are trimmed in :meth:`ReadVariable.get_values` after reshaping.
|
|
1234
1234
|
|
|
@@ -1242,7 +1242,7 @@ class _PltParser:
|
|
|
1242
1242
|
j = max(meta.j_max, 1)
|
|
1243
1243
|
k = max(meta.k_max, 1)
|
|
1244
1244
|
if loc == ValueLocation.CELL_CENTERED:
|
|
1245
|
-
# PLT Note 5: IMax * JMax * (KMax - 1) values on disk.
|
|
1245
|
+
# PLT Note 5: IMax * JMax * (KMax - 1) values on disk. Only K is
|
|
1246
1246
|
# reduced; I and J retain their full extent as ghost padding in the
|
|
1247
1247
|
# Fortran-order layout.
|
|
1248
1248
|
return i * j * max(k - 1, 1)
|
|
@@ -1427,7 +1427,7 @@ class Read:
|
|
|
1427
1427
|
"""Context manager protocol for read-only file interfaces.
|
|
1428
1428
|
|
|
1429
1429
|
Read classes hold no open file handle between accesses, so there is nothing to
|
|
1430
|
-
release on exit.
|
|
1430
|
+
release on exit. Provided for API consistency with the Write classes and to
|
|
1431
1431
|
support the ``with tecio.open(...) as r:`` pattern.
|
|
1432
1432
|
"""
|
|
1433
1433
|
pass
|
tecio/plt/_write.py
CHANGED
|
@@ -82,7 +82,7 @@ def _normalize_precision(precision: DataType | str) -> DataType:
|
|
|
82
82
|
def _infer_data_type(dt: DataType | np.dtype) -> DataType:
|
|
83
83
|
"""Return a C-supported :class:`DataType` for a :class:`DataType` or NumPy dtype.
|
|
84
84
|
|
|
85
|
-
Maps NumPy dtypes to the closest supported Tecplot data type.
|
|
85
|
+
Maps NumPy dtypes to the closest supported Tecplot data type. For PLT format only
|
|
86
86
|
FLOAT and DOUBLE are supported; all integer types are upcast to DOUBLE. precision
|
|
87
87
|
is promoted to ``FLOAT``; 64-bit integers are promoted to ``INT32``; ``int8`` and
|
|
88
88
|
``uint8`` map to ``BYTE``.
|
|
@@ -128,7 +128,7 @@ def _write_data(data: npt.ArrayLike, dtype: np.dtype | DataType | None = None) -
|
|
|
128
128
|
"""Write a single variable's data using ``tecdat142``.
|
|
129
129
|
|
|
130
130
|
``tecdat142`` only accepts ``float32`` or ``float64``; integer types are
|
|
131
|
-
upcast to ``float64``.
|
|
131
|
+
upcast to ``float64``. The array is ravelled in Fortran (column-major)
|
|
132
132
|
order before writing, which matches Tecplot's expected BLOCK layout.
|
|
133
133
|
|
|
134
134
|
Args:
|
|
@@ -198,12 +198,12 @@ class Write:
|
|
|
198
198
|
"""Write Tecplot PLT (``.plt``) files using the classic TecIO API.
|
|
199
199
|
|
|
200
200
|
The classic TecIO API maintains a single implicit global file context;
|
|
201
|
-
only one PLT file may be open at a time.
|
|
201
|
+
only one PLT file may be open at a time. This class wraps that
|
|
202
202
|
procedural API behind the same interface as :class:`szl.Write`.
|
|
203
203
|
|
|
204
204
|
Dataset- and variable-level auxiliary data can be set at any time before
|
|
205
|
-
the first zone is written.
|
|
206
|
-
when the first zone header is created.
|
|
205
|
+
the first zone is written. They are buffered and flushed automatically
|
|
206
|
+
when the first zone header is created. Zone-level auxiliary data is
|
|
207
207
|
passed directly to each zone-writing method.
|
|
208
208
|
|
|
209
209
|
Like :class:`szl.Write`, the file can be opened *eagerly* (when
|
|
@@ -214,10 +214,10 @@ class Write:
|
|
|
214
214
|
Args:
|
|
215
215
|
path: Output file path (should end in ``.plt``).
|
|
216
216
|
title: Dataset title string.
|
|
217
|
-
variables: Variable name list.
|
|
218
|
-
immediately.
|
|
217
|
+
variables: Variable name list. If provided the file is opened
|
|
218
|
+
immediately. If ``None``, the file is opened on the first
|
|
219
219
|
zone write.
|
|
220
|
-
file_type: :class:`~libtecio.FileType` enum.
|
|
220
|
+
file_type: :class:`~libtecio.FileType` enum. Defaults to
|
|
221
221
|
:attr:`~libtecio.FileType.FULL`.
|
|
222
222
|
|
|
223
223
|
Attributes:
|
|
@@ -226,8 +226,8 @@ class Write:
|
|
|
226
226
|
variables: Variable name list, or ``None`` if the file has not been opened
|
|
227
227
|
yet.
|
|
228
228
|
file_type: File type (FULL, GRID, or SOLUTION).
|
|
229
|
-
current_zone: The index of the most recently written zone.
|
|
230
|
-
have been written, ``current_zone`` is ``0``.
|
|
229
|
+
current_zone: The index of the most recently written zone. Before any zones
|
|
230
|
+
have been written, ``current_zone`` is ``0``. During a call to a
|
|
231
231
|
zone writing method, ``current_zone`` still refers to the
|
|
232
232
|
previously written zone. ``current_zone`` is incremented only
|
|
233
233
|
after a zone writing method successfully completes.
|
|
@@ -238,7 +238,7 @@ class Write:
|
|
|
238
238
|
|
|
239
239
|
Caution:
|
|
240
240
|
Unlike the SZL writer, zone data must be written strictly in order: header →
|
|
241
|
-
variable data → connectivity.
|
|
241
|
+
variable data → connectivity. This is enforced internally by the write methods.
|
|
242
242
|
|
|
243
243
|
Examples:
|
|
244
244
|
Define file header fields on open.
|
|
@@ -325,7 +325,7 @@ class Write:
|
|
|
325
325
|
self._opened: bool = False
|
|
326
326
|
|
|
327
327
|
# Running record of everything committed to the file so far (header,
|
|
328
|
-
# aux counts, per-zone dimensions/sharing).
|
|
328
|
+
# aux counts, per-zone dimensions/sharing). Used to validate
|
|
329
329
|
# var_sharing / con_sharing on later zones against what an earlier
|
|
330
330
|
# zone actually wrote, rather than trusting the caller's arrays
|
|
331
331
|
# alone.
|
|
@@ -349,7 +349,7 @@ class Write:
|
|
|
349
349
|
"""Close the file on context-manager exit.
|
|
350
350
|
|
|
351
351
|
The file is closed regardless of whether an exception was raised in
|
|
352
|
-
the ``with`` block.
|
|
352
|
+
the ``with`` block. If closing itself raises, that secondary
|
|
353
353
|
exception is only re-raised when the ``with`` block completed without
|
|
354
354
|
error; otherwise the original exception takes precedence.
|
|
355
355
|
"""
|
|
@@ -419,7 +419,7 @@ class Write:
|
|
|
419
419
|
"""Write buffered dataset- and variable-level aux data to the file.
|
|
420
420
|
|
|
421
421
|
Must be called *after* ``tecini142`` and *before* the first
|
|
422
|
-
``teczne142``.
|
|
422
|
+
``teczne142``. The zone-writing methods call this automatically;
|
|
423
423
|
users need not call it directly unless flushing explicitly.
|
|
424
424
|
|
|
425
425
|
In the classic API:
|
|
@@ -433,7 +433,7 @@ class Write:
|
|
|
433
433
|
for name, value in self.auxdataset.items():
|
|
434
434
|
libtecio.tecauxstr142(str(name), str(value))
|
|
435
435
|
|
|
436
|
-
# Variable-level aux data.
|
|
436
|
+
# Variable-level aux data. Keys may be 1-based int indices or names.
|
|
437
437
|
for key, subdict in self.auxvar.items():
|
|
438
438
|
if isinstance(key, int):
|
|
439
439
|
var_idx = key - 1 # Convert to 0-based
|
|
@@ -492,22 +492,22 @@ class Write:
|
|
|
492
492
|
produce an ``(I, J, 1)`` zone.
|
|
493
493
|
|
|
494
494
|
Args:
|
|
495
|
-
data: Sequence of NumPy arrays, one per active variable.
|
|
496
|
-
arrays must all share the same shape.
|
|
495
|
+
data: Sequence of NumPy arrays, one per active variable. NODAL
|
|
496
|
+
arrays must all share the same shape. CELL_CENTERED arrays
|
|
497
497
|
must have shape ``(imax-1, jmax-1, kmax-1)`` (minimum 1 in
|
|
498
498
|
each dimension).
|
|
499
|
-
title: Zone title.
|
|
500
|
-
variables: Variable name list.
|
|
501
|
-
been opened yet (lazy-open path).
|
|
499
|
+
title: Zone title. Defaults to ``"IJK_Zone_{current_zone + 1}"``.
|
|
500
|
+
variables: Variable name list. Required only when the file has not
|
|
501
|
+
been opened yet (lazy-open path). Ignored on subsequent
|
|
502
502
|
zones once the file is already initialised. Default to
|
|
503
503
|
``[V1, V2, V3, ...]`` if not provided in open or zone call.
|
|
504
|
-
value_locations: Per-variable :class:`ValueLocation`.
|
|
504
|
+
value_locations: Per-variable :class:`ValueLocation`. Defaults to all
|
|
505
505
|
:attr:`~ValueLocation.NODAL`.
|
|
506
506
|
passive_vars: Per-variable passive flags (one per dataset variable, not
|
|
507
|
-
just active variables).
|
|
507
|
+
just active variables). Defaults to all active
|
|
508
508
|
(``False``).
|
|
509
509
|
var_sharing: Per-variable source-zone sharing indices (one per dataset
|
|
510
|
-
variable). ``0`` means no sharing.
|
|
510
|
+
variable). ``0`` means no sharing. Defaults to no
|
|
511
511
|
sharing.
|
|
512
512
|
solution_time: Solution time for transient data (``0.0`` indicates
|
|
513
513
|
steady-state).
|
|
@@ -540,7 +540,7 @@ class Write:
|
|
|
540
540
|
if datapacking != DataPacking.BLOCK:
|
|
541
541
|
raise NotImplementedError(
|
|
542
542
|
"DATAPACKING=POINT is an ASCII-only layout and is not supported "
|
|
543
|
-
"by the PLT binary format.
|
|
543
|
+
"by the PLT binary format. Use DataPacking.BLOCK (the default) "
|
|
544
544
|
"or write to a .dat file instead."
|
|
545
545
|
)
|
|
546
546
|
|
|
@@ -797,27 +797,27 @@ class Write:
|
|
|
797
797
|
Args:
|
|
798
798
|
data: Sequence of 1-D NumPy arrays, one per active variable.
|
|
799
799
|
NODAL arrays must have length ``num_nodes``; CELL_CENTERED
|
|
800
|
-
arrays must have length ``num_cells``.
|
|
800
|
+
arrays must have length ``num_cells``. Both counts are
|
|
801
801
|
inferred from *node_map* (or from the ``con_sharing``
|
|
802
802
|
source zone when *node_map* is omitted).
|
|
803
|
-
zone_type: FE zone type from the ZoneType enum.
|
|
803
|
+
zone_type: FE zone type from the ZoneType enum. Must be one of the
|
|
804
804
|
types in ``_FE_SIMPLE``.
|
|
805
805
|
node_map: Integer array of shape ``(num_cells, nodes_per_cell)`` with
|
|
806
|
-
1-based node indices.
|
|
806
|
+
1-based node indices. Required unless ``con_sharing`` is
|
|
807
807
|
set, in which case the connectivity -- and the node/cell
|
|
808
808
|
counts derived from it -- are inherited from the source
|
|
809
809
|
zone instead.
|
|
810
|
-
title: Zone title.
|
|
811
|
-
variables: Variable name list.
|
|
812
|
-
been opened yet (lazy-open path).
|
|
810
|
+
title: Zone title. Defaults to ``"FE_Zone_{current_zone + 1}"``.
|
|
811
|
+
variables: Variable name list. Required only when the file has not
|
|
812
|
+
been opened yet (lazy-open path). Ignored on subsequent
|
|
813
813
|
zones once the file is already initialised. Default to
|
|
814
814
|
``[V1, V2, V3, ...]`` if not provided in open or zone call.
|
|
815
|
-
value_locations: Per-variable :class:`ValueLocation`.
|
|
815
|
+
value_locations: Per-variable :class:`ValueLocation`. Defaults to all
|
|
816
816
|
:attr:`~ValueLocation.NODAL`.
|
|
817
|
-
passive_vars: Per-variable passive flags (dataset-length).
|
|
817
|
+
passive_vars: Per-variable passive flags (dataset-length). Defaults to
|
|
818
818
|
all active.
|
|
819
819
|
var_sharing: Per-variable sharing zone indices (dataset-length).
|
|
820
|
-
Defaults to no sharing.
|
|
820
|
+
Defaults to no sharing. Cross-checked against
|
|
821
821
|
``node_map`` / ``con_sharing`` for a consistent node/cell
|
|
822
822
|
count.
|
|
823
823
|
con_sharing: Optional zone index that the connectivity is shared from.
|
|
@@ -827,7 +827,7 @@ class Write:
|
|
|
827
827
|
neighbor mode is set to global. Connectivity cannot be
|
|
828
828
|
shared between cell-based and face-based finite element
|
|
829
829
|
zones.
|
|
830
|
-
face_neighbors: Optional face-neighbour connection array.
|
|
830
|
+
face_neighbors: Optional face-neighbour connection array. Its length sets
|
|
831
831
|
``num_face_connections`` in the zone header automatically.
|
|
832
832
|
face_nbr_mode: Face-neighbour mode; used only when *face_neighbors* is
|
|
833
833
|
provided.
|
|
@@ -863,7 +863,7 @@ class Write:
|
|
|
863
863
|
if datapacking != DataPacking.BLOCK:
|
|
864
864
|
raise NotImplementedError(
|
|
865
865
|
"DATAPACKING=POINT is an ASCII-only layout and is not supported "
|
|
866
|
-
"by the PLT binary format.
|
|
866
|
+
"by the PLT binary format. Use DataPacking.BLOCK (the default) "
|
|
867
867
|
"or write to a .dat file instead."
|
|
868
868
|
)
|
|
869
869
|
if zone_type not in _FE_SIMPLE:
|
tecio/szl/_read.py
CHANGED
|
@@ -395,7 +395,7 @@ class ReadZone:
|
|
|
395
395
|
) -> npt.NDArray | None | tuple[npt.NDArray | None, ...]:
|
|
396
396
|
"""Return variable data array(s) for this zone.
|
|
397
397
|
|
|
398
|
-
A single key (0-based index or exact name) returns one array.
|
|
398
|
+
A single key (0-based index or exact name) returns one array. A list of exact
|
|
399
399
|
names returns a tuple of arrays in the order given, suitable for unpacking::
|
|
400
400
|
|
|
401
401
|
p = zone.get_array("p")
|
|
@@ -403,8 +403,8 @@ class ReadZone:
|
|
|
403
403
|
|
|
404
404
|
Returns:
|
|
405
405
|
One array (or ``None`` only if the variable is passive) for a scalar
|
|
406
|
-
key; a tuple of such arrays for a list of names.
|
|
407
|
-
yields a 1-tuple, not a bare array.
|
|
406
|
+
key; a tuple of such arrays for a list of names. A single-element list
|
|
407
|
+
yields a 1-tuple, not a bare array. A shared variable resolves to its
|
|
408
408
|
source zone's array, per :attr:`ReadVariable.values`.
|
|
409
409
|
|
|
410
410
|
Raises:
|
tecio/szl/_write.py
CHANGED
|
@@ -235,7 +235,7 @@ def _write_connectivity(
|
|
|
235
235
|
|
|
236
236
|
Note:
|
|
237
237
|
Both arrays are written using the minimum integer width capable of
|
|
238
|
-
representing the maximum index value present in each array.
|
|
238
|
+
representing the maximum index value present in each array. No copy
|
|
239
239
|
is made for C-contiguous input arrays — ravel(order="C") returns a flat
|
|
240
240
|
view of the node_map or face_neighbors without making a copy
|
|
241
241
|
|
|
@@ -392,8 +392,8 @@ class Write:
|
|
|
392
392
|
file_type: File type (FULL, GRID, or SOLUTION).
|
|
393
393
|
precision: Whole-file floating-point override, or ``None`` for automatic
|
|
394
394
|
per-variable inference.
|
|
395
|
-
current_zone: The index of the most recently written zone.
|
|
396
|
-
have been written, ``current_zone`` is ``0``.
|
|
395
|
+
current_zone: The index of the most recently written zone. Before any zones
|
|
396
|
+
have been written, ``current_zone`` is ``0``. During a call to a
|
|
397
397
|
zone writing method, ``current_zone`` still refers to the
|
|
398
398
|
previously written zone. ``current_zone`` is incremented only
|
|
399
399
|
after a zone writing method successfully completes.
|
|
@@ -505,7 +505,7 @@ class Write:
|
|
|
505
505
|
# -- File lifecycle ----------------------------------------------------------------
|
|
506
506
|
|
|
507
507
|
def _open(self, var_names: list[str]) -> None:
|
|
508
|
-
"""Open the file handle.
|
|
508
|
+
"""Open the file handle. Called exactly once on the first zone."""
|
|
509
509
|
self.variables = var_names
|
|
510
510
|
self.handle = libtecio.tec_file_writer_open(
|
|
511
511
|
filename=self.path,
|
|
@@ -534,7 +534,7 @@ class Write:
|
|
|
534
534
|
def flush_aux(self) -> None:
|
|
535
535
|
"""Write buffered dataset and variable aux data to the file.
|
|
536
536
|
|
|
537
|
-
Called automatically before the first zone is created.
|
|
537
|
+
Called automatically before the first zone is created. You only
|
|
538
538
|
need to call this directly if you want to be explicit.
|
|
539
539
|
|
|
540
540
|
The C library requires dataset and variable aux data to be written
|
|
@@ -550,7 +550,7 @@ class Write:
|
|
|
550
550
|
str(value),
|
|
551
551
|
)
|
|
552
552
|
|
|
553
|
-
# Variable-level aux data.
|
|
553
|
+
# Variable-level aux data. Keys may be 1-based int indices or names.
|
|
554
554
|
for key, subdict in self.auxvar.items():
|
|
555
555
|
if isinstance(key, int):
|
|
556
556
|
var_idx = key - 1 # Convert to 0-based
|
|
@@ -607,24 +607,24 @@ class Write:
|
|
|
607
607
|
3-D; missing trailing dimensions default to 1.
|
|
608
608
|
|
|
609
609
|
Args:
|
|
610
|
-
data: One NumPy array per dataset variable.
|
|
610
|
+
data: One NumPy array per dataset variable. Array shape is used
|
|
611
611
|
to infer ``imax``, ``jmax``, and ``kmax``; Fortran
|
|
612
|
-
(column-major) order is assumed.
|
|
612
|
+
(column-major) order is assumed. Pass ``None`` to write a
|
|
613
613
|
zone header only.
|
|
614
|
-
title: Zone title.
|
|
615
|
-
variables: Variable name list.
|
|
614
|
+
title: Zone title. Defaults to ``"IJK_Zone_{current_zone + 1}"``.
|
|
615
|
+
variables: Variable name list. Required on the first call when the
|
|
616
616
|
file has not been opened yet (lazy-open path); ignored once
|
|
617
617
|
the file is already initialised. Default to ``[V1, V2, V3,
|
|
618
618
|
...]`` if not provided in open or zone call.
|
|
619
|
-
value_locations: Per-variable :class:`~libtecio.ValueLocation`.
|
|
619
|
+
value_locations: Per-variable :class:`~libtecio.ValueLocation`. Defaults to
|
|
620
620
|
all ``NODAL``.
|
|
621
|
-
passive_vars: Per-variable passive flags.
|
|
621
|
+
passive_vars: Per-variable passive flags. Defaults to all active
|
|
622
622
|
(``False``).
|
|
623
|
-
var_sharing: Per-variable share-from zone index (1-based).
|
|
623
|
+
var_sharing: Per-variable share-from zone index (1-based). Defaults to
|
|
624
624
|
no sharing (all zeros).
|
|
625
|
-
solution_time: Solution time for transient data.
|
|
625
|
+
solution_time: Solution time for transient data. Use ``0.0`` for static
|
|
626
626
|
zones. Default to ``0.0`` if not defined.
|
|
627
|
-
strand_id: Strand ID for transient data.
|
|
627
|
+
strand_id: Strand ID for transient data. Use ``0`` for static
|
|
628
628
|
zones. Default to ``0`` (static) if not defined.
|
|
629
629
|
aux: Zone-level auxiliary data as ``{name: value}`` string
|
|
630
630
|
pairs.
|
|
@@ -649,11 +649,11 @@ class Write:
|
|
|
649
649
|
|
|
650
650
|
Note:
|
|
651
651
|
If the file is already open, ``data`` and ``variables`` may be omitted to
|
|
652
|
-
write a zone header only.
|
|
652
|
+
write a zone header only. If the file has not been opened yet,
|
|
653
653
|
``variables`` must be provided on this call.
|
|
654
654
|
|
|
655
655
|
Note:
|
|
656
|
-
Data arrays are written as DOUBLE precision by default.
|
|
656
|
+
Data arrays are written as DOUBLE precision by default. To write other
|
|
657
657
|
types, cast the NumPy arrays before calling (e.g.
|
|
658
658
|
``arr.astype(np.float32)``).
|
|
659
659
|
|
|
@@ -673,7 +673,7 @@ class Write:
|
|
|
673
673
|
if datapacking != DataPacking.BLOCK:
|
|
674
674
|
raise NotImplementedError(
|
|
675
675
|
"DATAPACKING=POINT is an ASCII-only layout and is not supported "
|
|
676
|
-
"by the SZL binary format.
|
|
676
|
+
"by the SZL binary format. Use DataPacking.BLOCK (the default) "
|
|
677
677
|
"or write to a .dat file instead."
|
|
678
678
|
)
|
|
679
679
|
|
|
@@ -935,12 +935,12 @@ class Write:
|
|
|
935
935
|
chosen automatically from the max index.
|
|
936
936
|
|
|
937
937
|
Args:
|
|
938
|
-
data: Sequence of 1-D arrays, one per dataset variable.
|
|
938
|
+
data: Sequence of 1-D arrays, one per dataset variable. NODAL
|
|
939
939
|
arrays must have length ``num_nodes``; CELL_CENTERED arrays
|
|
940
940
|
must have length ``num_cells``. ``num_nodes`` and
|
|
941
941
|
``num_cells`` are inferred from ``node_map`` (or from the
|
|
942
942
|
``con_sharing`` source zone when ``node_map`` is omitted).
|
|
943
|
-
zone_type: FE zone type from the ZoneType enum.
|
|
943
|
+
zone_type: FE zone type from the ZoneType enum. Must be one of the
|
|
944
944
|
types in ``_FE_SIMPLE``.
|
|
945
945
|
node_map: Integer array of shape ``(num_cells, nodes_per_cell)``
|
|
946
946
|
containing 1-based node indices. 32- or 64-bit write is
|
|
@@ -948,17 +948,17 @@ class Write:
|
|
|
948
948
|
Required unless ``con_sharing`` is set, in which case the
|
|
949
949
|
connectivity -- and the node/cell counts derived from it --
|
|
950
950
|
are inherited from the source zone instead.
|
|
951
|
-
title: Zone title string.
|
|
951
|
+
title: Zone title string. Defaults to ``"FE_Zone_{current_zone +
|
|
952
952
|
1}"`` if not provided.
|
|
953
|
-
variables: Variable name list.
|
|
954
|
-
been opened yet (lazy-open path).
|
|
953
|
+
variables: Variable name list. Required only when the file has not
|
|
954
|
+
been opened yet (lazy-open path). Ignored on subsequent
|
|
955
955
|
zones once the file is already initialised. Default to
|
|
956
956
|
``[V1, V2, V3, ...]`` if not provided in open or zone call.
|
|
957
|
-
value_locations: Per-variable ValueLocation.
|
|
958
|
-
passive_vars: Per-variable passive flags.
|
|
957
|
+
value_locations: Per-variable ValueLocation. Defaults to all NODAL.
|
|
958
|
+
passive_vars: Per-variable passive flags. Defaults to all active
|
|
959
959
|
(False).
|
|
960
|
-
var_sharing: Per-variable share from zone index.
|
|
961
|
-
sharing.
|
|
960
|
+
var_sharing: Per-variable share from zone index. Defaults to no
|
|
961
|
+
sharing. A shared variable's type and value location are
|
|
962
962
|
inherited from its source zone and are cross-checked
|
|
963
963
|
against ``node_map`` / ``con_sharing`` for a consistent
|
|
964
964
|
node/cell count.
|
|
@@ -1019,7 +1019,7 @@ class Write:
|
|
|
1019
1019
|
if datapacking != DataPacking.BLOCK:
|
|
1020
1020
|
raise NotImplementedError(
|
|
1021
1021
|
"DATAPACKING=POINT is an ASCII-only layout and is not supported "
|
|
1022
|
-
"by the SZL binary format.
|
|
1022
|
+
"by the SZL binary format. Use DataPacking.BLOCK (the default) "
|
|
1023
1023
|
"or write to a .dat file instead."
|
|
1024
1024
|
)
|
|
1025
1025
|
if zone_type not in _FE_SIMPLE:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tecio-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Python interface for reading and writing Tecplot data files
|
|
5
5
|
Project-URL: Homepage, https://github.com/meersman/tecio
|
|
6
6
|
Project-URL: Documentation, https://meersman.github.io/tecio/
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
tecio/__init__.py,sha256=aTfvQBQ9YJ1eUw0WDNRSktqx1D2fRTcoWqzvMbMtBLw,918
|
|
2
|
+
tecio/_containers.py,sha256=T-wAycLtjVJKC_ieM_bW0yIn9MI-Vu_rXlkSidk5uRU,10441
|
|
3
|
+
tecio/_io.py,sha256=TSVn3UQ_gd7QF4d9urrCaS-RvEOG2dYIeGp6Srqh_J0,31126
|
|
4
|
+
tecio/_meta.py,sha256=yR21qg7evwxnYZOmmz5txgdDBs8X0Gd1zo78uxebXCg,7356
|
|
5
|
+
tecio/_utils.py,sha256=rPK5w2SxwQQCxRKdwhBDNdl8QTup1HLCCSnC1pzgdRI,8755
|
|
6
|
+
tecio/libtecio.py,sha256=LB-C4FpaSG8Q5YEHneIk4VSXJf_RLu8iEV4C5uzbs3c,114505
|
|
7
|
+
tecio/cli/__init__.py,sha256=jC0QuRCfZ8EJNgk_Lsc8VWathE0yhmt9uSUl346Su9o,1087
|
|
8
|
+
tecio/cli/tec2mat.py,sha256=uqc8Z5VMYSk8wAIeWxlqebUPXzJDw-cV18vabJh6aZM,18157
|
|
9
|
+
tecio/cli/tecaux.py,sha256=cA5ALdsNJOORtDNALvM-2Cg-pkuMAGkQINBpHKnvvoE,35913
|
|
10
|
+
tecio/cli/tecdump.py,sha256=YmcRN-6swB0f0A5k5eVSxLaawkcKRKZXxEMmnh_7C6Y,10945
|
|
11
|
+
tecio/cli/tecextract.py,sha256=-oy3b8yw6K099cb5Y5MFzeclYKQE5YqgtRDXOQSg1G0,15394
|
|
12
|
+
tecio/cli/tecfix.py,sha256=NdLb00EQLE_Oawla4GenjXUvaMGUB_T5d52l8HDsCNI,19456
|
|
13
|
+
tecio/cli/tecmerge.py,sha256=Bpusvt9yXnNBcfBXLvb2HX47L4rsu7j7RdU3XSdl4MA,19735
|
|
14
|
+
tecio/cli/teconvert.py,sha256=7R4vvGyM_hvgRVvxZCgnJOM4Yw_5iKSDn1ViHlF5RxY,12008
|
|
15
|
+
tecio/cli/tecscale.py,sha256=3j-BmQiQVy2V36XpZaTXfwwZjopRBRVm5D89c62Es38,13977
|
|
16
|
+
tecio/cli/tecslice.py,sha256=KTMqmfL-NzMr0g7_9eaXqZFVw6_qkpi6ISBrAePSDRM,34775
|
|
17
|
+
tecio/cli/tecstats.py,sha256=kdpYea6RuEcFf775kJQmiG0sjU9pnnDAizmGnl7bDfU,18355
|
|
18
|
+
tecio/dat/__init__.py,sha256=vSSwGS9lE72hnkuX3nAu_tUUp9fwe7uAxgzDicdvBo0,2671
|
|
19
|
+
tecio/dat/_read.py,sha256=SHmxUZcHJ2vl0hqQxvSUrRA5_QCQ_MR-HAC_-j-SdkU,59435
|
|
20
|
+
tecio/dat/_write.py,sha256=RNuRwp8RO4tbHjr1DFRYaNGwRClRiM0uzwxDbgPNaIk,47706
|
|
21
|
+
tecio/plt/__init__.py,sha256=13aEKPaShMzV4_5kyohhsmSqeA5Aur0oF6P0DGispSA,1078
|
|
22
|
+
tecio/plt/_read.py,sha256=una-rHk5XA_TMzBwddj3eLK9uSIGHdiqdOfpTw2uYg4,56790
|
|
23
|
+
tecio/plt/_write.py,sha256=SVMhneFxNZWzxDDyr3BtW7Lc6b7pzVUqFh6d6bDaWGo,46378
|
|
24
|
+
tecio/szl/__init__.py,sha256=03chcSDXZoBZ3j1vygBkgjjuPqJvth2yoWYbnpdqhHw,1406
|
|
25
|
+
tecio/szl/_read.py,sha256=6tdqNTNzEczSazN8sgq0AfPkGBuovib9pk_0H-MdD5c,27935
|
|
26
|
+
tecio/szl/_write.py,sha256=pRtDELr88gRpOiV8jPDLRbXOdy31d1QPwliX3_7j4oI,53596
|
|
27
|
+
tecio_python-0.2.2.dist-info/licenses/LICENSE,sha256=WYmcYJG1QFgu1hfo7qrEkZ3Jhcz8NUWe6XUraZvlIFs,10172
|
|
28
|
+
tecio_python-0.2.2.dist-info/licenses/NOTICE,sha256=bDcDOguk8dYN4FpHJCHuCsDgR2VnP5XlK2C4BzVCtwg,340
|
|
29
|
+
tecio_python-0.2.2.dist-info/METADATA,sha256=pHyrJXiNYJSkpMjSvbCYQdPZuFFh6mWa8tGSNt2MDmQ,5078
|
|
30
|
+
tecio_python-0.2.2.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
31
|
+
tecio_python-0.2.2.dist-info/entry_points.txt,sha256=TH2UnRF700KO0GjeRFwkBBtFKN1PyP2tgrc11OsVNAc,362
|
|
32
|
+
tecio_python-0.2.2.dist-info/top_level.txt,sha256=ayCfhWQNUimgwyaTSyamJ3LbgjloZRWl2vlcZCjYWmQ,6
|
|
33
|
+
tecio_python-0.2.2.dist-info/RECORD,,
|
|
@@ -2,8 +2,8 @@ tecio-python
|
|
|
2
2
|
Copyright 2025 John Meersman
|
|
3
3
|
|
|
4
4
|
This product requires the Tecplot TecIO library, which is proprietary software
|
|
5
|
-
owned by Tecplot, Inc. and is not covered by this license.
|
|
6
|
-
|
|
5
|
+
owned by Tecplot, Inc. and is not covered by this license. Tecplot and TecIO
|
|
6
|
+
are trademarks of Tecplot, Inc.
|
|
7
7
|
|
|
8
8
|
The license agreement for the TecIO compiled shared libraries is located at:
|
|
9
9
|
lib/tecio_license_agreement.txt
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
tecio/__init__.py,sha256=aTfvQBQ9YJ1eUw0WDNRSktqx1D2fRTcoWqzvMbMtBLw,918
|
|
2
|
-
tecio/_containers.py,sha256=bEW0fu0fiCQnAJNveiaGYbSs1F4lpKOr40ijm5O8UOM,10443
|
|
3
|
-
tecio/_io.py,sha256=c6bY6nnlKsKAYP7HFCl66wcyzdnQryJHVNCI1DRB7d0,30566
|
|
4
|
-
tecio/_meta.py,sha256=4_88COTceqI7woPNGeXF_KJ9JlEWLg9jmzsYZJDuHzI,7360
|
|
5
|
-
tecio/_utils.py,sha256=rPK5w2SxwQQCxRKdwhBDNdl8QTup1HLCCSnC1pzgdRI,8755
|
|
6
|
-
tecio/libtecio.py,sha256=lFUx9zeNLC4g3TLUta7-UsP8HLc9SdZf38ztw6Kv9lM,114506
|
|
7
|
-
tecio/cli/__init__.py,sha256=lS6d-vlA64CshzmtrRw3YVGqjMedB-ST7rkbm11UVIA,1090
|
|
8
|
-
tecio/cli/tec2mat.py,sha256=CypQGKfArMFZg5LkZRpXHQD0PUaKuUSQBqrOLkkxkN8,18178
|
|
9
|
-
tecio/cli/tecaux.py,sha256=ZOmmwVYW33c1pJ9gAXnaZedXODF8h-YKqLJI54Mmiu8,25422
|
|
10
|
-
tecio/cli/tecdump.py,sha256=Ry3FYSblshgOwjtPfH71536lhKIqjgA1HJqK7zrO4Qo,10949
|
|
11
|
-
tecio/cli/tecextract.py,sha256=1bqQi6AkabGawslsqUtdOX0__Sx_dD9pUrNCWCHxSbA,15400
|
|
12
|
-
tecio/cli/tecfix.py,sha256=lwin4d5pPN30ZyVvVfBmRLCkSnURwGMAG_Ny7nMF37w,19460
|
|
13
|
-
tecio/cli/tecmerge.py,sha256=2O69lWVtp5aDepKQGUIhib-mIAv--Y12AQfem_4nHno,19747
|
|
14
|
-
tecio/cli/teconvert.py,sha256=0THQ0KggobElif3am3Nq_Kdhq0pLNSrNBLUikKPTZzk,12011
|
|
15
|
-
tecio/cli/tecscale.py,sha256=jjv2GUQ0CeRvgRTWaVKnk4Ot5iZnlXU8VNUgYJXAg8E,13984
|
|
16
|
-
tecio/cli/tecslice.py,sha256=_OqRls6HZ_lJ6-COQ9P2G6qVuo0LNBWaLj_pb0UMzTk,34787
|
|
17
|
-
tecio/cli/tecstats.py,sha256=NXAInnDvv6UveOHuCjFUw2frlrlNnJDwZ6_DrzizK4E,18359
|
|
18
|
-
tecio/dat/__init__.py,sha256=nkjRnmvevjpxX7fj_iCHAxKrzPIrFqLgpnYDwiLRExY,2672
|
|
19
|
-
tecio/dat/_read.py,sha256=iMcEcLGBgtGeMOqH5lvFOtsmCWOYRbq-aHXZm8hkApM,59452
|
|
20
|
-
tecio/dat/_write.py,sha256=Bs_HSobk7NvbUFoPlLOQrGpB4wEf3uQjxPPCUT253nM,47729
|
|
21
|
-
tecio/plt/__init__.py,sha256=13aEKPaShMzV4_5kyohhsmSqeA5Aur0oF6P0DGispSA,1078
|
|
22
|
-
tecio/plt/_read.py,sha256=EYpSKostFTwLWUZc0-CkdqPnhvmvI35RHnQVgXGVIh4,56811
|
|
23
|
-
tecio/plt/_write.py,sha256=ugXqzuMe-vHOrZjrwZPVz4izXsDc_7KkjDrXZsX3t2o,46413
|
|
24
|
-
tecio/szl/__init__.py,sha256=03chcSDXZoBZ3j1vygBkgjjuPqJvth2yoWYbnpdqhHw,1406
|
|
25
|
-
tecio/szl/_read.py,sha256=rTbwo2FSbc4T8kEKYMpPgK36zsNfVrUZeuWNvBy9Cok,27938
|
|
26
|
-
tecio/szl/_write.py,sha256=nNOQqHlX9jm1xbNVNouWXp6Y9wbD06vLbWfX5gaCNMM,53624
|
|
27
|
-
tecio_python-0.2.1.dist-info/licenses/LICENSE,sha256=WYmcYJG1QFgu1hfo7qrEkZ3Jhcz8NUWe6XUraZvlIFs,10172
|
|
28
|
-
tecio_python-0.2.1.dist-info/licenses/NOTICE,sha256=94EJ-1hUlQE8JyLtMbaVpmj8EMDjJ1jGr_9OBZQnQ-c,340
|
|
29
|
-
tecio_python-0.2.1.dist-info/METADATA,sha256=YKrvqNOrDqDbdlCdeaiB4ICBIro0VEikrWNDzHC0qD0,5078
|
|
30
|
-
tecio_python-0.2.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
31
|
-
tecio_python-0.2.1.dist-info/entry_points.txt,sha256=TH2UnRF700KO0GjeRFwkBBtFKN1PyP2tgrc11OsVNAc,362
|
|
32
|
-
tecio_python-0.2.1.dist-info/top_level.txt,sha256=ayCfhWQNUimgwyaTSyamJ3LbgjloZRWl2vlcZCjYWmQ,6
|
|
33
|
-
tecio_python-0.2.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|