-
Notifications
You must be signed in to change notification settings - Fork 1
/
trnpy.html
465 lines (430 loc) · 33.3 KB
/
trnpy.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module trnpy</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"> <br><big><big><strong>trnpy</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:c%3A%5Cusers%5Cnettelstroth%5Cdocuments%5C07%20python%5Ctrnpy%5Ctrnpy.py">c:\users\nettelstroth\documents\07 python\trnpy\trnpy.py</a></font></td></tr></table>
<p><tt>@author: Joris Nettelstroth<br>
<br>
TRNpy: Parallelized TRNSYS simulation with Python<br>
=================================================<br>
Simulate TRNSYS deck files in serial or parallel and use parametric tables to<br>
perform simulations for different sets of parameters. TRNpy helps to automate<br>
these and similar operations by providing functions to manipulate deck files<br>
and run TRNSYS simulations from a programmatic level.<br>
<br>
<br>
Usage<br>
=====<br>
TRNpy can be used as a standalone application or imported into other Python<br>
scripts.<br>
<br>
Standalone TRNpy<br>
----------------<br>
TRNpy can be compiled into a Windows .exe file with the script ``setup.py``<br>
and the following tips are valid for both ``trnpy.py`` and ``trnpy.exe``.<br>
<br>
* By double-clicking the program, the main() function of this script is<br>
executed. It performs the most common tasks possible with this application:<br>
<br>
* The first file dialog allows to choose one or multiple deck files to<br>
simulate.<br>
* The second file dialog allows to choose a parametric table, which can be<br>
an Excel or a csv file. The first row must contain names of parameters<br>
you want to change. The following rows must contain the values of those<br>
parameters for each simulation you want to perform. TRNpy will make<br>
the substitutions in the given deck file and perform all the simulations.<br>
* You can cancel the second dialog to perform regular simulations.<br>
* The parametric table could look like this, to modify two parameters<br>
defined in TRNSYS equations:<br>
<br>
=========== ===========<br>
Parameter_1 Parameter_2<br>
=========== ===========<br>
100 0<br>
100 1<br>
200 0<br>
200 1<br>
=========== ===========<br>
<br>
* Running the program from a command line gives you more options, because<br>
you can use the built-in argument parser:<br>
<br>
* Type ``python trnsys.py --help`` or ``trnsys.exe --help`` to see the help<br>
message and an explanation of the available arguments.<br>
* This allows e.g. to enable parallel computing, hide the TRNSYS windows,<br>
suppress the parametric table file dialog, define the folder where<br>
parallel simulations are performed, and some more.<br>
* Example command:<br>
<br>
.. code::<br>
<br>
trnpy.exe --parallel --copy_files --n_cores 4 --table disabled<br>
<br>
* Creating a shortcut to the executable is another practical approach:<br>
<br>
* Arguments can be appended to the path in the ``Target`` field<br>
* Changing the field ``Start in`` to e.g. ``C:\Trnsys17\Work`` will always<br>
open the file dialogs in that folder<br>
<br>
Module Import<br>
-------------<br>
Import this script as a module into your own Python script. There you can<br>
initialize objects of the ``<a href="#DCK_processor">DCK_processor</a>()`` and ``<a href="#TRNExe">TRNExe</a>()`` classes and use<br>
their functions. The first can create ``dck`` objects from regular TRNSYS<br>
input (deck) files and manipulate them, the latter can run simulations with<br>
the given ``dck`` objects.<br>
This also gives you the option to perform post-processing tasks with<br>
the simulation results (something that cannot be automated in the standalone<br>
version).<br>
<br>
<br>
Installation<br>
============<br>
<br>
TRNpy<br>
-----<br>
Just save the TRNpy application anywhere. As explained, it makes sense to<br>
create shortcuts to the executable from your TRNSYS work folders.<br>
<br>
Python<br>
------<br>
You do not need a Python installation for using ``trnpy.exe``.<br>
<br>
If you want to use Python but do not yet have it installed, the easiest way to<br>
do that is by downloading and installing **Anaconda** from here:<br>
https://www.anaconda.com/download/<br>
It's a package manager that distributes Python with data science packages.<br>
<br>
During installation, please allow to add variables to ``$PATH`` (or do that<br>
manually afterwards.) This allows Python to be started via command line from<br>
every directory, which is very useful.<br>
<br>
<br>
Support<br>
=======<br>
For questions and help, contact Joris Nettelstroth.<br>
If you would like to request or contribute changes, do the same.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt> </tt></td><td> </td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="argparse.html">argparse</a><br>
<a href="tkinter.filedialog.html">tkinter.filedialog</a><br>
<a href="hashlib.html">hashlib</a><br>
</td><td width="25%" valign=top><a href="logging.html">logging</a><br>
<a href="multiprocessing.html">multiprocessing</a><br>
<a href="os.html">os</a><br>
</td><td width="25%" valign=top><a href="pandas.html">pandas</a><br>
<a href="psutil.html">psutil</a><br>
<a href="re.html">re</a><br>
</td><td width="25%" valign=top><a href="shutil.html">shutil</a><br>
<a href="subprocess.html">subprocess</a><br>
<a href="time.html">time</a><br>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt> </tt></td><td> </td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="builtins.html#object">builtins.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="trnpy.html#DCK">DCK</a>
</font></dt><dt><font face="helvetica, arial"><a href="trnpy.html#DCK_processor">DCK_processor</a>
</font></dt><dt><font face="helvetica, arial"><a href="trnpy.html#TRNExe">TRNExe</a>
</font></dt></dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="DCK">class <strong>DCK</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>Deck class.<br>
Holds all the information about a deck file, including the content of the<br>
file itself. This allows manipulating the content, before saving the<br>
actual file to the old or a new location for simulation.<br>
These locations are stored, as well as the applied manipulations.<br>
After a simulation, potential errors can be stored in the <a href="builtins.html#object">object</a>, too.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="DCK-__init__"><strong>__init__</strong></a>(self, file_path, regex_result_files='Result|\\.sum|\\.pr.')</dt><dd><tt>Initialize self. See help(type(self)) for accurate signature.</tt></dd></dl>
<dl><dt><a name="DCK-find_assigned_files"><strong>find_assigned_files</strong></a>(self)</dt><dd><tt>Find all file paths that appear after an "ASSIGN" key in the<br>
deck. The files are sorted into input and output (=result) files by<br>
applying regex_result_files.<br>
The results are stored in the lists assigned_files and result_files.<br>
<br>
Args:<br>
None<br>
<br>
Returns:<br>
None</tt></dd></dl>
<dl><dt><a name="DCK-load_dck_text"><strong>load_dck_text</strong></a>(self)</dt><dd><tt>Here we store the complete text of the deck file as a property of<br>
the deck <a href="builtins.html#object">object</a>.<br>
<br>
.. note::<br>
This may or may not prove to consume too much memory.<br>
<br>
Args:<br>
None<br>
<br>
Returns:<br>
None</tt></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list of weak references to the object (if defined)</tt></dd>
</dl>
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="DCK_processor">class <strong>DCK_processor</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>Deck processor class.<br>
Create ``dck`` objects from regular TRNSYS input (deck) files and<br>
manipulate them.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="DCK_processor-__init__"><strong>__init__</strong></a>(self, root_folder='C:\\Trnsys17\\Work\\batch', regex_result_files='Result|\\.sum|\\.pr.')</dt><dd><tt>Initialize self. See help(type(self)) for accurate signature.</tt></dd></dl>
<dl><dt><a name="DCK_processor-add_replacements"><strong>add_replacements</strong></a>(self, replace_dict_new, dck)</dt><dd><tt>Add new entries to the existing replace_dict.<br>
Basic use is to add strings, but also accepts regular expressions.<br>
These allow you to replace any kind of information.<br>
<br>
Args:<br>
replace_dict_new (dict): Dictionary of 'str_old: string_new' pairs<br>
<br>
Returns:<br>
None</tt></dd></dl>
<dl><dt><a name="DCK_processor-add_replacements_value_of_key"><strong>add_replacements_value_of_key</strong></a>(self, replace_dict_new, dck)</dt><dd><tt>Add new entries to the existing replace_dict.<br>
Creates the required regular expression to replace the 'value' of the<br>
'key' in the deck file. Then calls <a href="#DCK_processor-add_replacements">add_replacements</a>().<br>
<br>
Args:<br>
replace_dict_new (dict): Dictionary of 'key: value' pairs<br>
<br>
Returns:<br>
None<br>
<br>
Example:<br>
replace_dict_new = {'A_Koll': 550, 'plot_on_off': -1}</tt></dd></dl>
<dl><dt><a name="DCK_processor-auto_parametric_table"><strong>auto_parametric_table</strong></a>(self, parametric_table, dck_file_list)</dt></dl>
<dl><dt><a name="DCK_processor-copy_assigned_files"><strong>copy_assigned_files</strong></a>(self, dck_list)</dt><dd><tt>All external files that a TRNSYS deck depends on are stored with<br>
the ASSIGN parameter. We make a list of those files and copy them<br>
to the required location. (Weather data, load profiles, etc.)</tt></dd></dl>
<dl><dt><a name="DCK_processor-create_dcks_from_file_list"><strong>create_dcks_from_file_list</strong></a>(self, dck_file_list, update_dest=False)</dt><dd><tt>Takes a list of file paths and creates deck objects for each one.<br>
If the optional argument 'update_dest' is True, the destination path<br>
is updated and based on the 'root_folder'.<br>
The default False means simulating the deck in the original folder.<br>
<br>
Please make sure that the dck_file_list contains actual paths.<br>
If the deck file is in the same folder as the script, the path has<br>
to be "./TRNSYS_input_file.dck".</tt></dd></dl>
<dl><dt><a name="DCK_processor-disable_plotters"><strong>disable_plotters</strong></a>(self, dck)</dt><dd><tt>Disable the plotters by setting their parameter 9 to '-1'.<br>
Calls <a href="#DCK_processor-add_replacements">add_replacements</a>() with the required regular expressions.</tt></dd></dl>
<dl><dt><a name="DCK_processor-gen_row_hash"><strong>gen_row_hash</strong></a>(self)</dt><dd><tt>Unused</tt></dd></dl>
<dl><dt><a name="DCK_processor-get_parametric_dck_list"><strong>get_parametric_dck_list</strong></a>(self, parametric_table, dck_file)</dt></dl>
<dl><dt><a name="DCK_processor-mark_index_for_DataExplorer"><strong>mark_index_for_DataExplorer</strong></a>(self, df)</dt><dd><tt>Put '!' in front of index column names, to mark them as<br>
classifications. Is not applied to time columns.</tt></dd></dl>
<dl><dt><a name="DCK_processor-read_filetypes"><strong>read_filetypes</strong></a>(self, filepath, **args)</dt><dd><tt>Read any file type with stored data and return the Pandas DataFrame.<br>
Wrapper around Pandas' read_excel() and read_csv().<br>
<br>
Please note: With 'args', you can pass any (named) parameter down<br>
to the Pandas functions. The TRNSYS printer adds some useless rows<br>
at the top and bottom of the file? No problem, just define 'skiprows'<br>
and 'skipfooter'. For all options, see:<br>
<a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html">http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html</a></tt></dd></dl>
<dl><dt><a name="DCK_processor-read_parametric_table"><strong>read_parametric_table</strong></a>(self, param_table_file)</dt></dl>
<dl><dt><a name="DCK_processor-report_errors"><strong>report_errors</strong></a>(self, dck_list)</dt></dl>
<dl><dt><a name="DCK_processor-reset_replacements"><strong>reset_replacements</strong></a>(self, dck)</dt><dd><tt>Reset the replace_dict to make it empty.</tt></dd></dl>
<dl><dt><a name="DCK_processor-results_collect"><strong>results_collect</strong></a>(self, dck_list, read_file_function, create_index=True)</dt><dd><tt>Collect the results of the simulations. Our goal is to combine<br>
the result files of the parametric runs into DataFrames. The DataFrames<br>
contain the raw data plus columns for each of the replacements made<br>
in the deck files. This allows you to identify each parametric run.<br>
<br>
The assumption is that all simulations produced the same set of result<br>
files. The dict 'result_data' will have one DataFrame for each file<br>
name. In order for this to work, the TRNSYS out files have to be read<br>
in and converted into Pandas DataFrames. And different TRNSYS printer<br>
types format their output in different ways. Therefore there can be<br>
no fully automated reading of all TRNSYS results.<br>
<br>
Instead, you have to provide the function that manages reading the<br>
files ('read_file_function'). In some cases, it can look like this:<br>
<br>
.. code:: python<br>
<br>
def read_file_function(result_file_path):<br>
return dck_proc.<a href="#DCK_processor-read_filetypes">read_filetypes</a>(result_file_path)<br>
<br>
.. note::<br>
This means that you can utilize the existing <a href="#DCK_processor-read_filetypes">read_filetypes</a>(),<br>
which can already handle different file types. Please see the docs<br>
for <a href="#DCK_processor-read_filetypes">read_filetypes</a>() for info about passing over additional<br>
arguments to customize it to your needs.<br>
<br>
Args:<br>
dck_list (list): A list of <a href="#DCK">DCK</a> objects<br>
<br>
read_file_function (func): A function that takes one argument (a<br>
file path) and returns a Pandas DataFrame.<br>
<br>
create_index (bool, optional): Move time and parameter columns to<br>
the index of the DataFrame. Default: True<br>
<br>
Returns:<br>
result_data (dict): A dictionary with one DataFrame for each file</tt></dd></dl>
<dl><dt><a name="DCK_processor-results_create_index"><strong>results_create_index</strong></a>(self, result_data, replace_dict, origin)</dt><dd><tt>Put the time and parameter columns into the index of the DataFrame.<br>
The function expects the return of <a href="#DCK_processor-results_collect">results_collect</a>(). This typically<br>
creates a multi-index and is arguably how DataFrames are supposed to<br>
be handled.<br>
<br>
Args:<br>
result_data (dict): The return of the function <a href="#DCK_processor-results_collect">results_collect</a>()<br>
<br>
replace_dict (dict): Is required to identify the parameter columns<br>
<br>
origin (str): Start date, e.g. '2003-01-01'. TRNSYS does not care<br>
for years or days, but to get a pretty DataFrame we use datetime<br>
for the time column, which needs a fully defined date.<br>
<br>
Returns:<br>
result_data (dict): A dictionary with one DataFrame for each file</tt></dd></dl>
<dl><dt><a name="DCK_processor-results_resample"><strong>results_resample</strong></a>(self, df, freq)</dt><dd><tt>Resample a multi-indexed DataFrame to a new frequency.<br>
Expects the time column to be at last position in the multi-index.</tt></dd></dl>
<dl><dt><a name="DCK_processor-rewrite_dcks"><strong>rewrite_dcks</strong></a>(self, dck_list)</dt><dd><tt>Perform the replacements in self.<strong>replace_dict</strong> in the deck files.<br>
You have to use <a href="#DCK_processor-add_replacements">add_replacements</a>(), <a href="#DCK_processor-add_replacements_value_of_key">add_replacements_value_of_key</a>()<br>
or <a href="#DCK_processor-disable_plotters">disable_plotters</a>() before, to fill the replace_dict.<br>
<br>
Args:<br>
dck_list (list): List of paths to deck files to work on<br>
<br>
Returns:<br>
dck_list (list): List of paths</tt></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list of weak references to the object (if defined)</tt></dd>
</dl>
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom> <br>
<font color="#000000" face="helvetica, arial"><a name="TRNExe">class <strong>TRNExe</strong></a>(<a href="builtins.html#object">builtins.object</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt> </tt></td>
<td colspan=2><tt>The <a href="#TRNExe">TRNExe</a> class.<br> </tt></td></tr>
<tr><td> </td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="TRNExe-TRNExe_is_alive"><strong>TRNExe_is_alive</strong></a>(self, pid, interval_1=0.3, interval_2=9.7)</dt><dd><tt>Check whether or not a particular <a href="#TRNExe">TRNExe</a>.exe process is alive.<br>
This status is guessed by measuring its CPU load over the given time<br>
intervals. The first measurement has to be short, because it blocks<br>
the thread. If it indicates a low CPU load, the second (longer)<br>
measurement is performed to be sure.<br>
<br>
Args:<br>
pid (int): Process ID number<br>
<br>
interval_1 (float): First (short) interval in seconds<br>
<br>
interval_2 (float): Second (longer) interval in seconds<br>
<br>
Returns:<br>
True/False (bool): Status information</tt></dd></dl>
<dl><dt><a name="TRNExe-__init__"><strong>__init__</strong></a>(self, path_TRNExe='C:\\Trnsys17\\Exe\\TRNExe.exe', mode_trnsys_hidden=False, mode_exec_parallel=False, n_cores=0)</dt><dd><tt>The optional argument n_cores allows control over the used CPU cores.<br>
By default, the total number of CPU cores minus one are used. This way<br>
your CPU is not under 100% load - and using all cores does not<br>
necessarily make total simulation time faster.<br>
<br>
Args:<br>
n_cores (int, optional): Number of CPU cores to use<br>
<br>
Returns:<br>
None</tt></dd></dl>
<dl><dt><a name="TRNExe-check_log_for_errors"><strong>check_log_for_errors</strong></a>(self, dck)</dt><dd><tt>Stores errors in error_msg_list. Returns False if errors are found.</tt></dd></dl>
<dl><dt><a name="TRNExe-print_progress"><strong>print_progress</strong></a>(self, map_result, start_time)</dt><dd><tt>Prints info about the multiprocessing progress to the screen.<br>
Measures and prints the percentage of simulations done and an<br>
estimation of the remaining time.<br>
The parameter 'map_result' must be the return of a pool.map_async()<br>
function. Please be aware that this mapping splits the work list into<br>
'chunks'. 'map_result._number_left' only updates once one chunk has<br>
been completed. Therefore the progress percentage does not necessarily<br>
update after every finished TRNSYS simulation.<br>
<br>
Args:<br>
map_result (map_async <a href="builtins.html#object">object</a>): Return of 'pool.map_async'<br>
<br>
start_time (time): Simulation start time<br>
<br>
Returns:<br>
None</tt></dd></dl>
<dl><dt><a name="TRNExe-run_TRNSYS_dck"><strong>run_TRNSYS_dck</strong></a>(self, dck)</dt><dd><tt>Run a TRNSYS simulation with the given deck dck_file.</tt></dd></dl>
<dl><dt><a name="TRNExe-run_TRNSYS_dck_list"><strong>run_TRNSYS_dck_list</strong></a>(self, dck_list)</dt><dd><tt>Run one TRNSYS simulation of each deck file in the dck_list.<br>
This is a wrapper around <a href="#TRNExe-run_TRNSYS_dck">run_TRNSYS_dck</a>() that allows execution in<br>
serial and in parallel.<br>
<br>
Args:<br>
dck_list (list): List of <a href="#DCK">DCK</a> objects to work on<br>
<br>
Returns:<br>
returned_dck_list (list): List of <a href="#DCK">DCK</a> objects worked on</tt></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary for instance variables (if defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list of weak references to the object (if defined)</tt></dd>
</dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
<tr><td bgcolor="#eeaa77"><tt> </tt></td><td> </td>
<td width="100%"><dl><dt><a name="-file_dialog_dck"><strong>file_dialog_dck</strong></a>(initialdir='C:\\Users\\nettelstroth\\Documents\\07 Python\\trnpy')</dt><dd><tt>This function presents a file dialog for one or more TRNSYS deck files.<br>
<br>
Args:<br>
None<br>
<br>
Return:<br>
paths (List): List of file paths</tt></dd></dl>
<dl><dt><a name="-file_dialog_parametrics"><strong>file_dialog_parametrics</strong></a>(initialdir='C:\\Users\\nettelstroth\\Documents\\07 Python\\trnpy')</dt><dd><tt>This function presents a file dialog fora parametric table file.<br>
<br>
Args:<br>
None<br>
<br>
Return:<br>
path (str): File path</tt></dd></dl>
<dl><dt><a name="-run_OptionParser"><strong>run_OptionParser</strong></a>(TRNExe, dck_proc)</dt><dd><tt>Define and run the option parser. Set the user input and return the list<br>
of decks. Needs <a href="#TRNExe">TRNExe</a> and dck_proc to get and set the option values.<br>
<br>
Args:<br>
<a href="#TRNExe">TRNExe</a> (<a href="#TRNExe">TRNExe</a> <a href="builtins.html#object">object</a>): An instance of the <a href="#TRNExe">TRNExe</a> class<br>
<br>
dck_proc (<a href="#DCK_processor">DCK_processor</a> <a href="builtins.html#object">object</a>): An instance of the <a href="#DCK_processor">DCK_processor</a> class<br>
<br>
Returns:<br>
dck_list (list): A list of dck objects</tt></dd></dl>
</td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom> <br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
<tr><td bgcolor="#55aa55"><tt> </tt></td><td> </td>
<td width="100%"><strong>regex_result_files_def</strong> = r'Result|\.sum|\.pr.'</td></tr></table>
</body></html>