pytecplot 1.7.2__py3-none-any.whl → 1.7.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytecplot
3
- Version: 1.7.2
3
+ Version: 1.7.4
4
4
  Summary: A Python interface to Tecplot 360
5
5
  Author-email: "Tecplot, Inc." <support@tecplot.com>
6
6
  License-Expression: LicenseRef-Tecplot-Software-License
@@ -107,6 +107,27 @@ For more information, see |Tecplot 360s release notes|.
107
107
 
108
108
  .. |Tecplot 360s release notes| replace:: `Tecplot 360's release notes <https://tecplot.com/products/tecplot-360/new-in-tecplot-360>`__
109
109
 
110
+ PyTecplot 1.7.4
111
+ ^^^^^^^^^^^^^^^
112
+
113
+ * Fixed a bug where loading data files failed with the error:
114
+ `TypeError: Field tecrpc.Argument.int64: Expected an int, got a boolean.`
115
+ which was due to changes in the underlying RPC message system.
116
+ * Added `include_custom_labels` parameter to `save_tecplot_plt()` and
117
+ `save_tecplot_ascii()` to allow for writing out data files without custom labels.
118
+
119
+ PyTecplot 1.7.3
120
+ ^^^^^^^^^^^^^^^
121
+
122
+ * Updated enums to reflect new changes in Tecplot 360 2025 R2:
123
+ * `tecplot.constant.LightingEffect.Gouraud` has been deprecated. Scripts should now
124
+ use `LightingEffect.Smooth` or `LightingEffect.SmoothWithCreases`.
125
+ * `tecplot.constant.SphereScatterRenderQuality.Fast` is now default and should be
126
+ favored over all other options.
127
+ * Deprecated `LightSource.force_gouraud_for_contour_flood`. Use the `LightingEffect`
128
+ enum to set the lighting effects directly on the individual fieldmaps, slices,
129
+ isosurfaces, or streamtraces as desired.
130
+
110
131
  PyTecplot 1.7.2
111
132
  ^^^^^^^^^^^^^^^
112
133
 
@@ -1,9 +1,9 @@
1
- pytecplot-1.7.2.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
1
+ pytecplot-1.7.4.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
2
2
  tecplot/__init__.py,sha256=iHAPbGDgIh7HtLWaWcDYfVS4TOsNrRSHyQa-H_6Li3g,3550
3
- tecplot/constant.py,sha256=_Ws6ldiZAkkOJjGWM9PEAMR0mHZ49qcYjJVpK51E99o,8531
3
+ tecplot/constant.py,sha256=DJ641ugRqAQNd8uQITFbhbyEK3JwR9QhfG_CteUn5s4,8686
4
4
  tecplot/exception.py,sha256=YB4zeL0-07yCy4pyUqeFdNQ98nK11h2n3ZHHe58Od6s,6493
5
5
  tecplot/macro.py,sha256=uE29ftjdr2HdlFVa9SS-1uBU8Di4W3PwquhI75LnvhM,13307
6
- tecplot/version.py,sha256=COK9w92DuNTvr-nKW3kwRSetDsIWyvA9iJisXXYBVuQ,1544
6
+ tecplot/version.py,sha256=m28NzZOI2Idf7k94m2r0_AtcJ-BqtkqGyc1LpvMdhvU,1544
7
7
  tecplot/annotation/__init__.py,sha256=FfL8JhlO6T9NTajVRtgXHp6A6PhjpO51gnVKlHMkzWA,333
8
8
  tecplot/annotation/annotation.py,sha256=B7G-BkrQ4lYBpak9RR3u7Pvdci5MGLUvNo_MnJidyY4,8481
9
9
  tecplot/annotation/geometry.py,sha256=3jnp_Ut1AQdhSUCMAJ1yFuL_epoGUoTny03cv0kl09k,12516
@@ -15,16 +15,16 @@ tecplot/annotation/text.py,sha256=JFaaOJR1h6LyLt9vUVanQmakXtGZOguVdA-3oT8tWhQ,26
15
15
  tecplot/data/__init__.py,sha256=apkztrNGBSS5cfyYSIYkrwU1eeRiO0GP4sHvryPJfVA,1937
16
16
  tecplot/data/array.py,sha256=wcGIaoVbSjSdwQP3DpXAOECHAmjTBurbmZvTodF5h1E,24246
17
17
  tecplot/data/create.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
18
- tecplot/data/dataset.py,sha256=psNqhCXa6dfm05Rs7c8YvK6QwHOCDxQZjSphCkvOeAU,82337
18
+ tecplot/data/dataset.py,sha256=MvM1vVf5NlHaDc3rI6mQV_mjNxOaGVuBsGGRtLXSG3I,81909
19
19
  tecplot/data/extract.py,sha256=VqDqe_-VcQSKD-rRo4DSqohZElUan2dxuNlLRM_qE54,21891
20
20
  tecplot/data/face_neighbors.py,sha256=Bm77F87qtDcw2u1BWFNE9cRTc8FI9MS3Cw8YlaJsdkc,19440
21
21
  tecplot/data/facemap.py,sha256=Xhn77cZndfgUA9U014I4M_ecwj8bI98_A7DZC24-Jwk,31287
22
22
  tecplot/data/fe_cell_type.py,sha256=G2U0c1RBHvUP03_YjHGHaMk1JOkF-g9SlBlLkWXH2Yg,3911
23
- tecplot/data/load.py,sha256=Z7UsMWn0f1loXzxSOMXj4F2H7O9CxlLtZzXnPNvgotY,109490
23
+ tecplot/data/load.py,sha256=mTZ-c3k-adQKYxm2tMRnzuQNwFLTOHCYYhKGwe4kd3o,109473
24
24
  tecplot/data/nodemap.py,sha256=AhSGO_Bmw3OB01UYKmjldTOci5rlUMGK_eiDrDHWrxk,36209
25
25
  tecplot/data/operate.py,sha256=oFBOzLPYnA8hUCaeiTdpPXdFlLZNLoQCb-EHcPE5iDA,42593
26
26
  tecplot/data/query.py,sha256=Ocr9h1I2bFuJFLVOFEqiCUnuxTzD4wnToNzYk996GhY,14807
27
- tecplot/data/save.py,sha256=_535HsEUopTgWl-9NzDkYOQH2FDfTUO2k4EypOnsfrU,16609
27
+ tecplot/data/save.py,sha256=iTmR7DJL3iUDgHOikFRPkMRejmZrNaeX7BHpZqhI4aY,16991
28
28
  tecplot/data/variable.py,sha256=xJCOO5ZeXCAFWKJYnC_mMxWKoy-oe3pE0EnHytZOwro,9437
29
29
  tecplot/data/zone.py,sha256=LxtlinZ2ejq9UnOvapQ2wZfkMdjjRTR6wCi-lzXVa6M,35207
30
30
  tecplot/export/__init__.py,sha256=eX3hx-FX9zEE-D3Nnfm_5rEG-jq6XufUDZmmRaLnKFw,781
@@ -36,7 +36,7 @@ tecplot/export/time_animation.py,sha256=lpy7mq4zQG0Wj5Q3pezHSqGbdaiX2fTOdqf3-s9t
36
36
  tecplot/extension/__init__.py,sha256=3bDQNm1kqkiWsU7MkbturRl7YuRGSv4fjvGIN_XW5no,425
37
37
  tecplot/extension/ipython.py,sha256=glcANfhj8pG5Pv_kF4NSfuyQXwgBKowQ1-nJbJGepgc,2229
38
38
  tecplot/layout/__init__.py,sha256=HvlOnhPIsFHSRDACEPN3rlOUmk9tpLNPttReGq3P3_8,1218
39
- tecplot/layout/frame.py,sha256=B7KGjc8JdpKeojGZyH6oBI4ZQQmpbaL0IJtlh7HkFRY,51813
39
+ tecplot/layout/frame.py,sha256=m6Z1JQ96k4CloN_qmvPJwOIfhPrIwnJ_1NzQK8kTv-4,51917
40
40
  tecplot/layout/layout.py,sha256=vcrqWgOkcEW90VCbLG2-7xSWajPhP3cRsLnRIrcuO4c,16025
41
41
  tecplot/layout/page.py,sha256=MqX3jJAd3o2xkfaSGXU7TD4gnXv-9CQcDj5WJnlIisU,18264
42
42
  tecplot/legend/__init__.py,sha256=zj94bHuUKvgWxn5dddEuahKCXVDMOFonQNgKxtuNSTQ,185
@@ -50,19 +50,19 @@ tecplot/plot/axes.py,sha256=ix_rANTSZdMXWfrBDeR5Zq4AWkJ1hXkog1ply6oSbPI,26962
50
50
  tecplot/plot/axis.py,sha256=3cgOPbgQdCAWueqfjOpZUbPdhYLsw3bqw4Apm7vEaRQ,43264
51
51
  tecplot/plot/blanking.py,sha256=j7iwZsiN78DiFzExR83iLk8m6LPFWTQx2ev7s_On3d8,20237
52
52
  tecplot/plot/contour.py,sha256=tw-7YW27uwr-V17Ip5zvQtZXsbbG4ca-oILB2bCPu1k,44240
53
- tecplot/plot/effects.py,sha256=Q9KytPL9dzanSG2Wbx09lNjf1OeKep5Aj3gyOv9s0JE,4983
54
- tecplot/plot/fieldmap.py,sha256=Ysih0sWQmeTTpREV2-4Wh5-XDPkTetOD_UG7XPle0Ws,75630
53
+ tecplot/plot/effects.py,sha256=wsj0EhnXEQePq7SRxLogcUClDWNVFaFyUSf20yuKTF4,5691
54
+ tecplot/plot/fieldmap.py,sha256=o5XjjUDcUK55dieSSWYv7NzzMN0kXArFV2UuP86AFzE,76312
55
55
  tecplot/plot/grid.py,sha256=p8h2Tmu93aVunOww6VXSuK8onjf1HkYZRQEyApTJr_c,22463
56
56
  tecplot/plot/hoe_settings.py,sha256=r_ZFwhWa0pes3bQwqcX6kpMWp7Q7_tLalCIHdIAUw8Y,1931
57
- tecplot/plot/isosurface.py,sha256=WQec-6hIur5Eyi9Z7m_Y4nuFmGGLUF2RQZDzZRXT1o4,40303
57
+ tecplot/plot/isosurface.py,sha256=1QUCakVNMD2diThLnRJW7xsFfsy-RMLYmncGdv-P4Co,41154
58
58
  tecplot/plot/labels.py,sha256=ac8Dl37lGbkY78cJJo_aCuN9zslYZthSZqriTHGkPOs,10578
59
59
  tecplot/plot/linemap.py,sha256=NHb83QTY1OzI2PO5D_HSlaAxuTrLJxH4fEpE-YQKPgY,63631
60
60
  tecplot/plot/linking.py,sha256=HyetVeDsnUsGJtmWLURg6ylyCom0zR-0UubrVynB_fs,16775
61
61
  tecplot/plot/plot.py,sha256=WB2S4cHc0JB2wQrZSoEISpjvuXuQRZ_QXLuFaBNJuhk,60658
62
62
  tecplot/plot/rgb_coloring.py,sha256=OfcIvhQ9Tm5TQylOUttX7QcNu3CHtETBpIz7gqa9GwY,9417
63
- tecplot/plot/scatter.py,sha256=SFjxZThZFbJwx0q-McjvSekQ8EdepMtLVurCFo_dKZk,12609
64
- tecplot/plot/slice.py,sha256=hebSpbQYdgjmIJkI-1mUzI4Ud6eahKPiaC3ooWke9SE,52285
65
- tecplot/plot/streamtrace.py,sha256=kL_3SFhYnmEIdLX2OmcP4tcxysdG41e2LZ4URZEshIA,64686
63
+ tecplot/plot/scatter.py,sha256=_Z7Kte2XSruGcDxEDETD3-4-ynYPvc85_W5jNSzG9lE,12610
64
+ tecplot/plot/slice.py,sha256=C2yUnta-ls0oN_7vM_qaXbZczFS4jWNsSypZX6CV3wk,53179
65
+ tecplot/plot/streamtrace.py,sha256=6x6yJgMgmtUAGUjqqaWWyMvIPjbRdvKjkqE6LKbDf_o,65581
66
66
  tecplot/plot/symbol.py,sha256=6p28udpGG-rOKCAb9bgsk6kWHqXYPfAQ7W-jBrtmPaA,18422
67
67
  tecplot/plot/ticks.py,sha256=Wx3myMFWJYqeE8uefTv3sZYBBAAcaK2Pg6v-0pBk56M,19252
68
68
  tecplot/plot/title.py,sha256=Eg4T5i_Z_thuISW8CJi0gh_tGwfQ84zD6J0VZcaUnP8,11162
@@ -77,23 +77,23 @@ tecplot/session/style.py,sha256=djEwXG3H8_izU1Zsk5b7FlJo-WsxgLzb3N78YHCC7Us,1761
77
77
  tecplot/tecutil/__init__.py,sha256=tvHnjGACyMsVN7WbYrtp8Lo9qRBQymYZlQ5BuyiBMQg,748
78
78
  tecplot/tecutil/arglist.py,sha256=Ls2PIplqW2mpjPEyUryeiGcKJrrAZNFHRupBHF3mOp4,9071
79
79
  tecplot/tecutil/captured_output.py,sha256=_q4pFzQvQ736AO_PAVNxlEhzIaxgZV19sBrMuLkiCB4,6373
80
- tecplot/tecutil/constant.py,sha256=EDZ2XQu0L_0wTVjiI6OxMVdX8SVh_nk_jklq58CmzeQ,19174
80
+ tecplot/tecutil/constant.py,sha256=XeUIJRNVhQ6yQHPkpztnkAJQu-GytGG90FMXjZepKgk,19402
81
81
  tecplot/tecutil/index_set.py,sha256=oF4nLpeNOu0-F7RIQUO33WWKGIvK9O6T7lQBIALxRg0,3984
82
82
  tecplot/tecutil/lock.py,sha256=rVa7hekZ7ZFZnvYgRGsWxZUty9JUbC2EZ-eO4vHzqlU,967
83
83
  tecplot/tecutil/message_pb2.py,sha256=5LLHkC4o1hiXYx7FGPLFkPvN2YzVhPT7gfVNVJg_sEU,3668
84
84
  tecplot/tecutil/preamble.py,sha256=wzpTPY3xyv8-cnWpp5q1ay0jlXRNmMEmC0UXN-xu0aU,2142
85
85
  tecplot/tecutil/stringlist.py,sha256=GMuwiP0scuyLxEUbcJFIz4DU9TLAhNdjGHDWawGGT-o,3533
86
- tecplot/tecutil/sv.py,sha256=8EUln_hn7c2FZ3QMiK9zWMSxAQdhbKmKlTLvU-9lZ-4,54100
87
- tecplot/tecutil/tecutil.py,sha256=Zmz8LvQ3l25QAbIZgMjZQQHgnA-r6lgYu5n-lYwNMeo,691565
88
- tecplot/tecutil/tecutil_client.py,sha256=j3qzB9e4h07w8cO3d1Z4vDH5ZqxXcmld9reL73Wj9vg,23749
86
+ tecplot/tecutil/sv.py,sha256=v6vBV_dCtZ6E-J3K4l27NCLF-eAlQddCqY3dgJ16ztE,54618
87
+ tecplot/tecutil/tecutil.py,sha256=RkVV3MLDd38sXHO9wqNkk-LPIW_qG8vZFST8455rKnM,696363
88
+ tecplot/tecutil/tecutil_client.py,sha256=2ELrTJG2hlPoOMp6ud0bb6ciTSQTEhFpkA50QrMVB6c,23754
89
89
  tecplot/tecutil/tecutil_connector.py,sha256=HW05xfxIbSrnnpXic3DNUkXmMmo0e9Z-HhT3EoC_Mzg,37059
90
- tecplot/tecutil/tecutil_rpc.py,sha256=sHX6JjNXQcVjSNasH9auydbfyZoJMF56lJF0j6TxQMM,285726
91
- tecplot/tecutil/util.py,sha256=C8nNB3gFK6XY6l9Ue18zcPZXFrX5JJ9vO-kcA9R53U8,12038
90
+ tecplot/tecutil/tecutil_rpc.py,sha256=ypGDA5ktXNClT9trdK1ElGnhrsO-oTABncT2CdQkRDU,287428
91
+ tecplot/tecutil/util.py,sha256=JgNpjE3J7Uz_QHqPrOxmHCwNnIojkZVfdKftVw_WUdo,12055
92
92
  tecplot/text/__init__.py,sha256=hXk-XwewRyS-yxif3Wx5FS1wO5Uh6WQpRgtUiUfjNo0,112
93
93
  tecplot/text/font.py,sha256=tHMT2NGJC8rLCVCUdmxK0YN_f4hZpTevWIofwjAp7cs,6722
94
94
  tecplot/text/label_format.py,sha256=24MOvWtVZ_SKdcU16i5yEfxC-hBipmNOLQwJ_kzDr3k,12328
95
95
  tecplot/text/textbox.py,sha256=nwr0ReRC56MY5gB7Ie6UdDxrd_Os_ZI1_3n4bmOzalU,2882
96
- pytecplot-1.7.2.dist-info/METADATA,sha256=hslYbIzWTy6Hp4Qdj06IgPBR7nwMEH_0xjfvV2aptuo,22461
97
- pytecplot-1.7.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
98
- pytecplot-1.7.2.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
- pytecplot-1.7.2.dist-info/RECORD,,
96
+ pytecplot-1.7.4.dist-info/METADATA,sha256=kq8Y9ArAbkVPkrLVzXQyG9x7FLZXkqeBSrp6jOop6ks,23443
97
+ pytecplot-1.7.4.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
98
+ pytecplot-1.7.4.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
+ pytecplot-1.7.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (82.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tecplot/constant.py CHANGED
@@ -193,6 +193,16 @@ class AuxDataObjectType(_Enum):
193
193
  Zone = 6
194
194
 
195
195
 
196
+ _LightingEffect = LightingEffect
197
+
198
+
199
+ class LightingEffect(_Enum):
200
+ Paneled = _LightingEffect.Paneled.value
201
+ SmoothWithCreases = _LightingEffect.SmoothWithCreases.value
202
+ Smooth = _LightingEffect.Smooth.value
203
+ Gouraud = SmoothWithCreases
204
+
205
+
196
206
  class SymbolType(_Enum):
197
207
  Text = 0
198
208
  Geometry = 1
@@ -231,7 +241,6 @@ assert len(StepMode) == len(SkipMode), 'tecplot/constant.py requires update'
231
241
 
232
242
  _FunctionDependency = FunctionDependency
233
243
 
234
-
235
244
  class FunctionDependency(_Enum):
236
245
  XIndependent = _FunctionDependency.XIndependent.value
237
246
  YIndependent = _FunctionDependency.YIndependent.value
@@ -293,13 +302,6 @@ class SliceSurface(_Enum):
293
302
  Arbitrary = 7
294
303
 
295
304
 
296
- class SphereScatterRenderQuality(_Enum):
297
- Low = 0
298
- Medium = 1
299
- High = 2
300
-
301
-
302
-
303
305
  class TecUtilServerProcessingMode(_Enum):
304
306
  Unspecified = 0
305
307
  Single = 1
tecplot/data/dataset.py CHANGED
@@ -1,15 +1,14 @@
1
1
  import collections
2
2
  import ctypes
3
3
  import fnmatch
4
- import itertools as it
4
+
5
5
  import logging
6
6
  import re
7
7
  import warnings
8
8
 
9
9
  from collections.abc import Iterable
10
- from functools import reduce
11
10
  from keyword import iskeyword
12
- from textwrap import dedent, TextWrapper
11
+ from textwrap import dedent
13
12
 
14
13
  from ..tecutil import _tecutil, _tecutil_connector
15
14
  from ..constant import *
@@ -386,8 +385,7 @@ class Dataset(object):
386
385
  ZoneType.FEPolygon: PolyFEZone,
387
386
  ZoneType.FEPolyhedron: PolyFEZone,
388
387
  ZoneType.FEMixed: MixedFEZone}
389
- pattern_type = getattr(re, 'Pattern', getattr(re, '_pattern_type', None))
390
- if isinstance(pattern, (str, pattern_type)):
388
+ if isinstance(pattern, (str, re.Pattern)):
391
389
  try:
392
390
  return next(self.zones(pattern))
393
391
  except StopIteration:
@@ -412,7 +410,7 @@ class Dataset(object):
412
410
  def _zone_indices(self):
413
411
  """Zero-based indices of all enabled zones in the dataset."""
414
412
  success, ptr = _tecutil.ZoneGetEnabledByDataSetID(self.uid)
415
- if not success:
413
+ if not success or not ptr:
416
414
  raise TecplotSystemError()
417
415
  indices = ctypes.cast(ptr, IndexSet)
418
416
  try:
@@ -436,7 +434,7 @@ class Dataset(object):
436
434
  try:
437
435
  return [_tecutil.ZoneGetUniqueIDByDataSetID(self.uid, zone_index + 1)
438
436
  for zone_index in self._zone_indices]
439
- except:
437
+ except Exception as _:
440
438
  raise err
441
439
 
442
440
  @property
@@ -455,12 +453,12 @@ class Dataset(object):
455
453
  try:
456
454
  return [_tecutil.ZoneGetTypeByDataSetID(self.uid, zone_index + 1)
457
455
  for zone_index in self._zone_indices]
458
- except:
456
+ except Exception as _:
459
457
  try:
460
458
  with self.frame.activated():
461
459
  return [_tecutil.ZoneGetType(zone_index + 1)
462
460
  for zone_index in self._zone_indices]
463
- except:
461
+ except Exception as _:
464
462
  raise err
465
463
 
466
464
  @property
@@ -484,7 +482,7 @@ class Dataset(object):
484
482
  """
485
483
  try:
486
484
  success, ptr = _tecutil.ZoneGetNamesByDataSetID(self.uid)
487
- if not success:
485
+ if not success or not ptr:
488
486
  raise TecplotSystemError()
489
487
  names = ctypes.cast(ptr, StringList)
490
488
  try:
@@ -494,17 +492,17 @@ class Dataset(object):
494
492
  except (AttributeError, TecplotSystemError) as err:
495
493
  try:
496
494
  success, ptr = _tecutil.ZoneGetEnabledNamesByDataSetID(self.uid)
497
- if not success:
495
+ if not success or not ptr:
498
496
  raise TecplotSystemError()
499
497
  names = ctypes.cast(ptr, StringList)
500
498
  try:
501
499
  return list(names)
502
500
  finally:
503
501
  names.dealloc()
504
- except:
502
+ except Exception as _:
505
503
  try:
506
504
  return [z.name for z in self.zones()]
507
- except:
505
+ except Exception as _:
508
506
  raise err
509
507
 
510
508
  def zones(self, pattern=None):
@@ -563,18 +561,15 @@ class Dataset(object):
563
561
  ZoneType.FEMixed: MixedFEZone}
564
562
 
565
563
  if pattern:
566
- pattern_type = getattr(re, 'Pattern', getattr(re, '_pattern_type', None))
567
- if not isinstance(pattern, pattern_type):
564
+ if not isinstance(pattern, re.Pattern):
568
565
  regex = re.compile(fnmatch.translate(pattern), re.IGNORECASE)
569
566
  else:
570
567
  regex = pattern
571
568
 
572
- if __debug__:
573
- found = False
569
+ found = False
574
570
  for uid, typ, name in zip(self._zone_uids, self._zone_types, self.zone_names):
575
571
  if regex.match(name):
576
- if __debug__:
577
- found = True
572
+ found = True
578
573
  yield _dispatch[typ](uid, self)
579
574
 
580
575
  if __debug__:
@@ -647,8 +642,7 @@ class Dataset(object):
647
642
  """
648
643
  if isinstance(pattern, Variable):
649
644
  return pattern
650
- pattern_type = getattr(re, 'Pattern', getattr(re, '_pattern_type', None))
651
- if isinstance(pattern, (str, pattern_type)):
645
+ if isinstance(pattern, (str, re.Pattern)):
652
646
  try:
653
647
  return next(self.variables(pattern))
654
648
  except StopIteration:
@@ -669,7 +663,7 @@ class Dataset(object):
669
663
  def _variable_indices(self):
670
664
  """Yields zero-based indices for all enabled variables in the dataset."""
671
665
  success, ptr = _tecutil.VarGetEnabledByDataSetID(self.uid)
672
- if not success:
666
+ if not success or not ptr:
673
667
  raise TecplotSystemError()
674
668
  indices = ctypes.cast(ptr, IndexSet)
675
669
  try:
@@ -694,7 +688,7 @@ class Dataset(object):
694
688
  try:
695
689
  return [_tecutil.VarGetUniqueIDByDataSetID(self.uid, variable_index + 1)
696
690
  for variable_index in self._variable_indices]
697
- except:
691
+ except Exception as _:
698
692
  raise err
699
693
 
700
694
  @property
@@ -718,7 +712,7 @@ class Dataset(object):
718
712
  """
719
713
  try:
720
714
  success, ptr = _tecutil.VarGetNamesByDataSetID(self.uid)
721
- if not success:
715
+ if not success or not ptr:
722
716
  raise TecplotSystemError()
723
717
  names = ctypes.cast(ptr, StringList)
724
718
  try:
@@ -735,10 +729,10 @@ class Dataset(object):
735
729
  return list(names)
736
730
  finally:
737
731
  names.dealloc()
738
- except:
732
+ except Exception as _:
739
733
  try:
740
734
  return [z.name for z in self.variables()]
741
- except:
735
+ except Exception as _:
742
736
  raise err
743
737
 
744
738
  def variables(self, pattern=None):
@@ -773,18 +767,15 @@ class Dataset(object):
773
767
  reference zones and variables **by name** instead of by index.
774
768
  """
775
769
  if pattern:
776
- pattern_type = getattr(re, 'Pattern', getattr(re, '_pattern_type', None))
777
- if not isinstance(pattern, pattern_type):
770
+ if not isinstance(pattern, re.Pattern):
778
771
  regex = re.compile(fnmatch.translate(pattern), re.IGNORECASE)
779
772
  else:
780
773
  regex = pattern
781
774
 
782
- if __debug__:
783
- found = False
775
+ found = False
784
776
  for uid, name in zip(self._variable_uids, self.variable_names):
785
777
  if regex.match(name):
786
- if __debug__:
787
- found = True
778
+ found = True
788
779
  yield Variable(uid, self)
789
780
 
790
781
  if __debug__:
@@ -1011,8 +1002,7 @@ class Dataset(object):
1011
1002
  ):
1012
1003
  mirror_variables = [mirror_variables]
1013
1004
 
1014
- mvars = (v if isinstance(v, Variable) else self.variable(v)
1015
- for v in mirror_variables)
1005
+ mvars = map(self.variable, mirror_variables)
1016
1006
  mvars = ','.join([str(v.index + 1) for v in mvars])
1017
1007
 
1018
1008
  if not zones:
tecplot/data/load.py CHANGED
@@ -1,15 +1,13 @@
1
1
  import getpass
2
2
  import logging
3
- import os
4
3
  import pathlib
5
4
  import platform
6
5
  import textwrap
7
- import warnings
8
6
 
9
7
  from ..tecutil import _tecutil, _tecutil_connector
10
8
  from ..constant import *
11
9
  from ..exception import *
12
- from .. import layout, macro, tecutil, version
10
+ from .. import layout, tecutil
13
11
  from ..tecutil import IndexSet, StringList, lock, sv
14
12
 
15
13
 
@@ -26,6 +24,7 @@ def _tecplot_loader_load_data(arglist,
26
24
  assign_strand_ids=None,
27
25
  add_zones_to_existing_strands=None):
28
26
  frame = frame or layout.active_frame()
27
+ assert frame, 'Invalid Frame'
29
28
 
30
29
  # If read_data_option is append and there is no data, we
31
30
  # need to silently change it to "Replace in Active Frame"
@@ -1823,7 +1822,7 @@ def load_tecplot(filenames,
1823
1822
  variables (`set` of `strings <str>` or `integers <int>`, optional):
1824
1823
  Set of `Variables <Variable>` to load. If variable names are
1825
1824
  specified as strings and appending then variables will be aligned
1826
- with existing variables. If variable offsets are supplied then
1825
+ with existing variables. If variable offsets are supplied then
1827
1826
  the variables at those offsets will be loaded and aligned based
1828
1827
  on the value of the collapse parameter. Use `None` to load all
1829
1828
  variables. (default: `None`)
@@ -1937,19 +1936,19 @@ def load_tecplot_szl(filenames,
1937
1936
  szlserver_path=None):
1938
1937
 
1939
1938
  #
1940
- # Possible Future Enhancement.
1939
+ # Possible Future Enhancement.
1941
1940
  # As it stands the szl loader is hardcoded to load variables by name when
1942
1941
  # appending to an existing dataset. If we want the szl loader to behave
1943
1942
  # similar to the internal tecplot loader then we need to add the ability
1944
- # to specify a "variables" like paramter (but should not be named
1943
+ # to specify a "variables" like paramter (but should not be named
1945
1944
  # "variables" because of conflicts with other V3 loaders that already use
1946
1945
  # that for their primary load instructions.
1947
- # This will apply ONLY to the VarNameList and VarPositionList for the
1946
+ # This will apply ONLY to the VarNameList and VarPositionList for the
1948
1947
  # $!READDATASET command (i.e. only applied to appending for V3 Loaders)
1949
1948
  #
1950
1949
  # Proposed is to add:
1951
1950
  #
1952
- # appending_variables=None,
1951
+ # appending_variables=None,
1953
1952
  #
1954
1953
  # Documentation then will include:
1955
1954
  #
@@ -1957,7 +1956,7 @@ def load_tecplot_szl(filenames,
1957
1956
  # Set of `Variables <Variable>` to load. If variable names are
1958
1957
  # specified as strings and **read_data_option** is set to
1959
1958
  # `ReadDataOption.Append` then variables will be aligned with
1960
- # existing variables. If variable offsets are supplied then
1959
+ # existing variables. If variable offsets are supplied then
1961
1960
  # the variables at those offsets will be loaded.
1962
1961
  # Use `None` to load all variables. (default: `None`)
1963
1962
 
tecplot/data/save.py CHANGED
@@ -13,8 +13,9 @@ log = logging.getLogger(__name__)
13
13
  @lock()
14
14
  def _save_tecplot(binary, frame, dataset, filename, include_text, include_geom,
15
15
  include_data, include_data_share_linkage,
16
- include_autogen_face_neighbors, use_point_format,
17
- associate_with_layout, zones, variables, precision, version):
16
+ include_autogen_face_neighbors, include_custom_labels,
17
+ use_point_format, associate_with_layout, zones, variables, precision,
18
+ version):
18
19
  if dataset is None:
19
20
  if frame is None:
20
21
  frame = layout.active_frame()
@@ -47,6 +48,7 @@ def _save_tecplot(binary, frame, dataset, filename, include_text, include_geom,
47
48
  arglist[sv.INCLUDEDATASHARELINKAGE] = include_data_share_linkage
48
49
  arglist[sv.INCLUDEAUTOGENFACENEIGHBORS] = \
49
50
  include_autogen_face_neighbors
51
+ arglist[sv.INCLUDECUSTOMLABELS] = include_custom_labels
50
52
  arglist[sv.ASSOCIATELAYOUTWITHDATAFILE] = associate_with_layout
51
53
  if version is not None:
52
54
  arglist[sv.TECPLOTVERSIONTOWRITE] = BinaryFileVersion(version)
@@ -67,8 +69,8 @@ def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None,
67
69
  variables=None, include_text=None, precision=None,
68
70
  include_geom=None, include_data=None,
69
71
  include_data_share_linkage=None,
70
- include_autogen_face_neighbors=None,
71
- use_point_format=None):
72
+ include_autogen_face_neighbors=None, use_point_format=None,
73
+ include_custom_labels=None):
72
74
  """Write Tecplot ASCII data file.
73
75
 
74
76
  Parameters:
@@ -82,8 +84,7 @@ def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None,
82
84
  <tecplot.data.Dataset>` to write out. If this and *frame* are both `None`,
83
85
  the `Dataset <tecplot.data.Dataset>` of the currently active `Frame
84
86
  <layout.Frame>` is used. (default: `None`)
85
- include_text (`bool`, optional): Write out all text,
86
- geometries and custom labels. (default: `True`)
87
+ include_text (`bool`, optional): Write out all text (default: `True`)
87
88
  include_geom (`bool`, optional): Write out all geometries.
88
89
  (default: `True`)
89
90
  include_data (`bool`, optional): Write out the data. Set
@@ -97,6 +98,8 @@ def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None,
97
98
  include_autogen_face_neighbors (`bool`, optional): Save the
98
99
  face neighbor connectivity. This may produce very large data
99
100
  files. (default: `False`)
101
+ include_custom_labels (`bool`, optional): Write out any custom labels
102
+ in the dataset to the output data file. (default: `True`)
100
103
  use_point_format (`bool`, optional): Write out point format,
101
104
  otherwise use block format.
102
105
  (default: `False`)
@@ -157,24 +160,20 @@ def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None,
157
160
  zones=[zone_to_save])
158
161
  """
159
162
  return _save_tecplot(
160
- binary=False, frame=frame, dataset=dataset,
161
- filename=filename, include_text=include_text,
162
- include_geom=include_geom, include_data=include_data,
163
+ binary=False, frame=frame, dataset=dataset, filename=filename,
164
+ include_text=include_text, include_geom=include_geom, include_data=include_data,
163
165
  include_data_share_linkage=include_data_share_linkage,
164
166
  include_autogen_face_neighbors=include_autogen_face_neighbors,
165
- use_point_format=use_point_format,
166
- associate_with_layout=None,
167
- precision=precision,
168
- zones=zones, variables=variables,
169
- version=None)
167
+ include_custom_labels=include_custom_labels, use_point_format=use_point_format,
168
+ associate_with_layout=None, precision=precision, zones=zones,
169
+ variables=variables, version=None)
170
170
 
171
171
 
172
172
  def save_tecplot_plt(filename, frame=None, dataset=None, zones=None,
173
- variables=None, version=None, include_text=None,
174
- include_geom=None, include_data=None,
175
- include_data_share_linkage=None,
176
- include_autogen_face_neighbors=None,
177
- associate_with_layout=None):
173
+ variables=None, version=None, include_text=None, include_geom=None,
174
+ include_data=None, include_data_share_linkage=None,
175
+ include_autogen_face_neighbors=None, associate_with_layout=None,
176
+ include_custom_labels=None):
178
177
  """Write Tecplot binary PLT data file.
179
178
 
180
179
  Parameters:
@@ -194,8 +193,7 @@ def save_tecplot_plt(filename, frame=None, dataset=None, zones=None,
194
193
  variables (`list` of `Variables <Variable>`, optional):
195
194
  `Variables <Variable>` to write out. If `None`, all `Variables
196
195
  <Variable>` will be saved.
197
- include_text (`bool`, optional): Write out all text,
198
- geometries and custom labels. (default: `True`)
196
+ include_text (`bool`, optional): Write out all text. (default: `True`)
199
197
  include_geom (`bool`, optional): Write out all geometries.
200
198
  (default: `True`)
201
199
  include_data (`bool`, optional): Write out the data. Set
@@ -209,6 +207,8 @@ def save_tecplot_plt(filename, frame=None, dataset=None, zones=None,
209
207
  include_autogen_face_neighbors (`bool`, optional): Save the
210
208
  face neighbor connectivity. This may produce very large data
211
209
  files. (default: `False`)
210
+ include_custom_labels (`bool`, optional): Write out any custom labels
211
+ in the dataset to the output data file. (default: `True`)
212
212
  associate_with_layout (`bool`, optional): Associate this
213
213
  data file with the current layout. Set to `False` to write the
214
214
  datafile without modifying Tecplot's current data file to layout
@@ -271,16 +271,13 @@ def save_tecplot_plt(filename, frame=None, dataset=None, zones=None,
271
271
  zones=[zone_to_save])
272
272
  """
273
273
  return _save_tecplot(
274
- binary=True, frame=frame, dataset=dataset,
275
- filename=filename, include_text=include_text,
276
- include_geom=include_geom, include_data=include_data,
274
+ binary=True, frame=frame, dataset=dataset, filename=filename,
275
+ include_text=include_text, include_geom=include_geom, include_data=include_data,
277
276
  include_data_share_linkage=include_data_share_linkage,
278
277
  include_autogen_face_neighbors=include_autogen_face_neighbors,
279
- use_point_format=None,
280
- associate_with_layout=associate_with_layout,
281
- precision=None,
282
- zones=zones, variables=variables,
283
- version=version)
278
+ include_custom_labels=include_custom_labels, use_point_format=None,
279
+ associate_with_layout=associate_with_layout, precision=None, zones=zones,
280
+ variables=variables, version=version)
284
281
 
285
282
 
286
283
  def save_tecplot_szl(filename, frame=None, dataset=None):
tecplot/layout/frame.py CHANGED
@@ -68,6 +68,9 @@ class Frame(session.Style):
68
68
  dataset: Dataset = None
69
69
  """The `Dataset <tecplot.data.Dataset>` belonging to this Frame."""
70
70
 
71
+ has_dataset = None
72
+ """Property indicating the Frame has a `Dataset <tecplot.data.Dataset>`."""
73
+
71
74
  def __init__(self, uid, page):
72
75
  self.page = page
73
76
  self.uid = uid
tecplot/plot/effects.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from builtins import super
2
2
 
3
3
  from ..tecutil import sv
4
- from .. import session
4
+ from .. import session, tecutil, version
5
5
 
6
6
 
7
7
  class LightSource(session.Style):
@@ -135,17 +135,25 @@ class LightSource(session.Style):
135
135
 
136
136
  @property
137
137
  def force_gouraud_for_contour_flood(self):
138
- """`bool`: Force gouraud effects for shaded continuous flooding.
139
-
140
- Example usage::
141
-
142
- >>> plot.light_source.force_gouraud_for_contour_flood = True
143
- """
144
- return self._get_style(bool, sv.FORCEGOURAUDFOR3DCONTFLOOD)
138
+ if version.sdk_version_info < (2025, 2):
139
+ return self._get_style(bool, sv.FORCEGOURAUDFOR3DCONTFLOOD)
140
+ else:
141
+ tecutil.api_changed('''\
142
+ LightSource.force_gouraud_for_contour_flood property has been removed.
143
+ Set the lighting_effect property to LightingEffect.SmoothWithCreases
144
+ on fieldmap.effects, isosurface.effects, slice.effects, or
145
+ streamtrace.effects as desired.''', '1.7.3', '2025 R2', warning=True)
145
146
 
146
147
  @force_gouraud_for_contour_flood.setter
147
148
  def force_gouraud_for_contour_flood(self, value):
148
- self._set_style(bool(value), sv.FORCEGOURAUDFOR3DCONTFLOOD)
149
+ if version.sdk_version_info < (2025, 2):
150
+ self._set_style(bool(value), sv.FORCEGOURAUDFOR3DCONTFLOOD)
151
+ else:
152
+ tecutil.api_changed('''\
153
+ LightSource.force_gouraud_for_contour_flood property has been removed.
154
+ Set the lighting_effect property to LightingEffect.SmoothWithCreases
155
+ on fieldmap.effects, isosurface.effects, slice.effects, or
156
+ streamtrace.effects as desired.''', '1.7.3', '2025 R2', warning=True)
149
157
 
150
158
  @property
151
159
  def force_paneled_for_cell_flood(self):
tecplot/plot/fieldmap.py CHANGED
@@ -1681,15 +1681,24 @@ class FieldmapEffects3D(FieldmapEffects):
1681
1681
  This shade is based on the orientation of the cell relative to your
1682
1682
  3D light source.
1683
1683
 
1684
- `Gouraud <LightingEffect.Gouraud>`
1685
- This plot type offers smoother, more continuous shading than
1686
- `Paneled <LightingEffect.Paneled>` shading, but it results in
1687
- slower plotting and larger vector images. `Gouraud
1688
- <LightingEffect.Gouraud>` shading is not continuous across zone
1689
- boundaries unless face neighbors are specified in the data and is
1690
- not available for finite element volume zones when blanking is
1691
- active in which case, the zone's lighting effect reverts to
1692
- `Paneled <LightingEffect.Paneled>` shading in this case.
1684
+ `Smooth <LightingEffect.Smooth>`
1685
+ Unlike `Paneled <LightingEffect.Paneled>` shading that colors the cell
1686
+ surface considering a constant angle to the light relative to the cell's
1687
+ surface normal, `Smooth <LightingEffect.Smooth>` computes the average normal
1688
+ around each cell node and interpolates the lighting influence smoothly
1689
+ across the cell face. `SmoothWithCreases <LightingEffect.SmoothWithCreases>`
1690
+ shading is not continuous across zone boundaries unless face neighbors are
1691
+ specified in the data.
1692
+
1693
+ `SmoothWithCreases <LightingEffect.SmoothWithCreases>`
1694
+ This option is similar to `Smooth <LightingEffect.Smooth>` but considers the
1695
+ crease angle between neighboring, connected cell faces. When the crease
1696
+ angle exceeds the specified amount the edge is considered creased and the
1697
+ lighting interpolation across the cell uses the cell's surface normal for
1698
+ the shared nodes along that edge instead of the average surface normal at
1699
+ those nodes. If the surface has many edges that exceed the crease angle,
1700
+ such as a very chaotic iso-surface, a significantly larger amount of data is
1701
+ required to render the surface.
1693
1702
 
1694
1703
  If ``IJK``-ordered data with `FieldmapSurfaces.surfaces_to_plot` is set
1695
1704
  to `SurfacesToPlot.ExposedCellFaces`, faces exposed by blanking will
@@ -414,20 +414,31 @@ class IsosurfaceEffects(IsosurfaceGroupStyle):
414
414
  Isosurface lighting effects must be enabled by setting
415
415
  `IsosurfaceShade.use_lighting_effect` to `True` when setting this value.
416
416
 
417
- There are two types of lighting effects: Paneled and Gouraud:
417
+ There are three types of lighting effects: Paneled, SmoothWithCreases and
418
+ Smooth:
418
419
 
419
420
  * `Paneled`: Within each cell, the color assigned to each area by
420
421
  shading or contour flooding is tinted by a shade constant
421
422
  across the cell. This shade is based on the orientation
422
423
  of the cell relative to your 3D light source.
423
- * `Gouraud`: This offers smoother, more continuous shading than
424
- Paneled shading, but it also results in slower plotting
425
- and larger print files. `Gouraud` shading is not continuous
426
- across zone boundaries unless face neighbors are specified
427
- in the data. `Gouraud` shading is not available for finite
428
- element volume `Zone <data_access>` when blanking is active.
429
- The zone's lighting effect reverts to `Paneled`
430
- shading in this case.
424
+ * `Smooth <LightingEffect.Smooth>`
425
+ Unlike `Paneled <LightingEffect.Paneled>` shading that colors the cell
426
+ surface considering a constant angle to the light relative to the cell's
427
+ surface normal, `Smooth <LightingEffect.Smooth>` computes the average
428
+ normal around each cell node and interpolates the lighting influence
429
+ smoothly across the cell face. `SmoothWithCreases
430
+ <LightingEffect.SmoothWithCreases>` shading is not continuous across
431
+ zone boundaries unless face neighbors are specified in the data.
432
+ * `SmoothWithCreases <LightingEffect.SmoothWithCreases>`
433
+ This option is similar to `Smooth <LightingEffect.Smooth>` but considers
434
+ the crease angle between neighboring, connected cell faces. When the
435
+ crease angle exceeds the specified amount the edge is considered creased
436
+ and the lighting interpolation across the cell uses the cell's surface
437
+ normal for the shared nodes along that edge instead of the average
438
+ surface normal at those nodes. If the surface has many edges that exceed
439
+ the crease angle, such as a very chaotic iso-surface, a significantly
440
+ larger amount of data is required to render the surface.
441
+
431
442
 
432
443
  Example usage::
433
444
 
@@ -447,7 +458,6 @@ class IsosurfaceEffects(IsosurfaceGroupStyle):
447
458
  Iso-surface surface translucency must be enabled by setting
448
459
  `IsosurfaceEffects.use_translucency` = `True` when setting this value.
449
460
 
450
-
451
461
  Valid translucency values range from one (opaque) to 99 (translucent).
452
462
 
453
463
  Example usage::
tecplot/plot/scatter.py CHANGED
@@ -346,7 +346,7 @@ class Scatter(session.Style):
346
346
  >>> from tecplot.constant import *
347
347
  >>> plot.fieldmap(0).scatter.symbol().shape = GeomShape.Sphere
348
348
  >>> scatter = plot.scatter
349
- >>> scatter.sphere_render_quality = SphereScatterRenderQuality.Low
349
+ >>> scatter.sphere_render_quality = SphereScatterRenderQuality.Fast
350
350
  """
351
351
  return self._get_style(SphereScatterRenderQuality,
352
352
  sv.SPHERESCATTERRENDERQUALITY)
tecplot/plot/slice.py CHANGED
@@ -226,20 +226,30 @@ class SliceEffects(session.SubStyle):
226
226
  `SliceContour.use_lighting_effect` or
227
227
  `SliceShade.use_lighting_effect` to `True` when setting this value.
228
228
 
229
- There are two types of lighting effects: Paneled and Gouraud:
229
+ There are three types of lighting effects: Paneled, SmoothWithCreases and
230
+ Smooth:
230
231
 
231
232
  * `Paneled`: Within each cell, the color assigned to each area by
232
233
  shading or contour flooding is tinted by a shade constant
233
234
  across the cell. This shade is based on the orientation
234
235
  of the cell relative to your 3D light source.
235
- * `Gouraud`: This offers smoother, more continuous shading than
236
- Paneled shading, but it also results in slower plotting and
237
- larger print files. `Gouraud` shading is not continuous across
238
- zone boundaries unless face neighbors are specified in the
239
- data. `Gouraud` shading is not available for finite element
240
- volume `Zones <data_access>` when blanking is active. The
241
- zone's lighting effect reverts to `Paneled` shading in this
242
- case.
236
+ * `Smooth <LightingEffect.Smooth>`
237
+ Unlike `Paneled <LightingEffect.Paneled>` shading that colors the cell
238
+ surface considering a constant angle to the light relative to the cell's
239
+ surface normal, `Smooth <LightingEffect.Smooth>` computes the average
240
+ normal around each cell node and interpolates the lighting influence
241
+ smoothly across the cell face. `SmoothWithCreases
242
+ <LightingEffect.SmoothWithCreases>` shading is not continuous across
243
+ zone boundaries unless face neighbors are specified in the data.
244
+ * `SmoothWithCreases <LightingEffect.SmoothWithCreases>`
245
+ This option is similar to `Smooth <LightingEffect.Smooth>` but considers
246
+ the crease angle between neighboring, connected cell faces. When the
247
+ crease angle exceeds the specified amount the edge is considered creased
248
+ and the lighting interpolation across the cell uses the cell's surface
249
+ normal for the shared nodes along that edge instead of the average
250
+ surface normal at those nodes. If the surface has many edges that exceed
251
+ the crease angle, such as a very chaotic iso-surface, a significantly
252
+ larger amount of data is required to render the surface.
243
253
 
244
254
  Example usage::
245
255
 
@@ -754,8 +764,9 @@ class SliceContour(session.SubStyle):
754
764
  the same value for `SliceShade.use_lighting_effect`,
755
765
  and vice-versa.
756
766
 
757
- The lighting effect is set with `SliceEffects.lighting_effect`, and may
758
- be one of `LightingEffect.Gouraud` or `LightingEffect.Paneled`.
767
+ The lighting effect is set with `SliceEffects.lighting_effect`, and may be one
768
+ of `LightingEffect.SmoothWithCreases`, `LightingEffect.Smooth`, or
769
+ `LightingEffect.Paneled`.
759
770
 
760
771
  Example usage::
761
772
 
@@ -571,8 +571,9 @@ class StreamtraceRodRibbonContour(StreamtraceStyle):
571
571
  the same value for `StreamtraceRodRibbonShade.use_lighting_effect`,
572
572
  and vice-versa.
573
573
 
574
- The lighting effect is set with `StreamtraceRodRibbonEffects.lighting_effect`, and may
575
- be one of `LightingEffect.Gouraud` or `LightingEffect.Paneled`.
574
+ The lighting effect is set with `StreamtraceRodRibbonEffects.lighting_effect`,
575
+ and may be one of `LightingEffect.SmoothWithCreases`, `LightingEffect.Smooth`,
576
+ or `LightingEffect.Paneled`.
576
577
 
577
578
  Example usage::
578
579
 
@@ -809,20 +810,30 @@ class StreamtraceRodRibbonEffects(StreamtraceStyle):
809
810
  Note that setting `StreamtraceRodRibbonShade.use_lighting_effect` will also set
810
811
  this value for `ribbon contours <StreamtraceRodRibbonContour>`.
811
812
 
812
- There are two types of lighting effects: Paneled and Gouraud:
813
+ There are three types of lighting effects: Paneled, SmoothWithCreases and
814
+ Smooth:
813
815
 
814
816
  * `Paneled`: Within each cell, the color assigned to each area by
815
817
  shading or contour flooding is tinted by a shade constant
816
818
  across the cell. This shade is based on the orientation
817
819
  of the cell relative to your 3D light source.
818
- * `Gouraud`: This offers smoother, more continuous shading than
819
- Paneled shading, but it also results in slower plotting
820
- and larger print files. `Gouraud` shading is not continuous
821
- across zone boundaries unless face neighbors are specified
822
- in the data. `Gouraud` shading is not available for finite
823
- element volume `Zone <data_access>` when blanking is active.
824
- The zone's lighting effect reverts to `Paneled`
825
- shading in this case.
820
+ * `Smooth <LightingEffect.Smooth>`
821
+ Unlike `Paneled <LightingEffect.Paneled>` shading that colors the cell
822
+ surface considering a constant angle to the light relative to the cell's
823
+ surface normal, `Smooth <LightingEffect.Smooth>` computes the average
824
+ normal around each cell node and interpolates the lighting influence
825
+ smoothly across the cell face. `SmoothWithCreases
826
+ <LightingEffect.SmoothWithCreases>` shading is not continuous across
827
+ zone boundaries unless face neighbors are specified in the data.
828
+ * `SmoothWithCreases <LightingEffect.SmoothWithCreases>`
829
+ This option is similar to `Smooth <LightingEffect.Smooth>` but considers
830
+ the crease angle between neighboring, connected cell faces. When the
831
+ crease angle exceeds the specified amount the edge is considered creased
832
+ and the lighting interpolation across the cell uses the cell's surface
833
+ normal for the shared nodes along that edge instead of the average
834
+ surface normal at those nodes. If the surface has many edges that exceed
835
+ the crease angle, such as a very chaotic iso-surface, a significantly
836
+ larger amount of data is required to render the surface.
826
837
 
827
838
  Example usage::
828
839
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2024-05-28 by tecgen.
2
+ # This file was auto-generated on 2025-12-15 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  from enum import Enum as _Enum
@@ -407,7 +407,6 @@ class ExportFormat(_Enum):
407
407
  Custom = 15
408
408
  JPEG = 16
409
409
  Flash = 17
410
- X3D = 18
411
410
  TecplotViewer = 19
412
411
  FLV = 20
413
412
  MPEG4 = 21
@@ -441,6 +440,10 @@ class FECellShape(_Enum):
441
440
  Pyramid = 5
442
441
  Prism = 6
443
442
 
443
+ class FEDerivativeMethod(_Enum):
444
+ GreenGauss = 0
445
+ MovingLeastSquares = 1
446
+
444
447
  class FaceNeighborMode(_Enum):
445
448
  LocalOneToOne = 0
446
449
  LocalOneToMany = 1
@@ -558,6 +561,7 @@ class GeomShape(_Enum):
558
561
  Point = 10
559
562
  PieChart = 11
560
563
  LineArt = 12
564
+ Plus = 13
561
565
 
562
566
  class GetValueReturnCode(_Enum):
563
567
  Ok = 0
@@ -642,7 +646,8 @@ class LegendShow(_Enum):
642
646
 
643
647
  class LightingEffect(_Enum):
644
648
  Paneled = 0
645
- Gouraud = 1
649
+ SmoothWithCreases = 1
650
+ Smooth = 3
646
651
 
647
652
  class LineCap(_Enum):
648
653
  Flat = 0
@@ -789,7 +794,6 @@ class PrinterDriver(_Enum):
789
794
  EPS = 4
790
795
  WINDOWS = 5
791
796
  WMF = 6
792
- X3D = 7
793
797
 
794
798
  class ProbeNearest(_Enum):
795
799
  Position = 0
@@ -834,6 +838,10 @@ class RelOp(_Enum):
834
838
  EqualTo = 4
835
839
  NotEqualTo = 5
836
840
 
841
+ class RenderAPI(_Enum):
842
+ OpenGL = 0
843
+ Vulkan = 1
844
+
837
845
  class Resulting1DZoneType(_Enum):
838
846
  IOrderedIfPossible = 0
839
847
  FELineSegment = 1
@@ -895,6 +903,12 @@ class SliceSource(_Enum):
895
903
  SurfacesOfVolumeZones = 2
896
904
  LinearZones = 3
897
905
 
906
+ class SphereScatterRenderQuality(_Enum):
907
+ Low = 0
908
+ Medium = 1
909
+ High = 2
910
+ Fast = 3
911
+
898
912
  class StateChange(_Enum):
899
913
  VarsAltered = 0
900
914
  VarsAdded = 1
tecplot/tecutil/sv.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2024-05-28 by tecgen.
2
+ # This file was auto-generated on 2025-12-15 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
 
@@ -351,6 +351,7 @@ DEFINITIONCONTOURGROUP = 'DEFINITIONCONTOURGROUP'
351
351
  DEFNUMLEVELS = 'DEFNUMLEVELS'
352
352
  DELETEVARIABLESDIALOG = 'DELETEVARIABLESDIALOG'
353
353
  DELETEZONESDIALOG = 'DELETEZONESDIALOG'
354
+ DELIVERNORMALSFORPANELSHADING = 'DELIVERNORMALSFORPANELSHADING'
354
355
  DELTATIME = 'DELTATIME'
355
356
  DEPENDENTVARS = 'DEPENDENTVARS'
356
357
  DEPTH = 'DEPTH'
@@ -410,6 +411,7 @@ ENABLEDELAYS = 'ENABLEDELAYS'
410
411
  ENABLEERRORS = 'ENABLEERRORS'
411
412
  ENABLEINTERRUPTS = 'ENABLEINTERRUPTS'
412
413
  ENABLEPAUSES = 'ENABLEPAUSES'
414
+ ENABLERENDERSTATSOVERLAY = 'ENABLERENDERSTATSOVERLAY'
413
415
  ENABLEWARNINGS = 'ENABLEWARNINGS'
414
416
  END = 'END'
415
417
  ENDLEVEL = 'ENDLEVEL'
@@ -463,6 +465,7 @@ FACENODECOUNTS = 'FACENODECOUNTS'
463
465
  FACENODES = 'FACENODES'
464
466
  FACERIGHTELEMS = 'FACERIGHTELEMS'
465
467
  FASTLINEPATTERNSONSCREEN = 'FASTLINEPATTERNSONSCREEN'
468
+ FEDERIVATIVEMETHOD = 'FEDERIVATIVEMETHOD'
466
469
  FFMPEGQSCALE = 'FFMPEGQSCALE'
467
470
  FIELD = 'FIELD'
468
471
  FIELDLAYERCONTROL = 'FIELDLAYERCONTROL'
@@ -514,6 +517,7 @@ FORMATTING = 'FORMATTING'
514
517
  FOURIERTRANSFORMDIALOG = 'FOURIERTRANSFORMDIALOG'
515
518
  FOURIERTRANSFORMRESULTINGVARS = 'FOURIERTRANSFORMRESULTINGVARS'
516
519
  FOURIERTRANSFORMRESULTINGZONES = 'FOURIERTRANSFORMRESULTINGZONES'
520
+ FRAGMENTBUFFERSIZE = 'FRAGMENTBUFFERSIZE'
517
521
  FRAME = 'FRAME'
518
522
  FRAMEAXIS = 'FRAMEAXIS'
519
523
  FRAMECOLLECTION = 'FRAMECOLLECTION'
@@ -558,6 +562,7 @@ GLOBALTHREEDVECTOR = 'GLOBALTHREEDVECTOR'
558
562
  GLOBALTIME = 'GLOBALTIME'
559
563
  GLOBALTWODVECTOR = 'GLOBALTWODVECTOR'
560
564
  GLOBALXY = 'GLOBALXY'
565
+ GPUNUMBER = 'GPUNUMBER'
561
566
  GRANCHOR = 'GRANCHOR'
562
567
  GRAYSCALE = 'GRAYSCALE'
563
568
  GRAYSCALEDEPTH = 'GRAYSCALEDEPTH'
@@ -850,6 +855,7 @@ MAGNITUDELABEL = 'MAGNITUDELABEL'
850
855
  MAINTAINASPECTRATIO = 'MAINTAINASPECTRATIO'
851
856
  MAJGRIDLINEPEN = 'MAJGRIDLINEPEN'
852
857
  MAKEROUGHDRAFT = 'MAKEROUGHDRAFT'
858
+ MANUALLYREPAIRDAMAGEDDRAWAREA = 'MANUALLYREPAIRDAMAGEDDRAWAREA'
853
859
  MAP = 'MAP'
854
860
  MARCHINGCUBEALGORITHM = 'MARCHINGCUBEALGORITHM'
855
861
  MARGIN = 'MARGIN'
@@ -878,6 +884,7 @@ MAXPTSINALINE = 'MAXPTSINALINE'
878
884
  MAXRENDERTIMEBEFOREAPPROX = 'MAXRENDERTIMEBEFOREAPPROX'
879
885
  MAXROTATELINES = 'MAXROTATELINES'
880
886
  MAXSCREENSPEED = 'MAXSCREENSPEED'
887
+ MAXSORTEDFRAGMENTCOUNT = 'MAXSORTEDFRAGMENTCOUNT'
881
888
  MAXSTEPS = 'MAXSTEPS'
882
889
  MAXSTREAMLINES = 'MAXSTREAMLINES'
883
890
  MAXSTRIPLENGTH = 'MAXSTRIPLENGTH'
@@ -910,6 +917,7 @@ MINORLENGTH = 'MINORLENGTH'
910
917
  MINORLINETHICKNESS = 'MINORLINETHICKNESS'
911
918
  MINORTICKS = 'MINORTICKS'
912
919
  MINPIXELSFORDRAG = 'MINPIXELSFORDRAG'
920
+ MINSORTEDFRAGMENTCOUNT = 'MINSORTEDFRAGMENTCOUNT'
913
921
  MINVISIBILITYPERCENTAGE = 'MINVISIBILITYPERCENTAGE'
914
922
  MIRRORVAR = 'MIRRORVAR'
915
923
  MIRRORVARS = 'MIRRORVARS'
@@ -978,11 +986,14 @@ OBEYCLIPPLANES = 'OBEYCLIPPLANES'
978
986
  OBEYSOURCEZONEBLANKING = 'OBEYSOURCEZONEBLANKING'
979
987
  OBJECTALIGN = 'OBJECTALIGN'
980
988
  OBJECTSET = 'OBJECTSET'
989
+ OFFSCREENDEVICE = 'OFFSCREENDEVICE'
981
990
  OFFSET = 'OFFSET'
982
991
  OFFSET1 = 'OFFSET1'
983
992
  OFFSET2 = 'OFFSET2'
984
993
  OFFSETANGLE = 'OFFSETANGLE'
994
+ OITSETTINGS = 'OITSETTINGS'
985
995
  OKTOEXECUTESYSTEMCOMMAND = 'OKTOEXECUTESYSTEMCOMMAND'
996
+ ONSCREENDEVICE = 'ONSCREENDEVICE'
986
997
  OPENGLCONFIG = 'OPENGLCONFIG'
987
998
  OPENLAYOUTDIALOG = 'OPENLAYOUTDIALOG'
988
999
  OPPOSINGAXISVALUE = 'OPPOSINGAXISVALUE'
@@ -1572,6 +1583,7 @@ VISUALID = 'VISUALID'
1572
1583
  VOLUMECELLINTERPOLATIONMODE = 'VOLUMECELLINTERPOLATIONMODE'
1573
1584
  VOLUMEMODE = 'VOLUMEMODE'
1574
1585
  VOLUMEOBJECTSTOPLOT = 'VOLUMEOBJECTSTOPLOT'
1586
+ VULKANCONFIG = 'VULKANCONFIG'
1575
1587
  VVAR = 'VVAR'
1576
1588
  VVARLIST = 'VVARLIST'
1577
1589
  WAIT = 'WAIT'
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2024-05-28 by tecgen.
2
+ # This file was auto-generated on 2025-12-15 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  import sys
@@ -3065,6 +3065,41 @@ class TecUtil(object):
3065
3065
  self.handle.tecUtilLastErrorMessageType.restype = c_int
3066
3066
  except AttributeError:
3067
3067
  error_list.append('TecUtilLastErrorMessageType')
3068
+ # int32_t TecUtilLayoutDatasetCount(LayoutReadDataInfo_pa ReadDataInfo)
3069
+ try:
3070
+ self.handle.tecUtilLayoutDatasetCount.argtypes = [c_void_p]
3071
+ self.handle.tecUtilLayoutDatasetCount.restype = c_int32
3072
+ except AttributeError:
3073
+ error_list.append('TecUtilLayoutDatasetCount')
3074
+ # TP_GIVES LayoutReadDataInfo_pa TecUtilLayoutReadDataInfo(char const * FName)
3075
+ try:
3076
+ self.handle.tecUtilLayoutReadDataInfo.argtypes = [c_char_p]
3077
+ self.handle.tecUtilLayoutReadDataInfo.restype = c_void_p
3078
+ except AttributeError:
3079
+ error_list.append('TecUtilLayoutReadDataInfo')
3080
+ # void TecUtilLayoutReadDataInfoDealloc(TP_RECEIVES_GIVES LayoutReadDataInfo_pa * ReadDataInfo)
3081
+ try:
3082
+ self.handle.tecUtilLayoutReadDataInfoDealloc.argtypes = [POINTER(c_void_p)]
3083
+ except AttributeError:
3084
+ error_list.append('TecUtilLayoutReadDataInfoDealloc')
3085
+ # int32_t TecUtilLayoutReadDataInstructionCount(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber)
3086
+ try:
3087
+ self.handle.tecUtilLayoutReadDataInstructionCount.argtypes = [c_void_p, c_int32]
3088
+ self.handle.tecUtilLayoutReadDataInstructionCount.restype = c_int32
3089
+ except AttributeError:
3090
+ error_list.append('TecUtilLayoutReadDataInstructionCount')
3091
+ # TP_GIVES char * TecUtilLayoutReadDataInstructionLoader(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber, int32_t InstructionNumber)
3092
+ try:
3093
+ self.handle.tecUtilLayoutReadDataInstructionLoader.argtypes = [c_void_p, c_int32, c_int32]
3094
+ self.handle.tecUtilLayoutReadDataInstructionLoader.restype = POINTER(c_char)
3095
+ except AttributeError:
3096
+ error_list.append('TecUtilLayoutReadDataInstructionLoader')
3097
+ # TP_GIVES char * TecUtilLayoutReadDataInstructions(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber, int32_t InstructionNumber)
3098
+ try:
3099
+ self.handle.tecUtilLayoutReadDataInstructions.argtypes = [c_void_p, c_int32, c_int32]
3100
+ self.handle.tecUtilLayoutReadDataInstructions.restype = POINTER(c_char)
3101
+ except AttributeError:
3102
+ error_list.append('TecUtilLayoutReadDataInstructions')
3068
3103
  # LgIndex_t TecUtilLimitGetValue(char const * LimitString)
3069
3104
  try:
3070
3105
  self.handle.tecUtilLimitGetValue.argtypes = [c_char_p]
@@ -9273,6 +9308,48 @@ class TecUtil(object):
9273
9308
  result = self.handle.tecUtilLastErrorMessageType()
9274
9309
  return MessageBoxType(result)
9275
9310
 
9311
+ # int32_t TecUtilLayoutDatasetCount(LayoutReadDataInfo_pa ReadDataInfo)
9312
+ @tecutil_preamble
9313
+ def LayoutDatasetCount(self, read_data_info):
9314
+ result = self.handle.tecUtilLayoutDatasetCount(read_data_info)
9315
+ return result
9316
+
9317
+ # LayoutReadDataInfo_pa TecUtilLayoutReadDataInfo(char const * FName)
9318
+ @tecutil_preamble
9319
+ def LayoutReadDataInfo(self, f_name):
9320
+ f_name_proxy = f_name.encode('utf-8') if f_name is not None else f_name
9321
+ result = self.handle.tecUtilLayoutReadDataInfo(f_name_proxy)
9322
+ return result
9323
+
9324
+ # void TecUtilLayoutReadDataInfoDealloc(TP_RECEIVES_GIVES LayoutReadDataInfo_pa * ReadDataInfo)
9325
+ @tecutil_preamble
9326
+ def LayoutReadDataInfoDealloc(self, read_data_info):
9327
+ self.handle.tecUtilLayoutReadDataInfoDealloc(read_data_info)
9328
+
9329
+ # int32_t TecUtilLayoutReadDataInstructionCount(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber)
9330
+ @tecutil_preamble
9331
+ def LayoutReadDataInstructionCount(self, read_data_info, dataset_number):
9332
+ result = self.handle.tecUtilLayoutReadDataInstructionCount(read_data_info, dataset_number)
9333
+ return result
9334
+
9335
+ # char * TecUtilLayoutReadDataInstructionLoader(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber, int32_t InstructionNumber)
9336
+ @tecutil_preamble
9337
+ def LayoutReadDataInstructionLoader(self, read_data_info, dataset_number, instruction_number):
9338
+ result_ptr = self.handle.tecUtilLayoutReadDataInstructionLoader(read_data_info, dataset_number, instruction_number)
9339
+ result_char_p = cast(result_ptr, c_char_p)
9340
+ result = None if (result_char_p is None or result_char_p.value is None) else result_char_p.value.decode('utf-8')
9341
+ self.handle.tecUtilStringDealloc(byref(result_char_p))
9342
+ return result
9343
+
9344
+ # char * TecUtilLayoutReadDataInstructions(LayoutReadDataInfo_pa ReadDataInfo, int32_t DatasetNumber, int32_t InstructionNumber)
9345
+ @tecutil_preamble
9346
+ def LayoutReadDataInstructions(self, read_data_info, dataset_number, instruction_number):
9347
+ result_ptr = self.handle.tecUtilLayoutReadDataInstructions(read_data_info, dataset_number, instruction_number)
9348
+ result_char_p = cast(result_ptr, c_char_p)
9349
+ result = None if (result_char_p is None or result_char_p.value is None) else result_char_p.value.decode('utf-8')
9350
+ self.handle.tecUtilStringDealloc(byref(result_char_p))
9351
+ return result
9352
+
9276
9353
  # LgIndex_t TecUtilLimitGetValue(char const * LimitString)
9277
9354
  @tecutil_preamble
9278
9355
  def LimitGetValue(self, limit_string):
@@ -46,7 +46,7 @@ def set_arglist_item(item, key, val):
46
46
  item.value.float64 = val[0]
47
47
 
48
48
  elif isinstance(val, (int, bool)):
49
- set_scalar(item.value, c_int64, val)
49
+ set_scalar(item.value, c_int64, int(val))
50
50
  elif isinstance(val, Enum):
51
51
  set_scalar(item.value, c_int64, val.value)
52
52
 
@@ -3518,6 +3518,41 @@ class TecUtilRPC(object):
3518
3518
  rep=self.sndrcv("LastErrorMessageType")
3519
3519
  self.chk(rep)
3520
3520
  return try_cast_to_enum(MessageBoxType, rep.args[0].int32)
3521
+ def LayoutDatasetCount(self,read_data_info):
3522
+ args=((ValueType.Address,c_uint64,getattr(read_data_info,'value',read_data_info)),)
3523
+ rep=self.sndrcv("LayoutDatasetCount",*args)
3524
+ self.chk(rep)
3525
+ return rep.args[0].int32
3526
+ def LayoutReadDataInfo(self,f_name):
3527
+ args=((ValueType.Text,None,f_name),)
3528
+ rep=self.sndrcv("LayoutReadDataInfo",*args)
3529
+ self.chk(rep)
3530
+ return rep.args[0].uint64
3531
+ def LayoutReadDataInfoDealloc(self,read_data_info):
3532
+ args=((ValueType.Address,c_uint64,read_data_info.contents.value),)
3533
+ rep=self.sndrcv("LayoutReadDataInfoDealloc",*args)
3534
+ self.chk(rep)
3535
+ return rep.args[0].uint64
3536
+ def LayoutReadDataInstructionCount(self,read_data_info,dataset_number):
3537
+ args=((ValueType.Address,c_uint64,getattr(read_data_info,'value',read_data_info)),
3538
+ (ValueType.Scalar,c_int32,dataset_number),)
3539
+ rep=self.sndrcv("LayoutReadDataInstructionCount",*args)
3540
+ self.chk(rep)
3541
+ return rep.args[0].int32
3542
+ def LayoutReadDataInstructionLoader(self,read_data_info,dataset_number,instruction_number):
3543
+ args=((ValueType.Address,c_uint64,getattr(read_data_info,'value',read_data_info)),
3544
+ (ValueType.Scalar,c_int32,dataset_number),
3545
+ (ValueType.Scalar,c_int32,instruction_number),)
3546
+ rep=self.sndrcv("LayoutReadDataInstructionLoader",*args)
3547
+ self.chk(rep)
3548
+ return self.read_text(rep.args[0])
3549
+ def LayoutReadDataInstructions(self,read_data_info,dataset_number,instruction_number):
3550
+ args=((ValueType.Address,c_uint64,getattr(read_data_info,'value',read_data_info)),
3551
+ (ValueType.Scalar,c_int32,dataset_number),
3552
+ (ValueType.Scalar,c_int32,instruction_number),)
3553
+ rep=self.sndrcv("LayoutReadDataInstructions",*args)
3554
+ self.chk(rep)
3555
+ return self.read_text(rep.args[0])
3521
3556
  def LimitGetValue(self,limit_string):
3522
3557
  args=((ValueType.Text,None,limit_string),)
3523
3558
  rep=self.sndrcv("LimitGetValue",*args)
tecplot/tecutil/util.py CHANGED
@@ -332,11 +332,11 @@ def temporary_closed_file(suffix=None):
332
332
 
333
333
 
334
334
  def api_changed(msg, version_changed, sdk_version_changed, warning=False):
335
- msg = textwrap.dedent('''\
336
- PyTecplot API Change (version {})
337
- Tecplot 360 version: {}
338
- {}
339
- ''').format(version_changed, sdk_version_changed, textwrap.fill(msg))
335
+ detail = textwrap.indent(textwrap.dedent(msg), ' ')
336
+ msg = textwrap.dedent(f'''\
337
+ PyTecplot API Change (version {version_changed})
338
+ Tecplot 360 version: {sdk_version_changed}
339
+ ''') + detail
340
340
  if warning:
341
341
  if __debug__:
342
342
  msg += 'Please update your code as the legacy interface will\n' \
@@ -347,11 +347,11 @@ def api_changed(msg, version_changed, sdk_version_changed, warning=False):
347
347
 
348
348
 
349
349
  def api_moved(old, new, version_changed, sdk_version_changed, warning=False):
350
- msg = textwrap.dedent('''\
351
- PyTecplot API Change (version {})
352
- Tecplot 360 version: {}
353
- {} has been moved to {}
354
- ''').format(version_changed, sdk_version_changed, old, new)
350
+ msg = textwrap.dedent(f'''\
351
+ PyTecplot API Change (version {version_changed})
352
+ Tecplot 360 version: {sdk_version_changed}
353
+ {old} has been moved to {new}
354
+ ''')
355
355
  if warning:
356
356
  if __debug__:
357
357
  msg += 'Please update your code as the legacy interface will\n' \
tecplot/version.py CHANGED
@@ -33,8 +33,8 @@ from .tecutil import _tecutil_connector
33
33
 
34
34
  Version = collections.namedtuple('V', ['major', 'minor', 'patch', 'build'])
35
35
 
36
- version = '1.7.2'
37
- build = '6886ce6'
36
+ version = '1.7.4'
37
+ build = '6f7ff42'
38
38
  version_info = Version(*[int(x) for x in version.split('.')], build=build or 0)
39
39
 
40
40
  sdk_version_info = _tecutil_connector.sdk_version_info