pytecplot 1.7.5__py3-none-any.whl → 1.8.0__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.5
3
+ Version: 1.8.0
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
@@ -26,10 +26,12 @@ Classifier: Topic :: Software Development :: Libraries
26
26
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
27
27
  Classifier: Programming Language :: Python
28
28
  Classifier: Programming Language :: Python :: 3
29
+ Classifier: Programming Language :: Python :: 3.11
29
30
  Classifier: Programming Language :: Python :: 3.12
30
31
  Classifier: Programming Language :: Python :: 3.13
31
32
  Classifier: Programming Language :: Python :: 3.14
32
- Requires-Python: >=3.8
33
+ Classifier: Programming Language :: Python :: 3.15
34
+ Requires-Python: >=3.11
33
35
  Description-Content-Type: text/x-rst
34
36
  License-File: LICENSE.html
35
37
  Requires-Dist: protobuf>=3.20.0
@@ -75,11 +77,11 @@ Documentation
75
77
  The full documentation is here: https://www.tecplot.com/docs/pytecplot
76
78
 
77
79
  .. note::
78
- |PyTecplot| is supported on the three latest releases of Python, 64-bit
79
- only. |PyTecplot| does not support 32 bit Python. Please refer to
80
- INSTALL.rst for installation instructions and environment setup. For the
81
- best experience, developers are encouraged to use the **latest version of
82
- Python**.
80
+ |PyTecplot| supports the Python versions actively maintained by the Python
81
+ Software Foundation, 64-bit only.
82
+ |PyTecplot| does not support 32 bit Python. Please refer to INSTALL.rst for
83
+ installation instructions and environment setup. For the best experience,
84
+ developers are encouraged to use the **latest supported version of Python**.
83
85
 
84
86
  Quick Start
85
87
  -----------
@@ -107,6 +109,17 @@ For more information, see |Tecplot 360s release notes|.
107
109
 
108
110
  .. |Tecplot 360s release notes| replace:: `Tecplot 360's release notes <https://tecplot.com/products/tecplot-360/new-in-tecplot-360>`__
109
111
 
112
+ PyTecplot 1.8.0
113
+ ^^^^^^^^^^^^^^^
114
+
115
+ * Added surface-flow effect controls, including line integral convolution, for
116
+ Tecplot 360 2026 R1 and later.
117
+ * Added `tp.data.load_ugrid()` for loading exactly one `.b8.ugrid` or
118
+ `.lb8.ugrid` file per call with an optional explicit `mapbc_filename`.
119
+ * Documented UGRID MAPBC behavior in the API reference, including companion
120
+ `.mapbc` auto-discovery when `mapbc_filename=None`.
121
+ * Current FEA loader version updated to v196864.
122
+
110
123
  PyTecplot 1.7.5
111
124
  ^^^^^^^^^^^^^^^
112
125
 
@@ -1,9 +1,9 @@
1
- pytecplot-1.7.5.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
1
+ pytecplot-1.8.0.dist-info/licenses/LICENSE.html,sha256=I240fAHgxqlSQn_eSmb9ktcS4hgugObDnHYQnlEPzt8,28492
2
2
  tecplot/__init__.py,sha256=iHAPbGDgIh7HtLWaWcDYfVS4TOsNrRSHyQa-H_6Li3g,3550
3
3
  tecplot/constant.py,sha256=KoqTkjfi6xjxolWeYNSUXwh27iBR8DnemNnwdZ2s4GM,8740
4
4
  tecplot/exception.py,sha256=YB4zeL0-07yCy4pyUqeFdNQ98nK11h2n3ZHHe58Od6s,6493
5
5
  tecplot/macro.py,sha256=uE29ftjdr2HdlFVa9SS-1uBU8Di4W3PwquhI75LnvhM,13307
6
- tecplot/version.py,sha256=A5b3c-YNmQwFJ739MW1oGYkIXgvzE856yW9Ov1RgClQ,1544
6
+ tecplot/version.py,sha256=4UuHbgyO35GNcD18udMY95wD3BPnaCXT_iZyOKKtuMw,1545
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
@@ -45,23 +45,23 @@ tecplot/legend/legend.py,sha256=FTx03o54awsytUUI2fu8db2oCWvG9L8_D6fymS-gd-Q,4022
45
45
  tecplot/legend/line_legend.py,sha256=qim_xoNHB7gk-Hn7x6d5Yttd_zfFAaoA2KKqpD0S94Q,2121
46
46
  tecplot/legend/rgb_coloring_legend.py,sha256=pDgPaQBtdV99Qz2tDkxc-FGXHmpBSfwZvtDrKXf3gus,9740
47
47
  tecplot/legend/scatter_legend.py,sha256=_td5uXO2u3PxT-cCYfGlMVZWHuA4k9i75YYzvLdHv6E,4013
48
- tecplot/plot/__init__.py,sha256=2fOlr0Xb48oHO5-OTioxN0yls-2LCPbptzuCusnag9c,3950
48
+ tecplot/plot/__init__.py,sha256=kyez7N6l_bSdd3JodLS8BBxP9W_tfwCcuOBdYOjqxYo,3995
49
49
  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=wsj0EhnXEQePq7SRxLogcUClDWNVFaFyUSf20yuKTF4,5691
54
- tecplot/plot/fieldmap.py,sha256=o5XjjUDcUK55dieSSWYv7NzzMN0kXArFV2UuP86AFzE,76312
53
+ tecplot/plot/effects.py,sha256=z6wUe7XmumsQ-PlUtm1bOtKPoDpSUNuUTjy058XM11A,11169
54
+ tecplot/plot/fieldmap.py,sha256=GcwxDN_TyBcdUquV3T5g0k1jXEeCkY3ZL16yGLgngCw,77023
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=1QUCakVNMD2diThLnRJW7xsFfsy-RMLYmncGdv-P4Co,41154
57
+ tecplot/plot/isosurface.py,sha256=Y8leSqYnqg-e_YHQ4ZMp4djOwZaLMfBJBE1QWBm13ms,41856
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
- tecplot/plot/plot.py,sha256=WB2S4cHc0JB2wQrZSoEISpjvuXuQRZ_QXLuFaBNJuhk,60658
61
+ tecplot/plot/plot.py,sha256=AxerHBcbVdk_K8wMkEtQ3Yulfii6rXFHggpjDPiMauE,61751
62
62
  tecplot/plot/rgb_coloring.py,sha256=OfcIvhQ9Tm5TQylOUttX7QcNu3CHtETBpIz7gqa9GwY,9417
63
63
  tecplot/plot/scatter.py,sha256=_Z7Kte2XSruGcDxEDETD3-4-ynYPvc85_W5jNSzG9lE,12610
64
- tecplot/plot/slice.py,sha256=C2yUnta-ls0oN_7vM_qaXbZczFS4jWNsSypZX6CV3wk,53179
64
+ tecplot/plot/slice.py,sha256=364P2jyWE-Qovgr6Lii_bU6G2fRNKhQH-NRBHryc5ZQ,53897
65
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
@@ -74,26 +74,26 @@ tecplot/session/config.py,sha256=UrKiaP1HIZSO1J-eV-SEPZa0LvxK80eDcQanEZNeMtw,295
74
74
  tecplot/session/session.py,sha256=xBvfy90k6WBbUTQEFBWLm4F53_DtKp14gC-uMO8q5Xs,17908
75
75
  tecplot/session/state_changed.py,sha256=qefZrJDIO5gT8hvkrrRmq75rQwIFXKA12qrXx6TPiD4,7961
76
76
  tecplot/session/style.py,sha256=djEwXG3H8_izU1Zsk5b7FlJo-WsxgLzb3N78YHCC7Us,17619
77
- tecplot/tecutil/__init__.py,sha256=tvHnjGACyMsVN7WbYrtp8Lo9qRBQymYZlQ5BuyiBMQg,748
77
+ tecplot/tecutil/__init__.py,sha256=5jki45DrpyEnes5lJr1lxIlfa17KEMX9yL7rvx8p7qc,783
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=XlGh9KOxk1FCsknu8yTuETfGrNuq4E9efEY-U8Pve9U,21784
80
+ tecplot/tecutil/constant.py,sha256=P1bwpHlwAtOLw4Kdz1zHipEjVTEtKIy0Nv_5b3nmLQA,21935
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=d6zufyJhfo6UHwCJV6t9yu_yFvKS2JD9Io6GkOJ40lQ,54648
87
- tecplot/tecutil/tecutil.py,sha256=HxPsG94wu2kZjtsY2YfaFlko4GBUP6X12pcLR89jAkw,697201
86
+ tecplot/tecutil/sv.py,sha256=2fWRyOzIMCLYFT7e0uLHVPTHBo-yhJeOENxh15jwmKo,55091
87
+ tecplot/tecutil/tecutil.py,sha256=1Gk0piCrUyhcEv04VQ0Pmw3YZxbAjg69gwQILYlFn_4,697201
88
88
  tecplot/tecutil/tecutil_client.py,sha256=2ELrTJG2hlPoOMp6ud0bb6ciTSQTEhFpkA50QrMVB6c,23754
89
- tecplot/tecutil/tecutil_connector.py,sha256=HW05xfxIbSrnnpXic3DNUkXmMmo0e9Z-HhT3EoC_Mzg,37059
89
+ tecplot/tecutil/tecutil_connector.py,sha256=GzmdZ2yBn6HFzD-qB1ICz-dduocFnjkV6mmBvkn5qtc,37148
90
90
  tecplot/tecutil/tecutil_rpc.py,sha256=bei8gcQPHRS1OgBZQdLSYdX6SF_M1WzAqhSp3kQK_sk,288068
91
- tecplot/tecutil/util.py,sha256=JgNpjE3J7Uz_QHqPrOxmHCwNnIojkZVfdKftVw_WUdo,12055
91
+ tecplot/tecutil/util.py,sha256=wtcK1_tO4_6pKBsqYopoM5RJl35kPcYFY23kvn1tJZU,12559
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.5.dist-info/METADATA,sha256=hZc-cnh3PQaZEUiKeKmmFH9Gdmi8VZVM6DSxmrLk86c,23561
97
- pytecplot-1.7.5.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
98
- pytecplot-1.7.5.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
- pytecplot-1.7.5.dist-info/RECORD,,
96
+ pytecplot-1.8.0.dist-info/METADATA,sha256=gvwJlY-I2CjNQUlcF9QNlfRYtUTfM2tWUjJ8UmOTods,24173
97
+ pytecplot-1.8.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
98
+ pytecplot-1.8.0.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
+ pytecplot-1.8.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (84.0.0)
2
+ Generator: setuptools (84.2.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
tecplot/plot/__init__.py CHANGED
@@ -11,7 +11,7 @@ from .blanking import IJKBlanking
11
11
  from .contour import (ContourGroup, ContourColorCutoff, ContourColormapFilter,
12
12
  ContourColormapOverride, ContourColormapZebraShade,
13
13
  ContourLabels, ContourLevels, ContourLines)
14
- from .effects import LightSource
14
+ from .effects import LightSource, LineIntegralConvolution, SurfaceFlowEffects
15
15
  from .fieldmap import (FieldmapContour, FieldmapEdge, FieldmapEffects,
16
16
  FieldmapEffects3D, Fieldmap, Cartesian2DFieldmap,
17
17
  Cartesian2DFieldmapCollection, Cartesian3DFieldmap,
tecplot/plot/effects.py CHANGED
@@ -1,7 +1,182 @@
1
1
  from builtins import super
2
2
 
3
3
  from ..tecutil import sv
4
+ from ..constant import *
4
5
  from .. import session, tecutil, version
6
+ from ..exception import *
7
+ from ..tecutil import _require_surface_flow_effects_sdk
8
+
9
+
10
+ class SurfaceFlowEffects(session.Style):
11
+ """Shared surface-flow effect settings for field-plot surfaces.
12
+
13
+ .. versionadded:: 1.7, Tecplot 360 2026.1
14
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
15
+ """
16
+
17
+ def __init__(self, plot):
18
+ _require_surface_flow_effects_sdk()
19
+ self.plot = plot
20
+ super().__init__(sv.GLOBALSURFACEFLOWEFFECTS,
21
+ uniqueid=self.plot.frame.uid)
22
+
23
+ @property
24
+ def line_integral_convolution(self):
25
+ """`LineIntegralConvolution`: Line integral convolution parameter settings.
26
+
27
+ Example usage::
28
+
29
+ >>> lic = plot.surface_flow_effects.line_integral_convolution
30
+ >>> lic.step_size = 0.9
31
+ """
32
+ return LineIntegralConvolution(self)
33
+
34
+
35
+ class LineIntegralConvolution(session.Style):
36
+ """Shared line integral convolution settings for field-plot surfaces.
37
+
38
+ .. versionadded:: 1.7, Tecplot 360 2026.1
39
+ Line integral convolution requires Tecplot 360 2026 R1 or later.
40
+
41
+ .. code-block:: python
42
+ :emphasize-lines: 18-24
43
+
44
+ import os
45
+ import tecplot
46
+ from tecplot.constant import *
47
+
48
+ examples_dir = tecplot.session.tecplot_examples_directory()
49
+ datafile = os.path.join(examples_dir, 'SimpleData', 'VortexShedding.plt')
50
+ dataset = tecplot.data.load_tecplot(datafile)
51
+ frame = dataset.frame
52
+ frame.plot_type = PlotType.Cartesian2D
53
+
54
+ plot = frame.plot()
55
+
56
+ plot.axes.x_axis.min = -0.004
57
+ plot.axes.x_axis.max = 0.004
58
+ plot.axes.y_axis.min = -0.004
59
+ plot.axes.y_axis.max = 0.004
60
+
61
+ plot.use_surface_flow_effect = True
62
+
63
+ fmap = plot.fieldmap(1)
64
+ fmap.effects.surface_flow_effect = SurfaceFlowEffect.LIC
65
+
66
+ lic = plot.surface_flow_effects.line_integral_convolution
67
+ lic.intensity = 0.95
68
+
69
+ tecplot.export.save_png('line_integral_convolution.png')
70
+
71
+ .. figure:: /_static/images/line_integral_convolution.png
72
+ :width: 300px
73
+ :figwidth: 300px
74
+ """
75
+
76
+ def __init__(self, surface_flow_effects):
77
+ self.surface_flow_effects = surface_flow_effects
78
+ self.plot = surface_flow_effects.plot
79
+ super().__init__(surface_flow_effects._sv, sv.LINEINTEGRALCONVOLUTION,
80
+ **surface_flow_effects._kw)
81
+
82
+ @property
83
+ def step_size(self):
84
+ """`float`: Convolution step size."""
85
+ return self._get_style(float, sv.STEPSIZE)
86
+
87
+ @step_size.setter
88
+ def step_size(self, value):
89
+ self._set_style(float(value), sv.STEPSIZE)
90
+
91
+ @property
92
+ def num_steps(self):
93
+ """`int`: Number of convolution steps."""
94
+ return self._get_style(int, sv.NUMSTEPS)
95
+
96
+ @num_steps.setter
97
+ def num_steps(self, value):
98
+ self._set_style(int(value), sv.NUMSTEPS)
99
+
100
+ @property
101
+ def intensity(self):
102
+ """`float`: Line integral convolution intensity."""
103
+ return self._get_style(float, sv.INTENSITY)
104
+
105
+ @intensity.setter
106
+ def intensity(self, value):
107
+ self._set_style(float(value), sv.INTENSITY)
108
+
109
+ @property
110
+ def smoothing(self):
111
+ """`int`: Smoothing pass count."""
112
+ return self._get_style(int, sv.SMOOTHING)
113
+
114
+ @smoothing.setter
115
+ def smoothing(self, value):
116
+ self._set_style(int(value), sv.SMOOTHING)
117
+
118
+ @property
119
+ def contrast_boost(self):
120
+ """`float`: Line integral convolution contrast boost amount."""
121
+ return self._get_style(float, sv.CONTRASTBOOST)
122
+
123
+ @contrast_boost.setter
124
+ def contrast_boost(self, value):
125
+ self._set_style(float(value), sv.CONTRASTBOOST)
126
+
127
+ @property
128
+ def shading(self):
129
+ """`float`: Line integral convolution surface shading amount."""
130
+ return self._get_style(float, sv.SHADING)
131
+
132
+ @shading.setter
133
+ def shading(self, value):
134
+ self._set_style(float(value), sv.SHADING)
135
+
136
+ @property
137
+ def color_mode(self):
138
+ """`LICColorMode`: Line integral convolution compositing mode."""
139
+ return self._get_style(LICColorMode, sv.COLORMODE)
140
+
141
+ @color_mode.setter
142
+ def color_mode(self, value):
143
+ self._set_style(LICColorMode(value), sv.COLORMODE)
144
+
145
+ @property
146
+ def mask_threshold(self):
147
+ """`float`: Line integral convolution mask threshold."""
148
+ return self._get_style(float, sv.LICMASKTHRESHOLD)
149
+
150
+ @mask_threshold.setter
151
+ def mask_threshold(self, value):
152
+ self._set_style(float(value), sv.LICMASKTHRESHOLD)
153
+
154
+ @property
155
+ def mask_fade_size(self):
156
+ """`float`: Line integral convolution mask fade size."""
157
+ return self._get_style(float, sv.LICMASKFADESIZE)
158
+
159
+ @mask_fade_size.setter
160
+ def mask_fade_size(self, value):
161
+ self._set_style(float(value), sv.LICMASKFADESIZE)
162
+
163
+ @property
164
+ def use_mask_threshold(self):
165
+ """`bool`: Enable the Line integral convolution mask threshold."""
166
+ return self._get_style(bool, sv.USELICMASKTHRESHOLD)
167
+
168
+ @use_mask_threshold.setter
169
+ def use_mask_threshold(self, value):
170
+ self._set_style(bool(value), sv.USELICMASKTHRESHOLD)
171
+
172
+ @property
173
+ def overlay_color(self):
174
+ """`Color`: Line integral convolution overlay color used when color mode is Overlay."""
175
+ return self._get_style(Color, sv.OVERLAYCOLOR)
176
+
177
+ @overlay_color.setter
178
+ def overlay_color(self, value):
179
+ self._set_style(Color(value), sv.OVERLAYCOLOR)
5
180
 
6
181
 
7
182
  class LightSource(session.Style):
tecplot/plot/fieldmap.py CHANGED
@@ -11,7 +11,8 @@ from textwrap import dedent
11
11
  from ..tecutil import _tecutil
12
12
  from ..constant import *
13
13
  from ..exception import *
14
- from ..tecutil import Index, IndexSet, color_spec, flatten_args, sv
14
+ from ..tecutil import (Index, IndexSet, _require_surface_flow_effects_sdk,
15
+ color_spec, flatten_args, sv)
15
16
  from .. import session, tecutil
16
17
  from . import symbol
17
18
 
@@ -1587,10 +1588,10 @@ class Fieldmap(FieldmapCollection):
1587
1588
 
1588
1589
 
1589
1590
  class FieldmapEffects(session.SubStyle):
1590
- """Clipping and blanking style control.
1591
+ """Clipping, blanking, and surface-flow style control.
1591
1592
 
1592
- This object controls value blanking and clipping from plane slices for
1593
- this fieldmap.
1593
+ This object controls value blanking, clipping from plane slices, and
1594
+ the ``surface_flow_effect`` setting for this fieldmap.
1594
1595
  """
1595
1596
  def __init__(self, fieldmap):
1596
1597
  self.fieldmap = fieldmap
@@ -1610,6 +1611,21 @@ class FieldmapEffects(session.SubStyle):
1610
1611
  def value_blanking(self, value):
1611
1612
  self._set_style(bool(value), sv.USEVALUEBLANKING)
1612
1613
 
1614
+ @property
1615
+ def surface_flow_effect(self):
1616
+ """`SurfaceFlowEffect`: Surface-flow effect for this fieldmap.
1617
+
1618
+ .. versionadded:: 1.7, Tecplot 360 2026.1
1619
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
1620
+ """
1621
+ _require_surface_flow_effects_sdk()
1622
+ return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
1623
+
1624
+ @surface_flow_effect.setter
1625
+ def surface_flow_effect(self, value):
1626
+ _require_surface_flow_effects_sdk()
1627
+ self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
1628
+
1613
1629
  @property
1614
1630
  def clip_planes(self):
1615
1631
  tecutil.api_moved('FieldmapEffects.clip_planes',
@@ -1626,7 +1642,7 @@ class FieldmapEffects(session.SubStyle):
1626
1642
 
1627
1643
 
1628
1644
  class FieldmapEffects3D(FieldmapEffects):
1629
- """Lighting and translucency style control.
1645
+ """Lighting, translucency and surface-flow style control.
1630
1646
 
1631
1647
  .. code-block:: python
1632
1648
  :emphasize-lines: 24-26
@@ -1958,7 +1974,7 @@ class Cartesian2DFieldmapCollection(FieldmapCollection):
1958
1974
 
1959
1975
  @property
1960
1976
  def effects(self):
1961
- """`FieldmapEffects`: Style control for clipping and blanking effects.
1977
+ """`FieldmapEffects`: Style control for clipping, blanking, and surface-flow effects.
1962
1978
  """
1963
1979
  return FieldmapEffects(self)
1964
1980
 
@@ -2091,7 +2107,7 @@ class Cartesian3DFieldmapCollection(FieldmapCollection):
2091
2107
 
2092
2108
  @property
2093
2109
  def effects(self):
2094
- """`FieldmapEffects3D`: Style control for blanking and lighting effects.
2110
+ """`FieldmapEffects3D`: Style control for surface-flow, blanking, and lighting.
2095
2111
  """
2096
2112
  return FieldmapEffects3D(self)
2097
2113
 
@@ -5,8 +5,8 @@ from collections.abc import Iterable
5
5
  from ..tecutil import _tecutil
6
6
  from ..constant import *
7
7
  from ..exception import *
8
- from .. import session, tecutil, version
9
- from ..tecutil import Index, sv, color_spec
8
+ from .. import session, tecutil
9
+ from ..tecutil import Index, _require_surface_flow_effects_sdk, color_spec, sv
10
10
 
11
11
 
12
12
  class IsosurfaceGroupStyle(session.Style):
@@ -362,7 +362,7 @@ class IsosurfaceContour(IsosurfaceGroupStyle):
362
362
 
363
363
 
364
364
  class IsosurfaceEffects(IsosurfaceGroupStyle):
365
- """Effects of the isosurface group.
365
+ """Effects of the isosurface group, including surface-flow effects.
366
366
 
367
367
  .. code-block:: python
368
368
  :emphasize-lines: 21-23
@@ -451,6 +451,21 @@ class IsosurfaceEffects(IsosurfaceGroupStyle):
451
451
  def lighting_effect(self, value):
452
452
  self._set_style(LightingEffect(value), sv.LIGHTINGEFFECT)
453
453
 
454
+ @property
455
+ def surface_flow_effect(self):
456
+ """`SurfaceFlowEffect`: Surface-flow mode for this isosurface group.
457
+
458
+ .. versionadded:: 1.7, Tecplot 360 2026.1
459
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
460
+ """
461
+ _require_surface_flow_effects_sdk()
462
+ return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
463
+
464
+ @surface_flow_effect.setter
465
+ def surface_flow_effect(self, value):
466
+ _require_surface_flow_effects_sdk()
467
+ self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
468
+
454
469
  @property
455
470
  def surface_translucency(self):
456
471
  """`int`: Surface translucency of the isosurface group.
@@ -733,6 +748,8 @@ class IsosurfaceGroup(session.Style):
733
748
  def effects(self):
734
749
  """`IsosurfaceEffects`: Settings for isosurface effects.
735
750
 
751
+ This includes ``surface_flow_effect``, translucency, and lighting.
752
+
736
753
  Example usage::
737
754
 
738
755
  >>> plot.isosurface(0).show = True
tecplot/plot/plot.py CHANGED
@@ -341,6 +341,39 @@ class FieldPlot(Plot):
341
341
  session.set_style(bool(show), sv.STREAMTRACELAYERS, sv.SHOW,
342
342
  uniqueid=self.frame.uid)
343
343
 
344
+ @property
345
+ def use_surface_flow_effect(self):
346
+ """`bool`: Enable field-layer surface-flow rendering for this frame.
347
+
348
+ Example usage::
349
+
350
+ >>> plot.use_surface_flow_effect = True
351
+
352
+ .. versionadded:: 1.7, Tecplot 360 2026.1
353
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
354
+ """
355
+ tecutil._require_surface_flow_effects_sdk()
356
+ return self._get_style(bool, sv.USESURFACEFLOWEFFECT)
357
+
358
+ @use_surface_flow_effect.setter
359
+ def use_surface_flow_effect(self, value):
360
+ tecutil._require_surface_flow_effects_sdk()
361
+ self._set_style(bool(value), sv.USESURFACEFLOWEFFECT)
362
+
363
+ @property
364
+ def surface_flow_effects(self):
365
+ """`SurfaceFlowEffects`: Shared surface-flow effect settings.
366
+
367
+ Example usage::
368
+
369
+ >>> lic = plot.surface_flow_effects.line_integral_convolution
370
+ >>> lic.step_size = 0.9
371
+
372
+ .. versionadded:: 1.7, Tecplot 360 2026.1
373
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
374
+ """
375
+ return effects.SurfaceFlowEffects(self)
376
+
344
377
  @property
345
378
  def show_vector(self):
346
379
  """`bool`: Enable drawing of vectors.
tecplot/plot/slice.py CHANGED
@@ -6,9 +6,10 @@ from collections.abc import Iterable
6
6
  from warnings import warn
7
7
 
8
8
  from ..tecutil import _tecutil, sv
9
+ from ..tecutil import _require_surface_flow_effects_sdk
9
10
  from ..constant import *
10
11
  from ..exception import *
11
- from .. import session, tecutil, version
12
+ from .. import session, tecutil
12
13
 
13
14
 
14
15
  class SliceMesh(session.SubStyle):
@@ -183,7 +184,7 @@ class SliceShade(session.SubStyle):
183
184
 
184
185
 
185
186
  class SliceEffects(session.SubStyle):
186
- """Slice effects for this slice.
187
+ """Slice effects for this slice, including surface-flow effects.
187
188
 
188
189
  .. code-block:: python
189
190
  :emphasize-lines: 16-17
@@ -262,6 +263,21 @@ class SliceEffects(session.SubStyle):
262
263
  def lighting_effect(self, value):
263
264
  self._set_style(LightingEffect(value), sv.LIGHTINGEFFECT)
264
265
 
266
+ @property
267
+ def surface_flow_effect(self):
268
+ """`SurfaceFlowEffect`: Surface-flow mode for this slice group.
269
+
270
+ .. versionadded:: 1.7, Tecplot 360 2026.1
271
+ Surface-flow effects require Tecplot 360 2026 R1 or later.
272
+ """
273
+ _require_surface_flow_effects_sdk()
274
+ return self._get_style(SurfaceFlowEffect, sv.SURFACEFLOWEFFECT)
275
+
276
+ @surface_flow_effect.setter
277
+ def surface_flow_effect(self, value):
278
+ _require_surface_flow_effects_sdk()
279
+ self._set_style(SurfaceFlowEffect(value), sv.SURFACEFLOWEFFECT)
280
+
265
281
  @property
266
282
  def surface_translucency(self):
267
283
  """`int`: Surface translucency of the slice group.
@@ -992,6 +1008,8 @@ class SliceGroupCollection(session.Style):
992
1008
  def effects(self):
993
1009
  """`SliceEffects`: Effects attributes for this slice group.
994
1010
 
1011
+ This includes ``surface_flow_effect``, translucency, and lighting.
1012
+
995
1013
  Example usage::
996
1014
 
997
1015
  >>> plot.slice(0).effects.use_translucency = True
@@ -11,6 +11,6 @@ from .util import (maxint64, minint64, maxuint64, IndexRange, Index, XY, XYZ,
11
11
  lock_attributes, check_arglist_argtypes, color_spec, filled_slice,
12
12
  array_to_str, ListWrapper, optional, split_macro,
13
13
  normalize_filenames, normalize_path, temporary_closed_file,
14
- api_changed, api_moved)
14
+ api_changed, api_moved, _require_surface_flow_effects_sdk)
15
15
 
16
16
  ArgList = RemoteArgList
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2026-07-24 by tecgen.
2
+ # This file was auto-generated on 2026-09-21 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  from enum import Enum as _Enum
@@ -729,6 +729,12 @@ class JPEGEncoding(_Enum):
729
729
  Standard = 0
730
730
  Progressive = 1
731
731
 
732
+ class LICColorMode(_Enum):
733
+ Multiply = 0
734
+ Blend = 1
735
+ Overlay = 2
736
+ Invert = 3
737
+
732
738
  class LabelAlignment(_Enum):
733
739
  ByAngle = 0
734
740
  AlongAxis = 1
@@ -1115,6 +1121,11 @@ class Streamtrace(_Enum):
1115
1121
  VolumeRod = 4
1116
1122
  TwoDLine = 5
1117
1123
 
1124
+ class SurfaceFlowEffect(_Enum):
1125
+ None_ = 0
1126
+ LIC = 1
1127
+ WindMap = 2
1128
+
1118
1129
  class SurfaceGenerationMethod(_Enum):
1119
1130
  AllowQuads = 0
1120
1131
  AllTriangles = 1
tecplot/tecutil/sv.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2026-07-24 by tecgen.
2
+ # This file was auto-generated on 2026-11-04 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
 
@@ -185,6 +185,7 @@ COLORMAPOVERRIDE = 'COLORMAPOVERRIDE'
185
185
  COLORMAPOVERRIDEACTIVE = 'COLORMAPOVERRIDEACTIVE'
186
186
  COLORMAPSHADERATIO = 'COLORMAPSHADERATIO'
187
187
  COLORMAPTRANSFORMATION = 'COLORMAPTRANSFORMATION'
188
+ COLORMODE = 'LICCOLORMODE'
188
189
  COLORPREFERENCESDIALOG = 'COLORPREFERENCESDIALOG'
189
190
  COLORSPECTRUM = 'COLORSPECTRUM'
190
191
  COMMAND = 'COMMAND'
@@ -214,6 +215,7 @@ CONTOURLEVELACTION = 'CONTOURLEVELACTION'
214
215
  CONTOURLINEMODE = 'CONTOURLINEMODE'
215
216
  CONTOURLINESTYLE = 'CONTOURLINESTYLE'
216
217
  CONTOURTYPE = 'CONTOURTYPE'
218
+ CONTRASTBOOST = 'CONTRASTBOOST'
217
219
  CONTROLALTEDDRAG = 'CONTROLALTEDDRAG'
218
220
  CONTROLALTSHIFTEDDRAG = 'CONTROLALTSHIFTEDDRAG'
219
221
  CONTROLLEDDRAG = 'CONTROLLEDDRAG'
@@ -557,6 +559,7 @@ GLOBALRGB = 'GLOBALRGB'
557
559
  GLOBALSCATTER = 'GLOBALSCATTER'
558
560
  GLOBALSLICE = 'GLOBALSLICE'
559
561
  GLOBALSTREAM = 'GLOBALSTREAM'
562
+ GLOBALSURFACEFLOWEFFECTS = 'GLOBALSURFACEFLOWEFFECTS'
560
563
  GLOBALTHREED = 'GLOBALTHREED'
561
564
  GLOBALTHREEDVECTOR = 'GLOBALTHREEDVECTOR'
562
565
  GLOBALTIME = 'GLOBALTIME'
@@ -785,6 +788,8 @@ LGRAINBOWMAP = 'LGRAINBOW'
785
788
  LGSETUPSTR = 'LGSETUPSTR'
786
789
  LGSPOOLCMD = 'LGSPOOLCMD'
787
790
  LICENSEFILE = 'LICENSEFILE'
791
+ LICMASKFADESIZE = 'LICMASKFADESIZE'
792
+ LICMASKTHRESHOLD = 'LICMASKTHRESHOLD'
788
793
  LIGHTINGEFFECT = 'LIGHTINGEFFECT'
789
794
  LIGHTSOURCE = 'LIGHTSOURCE'
790
795
  LIGHTSOURCEDIALOG = 'LIGHTSOURCEDIALOG'
@@ -796,6 +801,7 @@ LINEARINTERPMODE = 'LINEARINTERPMODE'
796
801
  LINEARINTERPOLATIONDIALOG = 'LINEARINTERPOLATIONDIALOG'
797
802
  LINEARTPROVIDER = 'LINEARTPROVIDER'
798
803
  LINECONTOURGROUP = 'LINECONTOURGROUP'
804
+ LINEINTEGRALCONVOLUTION = 'LINEINTEGRALCONVOLUTION'
799
805
  LINELAYERCONTROL = 'LINELAYERCONTROL'
800
806
  LINELIFTFRACTION = 'LINELIFTFRACTION'
801
807
  LINEMAP = 'LINEMAP'
@@ -1010,6 +1016,7 @@ OUTPUTBINARYDATAFILE = 'OUTPUTBINARYDATAFILE'
1010
1016
  OUTPUTLAYOUTFILE = 'OUTPUTLAYOUTFILE'
1011
1017
  OUTPUTLAYOUTPACKAGEFILE = 'OUTPUTLAYOUTPACKAGEFILE'
1012
1018
  OVERLAYBARGRID = 'OVERLAYBARGRID'
1019
+ OVERLAYCOLOR = 'OVERLAYCOLOR'
1013
1020
  P1 = 'P1'
1014
1021
  P2 = 'P2'
1015
1022
  P3 = 'P3'
@@ -1220,6 +1227,7 @@ SEQYLORBRMAP = 'SEQYLORBR'
1220
1227
  SEQYLORRDMAP = 'SEQYLORRD'
1221
1228
  SHADE = 'SHADE'
1222
1229
  SHADETYPE = 'SHADETYPE'
1230
+ SHADING = 'SHADING'
1223
1231
  SHAREVARWITHALLZONES = 'SHAREVARWITHALLZONES'
1224
1232
  SHIFTEDDRAG = 'SHIFTEDDRAG'
1225
1233
  SHOW = 'SHOW'
@@ -1317,6 +1325,7 @@ SMALLANGLE = 'SMALLANGLE'
1317
1325
  SMALLSTEP = 'SMALLSTEP'
1318
1326
  SMOOTHBNDRYCOND = 'SMOOTHBNDRYCOND'
1319
1327
  SMOOTHDIALOG = 'SMOOTHDIALOG'
1328
+ SMOOTHING = 'SMOOTHING'
1320
1329
  SMOOTHWEIGHT = 'SMOOTHWEIGHT'
1321
1330
  SMRAINBOW = 'SMRAINBOW'
1322
1331
  SMRAINBOWMAP = 'SMRAINBOW'
@@ -1384,6 +1393,7 @@ SUPERSAMPLEFACTOR = 'SUPERSAMPLEFACTOR'
1384
1393
  SURFACECOLOR = 'SURFACECOLOR'
1385
1394
  SURFACECOLORCONTRAST = 'SURFACECOLORCONTRAST'
1386
1395
  SURFACEEFFECTS = 'SURFACEEFFECTS'
1396
+ SURFACEFLOWEFFECT = 'SURFACEFLOWEFFECT'
1387
1397
  SURFACEGENERATIONMETHOD = 'SURFACEGENERATIONMETHOD'
1388
1398
  SURFACERGBMAX = 'SURFACERGBMAX'
1389
1399
  SURFACERGBMIN = 'SURFACERGBMIN'
@@ -1495,6 +1505,7 @@ USEINDEPENDENTCOLORMAP = 'USEINDEPENDENTCOLORMAP'
1495
1505
  USEINDVARRANGE = 'USEINDVARRANGE'
1496
1506
  USEINITIALPLOTDIALOG = 'USEINITIALPLOTDIALOG'
1497
1507
  USEISOLATIN1FONTSINPS = 'USEISOLATIN1FONTSINPS'
1508
+ USELICMASKTHRESHOLD = 'USELICMASKTHRESHOLD'
1498
1509
  USELIGHTINGEFFECT = 'USELIGHTINGEFFECT'
1499
1510
  USELIGHTSOURCETOFILL = 'USELIGHTSOURCETOFILL'
1500
1511
  USELINES = 'USELINES'
@@ -1523,6 +1534,7 @@ USESTROKEFONTSFOR3DTEXT = 'USESTROKEFONTSFOR3DTEXT'
1523
1534
  USESTROKEFONTSFORSMALLTEXT = 'USESTROKEFONTSFORSMALLTEXT'
1524
1535
  USESTROKEFONTSONSCREEN = 'USESTROKEFONTSONSCREEN'
1525
1536
  USESUPERSAMPLEANTIALIASING = 'USESUPERSAMPLEANTIALIASING'
1537
+ USESURFACEFLOWEFFECT = 'USESURFACEFLOWEFFECT'
1526
1538
  USESYMBOLS = 'USESYMBOLS'
1527
1539
  USETECPLOTPRINTDRIVERS = 'USETECPLOTPRINTDRIVERS'
1528
1540
  USETHICKERACTIVEFRAMEBORDERONSCREEN = 'USETHICKERACTIVEFRAMEBORDERONSCREEN'
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2026-07-24 by tecgen.
2
+ # This file was auto-generated on 2026-09-21 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  import sys
@@ -714,8 +714,10 @@ class TecUtilConnector(object):
714
714
  if not self.started:
715
715
  return False
716
716
  lcc = self._license_check_count
717
+ if lcc == 0 and not self.handle.LicenseIsValid():
718
+ return False
717
719
  self._license_check_count = 0 if lcc == 10000 else lcc + 1
718
- return lcc != 0 or self.handle.LicenseIsValid()
720
+ return True
719
721
 
720
722
  def acquire_license(self):
721
723
  if self.connected:
@@ -733,6 +735,7 @@ class TecUtilConnector(object):
733
735
  def release_license(self):
734
736
  if not self.connected and self.license_is_valid:
735
737
  self.handle.ReleaseLicense()
738
+ self._license_check_count = 0
736
739
 
737
740
  @property
738
741
  def license_expiration(self):
tecplot/tecutil/util.py CHANGED
@@ -8,22 +8,34 @@ import re
8
8
  import tempfile
9
9
  import textwrap
10
10
  import warnings
11
-
12
11
  from collections.abc import Iterable
13
- from ctypes import cast, c_int, POINTER
12
+ from ctypes import POINTER, c_int, cast
14
13
 
15
- from ..exception import *
14
+ from .. import version
16
15
  from ..constant import Color
16
+ from ..exception import *
17
17
 
18
18
  log = logging.getLogger(__name__)
19
19
 
20
- maxint64 = 2**(64 - 1) - 1
20
+ maxint64 = 2 ** (64 - 1) - 1
21
21
  minint64 = -maxint64 - 1
22
22
  maxuint64 = 2**64 - 1
23
23
 
24
+
25
+ def _require_surface_flow_effects_sdk():
26
+ if __debug__:
27
+ _SURFACE_FLOW_EFFECTS_SDK_VERSION = (2026, 1)
28
+ if version.sdk_version_info < _SURFACE_FLOW_EFFECTS_SDK_VERSION:
29
+ raise TecplotOutOfDateEngineError(
30
+ _SURFACE_FLOW_EFFECTS_SDK_VERSION,
31
+ 'Surface-flow effects require Tecplot 360 2026 R1 or later.',
32
+ )
33
+
34
+
24
35
  IndexRange = collections.namedtuple('IndexRange', 'min max step')
25
36
  IndexRange.__new__.__defaults__ = (None, None, None)
26
37
 
38
+
27
39
  class Index(int):
28
40
  """Position identifier type.
29
41
 
@@ -35,12 +47,14 @@ class Index(int):
35
47
  meaningful internally to the tecplot Python module.
36
48
  """
37
49
 
50
+
38
51
  XY = collections.namedtuple('XY', ('x', 'y'))
39
52
  XY.__new__.__defaults__ = (None, None)
40
53
 
41
54
  XYZ = collections.namedtuple('XYZ', ('x', 'y', 'z'))
42
55
  XYZ.__new__.__defaults__ = (None, None, None)
43
56
 
57
+
44
58
  def flatten_args(*args):
45
59
  flatargs = []
46
60
  for a in args:
@@ -60,6 +74,7 @@ def inherited_property(cls):
60
74
  def _copy_property(prop):
61
75
  attr = getattr(cls, prop.__name__)
62
76
  return property(attr.fget, attr.fset, attr.fdel, prop.__doc__)
77
+
63
78
  return _copy_property
64
79
 
65
80
 
@@ -69,6 +84,7 @@ def lock_attributes(cls):
69
84
  after __init__() is called.
70
85
  """
71
86
  if __debug__:
87
+
72
88
  def _setattr(self, name, value):
73
89
  if not name.startswith('_') and name not in dir(self):
74
90
  stacknames = [f[0].f_code.co_name for f in inspect.stack()[:3]]
@@ -77,6 +93,7 @@ def lock_attributes(cls):
77
93
  classname = self.__class__.__name__
78
94
  raise TecplotAttributeError(msg.format(classname, name))
79
95
  return super(cls, self).__setattr__(name, value)
96
+
80
97
  cls.__setattr__ = _setattr
81
98
  return cls
82
99
 
@@ -98,15 +115,15 @@ def check_arglist_argtypes(function_name, *args):
98
115
 
99
116
  def color_spec(color, plot=None):
100
117
  """
101
- color_spec(Color.Blue, plot) --> Color.Blue
102
- color_spec(Color.MultiColor, plot) --> plot.contour(0)
103
- color_spec(Color.MultiColor2, plot) --> plot.contour(1)
104
- color_spec(Color.Blue) --> Color.Blue
105
- color_spec(plot.contour(0)) --> Color.MultiColor
106
- color_spec(plot.contour(1)) --> Color.MultiColor2
107
-
108
- color_spec(plot.rgb_coloring) --> Color.RGBColor
109
- color_spec(Color.RGBColor, plot) --> plot.rgb_coloring
118
+ color_spec(Color.Blue, plot) --> Color.Blue
119
+ color_spec(Color.MultiColor, plot) --> plot.contour(0)
120
+ color_spec(Color.MultiColor2, plot) --> plot.contour(1)
121
+ color_spec(Color.Blue) --> Color.Blue
122
+ color_spec(plot.contour(0)) --> Color.MultiColor
123
+ color_spec(plot.contour(1)) --> Color.MultiColor2
124
+
125
+ color_spec(plot.rgb_coloring) --> Color.RGBColor
126
+ color_spec(Color.RGBColor, plot) --> plot.rgb_coloring
110
127
  """
111
128
  if isinstance(color, Iterable):
112
129
  return tuple([color_spec(c, plot) for c in color])
@@ -119,7 +136,8 @@ def color_spec(color, plot=None):
119
136
  Color.MultiColor5: Index(4),
120
137
  Color.MultiColor6: Index(5),
121
138
  Color.MultiColor7: Index(6),
122
- Color.MultiColor8: Index(7)}
139
+ Color.MultiColor8: Index(7),
140
+ }
123
141
  color_spec._multicolors = {v: k for k, v in color_spec._indexes.items()}
124
142
  try:
125
143
  if plot:
@@ -200,9 +218,17 @@ class ListWrapper(object):
200
218
  Unlike textwrap.TextWrapper, items in the list are not broken over
201
219
  multiple lines even if they contain spaces.
202
220
  """
203
- def __init__(self, initial_indent='', subsequent_indent=' ',
204
- initial_width=70, subsequent_width=70, delim=',',
205
- prefix='', suffix=''):
221
+
222
+ def __init__(
223
+ self,
224
+ initial_indent='',
225
+ subsequent_indent=' ',
226
+ initial_width=70,
227
+ subsequent_width=70,
228
+ delim=',',
229
+ prefix='',
230
+ suffix='',
231
+ ):
206
232
  assert (len(prefix) + len(initial_indent)) < initial_width
207
233
  assert (len(suffix) + len(subsequent_indent)) < subsequent_width
208
234
  self.initial_indent = initial_indent
@@ -217,7 +243,7 @@ class ListWrapper(object):
217
243
  ret = []
218
244
  max_space = self.subsequent_width - len(self.subsequent_indent)
219
245
 
220
- line = "{}{}".format(self.prefix, self.initial_indent)
246
+ line = '{}{}'.format(self.prefix, self.initial_indent)
221
247
 
222
248
  itr = iter(str_list)
223
249
  try:
@@ -242,7 +268,7 @@ class ListWrapper(object):
242
268
  ret.append(line + self.suffix)
243
269
  else:
244
270
  ret.append(line)
245
- ret.append("{}{}".format(self.subsequent_indent, self.suffix))
271
+ ret.append('{}{}'.format(self.subsequent_indent, self.suffix))
246
272
  return ret
247
273
 
248
274
  def fill(self, str_list):
@@ -291,6 +317,7 @@ def normalize_path(nodepath, resolve=True):
291
317
  if not isinstance(nodepath, pathlib.Path):
292
318
  nodepath = pathlib.Path(str(nodepath))
293
319
  from tecplot.tecutil import _tecutil_connector
320
+
294
321
  if _tecutil_connector.connected:
295
322
  if _tecutil_connector.client.host not in ['localhost', '127.0.0.1']:
296
323
  if not nodepath.is_absolute():
@@ -333,29 +360,36 @@ def temporary_closed_file(suffix=None):
333
360
 
334
361
  def api_changed(msg, version_changed, sdk_version_changed, warning=False):
335
362
  detail = textwrap.indent(textwrap.dedent(msg), ' ')
336
- msg = textwrap.dedent(f'''\
363
+ msg = (
364
+ textwrap.dedent(f"""\
337
365
  PyTecplot API Change (version {version_changed})
338
366
  Tecplot 360 version: {sdk_version_changed}
339
- ''') + detail
367
+ """)
368
+ + detail
369
+ )
340
370
  if warning:
341
371
  if __debug__:
342
- msg += 'Please update your code as the legacy interface will\n' \
343
- + 'be removed in the next major release of PyTecplot.'
372
+ msg += (
373
+ 'Please update your code as the legacy interface will\n'
374
+ + 'be removed in the next major release of PyTecplot.'
375
+ )
344
376
  warnings.warn(msg, TecplotFutureWarning)
345
377
  else:
346
378
  raise TecplotInterfaceChangeError(msg)
347
379
 
348
380
 
349
381
  def api_moved(old, new, version_changed, sdk_version_changed, warning=False):
350
- msg = textwrap.dedent(f'''\
382
+ msg = textwrap.dedent(f"""\
351
383
  PyTecplot API Change (version {version_changed})
352
384
  Tecplot 360 version: {sdk_version_changed}
353
385
  {old} has been moved to {new}
354
- ''')
386
+ """)
355
387
  if warning:
356
388
  if __debug__:
357
- msg += 'Please update your code as the legacy interface will\n' \
358
- + 'be removed in the next major release of PyTecplot.'
389
+ msg += (
390
+ 'Please update your code as the legacy interface will\n'
391
+ + 'be removed in the next major release of PyTecplot.'
392
+ )
359
393
  warnings.warn(msg, TecplotFutureWarning)
360
394
  else:
361
395
  raise TecplotInterfaceChangeError(msg)
tecplot/version.py CHANGED
@@ -27,14 +27,15 @@ when a docstring is present. In short, we will maintain backwards compatibility
27
27
  of the public interface between all minor releases of the same major version
28
28
  with the exception of internal changes that fix incorrect behavior or bugs.
29
29
  """
30
+
30
31
  import collections
31
32
 
32
33
  from .tecutil import _tecutil_connector
33
34
 
34
35
  Version = collections.namedtuple('V', ['major', 'minor', 'patch', 'build'])
35
36
 
36
- version = '1.7.5'
37
- build = '208029f'
37
+ version = '1.8.0'
38
+ build = '3fdc04c'
38
39
  version_info = Version(*[int(x) for x in version.split('.')], build=build or 0)
39
40
 
40
41
  sdk_version_info = _tecutil_connector.sdk_version_info