pytecplot 1.6.0__py3-none-any.whl → 1.6.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  <!DOCTYPE html>
2
2
  <head>
3
- <title>Tecplot, Inc. LIcense Agreement</title>
3
+ <title>Tecplot, Inc. License Agreement</title>
4
4
  <meta property="og:title" content="Tecplot License Agreement" />
5
5
  <meta property="og:type" content="website" />
6
6
  <meta property="og:description" content="" />
@@ -67,10 +67,10 @@
67
67
  <h4><span>14. Indemnity.</span></h4><p><span>Tecplot, Inc. will defend, indemnify and hold Licensee harmless from any claims, actions, suits or proceedings (each a "Claim") brought against Licensee by a third party to the extent such Claim is based on an allegation that the Software, when used in accordance with this Agreement, infringes the intellectual property rights of third parties, provided that (i) Licensee gives Tecplot, Inc. written notice of any such Claim within ten (10) business days of said claim coming to its attention, and promptly provides all authority and information required for the defense thereof, (ii) Licensee cooperates with Tecplot, Inc. in the defense of the Claim, and (iii) such Claim does not arise due to the unauthorized acts or misconduct of Licensee, any modification of the Software by Licensee, any failure by Licensee to use corrections or enhancements provided by or on behalf of Tecplot, Inc. that would rectify such infringement, or the combination of the Software with software, hardware, information, data or other materials not furnished by Tecplot, Inc. to the extent such infringement would not have occurred but for such combination. In the event that a successful Claim is brought against Licensee and Licensee's use thereof is enjoined (or if Tecplot, Inc. otherwise elects), Tecplot, Inc., at its option, shall (i) procure for Licensee the right to continue to use the Software, (ii) replace the Software with non-infringing software, or (iii) terminate this Agreement with respect to the enjoined Software and return to Licensee a pro-rated portion of the fees paid to Tecplot, Inc.&nbsp;&nbsp;</span></p>
68
68
  <h4><span>15. Confidentiality.</span></h4><p><span>The Software contains proprietary trade secrets of Tecplot, Inc., and Licensee and any unlicensed user agrees to maintain the confidentiality of the Software using at least as great a degree of care as they use to maintain the confidentiality of their own most confidential information. Licensee agrees to reasonably communicate the terms and conditions of this Agreement to those persons employed by Licensee who come into contact with the Software, and to use reasonable best efforts to ensure their compliance with such terms and conditions, including, without limitation, not knowingly permitting such persons to Use any portion of the Software for the purpose of deriving the source code of the Software or defeating any passcode.&nbsp;&nbsp;</span></p>
69
69
 
70
- <h4><span>16. Entire Agreement; Interpretation.</span></h4><p><span>This Agreement constitutes the entire agreement between parties pertaining to the subject matter hereof and supersedes all prior representations, warranties, conditions, agreements, and understandings, whether oral or written, express or implied, relating to this Agreement. No supplement, modification, or waiver of this Agreement shall be effective unless it is provided or approved by Tecplot, Inc. in writing. Any waiver or modification of this Agreement shall only be effective if it is in writing and signed by both parties hereto. If any part of this Agreement is found invalid or unenforceable by a Court of competent jurisdiction, the remainder shall be interpreted so as to reasonably effect the intention of the parties.&nbsp;&nbsp;</span></p>
70
+ <h4><span>16. Entire Agreement; Interpretation.</span></h4><p><span>This Agreement constitutes the entire agreement between parties pertaining to the subject matter hereof and supersedes all prior representations, warranties, conditions, agreements, and understandings, whether oral or written, express or implied, relating to this Agreement. No supplement, modification, or waiver of this Agreement shall be effective unless it is provided or approved by Tecplot, Inc. in writing. Any waiver or modification of this Agreement shall only be effective if it is in writing and signed by both parties hereto. The terms of purchase orders, payment documents, or similar documents you submit to Tecplot will not amend or become part of this Agreement and will not be binding on Tecplot. All such terms are hereby rejected. If any part of this Agreement is found invalid or unenforceable by a Court of competent jurisdiction, the remainder shall be interpreted so as to reasonably effect the intention of the parties.&nbsp;&nbsp;</span></p>
71
71
 
72
72
  <div><p>&nbsp;</p></div>
73
- <p><span>Last update: March 2023</span></p>
73
+ <p><span>Last update: February 2024</span></p>
74
74
 
75
75
  </div>
76
76
  </body>
@@ -1,10 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pytecplot
3
- Version: 1.6.0
3
+ Version: 1.6.2
4
4
  Summary: A Python interface to Tecplot 360
5
- Home-page: https://www.tecplot.com/docs/pytecplot
6
- Author: Tecplot, Inc.
7
- Author-email: support@tecplot.com
5
+ Author-email: "Tecplot, Inc." <support@tecplot.com>
6
+ Project-URL: homepage, https://www.tecplot.com/docs/pytecplot
8
7
  Keywords: tecplot,cfd,data analysis,scientific,scientific computing,statistics,visualization,numerical simulation,aerospace
9
8
  Classifier: Development Status :: 5 - Production/Stable
10
9
  Classifier: Intended Audience :: Developers
@@ -31,7 +30,8 @@ Classifier: Programming Language :: Python :: 3.8
31
30
  Classifier: Programming Language :: Python :: 3.9
32
31
  Classifier: Programming Language :: Python :: 3.10
33
32
  Classifier: Programming Language :: Python :: 3.11
34
- Requires-Python: >=3.6
33
+ Requires-Python: >=3.8
34
+ Description-Content-Type: text/x-rst
35
35
  License-File: LICENSE.html
36
36
  Requires-Dist: protobuf >=3.20.0
37
37
  Requires-Dist: pyzmq
@@ -102,6 +102,28 @@ questions you may have about |PyTecplot| in general.
102
102
  Change Log
103
103
  ----------
104
104
 
105
+ For more information, see |Tecplot 360s release notes|.
106
+
107
+ .. |Tecplot 360s release notes| replace:: `Tecplot 360's release notes <https://tecplot.com/products/tecplot-360/new-in-tecplot-360>`__
108
+
109
+ PyTecplot 1.6.2
110
+ ^^^^^^^^^^^^^^^
111
+
112
+ Released with Tecplot 360 2024 R1
113
+
114
+ * Updated the End User License Agreement (EULA).
115
+
116
+ PyTecplot 1.6.1
117
+ ^^^^^^^^^^^^^^^
118
+
119
+ Released with Tecplot 360 2023 R2
120
+
121
+ * Changed behavior of `load_tecplot_szl()` when appending to align all incoming variables by name,
122
+ instead of position, with the previously loaded dataset.
123
+ * Python package configuration now uses the `pyproject.toml` file.
124
+ * Merging features from v1.5.4 and v1.5.3 back into the main production branch. This
125
+ was missing from the v1.6.0 release.
126
+
105
127
  PyTecplot 1.6.0
106
128
  ^^^^^^^^^^^^^^^
107
129
 
@@ -121,7 +143,8 @@ Released with Tecplot 360 2023 R1
121
143
  PyTecplot 1.5.4
122
144
  ^^^^^^^^^^^^^^^
123
145
 
124
- * Clarified error messages on failure to initialize the Tecplot 360 libraries from Python.
146
+ * Clarified error messages on failure to initialize the Tecplot 360 libraries from
147
+ Python.
125
148
 
126
149
  PyTecplot 1.5.3
127
150
  ^^^^^^^^^^^^^^^
@@ -2,7 +2,7 @@ tecplot/__init__.py,sha256=iHAPbGDgIh7HtLWaWcDYfVS4TOsNrRSHyQa-H_6Li3g,3550
2
2
  tecplot/constant.py,sha256=a-hty3FoPqCfQn2UJQDANQwGg0G1ThNWuETWLETsA2M,8503
3
3
  tecplot/exception.py,sha256=YB4zeL0-07yCy4pyUqeFdNQ98nK11h2n3ZHHe58Od6s,6493
4
4
  tecplot/macro.py,sha256=uE29ftjdr2HdlFVa9SS-1uBU8Di4W3PwquhI75LnvhM,13307
5
- tecplot/version.py,sha256=LY7z-wyLT0hQned3YSwvkQbMouy5-mpc-QKCFfxefew,1544
5
+ tecplot/version.py,sha256=R8w3ZSfvCelfBX4UG3F37sJ-k2kDcKJm9DCome_0f1s,1544
6
6
  tecplot/annotation/__init__.py,sha256=FfL8JhlO6T9NTajVRtgXHp6A6PhjpO51gnVKlHMkzWA,333
7
7
  tecplot/annotation/annotation.py,sha256=B7G-BkrQ4lYBpak9RR3u7Pvdci5MGLUvNo_MnJidyY4,8481
8
8
  tecplot/annotation/geometry.py,sha256=3jnp_Ut1AQdhSUCMAJ1yFuL_epoGUoTny03cv0kl09k,12516
@@ -10,20 +10,20 @@ tecplot/annotation/georeference.py,sha256=fB35i1MARQorSopdZw1ljgjqpC2G16YOxUBW7q
10
10
  tecplot/annotation/image.py,sha256=6v_EUYQ1gUoHIqMlJXO68S8nSuvwSnPHePwRKmtmYM4,5888
11
11
  tecplot/annotation/iter.py,sha256=s9rFJLhKgJKApxxTghRFBjT6Pmu6BAEfvB5QgBI4mNI,3709
12
12
  tecplot/annotation/polyline.py,sha256=bw-1LfpjfcHK7VZGTf7xrvHtzjlFJAegIYrU5GVdse0,12390
13
- tecplot/annotation/text.py,sha256=ueKAOL_SMtrV7g8HimIrP_dVg0qDV8yvn4yWjz2iEmA,26467
13
+ tecplot/annotation/text.py,sha256=JFaaOJR1h6LyLt9vUVanQmakXtGZOguVdA-3oT8tWhQ,26471
14
14
  tecplot/data/__init__.py,sha256=apkztrNGBSS5cfyYSIYkrwU1eeRiO0GP4sHvryPJfVA,1937
15
15
  tecplot/data/array.py,sha256=kx_UPZ4MgzydzEkHhdV8YyssOuy4EzP-i4gXvvTAaxM,23885
16
16
  tecplot/data/create.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
17
17
  tecplot/data/dataset.py,sha256=sXQFB3ZX9CyZPMW__uR0AmBZw8g4F0OSfkpQd5cOk_M,80705
18
- tecplot/data/extract.py,sha256=eM-OyVmgOTBhwQh1D36KHZ2kQKseHdJuDIiIoaVK1Qk,21395
18
+ tecplot/data/extract.py,sha256=hVVxbU_zqlW9ZBDHuYxm5Nu2fzjvxkwsRozosTNkm60,21891
19
19
  tecplot/data/face_neighbors.py,sha256=Bm77F87qtDcw2u1BWFNE9cRTc8FI9MS3Cw8YlaJsdkc,19440
20
20
  tecplot/data/facemap.py,sha256=Xhn77cZndfgUA9U014I4M_ecwj8bI98_A7DZC24-Jwk,31287
21
21
  tecplot/data/fe_cell_type.py,sha256=G2U0c1RBHvUP03_YjHGHaMk1JOkF-g9SlBlLkWXH2Yg,3911
22
- tecplot/data/load.py,sha256=pVC5sKiY2YJRAqT5E5aqpCMLopEv4RwdCX30yyEmpf4,106708
22
+ tecplot/data/load.py,sha256=Z7UsMWn0f1loXzxSOMXj4F2H7O9CxlLtZzXnPNvgotY,109490
23
23
  tecplot/data/nodemap.py,sha256=Fn8datS0V9hXXkmGIIU1hWndCmfMk_1aLgz0MvxT8lw,36226
24
24
  tecplot/data/operate.py,sha256=oFBOzLPYnA8hUCaeiTdpPXdFlLZNLoQCb-EHcPE5iDA,42593
25
25
  tecplot/data/query.py,sha256=Ocr9h1I2bFuJFLVOFEqiCUnuxTzD4wnToNzYk996GhY,14807
26
- tecplot/data/save.py,sha256=TQCbEgM0QaSyMpttHPAa_qch8qCOeSQ--7pQVe4UFD4,16608
26
+ tecplot/data/save.py,sha256=_535HsEUopTgWl-9NzDkYOQH2FDfTUO2k4EypOnsfrU,16609
27
27
  tecplot/data/variable.py,sha256=xJCOO5ZeXCAFWKJYnC_mMxWKoy-oe3pE0EnHytZOwro,9437
28
28
  tecplot/data/zone.py,sha256=LxtlinZ2ejq9UnOvapQ2wZfkMdjjRTR6wCi-lzXVa6M,35207
29
29
  tecplot/export/__init__.py,sha256=eX3hx-FX9zEE-D3Nnfm_5rEG-jq6XufUDZmmRaLnKFw,781
@@ -39,7 +39,7 @@ tecplot/layout/frame.py,sha256=mV6l1msr-uqOCGHAfgOI-cNsiFwhjUHXYmAsukZpfSw,51606
39
39
  tecplot/layout/layout.py,sha256=vcrqWgOkcEW90VCbLG2-7xSWajPhP3cRsLnRIrcuO4c,16025
40
40
  tecplot/layout/page.py,sha256=MqX3jJAd3o2xkfaSGXU7TD4gnXv-9CQcDj5WJnlIisU,18264
41
41
  tecplot/legend/__init__.py,sha256=zj94bHuUKvgWxn5dddEuahKCXVDMOFonQNgKxtuNSTQ,185
42
- tecplot/legend/contour_legend.py,sha256=DtXy84WwnodUNnv-mWL_1-d58xgP_8XPxFOJGelDLck,17416
42
+ tecplot/legend/contour_legend.py,sha256=cLaxUNLD627ps6AQqIUQEoQYtQMJ41DJ1F2G53Hpp_4,17417
43
43
  tecplot/legend/legend.py,sha256=FTx03o54awsytUUI2fu8db2oCWvG9L8_D6fymS-gd-Q,4022
44
44
  tecplot/legend/line_legend.py,sha256=qim_xoNHB7gk-Hn7x6d5Yttd_zfFAaoA2KKqpD0S94Q,2121
45
45
  tecplot/legend/rgb_coloring_legend.py,sha256=pDgPaQBtdV99Qz2tDkxc-FGXHmpBSfwZvtDrKXf3gus,9740
@@ -47,7 +47,7 @@ tecplot/legend/scatter_legend.py,sha256=_td5uXO2u3PxT-cCYfGlMVZWHuA4k9i75YYzvLdH
47
47
  tecplot/plot/__init__.py,sha256=2fOlr0Xb48oHO5-OTioxN0yls-2LCPbptzuCusnag9c,3950
48
48
  tecplot/plot/axes.py,sha256=ix_rANTSZdMXWfrBDeR5Zq4AWkJ1hXkog1ply6oSbPI,26962
49
49
  tecplot/plot/axis.py,sha256=3cgOPbgQdCAWueqfjOpZUbPdhYLsw3bqw4Apm7vEaRQ,43264
50
- tecplot/plot/blanking.py,sha256=6y5ph3Rp6oJFhTGIOokS-NDWFxEox1R84k1CexQ8Ya4,20239
50
+ tecplot/plot/blanking.py,sha256=j7iwZsiN78DiFzExR83iLk8m6LPFWTQx2ev7s_On3d8,20237
51
51
  tecplot/plot/contour.py,sha256=tw-7YW27uwr-V17Ip5zvQtZXsbbG4ca-oILB2bCPu1k,44240
52
52
  tecplot/plot/effects.py,sha256=Q9KytPL9dzanSG2Wbx09lNjf1OeKep5Aj3gyOv9s0JE,4983
53
53
  tecplot/plot/fieldmap.py,sha256=Ysih0sWQmeTTpREV2-4Wh5-XDPkTetOD_UG7XPle0Ws,75630
@@ -55,7 +55,7 @@ tecplot/plot/grid.py,sha256=p8h2Tmu93aVunOww6VXSuK8onjf1HkYZRQEyApTJr_c,22463
55
55
  tecplot/plot/hoe_settings.py,sha256=r_ZFwhWa0pes3bQwqcX6kpMWp7Q7_tLalCIHdIAUw8Y,1931
56
56
  tecplot/plot/isosurface.py,sha256=WQec-6hIur5Eyi9Z7m_Y4nuFmGGLUF2RQZDzZRXT1o4,40303
57
57
  tecplot/plot/labels.py,sha256=ac8Dl37lGbkY78cJJo_aCuN9zslYZthSZqriTHGkPOs,10578
58
- tecplot/plot/linemap.py,sha256=V1-8MEaXudhB9m7jqFX633LP5ojIQAM_aiJL1OZAllc,63636
58
+ tecplot/plot/linemap.py,sha256=NHb83QTY1OzI2PO5D_HSlaAxuTrLJxH4fEpE-YQKPgY,63631
59
59
  tecplot/plot/linking.py,sha256=HyetVeDsnUsGJtmWLURg6ylyCom0zR-0UubrVynB_fs,16775
60
60
  tecplot/plot/plot.py,sha256=WB2S4cHc0JB2wQrZSoEISpjvuXuQRZ_QXLuFaBNJuhk,60658
61
61
  tecplot/plot/rgb_coloring.py,sha256=OfcIvhQ9Tm5TQylOUttX7QcNu3CHtETBpIz7gqa9GwY,9417
@@ -76,24 +76,24 @@ tecplot/session/style.py,sha256=djEwXG3H8_izU1Zsk5b7FlJo-WsxgLzb3N78YHCC7Us,1761
76
76
  tecplot/tecutil/__init__.py,sha256=tvHnjGACyMsVN7WbYrtp8Lo9qRBQymYZlQ5BuyiBMQg,748
77
77
  tecplot/tecutil/arglist.py,sha256=Ls2PIplqW2mpjPEyUryeiGcKJrrAZNFHRupBHF3mOp4,9071
78
78
  tecplot/tecutil/captured_output.py,sha256=_q4pFzQvQ736AO_PAVNxlEhzIaxgZV19sBrMuLkiCB4,6373
79
- tecplot/tecutil/constant.py,sha256=iNIlfkM47acj7gQE0T67on4H10n25paxMjYK4O9_VLQ,19174
79
+ tecplot/tecutil/constant.py,sha256=EDZ2XQu0L_0wTVjiI6OxMVdX8SVh_nk_jklq58CmzeQ,19174
80
80
  tecplot/tecutil/index_set.py,sha256=oF4nLpeNOu0-F7RIQUO33WWKGIvK9O6T7lQBIALxRg0,3984
81
81
  tecplot/tecutil/lock.py,sha256=rVa7hekZ7ZFZnvYgRGsWxZUty9JUbC2EZ-eO4vHzqlU,967
82
82
  tecplot/tecutil/message_pb2.py,sha256=5LLHkC4o1hiXYx7FGPLFkPvN2YzVhPT7gfVNVJg_sEU,3668
83
83
  tecplot/tecutil/preamble.py,sha256=wzpTPY3xyv8-cnWpp5q1ay0jlXRNmMEmC0UXN-xu0aU,2142
84
84
  tecplot/tecutil/stringlist.py,sha256=GMuwiP0scuyLxEUbcJFIz4DU9TLAhNdjGHDWawGGT-o,3533
85
- tecplot/tecutil/sv.py,sha256=ysUfHFT1wnyVjXQ3DJsQwY4oc8lpe93SfZkQq5oS72U,54100
86
- tecplot/tecutil/tecutil.py,sha256=qaNRZo13pcfr4u06v9ZJxRcYZsAjwSF1-NDrxUDghBo,693311
85
+ tecplot/tecutil/sv.py,sha256=8EUln_hn7c2FZ3QMiK9zWMSxAQdhbKmKlTLvU-9lZ-4,54100
86
+ tecplot/tecutil/tecutil.py,sha256=Zmz8LvQ3l25QAbIZgMjZQQHgnA-r6lgYu5n-lYwNMeo,691565
87
87
  tecplot/tecutil/tecutil_client.py,sha256=pQKqImoPQRM5K_TdyHCGHwZQr0OycIeIAjRfp5l3L7o,23671
88
- tecplot/tecutil/tecutil_connector.py,sha256=9Z4hZTpWKLuRN8X7uJEB6_pbD7VLLpMvzvdKvfipHZE,37273
89
- tecplot/tecutil/tecutil_rpc.py,sha256=VZS_UO6RKSvOAJeXe0BU-1eyuyBbty5nhHFeiDb0amo,287511
88
+ tecplot/tecutil/tecutil_connector.py,sha256=Eh94ePUw5Reza6nwzILqVlQVWvhBfPoYK24ZsjBpHuQ,36978
89
+ tecplot/tecutil/tecutil_rpc.py,sha256=sHX6JjNXQcVjSNasH9auydbfyZoJMF56lJF0j6TxQMM,285726
90
90
  tecplot/tecutil/util.py,sha256=C8nNB3gFK6XY6l9Ue18zcPZXFrX5JJ9vO-kcA9R53U8,12038
91
91
  tecplot/text/__init__.py,sha256=hXk-XwewRyS-yxif3Wx5FS1wO5Uh6WQpRgtUiUfjNo0,112
92
92
  tecplot/text/font.py,sha256=tHMT2NGJC8rLCVCUdmxK0YN_f4hZpTevWIofwjAp7cs,6722
93
93
  tecplot/text/label_format.py,sha256=24MOvWtVZ_SKdcU16i5yEfxC-hBipmNOLQwJ_kzDr3k,12328
94
94
  tecplot/text/textbox.py,sha256=nwr0ReRC56MY5gB7Ie6UdDxrd_Os_ZI1_3n4bmOzalU,2882
95
- pytecplot-1.6.0.dist-info/LICENSE.html,sha256=M3wq4JZjjVwoa8kHnmykU8xiVekNUEYSczl6BRVnjkQ,27693
96
- pytecplot-1.6.0.dist-info/METADATA,sha256=eJ1D9EVLhxQOMZ_w_4AN7t38Fdrl9n0N7cO85J7RHbA,20799
97
- pytecplot-1.6.0.dist-info/WHEEL,sha256=5sUXSg9e4bi7lTLOHcm6QEYwO5TIF1TNbTSVFVjcJcc,92
98
- pytecplot-1.6.0.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
- pytecplot-1.6.0.dist-info/RECORD,,
95
+ pytecplot-1.6.2.dist-info/LICENSE.html,sha256=SB6NHYAw2pnpGIjyaVCyuarotJKB1OQlgIiYq-09FiM,27908
96
+ pytecplot-1.6.2.dist-info/METADATA,sha256=boJulMdjDDVCCbDB_LvQTEwK7SQWXG42Wq9GFA7yKLc,21576
97
+ pytecplot-1.6.2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
98
+ pytecplot-1.6.2.dist-info/top_level.txt,sha256=gU7HYnAb3AVBIKRUOASdYO0QRI6hg1raLt8aN5E4o7s,8
99
+ pytecplot-1.6.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.41.1)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -277,11 +277,11 @@ class TextBox(object):
277
277
 
278
278
  @property
279
279
  def type(self):
280
- """`constant.TextBox`: Style of the text box fill area and border.
280
+ r"""`constant.TextBox`: Style of the text box fill area and border.
281
281
 
282
282
  The text box type can be set to the following:
283
283
 
284
- * None\_ - (default) No box is drawn around the text.
284
+ * ``None_`` - (default) No box is drawn around the text.
285
285
  * Filled - A filled box around the text which is opaque. if you
286
286
  place it over another |Tecplot 360| object, the underlying
287
287
  object cannot be seen.
tecplot/data/extract.py CHANGED
@@ -257,7 +257,9 @@ def extract_slice(origin=(0, 0, 0), normal=(0, 0, 1), source=None,
257
257
  mode=ExtractMode.SingleZone, copy_cell_centers=None,
258
258
  assign_strand_ids=None,
259
259
  transient_mode=TransientOperationMode.SingleSolutionTime,
260
- frame=None, dataset=None, **kw):
260
+ frame=None, dataset=None,
261
+ resulting_1d_zone_type=Resulting1DZoneType.FELineSegment,
262
+ **kw):
261
263
  """Create new zone from a plane in the dataset.
262
264
 
263
265
  Parameters:
@@ -293,6 +295,10 @@ def extract_slice(origin=(0, 0, 0), normal=(0, 0, 1), source=None,
293
295
  dataset (`Dataset <tecplot.data.Dataset>`, optional): The `Dataset <tecplot.data.Dataset>` to operate on which must
294
296
  be attached to *frame* if given. (default: currently active
295
297
  `Dataset <tecplot.data.Dataset>`)
298
+ resulting_1d_zone_type (`Resulting1DZoneType`, optional): The type
299
+ of zone to create when the result is one-dimensional. Possible
300
+ values are: `Resulting1DZoneType.FELineSegment` (default)
301
+ and `Resulting1DZoneType.IOrderedIfPossible`.
296
302
 
297
303
  Returns:
298
304
  One or a `list` of `Zones <data_access>` representing a planar slice.
@@ -409,6 +415,8 @@ def extract_slice(origin=(0, 0, 0), normal=(0, 0, 1), source=None,
409
415
  raise TecplotSystemError()
410
416
  if dataset.num_zones == nzones:
411
417
  raise TecplotLogicError('No zones found when extracting slice')
418
+ zone_type = Resulting1DZoneType(resulting_1d_zone_type)
419
+ arglist[sv.RESULTING1DZONETYPE] = zone_type
412
420
 
413
421
  if (
414
422
  mode == ExtractMode.SingleZone and
tecplot/data/load.py CHANGED
@@ -60,8 +60,32 @@ def _tecplot_loader_load_data(arglist,
60
60
 
61
61
  return frame.dataset
62
62
 
63
+ #
64
+ # This is used by load_tecplot and then only one V3 laoder (load_tecplot_szl)
65
+ # We could extend this to be used by other V3 loaders as well. Keep in mind,
66
+ # for V3 loaders, this is only used when appending and some V3 loader may have
67
+ # their own instruction for how to treat variables for a single load instruction.
68
+ #
69
+ def _set_var_load_instructions(variables, arglist, allocd):
70
+ # default var load mode is ByName
71
+ if variables is None:
72
+ arglist[sv.VARLOADMODE] = VarLoadMode.ByName
73
+ else:
74
+ if isinstance(variables[0], int):
75
+ arglist[sv.VARLOADMODE] = VarLoadMode.ByPosition
76
+ varset = IndexSet(*variables)
77
+ allocd.append(varset)
78
+ arglist[sv.VARPOSITIONLIST] = varset
79
+ elif isinstance(variables[0], str):
80
+ arglist[sv.VARLOADMODE] = VarLoadMode.ByName
81
+ var_string_list = StringList(*variables)
82
+ allocd.append(var_string_list)
83
+ arglist[sv.VARNAMELIST] = var_string_list
84
+ else:
85
+ err = 'unknown type for variables: {}'
86
+ raise TecplotTypeError(err.format(type(variables)))
63
87
 
64
- def append_filelist(instr, cmd, *filenames):
88
+ def _append_filelist(instr, cmd, *filenames):
65
89
  instr.extend([cmd, sum(map(len, filenames))])
66
90
  for flist in filenames:
67
91
  instr.extend(flist)
@@ -144,7 +168,7 @@ def load_converge_hdf5(filenames,
144
168
  with tecutil.StringList('STANDARDSYNTAX', '1.0') as instr:
145
169
  with tecutil.ArgList() as arglist:
146
170
  arglist[sv.DATASETREADER] = 'CONVERGE HDF5 File Loader'
147
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
171
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
148
172
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
149
173
  return _tecplot_loader_load_data(
150
174
  arglist, frame=frame, read_data_option=read_data_option,
@@ -212,7 +236,7 @@ def load_converge_output(filenames,
212
236
  with StringList('STANDARDSYNTAX', '1.0') as instr:
213
237
  with tecutil.ArgList() as arglist:
214
238
  arglist[sv.DATASETREADER] = 'CONVERGE Output File Loader'
215
- append_filelist(instr, 'FILELIST', filenames)
239
+ _append_filelist(instr, 'FILELIST', filenames)
216
240
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
217
241
  return _tecplot_loader_load_data(
218
242
  arglist, frame=frame, read_data_option=read_data_option,
@@ -277,7 +301,7 @@ def load_converge_cgns(filenames,
277
301
  with StringList('STANDARDSYNTAX', '1.0') as instr:
278
302
  with tecutil.ArgList() as arglist:
279
303
  arglist[sv.DATASETREADER] = 'CONVERGE CGNS File Loader'
280
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
304
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
281
305
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
282
306
  return _tecplot_loader_load_data(
283
307
  arglist, frame=frame, read_data_option=read_data_option,
@@ -354,7 +378,7 @@ def load_fvcom(filenames,
354
378
  with StringList('STANDARDSYNTAX', '1.0') as instr:
355
379
  with tecutil.ArgList() as arglist:
356
380
  arglist[sv.DATASETREADER] = 'FVCOM netCDF Loader'
357
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
381
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
358
382
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
359
383
  return _tecplot_loader_load_data(
360
384
  arglist, frame=frame, read_data_option=read_data_option,
@@ -501,7 +525,7 @@ def load_cgns(filenames,
501
525
  # although this setting is not exposed in the API.
502
526
  instr += ['CgnsLibraryVersion', '3.1.4']
503
527
 
504
- append_filelist(instr, 'FILELIST_CGNSFILES', filenames)
528
+ _append_filelist(instr, 'FILELIST_CGNSFILES', filenames)
505
529
 
506
530
  if zones is not None:
507
531
  indexes = [str(int(z)) for z in zones]
@@ -695,10 +719,10 @@ def load_fluent(case_filenames=None,
695
719
  if case_filenames is not None:
696
720
  instr += ['LoadOption', 'MultipleCaseAndData']
697
721
  if data_filenames is not None:
698
- append_filelist(instr, 'FILELIST_Files', case_filenames,
722
+ _append_filelist(instr, 'FILELIST_Files', case_filenames,
699
723
  data_filenames)
700
724
  else:
701
- append_filelist(instr, 'FILELIST_Files', case_filenames)
725
+ _append_filelist(instr, 'FILELIST_Files', case_filenames)
702
726
  else:
703
727
  assert len(data_filenames) == 1
704
728
  instr += ['LoadOption', 'ResidualsOnly']
@@ -864,7 +888,7 @@ def load_fluent_cff(filenames,
864
888
  with tecutil.StringList('STANDARDSYNTAX', '1.0') as instr:
865
889
  with tecutil.ArgList() as arglist:
866
890
  arglist[sv.DATASETREADER] = 'Fluent Common Fluid Files Loader'
867
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
891
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
868
892
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
869
893
  if solution_time_source is not None:
870
894
  instr += ['SolutionTimeSource',
@@ -958,7 +982,7 @@ def load_telemac(filenames=None,
958
982
 
959
983
  if filenames is not None:
960
984
  filenames = tecutil.normalize_filenames(filenames)
961
- append_filelist(instr, 'FILELIST_TELEMAC', filenames)
985
+ _append_filelist(instr, 'FILELIST_TELEMAC', filenames)
962
986
 
963
987
  if boundary_filename is not None:
964
988
  instr += ['FILENAME_BOUNDARY',
@@ -1129,11 +1153,11 @@ def load_plot3d(grid_filenames=None,
1129
1153
  instr += ['Append', 'No']
1130
1154
 
1131
1155
  if grid_filenames is not None:
1132
- append_filelist(instr, 'FILELIST_GRIDFILES', grid_filenames)
1156
+ _append_filelist(instr, 'FILELIST_GRIDFILES', grid_filenames)
1133
1157
  if solution_filenames is not None:
1134
- append_filelist(instr, 'FILELIST_SOLUTIONFILES', solution_filenames)
1158
+ _append_filelist(instr, 'FILELIST_SOLUTIONFILES', solution_filenames)
1135
1159
  if function_filenames is not None:
1136
- append_filelist(instr, 'FILELIST_FUNCTIONFILES', function_filenames)
1160
+ _append_filelist(instr, 'FILELIST_FUNCTIONFILES', function_filenames)
1137
1161
  if name_filename is not None:
1138
1162
  instr += ['FILENAME_NAMEFILE',
1139
1163
  tecutil.normalize_path(name_filename)]
@@ -1396,7 +1420,7 @@ def load_kiva(filenames,
1396
1420
  with StringList('STANDARDSYNTAX', '1.0') as instr:
1397
1421
  with tecutil.ArgList() as arglist:
1398
1422
  arglist[sv.DATASETREADER] = 'Kiva Loader'
1399
- append_filelist(instr, 'FILELIST_DataFiles', filenames)
1423
+ _append_filelist(instr, 'FILELIST_DataFiles', filenames)
1400
1424
  instr += ['ISDOUBLE', 'YES' if is_double else 'No']
1401
1425
  instr += ['LOADPARTICLEDATA', 'YES' if load_particle_data else 'No']
1402
1426
  instr += ['VELVECTOR', str(velocity_vector)]
@@ -1716,7 +1740,7 @@ def load_vtk(filenames,
1716
1740
  with StringList('STANDARDSYNTAX', '1.0') as instr:
1717
1741
  with tecutil.ArgList() as arglist:
1718
1742
  arglist[sv.DATASETREADER] = 'VTK Data Loader'
1719
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
1743
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
1720
1744
  instr += ['SOLUTIONTIMESOURCE',
1721
1745
  VTKLoader.SolutionTimeSource(solution_time_source).value]
1722
1746
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
@@ -1797,7 +1821,11 @@ def load_tecplot(filenames,
1797
1821
  <data_access>` to load. Use `None` to load all zones. (default:
1798
1822
  `None`)
1799
1823
  variables (`set` of `strings <str>` or `integers <int>`, optional):
1800
- Set of `Variables <Variable>` to load. Use `None` to load all
1824
+ Set of `Variables <Variable>` to load. If variable names are
1825
+ specified as strings and appending then variables will be aligned
1826
+ with existing variables. If variable offsets are supplied then
1827
+ the variables at those offsets will be loaded and aligned based
1828
+ on the value of the collapse parameter. Use `None` to load all
1801
1829
  variables. (default: `None`)
1802
1830
 
1803
1831
  collapse (`bool`, optional): Reindex `Zones <data_access>` and
@@ -1866,23 +1894,8 @@ def load_tecplot(filenames,
1866
1894
  allocd.append(zoneset)
1867
1895
  arglist[sv.ZONELIST] = zoneset
1868
1896
 
1869
- if variables is None:
1870
- arglist[sv.VARLOADMODE] = VarLoadMode.ByName
1897
+ _set_var_load_instructions(variables, arglist, allocd)
1871
1898
 
1872
- else:
1873
- if isinstance(variables[0], int):
1874
- arglist[sv.VARLOADMODE] = VarLoadMode.ByPosition
1875
- varset = IndexSet(*variables)
1876
- allocd.append(varset)
1877
- arglist[sv.VARPOSITIONLIST] = varset
1878
- elif isinstance(variables[0], str):
1879
- arglist[sv.VARLOADMODE] = VarLoadMode.ByName
1880
- var_string_list = StringList(*variables)
1881
- allocd.append(var_string_list)
1882
- arglist[sv.VARNAMELIST] = var_string_list
1883
- else:
1884
- err = 'unknown type for variables: {}'
1885
- raise TecplotTypeError(err.format(type(variables)))
1886
1899
  if skip is not None:
1887
1900
  i, j, k = skip
1888
1901
  arglist[sv.ISKIP] = i
@@ -1911,6 +1924,8 @@ def load_tecplot_szl(filenames,
1911
1924
  reset_style=None,
1912
1925
  initial_plot_first_zone_only=None,
1913
1926
  initial_plot_type=None,
1927
+
1928
+
1914
1929
  assign_strand_ids=True,
1915
1930
  add_zones_to_existing_strands=None,
1916
1931
 
@@ -1920,6 +1935,32 @@ def load_tecplot_szl(filenames,
1920
1935
  authentication_method=None,
1921
1936
  ssh_private_keyfile=pathlib.Path('~/.ssh/id_rsa'),
1922
1937
  szlserver_path=None):
1938
+
1939
+ #
1940
+ # Possible Future Enhancement.
1941
+ # As it stands the szl loader is hardcoded to load variables by name when
1942
+ # appending to an existing dataset. If we want the szl loader to behave
1943
+ # 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
1945
+ # "variables" because of conflicts with other V3 loaders that already use
1946
+ # that for their primary load instructions.
1947
+ # This will apply ONLY to the VarNameList and VarPositionList for the
1948
+ # $!READDATASET command (i.e. only applied to appending for V3 Loaders)
1949
+ #
1950
+ # Proposed is to add:
1951
+ #
1952
+ # appending_variables=None,
1953
+ #
1954
+ # Documentation then will include:
1955
+ #
1956
+ # appending_variables (`set` of `strings <str>` or `integers <int>`, optional):
1957
+ # Set of `Variables <Variable>` to load. If variable names are
1958
+ # specified as strings and **read_data_option** is set to
1959
+ # `ReadDataOption.Append` then variables will be aligned with
1960
+ # existing variables. If variable offsets are supplied then
1961
+ # the variables at those offsets will be loaded.
1962
+ # Use `None` to load all variables. (default: `None`)
1963
+
1923
1964
  """Read tecplot SZL data file.
1924
1965
 
1925
1966
  Parameters:
@@ -1940,6 +1981,9 @@ def load_tecplot_szl(filenames,
1940
1981
  use the old one.
1941
1982
  * `ReadDataOption.Append`
1942
1983
  Append to the existing `Dataset <tecplot.data.Dataset>`.
1984
+ Note also that when appending, the variables in the incoming dataset
1985
+ will be matched up with the existing variables by name and any new
1986
+ variables will be added to the end of the list.
1943
1987
  * `ReadDataOption.Replace`
1944
1988
  Replace the `Dataset <tecplot.data.Dataset>` attached to the active
1945
1989
  frame and to all other frames that use the same `Dataset
@@ -2085,14 +2129,29 @@ def load_tecplot_szl(filenames,
2085
2129
 
2086
2130
  if szlserver_path is not None:
2087
2131
  instr += ['Server Executable Path', str(szlserver_path)]
2088
- append_filelist(instr, 'FILELIST_DATAFILES', filenames)
2132
+ _append_filelist(instr, 'FILELIST_DATAFILES', filenames)
2133
+
2134
+ allocd = []
2135
+
2136
+ # Var load mode and variables options are ONLY used when appending
2137
+ # with V3 Loaders (unlike the native tecplot loader)
2138
+ # For now this is hard coded to None thus making the szl loader hard
2139
+ # coded to load by name and consider all variables.
2140
+ #
2141
+ appending_variables = None
2142
+ if read_data_option is ReadDataOption.Append:
2143
+ _set_var_load_instructions(appending_variables, arglist, allocd)
2089
2144
 
2090
2145
  with tecutil.StringList(*instr) as instr:
2091
2146
  arglist[sv.FILENAMESORINSTRUCTIONS] = instr
2092
- return _tecplot_loader_load_data(
2093
- arglist, frame=frame, read_data_option=read_data_option,
2094
- reset_style=reset_style,
2095
- initial_plot_first_zone_only=initial_plot_first_zone_only,
2096
- initial_plot_type=initial_plot_type,
2097
- assign_strand_ids=assign_strand_ids,
2098
- add_zones_to_existing_strands=add_zones_to_existing_strands)
2147
+ try:
2148
+ return _tecplot_loader_load_data(
2149
+ arglist, frame=frame, read_data_option=read_data_option,
2150
+ reset_style=reset_style,
2151
+ initial_plot_first_zone_only=initial_plot_first_zone_only,
2152
+ initial_plot_type=initial_plot_type,
2153
+ assign_strand_ids=assign_strand_ids,
2154
+ add_zones_to_existing_strands=add_zones_to_existing_strands)
2155
+ finally:
2156
+ for a in allocd:
2157
+ a.dealloc()
tecplot/data/save.py CHANGED
@@ -93,7 +93,7 @@ def save_tecplot_ascii(filename, frame=None, dataset=None, zones=None,
93
93
  and write the variable and connectivity linkage wherever
94
94
  possible. If `False`, this will write out all data, losing the
95
95
  connectivity sharing linkage for future dataset reads of the
96
- file. (default: `True`)
96
+ file. (default: `False`)
97
97
  include_autogen_face_neighbors (`bool`, optional): Save the
98
98
  face neighbor connectivity. This may produce very large data
99
99
  files. (default: `False`)
@@ -115,7 +115,7 @@ class LegendHeader(session.Style):
115
115
 
116
116
  @property
117
117
  def text_type(self):
118
- """`TextType`: Typesetter for the contour legend header.
118
+ r"""`TextType`: Typesetter for the contour legend header.
119
119
 
120
120
  This determines how the header text for the contour legend
121
121
  is rendered. Options are `TextType.Regular` or `TextType.LaTeX`.
tecplot/plot/blanking.py CHANGED
@@ -556,7 +556,7 @@ class IJKBlanking(session.Style):
556
556
  """`tuple`: Minimum :math:`(i, j, k)` values in percent.
557
557
 
558
558
  The percentage is of the total range of the dataset in each dimension.
559
- This example sets the minimum to 50\% in each of the :math:`(i, j, k)`
559
+ This example sets the minimum to 50% in each of the :math:`(i, j, k)`
560
560
  dimensions::
561
561
 
562
562
  >>> plot.ijk_blanking.min_percent = (50, 50, 50)
@@ -572,7 +572,7 @@ class IJKBlanking(session.Style):
572
572
  """`tuple`: Maximum :math:`(i, j, k)` values in percent.
573
573
 
574
574
  The percentage is of the total range of the dataset in each dimension.
575
- This example sets the maximum to 90\% in each of the :math:`(i, j, k)`
575
+ This example sets the maximum to 90% in each of the :math:`(i, j, k)`
576
576
  dimensions::
577
577
 
578
578
  >>> plot.ijk_blanking.max_percent = (90, 90, 90)
tecplot/plot/linemap.py CHANGED
@@ -228,7 +228,7 @@ class LinemapCurve(session.SubStyle):
228
228
 
229
229
  @property
230
230
  def curve_type(self):
231
- """`CurveType`: Type of curve to draw or fit.
231
+ r"""`CurveType`: Type of curve to draw or fit.
232
232
 
233
233
  Possible values: `LineSeg`, `PolynomialFit`, `EToRFit`, `PowerFit`,
234
234
  `Spline`, `ParaSpline`.
@@ -1324,7 +1324,7 @@ class LinemapCollection(session.Style):
1324
1324
 
1325
1325
  @property
1326
1326
  def zone(self):
1327
- """`tuple` of `Zones <data_access>`: `Zones <data_access>` of this :ref:`LinemapCollection`.
1327
+ """`tuple` of `Zones <data_access>`: `Zones <data_access>` of this linemap collection.
1328
1328
 
1329
1329
  Example usage::
1330
1330
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2023-04-28 by tecgen.
2
+ # This file was auto-generated on 2024-05-28 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  from enum import Enum as _Enum
tecplot/tecutil/sv.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2023-04-28 by tecgen.
2
+ # This file was auto-generated on 2024-05-28 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file was auto-generated on 2023-04-28 by tecgen.
2
+ # This file was auto-generated on 2024-05-28 by tecgen.
3
3
  # IMPORTANT: DO NOT edit this file!
4
4
  #
5
5
  import sys
@@ -473,12 +473,18 @@ class TecUtil(object):
473
473
  self.handle.tecUtilBlankingCheckDataPoint.restype = c_bool
474
474
  except AttributeError:
475
475
  error_list.append('TecUtilBlankingCheckDataPoint')
476
- # TP_QUERY Boolean_t TecUtilBlankingCheckFECell(EntIndex_t Zone, LgIndex_t CellIndex)
476
+ # TP_QUERY Boolean_t TecUtilBlankingCheckFECell(EntIndex_t zone, LgIndex_t cellIndex)
477
477
  try:
478
478
  self.handle.tecUtilBlankingCheckFECell.argtypes = [c_int32, c_int64]
479
479
  self.handle.tecUtilBlankingCheckFECell.restype = c_bool
480
480
  except AttributeError:
481
481
  error_list.append('TecUtilBlankingCheckFECell')
482
+ # TP_QUERY Boolean_t TecUtilBlankingCheckFEElem(EntIndex_t zone, EntIndex_t section, LgIndex_t cellIndex)
483
+ try:
484
+ self.handle.tecUtilBlankingCheckFEElem.argtypes = [c_int32, c_int32, c_int64]
485
+ self.handle.tecUtilBlankingCheckFEElem.restype = c_bool
486
+ except AttributeError:
487
+ error_list.append('TecUtilBlankingCheckFEElem')
482
488
  # TP_QUERY Boolean_t TecUtilBlankingCheckIJKCell(EntIndex_t Zone, IJKPlanes_e ZonePlane, LgIndex_t CellIndex)
483
489
  try:
484
490
  self.handle.tecUtilBlankingCheckIJKCell.argtypes = [c_int32, c_int, c_int64]
@@ -3043,11 +3049,6 @@ class TecUtil(object):
3043
3049
  self.handle.tecUtilInverseDistInterpolation.restype = c_bool
3044
3050
  except AttributeError:
3045
3051
  error_list.append('TecUtilInverseDistInterpolation')
3046
- # TP_QUERY Boolean_t TecUtilIsBusy()
3047
- try:
3048
- self.handle.tecUtilIsBusy.restype = c_bool
3049
- except AttributeError:
3050
- error_list.append('TecUtilIsBusy')
3051
3052
  # Boolean_t TecUtilKrig(Set_pa SourceZones, EntIndex_t DestZone, Set_pa VarList, double KrigRange, double KrigZeroValue, Drift_e KrigDrift, PtSelection_e InterpPtSelection, LgIndex_t InterpNPoints)
3052
3053
  try:
3053
3054
  self.handle.tecUtilKrig.argtypes = [c_void_p, c_int32, c_void_p, c_double, c_double, c_int, c_int, c_int64]
@@ -3064,18 +3065,6 @@ class TecUtil(object):
3064
3065
  self.handle.tecUtilLastErrorMessageType.restype = c_int
3065
3066
  except AttributeError:
3066
3067
  error_list.append('TecUtilLastErrorMessageType')
3067
- # int32_t TecUtilLicenseCheckOut(char const * Feature)
3068
- try:
3069
- self.handle.tecUtilLicenseCheckOut.argtypes = [c_char_p]
3070
- self.handle.tecUtilLicenseCheckOut.restype = c_int32
3071
- except AttributeError:
3072
- error_list.append('TecUtilLicenseCheckOut')
3073
- # int32_t TecUtilLicenseGetInfo(char const * Feature, TP_GIVES char * * VendorData, TP_OUT time_t * ExpirationDate)
3074
- try:
3075
- self.handle.tecUtilLicenseGetInfo.argtypes = [c_char_p, POINTER(c_char_p), POINTER(c_int64)]
3076
- self.handle.tecUtilLicenseGetInfo.restype = c_int32
3077
- except AttributeError:
3078
- error_list.append('TecUtilLicenseGetInfo')
3079
3068
  # LgIndex_t TecUtilLimitGetValue(char const * LimitString)
3080
3069
  try:
3081
3070
  self.handle.tecUtilLimitGetValue.argtypes = [c_char_p]
@@ -6156,12 +6145,18 @@ class TecUtil(object):
6156
6145
  result = self.handle.tecUtilBlankingCheckDataPoint(zone, point_index)
6157
6146
  return result
6158
6147
 
6159
- # Boolean_t TecUtilBlankingCheckFECell(EntIndex_t Zone, LgIndex_t CellIndex)
6148
+ # Boolean_t TecUtilBlankingCheckFECell(EntIndex_t zone, LgIndex_t cellIndex)
6160
6149
  @tecutil_preamble
6161
6150
  def BlankingCheckFECell(self, zone, cell_index):
6162
6151
  result = self.handle.tecUtilBlankingCheckFECell(zone, cell_index)
6163
6152
  return result
6164
6153
 
6154
+ # Boolean_t TecUtilBlankingCheckFEElem(EntIndex_t zone, EntIndex_t section, LgIndex_t cellIndex)
6155
+ @tecutil_preamble
6156
+ def BlankingCheckFEElem(self, zone, section, cell_index):
6157
+ result = self.handle.tecUtilBlankingCheckFEElem(zone, section, cell_index)
6158
+ return result
6159
+
6165
6160
  # Boolean_t TecUtilBlankingCheckIJKCell(EntIndex_t Zone, IJKPlanes_e ZonePlane, LgIndex_t CellIndex)
6166
6161
  @tecutil_preamble
6167
6162
  def BlankingCheckIJKCell(self, zone, zone_plane, cell_index):
@@ -8153,11 +8148,6 @@ class TecUtil(object):
8153
8148
  self.handle.tecUtilStringDealloc(byref(temp_file_name_out))
8154
8149
  return result, temp_file_name_out_value
8155
8150
 
8156
- # void TecUtilFinishInteractiveViewChange()
8157
- @tecutil_preamble
8158
- def FinishInteractiveViewChange(self):
8159
- self.handle.tecUtilFinishInteractiveViewChange()
8160
-
8161
8151
  # Boolean_t TecUtilFormatTimeDateString(double inputDate, char const * formattingMask, TP_GIVES char * * formattedValue)
8162
8152
  @tecutil_preamble
8163
8153
  def FormatTimeDateString(self, input_date, formatting_mask):
@@ -9258,12 +9248,6 @@ class TecUtil(object):
9258
9248
  result = self.handle.tecUtilInverseDistInterpolation(source_zones, dest_zone, var_list, inv_dist_exponent, inv_dist_min_radius, interp_pt_selection, interp_n_points)
9259
9249
  return result
9260
9250
 
9261
- # Boolean_t TecUtilIsBusy()
9262
- @tecutil_preamble
9263
- def IsBusy(self):
9264
- result = self.handle.tecUtilIsBusy()
9265
- return result
9266
-
9267
9251
  # Boolean_t TecUtilKrig(Set_pa SourceZones, EntIndex_t DestZone, Set_pa VarList, double KrigRange, double KrigZeroValue, Drift_e KrigDrift, PtSelection_e InterpPtSelection, LgIndex_t InterpNPoints)
9268
9252
  @tecutil_preamble
9269
9253
  def Krig(self, source_zones, dest_zone, var_list, krig_range, krig_zero_value, krig_drift, interp_pt_selection, interp_n_points):
@@ -9289,24 +9273,6 @@ class TecUtil(object):
9289
9273
  result = self.handle.tecUtilLastErrorMessageType()
9290
9274
  return MessageBoxType(result)
9291
9275
 
9292
- # int32_t TecUtilLicenseCheckOut(char const * Feature)
9293
- @tecutil_preamble
9294
- def LicenseCheckOut(self, feature):
9295
- feature_proxy = feature.encode('utf-8') if feature is not None else feature
9296
- result = self.handle.tecUtilLicenseCheckOut(feature_proxy)
9297
- return result
9298
-
9299
- # int32_t TecUtilLicenseGetInfo(char const * Feature, TP_GIVES char * * VendorData, TP_OUT time_t * ExpirationDate)
9300
- @tecutil_preamble
9301
- def LicenseGetInfo(self, feature):
9302
- feature_proxy = feature.encode('utf-8') if feature is not None else feature
9303
- vendor_data_out = c_char_p()
9304
- expiration_date_out = c_int64()
9305
- result = self.handle.tecUtilLicenseGetInfo(feature_proxy, byref(vendor_data_out), byref(expiration_date_out))
9306
- vendor_data_out_value = None if vendor_data_out.value is None else vendor_data_out.value.decode('utf-8')
9307
- self.handle.tecUtilStringDealloc(byref(vendor_data_out))
9308
- return result, vendor_data_out_value, expiration_date_out.value
9309
-
9310
9276
  # LgIndex_t TecUtilLimitGetValue(char const * LimitString)
9311
9277
  @tecutil_preamble
9312
9278
  def LimitGetValue(self, limit_string):
@@ -10511,11 +10477,6 @@ class TecUtil(object):
10511
10477
  result = self.handle.tecUtilSolutionTimeSetToleranceFactor(dataset_id, tolerance_factor)
10512
10478
  return result
10513
10479
 
10514
- # void TecUtilStartInteractiveViewChange()
10515
- @tecutil_preamble
10516
- def StartInteractiveViewChange(self):
10517
- self.handle.tecUtilStartInteractiveViewChange()
10518
-
10519
10480
  # Boolean_t TecUtilStateChangeGetArbEnum(TP_OUT int32_t * ArbEnum)
10520
10481
  @tecutil_preamble
10521
10482
  def StateChangeGetArbEnum(self):
@@ -69,10 +69,6 @@ class TecUtilConnector(object):
69
69
  Message = namedtuple('Message', ['level', 'message'])
70
70
 
71
71
  def __init__(self):
72
- if __debug__:
73
- # ensure log messages get out to console
74
- logging.basicConfig()
75
-
76
72
  self.handle = None
77
73
  self.tecutil_handle = None
78
74
  self.libbatch_path = None
@@ -341,46 +337,35 @@ class TecUtilConnector(object):
341
337
  '{}:{}'.format(fname, exc_tb.tb_lineno)]]
342
338
  cdllexcept[libinterproc] = '\n'.join(info)
343
339
 
344
- msg = dedent('''\
345
- The Tecplot batch library or one of its dependencies could not be
346
- found. This is usually the result of not setting the environment
347
- path LD_LIBRARY_PATH to the directory containing the tecplot
348
- executables.
349
-
350
- LD_LIBRARY_PATH={libpath}
340
+ errmsg = dedent('''\
341
+ Failed to load Tecplot 360 libraries.
351
342
 
352
- Library file name(s):
353
- {libnames}
354
- ''').format(libpath=os.environ.get('LD_LIBRARY_PATH', None),
355
- libnames='\n '.join(libnames))
343
+ Try running python using the tec360-env script:
344
+ /tecplot360/bin/tec360-env [options] -- python [options]''')
356
345
 
357
346
  self.libbatch_path = _find_library([libbatch])
358
347
  if self.libbatch_path is None:
359
- raise TecplotLibraryNotFoundError(msg)
348
+ log.error(dedent(f'''\
349
+ Failed to load Tecplot 360 libraries: {" ".join(libnames)}
350
+ Search path:
351
+ LD_LIBRARY_PATH={os.environ.get('LD_LIBRARY_PATH', "")}
352
+ This is usually the result of an incorrect environment setup.
353
+ See the documentation here:
354
+ www.tecplot.com/docs/pytecplot'''))
355
+ raise TecplotLibraryNotFoundError(errmsg)
360
356
 
361
- msg += dedent('''
362
- Found batch library file:
363
- {foundlib}
364
-
365
- Your Tecplot 360 EX may be out of date. Please install the latest
366
- version of 360 EX which can be obtained here:
367
- https://www.tecplot.com/downloads
368
- ''').format(foundlib=self.libbatch_path)
357
+ log.error(f'Found batch library file: {self.libbatch_path}')
369
358
 
370
359
  missinglibs = _missinglibs(self.libbatch_path)
371
360
  if len(missinglibs):
372
- msg += dedent('''
373
- Missing libraries:
374
- {missinglibs}
375
- ''').format(missinglibs='\n '.join(missinglibs))
361
+ log.error('Missing libraries' + '\n '.join(missinglibs))
376
362
 
377
363
  lib = path.basename(self.libbatch_path)
378
- msg += dedent('''
379
- Python ctypes exception caught while trying to load library:
380
- {cdllexcept}
381
- ''').format(cdllexcept='\n '.join(cdllexcept[lib].split('\n')))
382
-
383
- raise TecplotLibraryNotLoadedError(msg)
364
+ log.error(
365
+ 'Python ctypes exception caught while trying to load library:'
366
+ + '\n '.join(cdllexcept[lib].split('\n'))
367
+ )
368
+ raise TecplotLibraryNotLoadedError(errmsg)
384
369
 
385
370
  def load_darwin(self):
386
371
 
@@ -445,45 +430,39 @@ class TecUtilConnector(object):
445
430
  '{}:{}'.format(fname, exc_tb.tb_lineno)]]
446
431
  cdllexcept[libinterproc] = '\n'.join(info)
447
432
 
448
- msg = dedent('''\
449
- The Tecplot batch library or one of its dependencies could not be
450
- found. This is usually the result of not setting the environment
451
- path DYLD_LIBRARY_PATH to the directory containing the tecplot
452
- executables.
433
+ log.error(dedent(f'''\
434
+ Failed to load Tecplot 360 libraries: {" ".join(libnames)}
435
+ Search path:
436
+ DYLD_LIBRARY_PATH={os.environ.get('DYLD_LIBRARY_PATH', "")}
437
+ This is usually the result of an incorrect environment setup.
438
+ See the documentation here:
439
+ www.tecplot.com/docs/pytecplot'''))
440
+ errmsg = dedent('''\
441
+ Failed to load Tecplot 360 libraries.
453
442
 
454
- DYLD_LIBRARY_PATH={libpath}
443
+ Try running python using the tec360-env script included in the
444
+ Tecplot 360 bin folder:
445
+ "/Applications/Tecplot 360 EX [VERSION]/bin/tec360-env" -- python [options]
455
446
 
456
- Batch library file name(s):
457
- {libnames}
458
- ''').format(libpath=os.environ.get('DYLD_LIBRARY_PATH', None),
459
- libnames='\n '.join(libnames))
447
+ On Apple Silicon machines, an Intel version of Python is required:
448
+ "/Applications/Tecplot 360 EX [VERSION]/bin/tec360-env" -- python3-intel64 [options]''')
460
449
 
461
450
  if self.libbatch_path is None:
462
- raise TecplotLibraryNotFoundError(msg)
463
-
464
- msg += dedent('''
465
- Found batch library file:
466
- {foundlib}
451
+ raise TecplotLibraryNotFoundError(errmsg)
467
452
 
468
- Your Tecplot 360 EX may be out of date. Please install the latest
469
- version of 360 EX which can be obtained here:
470
- https://www.tecplot.com/downloads
471
- ''').format(foundlib=self.libbatch_path)
453
+ log.dedent(f'Found batch library file: {self.libbatch_path}')
472
454
 
473
455
  missinglibs = _missinglibs(self.libbatch_path)
474
456
  if len(missinglibs):
475
- msg += dedent('''
476
- Missing libraries:
477
- {missinglibs}
478
- ''').format(missinglibs='\n '.join(missinglibs))
457
+ log.error('Missing libraries:\n' + '\n '.join(missinglibs))
479
458
 
480
459
  lib = path.basename(self.libbatch_path)
481
- msg += dedent('''
482
- Python ctypes exception caught while trying to load library:
483
- {cdllexcept}
484
- ''').format(cdllexcept='\n '.join(cdllexcept[lib].split('\n')))
460
+ log.error(
461
+ 'Python ctypes exception caught while trying to load library:\n'
462
+ + '\n '.join(cdllexcept[lib].split('\n'))
463
+ )
485
464
 
486
- raise TecplotLibraryNotLoadedError(msg)
465
+ raise TecplotLibraryNotLoadedError(errmsg)
487
466
 
488
467
  def load_windows(self):
489
468
 
@@ -547,24 +526,14 @@ class TecUtilConnector(object):
547
526
  else:
548
527
  cdllexcept.append(msg)
549
528
 
550
- msg = dedent('''\
551
- The Tecplot batch library or one of its dependencies could not be
552
- found. This is usually the result of not setting the environment
553
- path PATH to the directory containing the tecplot executables.
554
- Alternatively, your Tecplot 360 EX may be out of date. Please
555
- install the latest version of 360 EX which can be obtained here:
556
- https://www.tecplot.com/downloads
557
-
529
+ log.error(dedent(f'''\
530
+ Failed to load Tecplot 360 libraries.
558
531
  Batch library file names:
559
532
  tecutilbatch.dll
560
533
  tecutilchecked.dll
561
-
562
- PATH={libpath}
563
-
534
+ PATH={os.environ.get('PATH', "")}
564
535
  Found batch library file:
565
- {foundlib}
566
- ''').format(libpath=os.environ.get('PATH', None),
567
- foundlib=self.libbatch_path)
536
+ {self.libbatch_path}'''))
568
537
 
569
538
  if cdllexcept:
570
539
  info = '\n '.join(cdllexcept[0].split('\n'))
@@ -572,15 +541,26 @@ class TecUtilConnector(object):
572
541
  if 'Error 127' in info:
573
542
  info += ('\n***NOTE: If your script uses PyQt, ' +
574
543
  'you must import tecplot before importing PyQt.\n')
575
- msg += dedent('''
576
- Python ctypes exception caught while trying to load library:
577
- {cdllexcept}
578
- ''').format(cdllexcept=info)
544
+ log.error(
545
+ 'Python ctypes exception caught while trying to load library:\n '
546
+ + info
547
+ )
579
548
 
580
- if self.libbatch_path is None:
581
- raise TecplotLibraryNotFoundError(msg)
549
+ errmsg = dedent('''\
550
+ Failed to load Tecplot 360 libraries.
582
551
 
583
- raise TecplotLibraryNotLoadedError(msg)
552
+ The Tecplot batch library or one of its dependencies could not be
553
+ found. This is usually the result of not setting the environment
554
+ variable PATH to the directory containing the tecplot executables.
555
+ See the documentation here:
556
+ www.tecplot.com/docs/pytecplot
557
+
558
+ Your Tecplot 360 may be out of date. Please install the latest
559
+ version of Tecplot 360 which can be obtained on the MyTecplot portal:
560
+ my.tecplot.com''')
561
+ if self.libbatch_path is None:
562
+ raise TecplotLibraryNotFoundError(errmsg)
563
+ raise TecplotLibraryNotLoadedError(errmsg)
584
564
 
585
565
  def start(self):
586
566
  if self.started:
@@ -576,6 +576,13 @@ class TecUtilRPC(object):
576
576
  rep=self.sndrcv("BlankingCheckFECell",*args)
577
577
  self.chk(rep)
578
578
  return rep.args[0].boolean
579
+ def BlankingCheckFEElem(self,zone,section,cell_index):
580
+ args=((ValueType.Scalar,c_int32,zone),
581
+ (ValueType.Scalar,c_int32,section),
582
+ (ValueType.Scalar,c_int64,cell_index),)
583
+ rep=self.sndrcv("BlankingCheckFEElem",*args)
584
+ self.chk(rep)
585
+ return rep.args[0].boolean
579
586
  def BlankingCheckIJKCell(self,zone,zone_plane,cell_index):
580
587
  args=((ValueType.Scalar,c_int32,zone),
581
588
  (ValueType.Scalar,c_int32,IJKPlanes(zone_plane).value),
@@ -3123,15 +3130,6 @@ class TecUtilRPC(object):
3123
3130
  rep=self.sndrcv("GeomImageGetFileName",*args)
3124
3131
  self.chk(rep)
3125
3132
  return self.read_text(rep.args[0])
3126
- def GeomImageGetImage(self,gid):
3127
- args=((ValueType.Scalar,c_int64,gid),)
3128
- rep=self.sndrcv("GeomImageGetImage",*args)
3129
- self.chk(rep)
3130
- return (
3131
- (rep.status == tecrpc.Reply.Success),
3132
- rep.args[0].int32,
3133
- rep.args[1].int32,
3134
- self.read_array(rep.args[2], c_uint8))
3135
3133
  def GeomImageGetRawSize(self,gid):
3136
3134
  args=((ValueType.Scalar,c_int64,gid),)
3137
3135
  rep=self.sndrcv("GeomImageGetRawSize",*args)
@@ -3379,15 +3377,6 @@ class TecUtilRPC(object):
3379
3377
  def ImageBitmapDestroy(self):
3380
3378
  rep=self.sndrcv("ImageBitmapDestroy")
3381
3379
  self.chk(rep)
3382
- def ImageGetColorTable(self,red_array,green_array,blue_array):
3383
- args=((ValueType.Array,None,red_array),
3384
- (ValueType.Array,None,green_array),
3385
- (ValueType.Array,None,blue_array),)
3386
- rep=self.sndrcv("ImageGetColorTable",*args)
3387
- self.chk(rep)
3388
- memmove(red_array, rep.args[0].buffer, sizeof(red_array))
3389
- memmove(green_array, rep.args[1].buffer, sizeof(green_array))
3390
- memmove(blue_array, rep.args[2].buffer, sizeof(blue_array))
3391
3380
  def ImageGetDimensions(self):
3392
3381
  rep=self.sndrcv("ImageGetDimensions")
3393
3382
  self.chk(rep)
@@ -3395,38 +3384,11 @@ class TecUtilRPC(object):
3395
3384
  (rep.status == tecrpc.Reply.Success),
3396
3385
  rep.args[0].int32,
3397
3386
  rep.args[1].int32)
3398
- def ImageIndexedBitmapCreate(self,region,red_color_table_array,green_color_table_array,blue_color_table_array):
3399
- args=((ValueType.Scalar,c_int32,ExportRegion(region).value),
3400
- (ValueType.Array,None,red_color_table_array),
3401
- (ValueType.Array,None,green_color_table_array),
3402
- (ValueType.Array,None,blue_color_table_array),)
3403
- rep=self.sndrcv("ImageIndexedBitmapCreate",*args)
3404
- self.chk(rep)
3405
- memmove(red_color_table_array, rep.args[0].buffer, sizeof(red_color_table_array))
3406
- memmove(green_color_table_array, rep.args[1].buffer, sizeof(green_color_table_array))
3407
- memmove(blue_color_table_array, rep.args[2].buffer, sizeof(blue_color_table_array))
3408
- return (rep.status == tecrpc.Reply.Success)
3409
- def ImageIndexedGetScanLine(self,scan_line,rgb_index_array):
3410
- args=((ValueType.Scalar,c_int32,scan_line),
3411
- (ValueType.Array,None,rgb_index_array),)
3412
- rep=self.sndrcv("ImageIndexedGetScanLine",*args)
3413
- self.chk(rep)
3414
- memmove(rgb_index_array, rep.args[0].buffer, sizeof(rgb_index_array))
3415
3387
  def ImageRGBBitmapCreate(self,region):
3416
3388
  args=((ValueType.Scalar,c_int32,ExportRegion(region).value),)
3417
3389
  rep=self.sndrcv("ImageRGBBitmapCreate",*args)
3418
3390
  self.chk(rep)
3419
3391
  return (rep.status == tecrpc.Reply.Success)
3420
- def ImageRGBGetScanLine(self,scan_line,red_array,green_array,blue_array):
3421
- args=((ValueType.Scalar,c_int32,scan_line),
3422
- (ValueType.Array,None,red_array),
3423
- (ValueType.Array,None,green_array),
3424
- (ValueType.Array,None,blue_array),)
3425
- rep=self.sndrcv("ImageRGBGetScanLine",*args)
3426
- self.chk(rep)
3427
- memmove(red_array, rep.args[0].buffer, sizeof(red_array))
3428
- memmove(green_array, rep.args[1].buffer, sizeof(green_array))
3429
- memmove(blue_array, rep.args[2].buffer, sizeof(blue_array))
3430
3392
  def ImportAddConverter(self,converter_callback,converter_name,f_name_extension):
3431
3393
  args=((ValueType.Address,c_uint64,getattr(converter_callback,'value',converter_callback)),
3432
3394
  (ValueType.Text,None,converter_name),
@@ -4484,6 +4446,12 @@ class TecUtilRPC(object):
4484
4446
  rep=self.sndrcv("ProbeFieldGetReadableNativeRef",*args)
4485
4447
  self.chk(rep)
4486
4448
  return rep.args[0].uint64
4449
+ def ProbeFieldGetSectionAndElem(self):
4450
+ rep=self.sndrcv("ProbeFieldGetSectionAndElem")
4451
+ self.chk(rep)
4452
+ return (
4453
+ rep.args[0].int32,
4454
+ rep.args[1].int64)
4487
4455
  def ProbeFieldGetValue(self,var):
4488
4456
  args=((ValueType.Scalar,c_int32,var),)
4489
4457
  rep=self.sndrcv("ProbeFieldGetValue",*args)
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.6.0'
37
- build = 'cb9babe'
36
+ version = '1.6.2'
37
+ build = 'd8ad3e0'
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