diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7e5b3df..3f11181 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: unit_tests: strategy: matrix: - os: [ windows-latest, macos-11, ubuntu-22.04 ] # macos-12 is not playing well with Tk + os: [ windows-latest, macos-latest, ubuntu-22.04 ] # macos-12 is not playing well with Tk runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v2 diff --git a/energyplus_regressions/__init__.py b/energyplus_regressions/__init__.py index 17dee55..9090b85 100644 --- a/energyplus_regressions/__init__.py +++ b/energyplus_regressions/__init__.py @@ -1,2 +1,2 @@ NAME = 'energyplus_regressions' -VERSION = '2.0.6' +VERSION = '2.0.7' diff --git a/energyplus_regressions/build_files_to_run.py b/energyplus_regressions/build_files_to_run.py deleted file mode 100755 index 0b050cf..0000000 --- a/energyplus_regressions/build_files_to_run.py +++ /dev/null @@ -1,289 +0,0 @@ -#!/usr/bin/env python -from __future__ import print_function - -import argparse -import csv -import glob -import json -import os -import random -import sys - -# set up some things ahead of time -path = os.path.dirname(__file__) -script_dir = os.path.abspath(path) -slash = os.sep - - -class CsvFileEntry(object): - - def __init__(self, csv_row): - self.filename = csv_row[0] - self.weatherfilename = csv_row[1] - self.has_weather_file = (self.weatherfilename != "") - self.external_interface = (csv_row[2] == "Y") - self.underscore = (self.filename[0] == '_') - - -class FileListBuilderArgs: - """The FileListBuilder class accepts arguments in the form created by the argparse library, as this was originally - called by the command line only. This class provides an alternate way to create those arguments.""" - - def __init__(self): - # establish defaults - self.all = False - self.extinterface = False - self.random = 0 - self.weatherless = True - self.underscore = True - self.verify = None - self.check = False - self.verify = None - self.master_data_file = "full_file_set_details.csv" - - # some special things for GUI - self.gui = True - - -class FileListBuilder(object): - - def __init__(self, _args): - - self.config = _args - - # if the 'all' argument is present, turn on all the rest - if self.config.all: - self.config.extinterface, self.config.underscore, self.config.weatherless = [True, True, True] - - # initialize callbacks to None - self.callback_func_print = None - self.callback_func_init = None - self.callback_func_increment = None - - # initialize other variables to None - self.selected_input_file_set = None - self.input_files_eliminated = None - self.input_files_found_not_listed = None - - def set_callbacks(self, callback_print, callback_init, callback_increment): # pragma: no cover - self.callback_func_print = callback_print - self.callback_func_init = callback_init - self.callback_func_increment = callback_increment - - def build_verified_list(self): - - self.my_print("Starting to build file list") - - # initialize the status flag to True - success = True - - # then wrap the processes inside a try block to trap for any errors - try: - - # create an empty list - self.selected_input_file_set = [] - - # for convenience, count the number of rows first, this should be a cheap operation anyway - with open(self.config.master_data_file) as csvfile: - num_lines_approx = csvfile.read().count('\n') - self.my_init(num_lines_approx + 1) - - # get all rows of data - with open(self.config.master_data_file) as csvfile: - reader = csv.reader(csvfile) - row_num = 0 - for row in reader: - self.my_increment() - row_num += 1 - if row_num == 1: - continue - this_entry = CsvFileEntry(row) - self.selected_input_file_set.append(this_entry) - - # then sort it by filename - self.selected_input_file_set.sort(key=lambda x: x.filename.lower()) - self.my_increment() - - # initialize a list of files that weren't found - self.input_files_eliminated = set() - self.input_files_found_not_listed = set() - - # if we are verifying using input file directories, - if self.config.verify: - - self.my_print("Verifying idf list using directory: %s" % self.config.verify) - - # read in the files in the directory and remove the extensions - files_in_this_dir = self.read_input_files_in_dir(self.config.verify) - files_no_extensions = [os.path.splitext(infile)[0] for infile in files_in_this_dir] - just_filenames = [infile.split(os.sep)[-1] for infile in files_no_extensions] - - # check all files in the main set and see if any are missing - for infile in self.selected_input_file_set: - - # if it is missing add it to the files to be eliminated - if infile.filename not in just_filenames: - # sets only include unique entities - self.input_files_eliminated.add(infile) - - # include a report of files found in the directory not represented in the file list - just_filenames_from_csv = [x.filename for x in self.selected_input_file_set] - for infile in just_filenames: - - # if the file found by globbing is missing from the csv dataset - if infile not in just_filenames_from_csv: - # add it to the report - self.input_files_found_not_listed.add(infile) - - # now prune off files missing in the verification directories - if len(self.input_files_eliminated) > 0: - for i in self.input_files_eliminated: - self.selected_input_file_set.remove(i) - - self.my_print("File list build completed successfully") - - except Exception as this_exception: - self.my_print("An error occurred during file list build") - self.my_print(this_exception) - success = False - - return success, self.selected_input_file_set, self.input_files_eliminated, self.input_files_found_not_listed - - def print_file_list_to_file(self): - - # if we aren't running in the gui, we need to go ahead and down select and write to the output file - if not self.config.gui: - with open(self.config.output_file, 'w') as outfile: - files = [] - for i in self.selected_input_file_set: - if i.has_weather_file: - object_to_add = {'file': i.filename, 'epw': i.weatherfilename} - # print("%s %s" % (i.filename, i.weatherfilename), file=outfile) - else: - object_to_add = {'file': i.filename} - # print("%s" % i.filename, file=outfile) - files.append(object_to_add) - json_object = {'files_to_run': files} - outfile.write(json.dumps(json_object, indent=2)) - self.my_print("File list build complete") - - @staticmethod - def read_input_files_in_dir(directory): - extensions_to_match = ['*.idf', '*.imf'] - files_in_dir = [] - for extension in extensions_to_match: - files_in_dir.extend(glob.glob(directory + os.sep + extension)) - return files_in_dir - - def down_select_idf_list(self): - - idf_list = self.selected_input_file_set - - # now trim off any of the specialties if the switches are false (by default) - if not self.config.extinterface: # only include those without external interface dependencies - idf_list = [idf for idf in idf_list if not idf.external_interface] - if not self.config.weatherless: # only include those that DO have weather files - idf_list = [idf for idf in idf_list if idf.has_weather_file] - if not self.config.underscore: # only include those that don't start with an underscore - idf_list = [idf for idf in idf_list if not idf.underscore] - # do random down selection as necessary: - if self.config.random > 0: - if len(idf_list) <= self.config.random: # just take all of them - pass - else: # down select randomly - indexes_to_take = sorted(random.sample(range(len(idf_list)), self.config.random)) - idf_list = [idf_list[i] for i in indexes_to_take] - # return the trimmed list - self.selected_input_file_set = idf_list - return idf_list - - def my_init(self, num_files): # pragma: no cover - if self.callback_func_init: - self.callback_func_init(num_files) - - def my_increment(self): # pragma: no cover - if self.callback_func_increment: - self.callback_func_increment() - - def my_print(self, msg): # pragma: no cover - if self.callback_func_print: - self.callback_func_print(msg) - else: - print(msg) - - -if __name__ == "__main__": # pragma: no cover - - # parse command line arguments - parser = argparse.ArgumentParser( - description=""" -Create EnergyPlus test file inputs for a specific configuration. Can be executed in 2 ways: - 1: Arguments can be passed from the command line, such as `%s -r 3 -w' .. Most useful for scripting, or - 2: An argument class can be created using the FileListBuilderArgs class and - passed into a FileListBuilder instance .. Most useful for UIs""" % sys.argv[0] - ) - parser.add_argument( - '-a', '--all', action='store_true', - help='Includes all files found in the master, overrides other flags, can still down select with -r' - ) - parser.add_argument('-e', '--extinterface', action='store_true', help='Include external interface test files') - parser.add_argument('-r', '--random', nargs='?', default=0, type=int, metavar='N', - help='Get random selection of files') - parser.add_argument('-w', '--weatherless', action='store_true', - help='Include files that do not have a weather file') - parser.add_argument('-u', '--underscore', action='store_true', help='Include files that start with an underscore') - parser.add_argument( - '-v', '--verify', metavar='', nargs=1, - help='''Performs verification that files exist in a directory. Excludes those that do not. - Argument is a path to a test file directory containing idfs and imfs.''' - ) - args = parser.parse_args() - - # these were originally inputs, but that is really bulky - # they are now hardwired and can be manipulated outside the script if needed - args.master_data_file = os.path.join(script_dir, "full_file_set_details.csv") - args.output_file = os.path.join(script_dir, "files_to_run.json") - - # backup the previous output file if one already exists and then delete it - if os.path.isfile(args.output_file): - b_file = os.path.join(os.path.dirname(args.output_file), "backup_%s" % os.path.basename(args.output_file)) - if os.path.isfile(b_file): - try: - os.remove(b_file) - except Exception as exc: - print( - "An error occurred trying to remove the previous backup output file: %s; aborting..." % b_file - ) - print("Error message: " % exc) - try: - os.rename(args.output_file, b_file) - except Exception as exc: - print( - "An error occurred trying to backup the previous output file: %s; aborting..." % args.output_file - ) - print("Error message: " % exc) - - if args.verify: - args.verify = args.verify[0] # argparse insists on returning a list, even if just 1 - args.check = True - else: - args.check = False - - # for running this as a script, add some dummies: - args.gui = False - - # instantiate the main class to run - this_builder = FileListBuilder(args) - - # The following two calls will actually return values - # In a GUI, we will capture these returns as desired to do further stuff with - # In a script, we will just let the class instance hang on to the values and write out the list file - - # build a base file list verified with any directories requested - this_builder.build_verified_list() - - # down select the idf list based on command line arguments - this_builder.down_select_idf_list() - - # and go ahead and print to the output file - this_builder.print_file_list_to_file() diff --git a/energyplus_regressions/builds/base.py b/energyplus_regressions/builds/base.py index 2142f35..82cce8a 100644 --- a/energyplus_regressions/builds/base.py +++ b/energyplus_regressions/builds/base.py @@ -58,12 +58,13 @@ def get_idfs_in_dir(idf_dir: Path) -> Set[Path]: ] def should_keep(file_path): - should_ignore = False for i in known_ignore_list: if i in str(file_path): - should_ignore = True - break - return not should_ignore + return False + if 'API' in file_path.parts: + # the testfiles/API directory is for Python API calls, we aren't doing that here, yet. + return False + return True filtered_list = filter(should_keep, all_idfs_relative_path) return set(filtered_list) diff --git a/energyplus_regressions/diffs/math_diff.py b/energyplus_regressions/diffs/math_diff.py index a941394..f64f1ab 100755 --- a/energyplus_regressions/diffs/math_diff.py +++ b/energyplus_regressions/diffs/math_diff.py @@ -22,7 +22,7 @@ configuration file math_diff.config customizes absolute and relative difference thresholds for different unit/aggregation pairs, for instance: C,* = 0.1, 0.005 - means that all in fields reported in C (degrees celsius) will be compared with an absolute + means that all in fields reported in C (degrees Celsius) will be compared with an absolute difference tolerance of 0.1 degree C and 0.005 (0.5%) relative difference tolerance. """ @@ -76,26 +76,26 @@ def fill_matrix_holes(mat): """matrix may have blanks. Sometimes the tail end of some rows will not have elements. Make sure all rows have the same length as the first row. Also remove cells if the row is longer than the first row""" - numcols = len(mat[0]) + num_cols = len(mat[0]) for i, row in enumerate(mat[1:]): - morecells = numcols - len(row) - if morecells >= 0: - mat[i + 1] = row + [''] * morecells + more_cells = num_cols - len(row) + if more_cells >= 0: + mat[i + 1] = row + [''] * more_cells else: - mat[i + 1] = mat[i + 1][:morecells] + mat[i + 1] = mat[i + 1][:more_cells] return mat def slicetime(mat): - """return two matrices, one with only time and the other with the rest of the matrice""" + """return two matrices, one with only time and the other with the rest of the matrix""" return [row[0:1] for row in mat], [row[1:] for row in mat] def matrix2hdict(mat): - """from a csv matrix make a dict with column headers as keys. This dict is called 'header dictionary' or hdct""" + """from a csv matrix make a dict with column headers as keys. This dict is called 'header dictionary' or hdict""" this_dict = {} - tmat = mycsv.transpose2d(mat) - for col in tmat: + t_mat = mycsv.transpose2d(mat) + for col in t_mat: if col[0] in this_dict: raise DuplicateHeaderException("There are two columns with the same header name " + str(col[0])) # TODO - DuplicateHeaderException - this has to go into the error file and mini file @@ -105,7 +105,7 @@ def matrix2hdict(mat): def hdict2matrix(order, this_dict): - """convert the header dictionary (as created by matrix2hdct) to a csv matrix held in tmat. + """convert the header dictionary (as created by matrix2hdict) to a csv matrix held in mat. 'order' is the order of the headers in the matrix. (order is needed because keys in a dict have no sort order)""" mat = [] for key in order: @@ -132,7 +132,7 @@ def make_summary_dict(tdict, hdict): for key in hdict.keys(): sdict[key] = {} for key in hdict.keys(): - columnerror = False + column_error = False column = hdict[key] for i, cell in enumerate(column): # make all cells floats cell = str(cell) @@ -142,9 +142,9 @@ def make_summary_dict(tdict, hdict): try: column[i] = float(cell) except ValueError: # pragma: no cover - I don't know how to get here - columnerror = True # Now we can't do any summary calcs for this column + column_error = True # Now we can't do any summary calcs for this column break # get out of this inner loop - if columnerror: # pragma: no cover - I don't know how to get here + if column_error: # pragma: no cover - I don't know how to get here continue # go to next step in this outer loop sdict[key]['count'] = len(column) @@ -218,30 +218,30 @@ def info(line, logfile=None): # print >> sys.stderr, line -def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, err_file, summary_csv): +def math_diff(thresh_dict, input_file_1, input_file_2, abs_diff_file, rel_diff_file, err_file, summary_csv): # Test for existence of input files - if not os.path.exists(inputfile1): - info('unable to open file <%s>' % inputfile1, err_file) - return 'unable to open file <%s>' % inputfile1, 0, 0, 0 - if not os.path.exists(inputfile2): - info('unable to open file <%s>' % inputfile2, err_file) - return 'unable to open file <%s>' % inputfile2, 0, 0, 0 + if not os.path.exists(input_file_1): + info('unable to open file <%s>' % input_file_1, err_file) + return 'unable to open file <%s>' % input_file_1, 0, 0, 0 + if not os.path.exists(input_file_2): + info('unable to open file <%s>' % input_file_2, err_file) + return 'unable to open file <%s>' % input_file_2, 0, 0, 0 # read data out of files try: - mat1 = mycsv.getlist(inputfile1) + mat1 = mycsv.getlist(input_file_1) except IndexError: - return 'malformed or empty csv file: <%s>' % inputfile1, 0, 0, 0 + return 'malformed or empty csv file: <%s>' % input_file_1, 0, 0, 0 if len(mat1) < 2: - info('<%s> has no data' % inputfile1, err_file) - return '<%s> has no data' % inputfile1, 0, 0, 0 + info('<%s> has no data' % input_file_1, err_file) + return '<%s> has no data' % input_file_1, 0, 0, 0 try: - mat2 = mycsv.getlist(inputfile2) + mat2 = mycsv.getlist(input_file_2) except IndexError: - return 'malformed or empty csv file: <%s>' % inputfile2, 0, 0, 0 + return 'malformed or empty csv file: <%s>' % input_file_2, 0, 0, 0 if len(mat2) < 2: - info('<%s> has no data' % inputfile2, err_file) - return '<%s> has no data' % inputfile2, 0, 0, 0 + info('<%s> has no data' % input_file_2, err_file) + return '<%s> has no data' % input_file_2, 0, 0, 0 # clean up the files matrix1 = fill_matrix_holes(mat1) @@ -252,29 +252,29 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, time2, mat2 = slicetime(matrix2) # Not going to compare two files with different time series if time1 != time2: - info('Time series in <%s> and <%s> do not match' % (inputfile1, inputfile2), err_file) + info('Time series in <%s> and <%s> do not match' % (input_file_1, input_file_2), err_file) return 'Time series do not match', 0, 0, 0 # Only going to compare fields that are found in both files - hset1 = set(mat1[0]) - hset2 = set(mat2[0]) - hset = hset1.intersection(hset2) - if len(hset) == 0: - info('Input files <%s> and <%s> have no common fields' % (inputfile1, inputfile2), err_file) + h_set_1 = set(mat1[0]) + h_set_2 = set(mat2[0]) + h_set = h_set_1.intersection(h_set_2) + if len(h_set) == 0: + info('Input files <%s> and <%s> have no common fields' % (input_file_1, input_file_2), err_file) return 'No common fields', 0, 0, 0 # Order will be order in which intersection fields appear in first file - horder = [h for h in mat1[0] if h in hset] + h_order = [h for h in mat1[0] if h in h_set] # Warn about fields that will not be compared - hset_sdiff = hset1.symmetric_difference(hset2) - for h in hset_sdiff: - if h in hset1: + h_set_s_diff = h_set_1.symmetric_difference(h_set_2) + for h in h_set_s_diff: + if h in h_set_1: mycsv.writecsv( [ [ 'Not comparing field %s, which appears in input files <%s>, but not <%s>' % ( - h, inputfile1, inputfile2 + h, input_file_1, input_file_2 ) ] ], @@ -287,8 +287,8 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, [ 'Not comparing field %s, which appears in input files <%s>, but not <%s>' % ( h, - inputfile2, - inputfile1 + input_file_2, + input_file_1 ) ] ], @@ -297,8 +297,8 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, ) # convert time matrix to dictionary (both time matrices should be identical here) - tdict = matrix2hdict(time1) - tkey = list(tdict.keys())[0] + t_dict = matrix2hdict(time1) + t_key = list(t_dict.keys())[0] # convert data matrices to dictionaries hdict1 = matrix2hdict(mat1) @@ -307,12 +307,12 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, # Dictionaries of absolute and relative differences abs_diffs = {} rel_diffs = {} - for key in horder: + for key in h_order: abs_diffs[key] = list(map(abs_diff, hdict1[key], hdict2[key])) rel_diffs[key] = list(map(rel_diff, hdict1[key], hdict2[key])) err_dict = {} - for key in horder: + for key in h_order: err_dict[key] = {} (abs_thresh, rel_thresh) = thresh_dict.lookup(key) @@ -322,7 +322,7 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, err_dict[key]['abs_thresh'] = abs_thresh err_dict[key]['max_abs_diff'] = max_abs_diff err_dict[key]['rel_diff_of_max_abs_diff'] = rel_diffs[key][index_max_abs_diff] - err_dict[key]['time_of_max_abs_diff'] = tdict[tkey][index_max_abs_diff] + err_dict[key]['time_of_max_abs_diff'] = t_dict[t_key][index_max_abs_diff] err_dict[key]['count_of_small_abs_diff'] = sum(1 for x in abs_diffs[key] if 0.0 < x <= abs_thresh) err_dict[key]['count_of_big_abs_diff'] = sum(1 for x in abs_diffs[key] if x > abs_thresh) @@ -332,7 +332,7 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, err_dict[key]['rel_thresh'] = rel_thresh err_dict[key]['max_rel_diff'] = max_rel_diff err_dict[key]['abs_diff_of_max_rel_diff'] = abs_diffs[key][index_max_rel_diff] - err_dict[key]['time_of_max_rel_diff'] = tdict[tkey][index_max_rel_diff] + err_dict[key]['time_of_max_rel_diff'] = t_dict[t_key][index_max_rel_diff] if rel_thresh > 0: err_dict[key]['count_of_small_rel_diff'] = sum(1 for x in rel_diffs[key] if 0.0 < x <= rel_thresh) err_dict[key]['count_of_big_rel_diff'] = sum(1 for x in rel_diffs[key] if x > rel_thresh) @@ -351,8 +351,8 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, err_dict[key]['count_of_small_abs_rel_diff'] = err_dict[key]['count_of_small_abs_diff'] err_dict[key]['count_of_big_abs_rel_diff'] = err_dict[key]['count_of_big_abs_diff'] - num_small = sum(err_dict[key]['count_of_small_abs_rel_diff'] for key in horder) - num_big = sum(err_dict[key]['count_of_big_abs_rel_diff'] for key in horder) + num_small = sum(err_dict[key]['count_of_small_abs_rel_diff'] for key in h_order) + num_big = sum(err_dict[key]['count_of_big_abs_rel_diff'] for key in h_order) diff_type = 'All Equal' if num_big > 0: @@ -360,9 +360,9 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, elif num_small > 0: diff_type = 'Small Diffs' - num_records = len(tdict[tkey]) + num_records = len(t_dict[t_key]) - input_file_path_tokens = inputfile1.split(os.sep) + input_file_path_tokens = input_file_1.split(os.sep) # if it's the first pass, create the file with the header; # also the null-pointer-ish check allows skipping the summary_csv file if the filename is blank @@ -382,53 +382,53 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, return diff_type, num_records, num_big, num_small # Which columns had diffs? - dhorder = [h for h in horder if - err_dict[h]['count_of_small_abs_diff'] > 0 or err_dict[h]['count_of_big_abs_diff'] > 0 or err_dict[h][ - 'count_of_small_rel_diff'] > 0 or err_dict[h]['count_of_big_rel_diff'] > 0] + dh_order = [h for h in h_order if + err_dict[h]['count_of_small_abs_diff'] > 0 or err_dict[h]['count_of_big_abs_diff'] > 0 or err_dict[h][ + 'count_of_small_rel_diff'] > 0 or err_dict[h]['count_of_big_rel_diff'] > 0] # Find the largest overall absolute diff - max_max_abs_diff = max(err_dict[key]['max_abs_diff'] for key in dhorder) - key_of_max_max_abs_diff = [key for key in dhorder if err_dict[key]['max_abs_diff'] == max_max_abs_diff][0] + max_max_abs_diff = max(err_dict[key]['max_abs_diff'] for key in dh_order) + key_of_max_max_abs_diff = [key for key in dh_order if err_dict[key]['max_abs_diff'] == max_max_abs_diff][0] rel_diff_of_max_max_abs_diff = err_dict[key_of_max_max_abs_diff]['rel_diff_of_max_abs_diff'] time_of_max_max_abs_diff = err_dict[key_of_max_max_abs_diff]['time_of_max_abs_diff'] # Find the largest overall relative diff - max_max_rel_diff = max(err_dict[key]['max_rel_diff'] for key in dhorder) - key_of_max_max_rel_diff = [key for key in dhorder if err_dict[key]['max_rel_diff'] == max_max_rel_diff][0] + max_max_rel_diff = max(err_dict[key]['max_rel_diff'] for key in dh_order) + key_of_max_max_rel_diff = [key for key in dh_order if err_dict[key]['max_rel_diff'] == max_max_rel_diff][0] abs_diff_of_max_max_rel_diff = err_dict[key_of_max_max_rel_diff]['abs_diff_of_max_rel_diff'] time_of_max_max_rel_diff = err_dict[key_of_max_max_rel_diff]['time_of_max_rel_diff'] # put the time column back - abs_diffs[tkey] = tdict[tkey] - rel_diffs[tkey] = tdict[tkey] + abs_diffs[t_key] = t_dict[t_key] + rel_diffs[t_key] = t_dict[t_key] # Summarize the input files - summary_dict1 = make_summary_dict(tdict, hdict1) - summary_dict2 = make_summary_dict(tdict, hdict2) + summary_dict1 = make_summary_dict(t_dict, hdict1) + summary_dict2 = make_summary_dict(t_dict, hdict2) # Flatten summaries out to dictionaries of lists rather than dictionaries of dictionaries - summary_dict12 = dict_of_dicts2dict_of_lists(summary_dict1, horder, list(summary_labels)) - summary_dict12[tkey] = [sl + ':' for sl in list(summary_labels)] + summary_dict12 = dict_of_dicts2dict_of_lists(summary_dict1, h_order, list(summary_labels)) + summary_dict12[t_key] = [sl + ':' for sl in list(summary_labels)] - summary_dict22 = dict_of_dicts2dict_of_lists(summary_dict2, horder, list(summary_labels)) - summary_dict22[tkey] = [sl + ':' for sl in list(summary_labels)] + summary_dict22 = dict_of_dicts2dict_of_lists(summary_dict2, h_order, list(summary_labels)) + summary_dict22[t_key] = [sl + ':' for sl in list(summary_labels)] - # Diff the flattend summaries + # Diff the flattened summaries abs_diff_summary_dict = {} rel_diff_summary_dict = {} - for key in dhorder: + for key in dh_order: abs_diff_summary_dict[key] = map(abs_diff, summary_dict12[key], summary_dict22[key]) rel_diff_summary_dict[key] = map(rel_diff, summary_dict12[key], summary_dict22[key]) # Prepend time key to header order list - thorder = [tkey] + horder - tdhorder = [tkey] + dhorder + th_order = [t_key] + h_order + tdh_order = [t_key] + dh_order # Convert the absolute and relative diff dictionaries to matrices and write them to files - abs_diff_mat = hdict2matrix(tdhorder, abs_diffs) + abs_diff_mat = hdict2matrix(tdh_order, abs_diffs) # print("Trying to write to %s " % abs_diff_file) mycsv.writecsv(abs_diff_mat, abs_diff_file) - rel_diff_mat = hdict2matrix(tdhorder, rel_diffs) + rel_diff_mat = hdict2matrix(tdh_order, rel_diffs) mycsv.writecsv(rel_diff_mat, rel_diff_file) # Write the error file header @@ -460,26 +460,26 @@ def math_diff(thresh_dict, inputfile1, inputfile2, abs_diff_file, rel_diff_file, # Convert the error dictionary to a matrix and write to the error # file. Need to convert it from a nested dictionary to a # dictionary of lists first. - err_dict2 = dict_of_dicts2dict_of_lists(err_dict, horder, list(error_labels)) - err_dict2[tkey] = [el + ':' for el in list(error_labels)] + err_dict2 = dict_of_dicts2dict_of_lists(err_dict, h_order, list(error_labels)) + err_dict2[t_key] = [el + ':' for el in list(error_labels)] - err_mat = hdict2matrix(tdhorder, err_dict2) + err_mat = hdict2matrix(tdh_order, err_dict2) mycsv.writecsv([[], []] + err_mat, err_file, 'a') # Convert the summaries to matrices and write them out to the error file - summary_mat1 = hdict2matrix(thorder, summary_dict12) - mycsv.writecsv([[], [], ['Summary of %s' % (inputfile1,)], []] + summary_mat1, err_file, 'a') - summary_mat2 = hdict2matrix(thorder, summary_dict22) - mycsv.writecsv([[], [], ['Summary of %s' % (inputfile2,)], []] + summary_mat2, err_file, 'a') + summary_mat1 = hdict2matrix(th_order, summary_dict12) + mycsv.writecsv([[], [], ['Summary of %s' % (input_file_1,)], []] + summary_mat1, err_file, 'a') + summary_mat2 = hdict2matrix(th_order, summary_dict22) + mycsv.writecsv([[], [], ['Summary of %s' % (input_file_2,)], []] + summary_mat2, err_file, 'a') # Convert the absolute and relative differences of the summaries and write them to the error file - abs_diff_summary_dict[tkey] = [sl + ':' for sl in list(summary_labels)] - abs_diff_summary_mat = hdict2matrix(tdhorder, abs_diff_summary_dict) - mycsv.writecsv([[], [], ['Absolute difference in Summary of %s and Summary of %s' % (inputfile1, inputfile2)], + abs_diff_summary_dict[t_key] = [sl + ':' for sl in list(summary_labels)] + abs_diff_summary_mat = hdict2matrix(tdh_order, abs_diff_summary_dict) + mycsv.writecsv([[], [], ['Absolute difference in Summary of %s and Summary of %s' % (input_file_1, input_file_2)], []] + abs_diff_summary_mat, err_file, 'a') - rel_diff_summary_dict[tkey] = [sl + ':' for sl in list(summary_labels)] - rel_diff_summary_mat = hdict2matrix(tdhorder, rel_diff_summary_dict) - mycsv.writecsv([[], [], ['Relative difference in Summary of %s and Summary of %s' % (inputfile1, inputfile2)], + rel_diff_summary_dict[t_key] = [sl + ':' for sl in list(summary_labels)] + rel_diff_summary_mat = hdict2matrix(tdh_order, rel_diff_summary_dict) + mycsv.writecsv([[], [], ['Relative difference in Summary of %s and Summary of %s' % (input_file_1, input_file_2)], []] + rel_diff_summary_mat, err_file, 'a') return diff_type, num_records, num_big, num_small @@ -497,7 +497,7 @@ def main(argv=None): # pragma: no cover # Test for correct number of arguments prog_name = os.path.basename(sys.argv[0]) if len(args) == 6: - [csv1, csv2, abs_diff_file, rel_diff_file, err_file, csvsummary] = args + [csv1, csv2, abs_diff_file, rel_diff_file, err_file, csv_summary] = args else: info('%s: incorrect operands: Try %s -h for more info' % (prog_name, prog_name)) return -1 @@ -513,7 +513,7 @@ def main(argv=None): # pragma: no cover # Load diffing threshold dictionary thresh_dict = ThreshDict(os.path.join(script_dir, 'math_diff.config')) - math_diff(thresh_dict, csv1, csv2, abs_diff_file, rel_diff_file, err_file, csvsummary) + math_diff(thresh_dict, csv1, csv2, abs_diff_file, rel_diff_file, err_file, csv_summary) return 0 @@ -537,7 +537,7 @@ def main(argv=None): # pragma: no cover # When we compare two files, it is assumed that the headers of the two files will match. # In case the headers do not match mathdiff.py still has to respond in an intelligent way. # -# We have the following four possiblities: +# We have the following four possibilities: # 1. identical headers # file1 = "h2", "h3", "h4" # file2 = "h2", "h3", "h4" @@ -547,13 +547,13 @@ def main(argv=None): # pragma: no cover # 2. shuffled headers # file1 = "h2", "h3", "h4" # file2 = "h3", "h4", "h2" -# the program will unshuffle the columns of file2 to match that of file1 +# the program will un-shuffle the columns of file2 to match that of file1 # output = "h2", "h3", "h4" # output warning = None # 3. renamed headers # file1 = "h2", "h3", "h4" # file2 = "hh3", "hh4", "hh2" -# if both the files have the same number of columns and they don't happen to be shuffled, +# if both the files have the same number of columns, and they don't happen to be shuffled, # the program will assume that the headers in file2 have been renamed # output = "h2", "h3", "h4" # output warning = warning printed to terminal and to error.csv file @@ -600,7 +600,7 @@ def main(argv=None): # pragma: no cover # [' 111', ' 222', ' 444']] # # mat1 is then converted into a dictionary: -# hdict1 = matrix2hdct(mat1) +# hdict1 = matrix2hdict(mat1) # # hdict1 = {' "h2"': [' 1 ', ' 11 ', ' 111'], # ' "h3"': [' 2 ', ' 22 ', ' 222'], @@ -610,7 +610,7 @@ def main(argv=None): # pragma: no cover # - the headers of the columns in the csv file become keys of the dictionary. # - the values of the dictionary are the columns under the header # -# All calculations are done are done using "header dict" data structure +# All calculations are done using "header dict" data structure # the results of the calculations are returned as a "header dict" # the "header dict" is converted to a matrix which is then converted a csv text file # diff --git a/energyplus_regressions/diffs/thresh_dict.py b/energyplus_regressions/diffs/thresh_dict.py index a9ff008..40ec8ef 100755 --- a/energyplus_regressions/diffs/thresh_dict.py +++ b/energyplus_regressions/diffs/thresh_dict.py @@ -89,7 +89,7 @@ def lookup(self, hstr): else: unit = '*' if hstr.find('{}') == -1 and hstr.find('{') > -1: - tokens = [x.strip() for x in re.split(r'[{\}]', hstr) if x.strip() != ''] + tokens = [x.strip() for x in re.split(r'[{}]', hstr) if x.strip() != ''] agg = tokens[1] if len(tokens) > 1 else tokens[0] else: agg = '*' diff --git a/energyplus_regressions/energyplus.py b/energyplus_regressions/energyplus.py index 07f7896..a241932 100755 --- a/energyplus_regressions/energyplus.py +++ b/energyplus_regressions/energyplus.py @@ -163,7 +163,7 @@ def execute_energyplus(e_args: ExecutionArguments): os.environ["REVERSEDD"] = "" os.environ["FULLANNUALRUN"] = "" else: # pragma: no cover - # it feel weird to try to test this path...have to set run_type to something invalid? + # it feels weird to try to test this path...have to set run_type to something invalid? # should we just eliminate this else? pass # do nothing? diff --git a/energyplus_regressions/ep-testsuite.desktop b/energyplus_regressions/ep-testsuite.desktop deleted file mode 100644 index a7d9a37..0000000 --- a/energyplus_regressions/ep-testsuite.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Application -Name=EnergyPlus Regression Tool -Comment=An EnergyPlus test suite utility -Exec={PATH_TO_PYTHON} {RUNNER_SCRIPT} -Icon={ICON_PATH} -Terminal=false -StartupWMClass=energyplus_regression_runner diff --git a/energyplus_regressions/full_file_set_details.csv b/energyplus_regressions/full_file_set_details.csv deleted file mode 100644 index 6b7f243..0000000 --- a/energyplus_regressions/full_file_set_details.csv +++ /dev/null @@ -1,681 +0,0 @@ -Input_file_name_(no_extension),Weather_file_name_(no_extension),External_Interface? -1ZoneDataCenterCRAC_wApproachTemp.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneDataCenterCRAC_wPumpedDXCoolingCoil.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneEvapCooler.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneParameterAspect.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled3SurfaceZone.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledAnnualOutputs.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledCondFDWithVariableKat24C.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledFourAlgorithms.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledResLayers.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledUTF8.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolledWithHysteresisPCM.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled_DD2009.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -1ZoneUncontrolled_DDChanges.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled_FCfactor_Slab_UGWall.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled_OtherEquipmentWithFuel.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled_win_1.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneUncontrolled_win_2.idf,USA_CO_Denver-Stapleton_TMY, -1ZoneWith14ControlledHeat-CoolPanels.idf,USA_CO_Denver-Stapleton_TMY, -2ZoneDataCenterHVAC_wEconomizer.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -4ZoneWithShading_Simple_1.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -4ZoneWithShading_Simple_2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledConvCoef.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledConvCoefPIU.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledDemandLimiting.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledDemandLimiting_FixedRateVentilation.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledDemandLimiting_ReductionRatioVentilation.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledWithCoupledInGradeSlab.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledWithDOASAirLoop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooledWithSlab.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_UniformLoading.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_AirBoundaries.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_AirBoundaries_Daylighting.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_VAVBoxMinAirFlowTurnDown.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_VRPSizing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_VRPSizing_MaxZd.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_ZoneAirMassFlowBalance.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAirCooled_ZoneAirMassFlowBalance_Pressurized.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneAutoDXVAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneBoilerOutsideAirReset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneBranchSupplyPumps.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCAV_MaxTemp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCAV_MaxTemp_JSON_Outputs,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCAVtoVAVWarmestTempFlow.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCoolBeam.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -5ZoneCoolingPanelBaseboard.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCoolingPanelBaseboardAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCoolingPanelBaseboardTotalLoad.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCoolingPanelBaseboardVarOff.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneCostEst.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDDCycOnAny.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDDCycOnOne.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDesignInputCoolingCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDetailedIceStorage.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDetailedIceStorage2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDetailedIceStorageCubicLinear.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneDetailedIceStorageSimpleCtrl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneEconomicsTariffAndLifeCycleCosts.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneElectricBaseboard.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneEndUses.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneEngChill.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneFPIU.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneFanCoilDOASCool.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneFanCoilDOAS_ERVOnAirLoopMainBranch.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneFanCoilDOAS_HumidifierOnOASystem.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneGeometryTransform.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneIceStorage.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneNightVent1.idf,USA_CA_Fresno.Air.Terminal.723890_TMY3, -5ZoneNightVent2.idf,USA_CA_Fresno.Air.Terminal.723890_TMY3, -5ZoneNightVent3.idf,USA_CA_Fresno.Air.Terminal.723890_TMY3, -5ZoneReturnFan.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneSteamBaseboard.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneSupRetPlenRAB.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneSupRetPlenVSATU.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneSwimmingPool.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneSwimmingPoolZoneMultipliers.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneTDV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneVAV-ChilledWaterStorage-Mixed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneVAV-ChilledWaterStorage-Mixed_DCV_MaxZd.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneVAV-ChilledWaterStorage-Mixed_DCV_MultiPath.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneVAV-ChilledWaterStorage-Stratified.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneVAV-Pri-SecLoop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWLHPPlantLoopTower.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestMultDDSizBypass.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestMultDDSizOnOff.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestMultDDSizVAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestMultDDSizVT.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestVFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWarmestVFD_FCMAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_Baseboard.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_BaseboardScalableSizing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_GasFiredSteamHumidifier.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_HighRHControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_MultizoneAverageRHControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterCooled_MultizoneMinMaxRHControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterLoopHeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5ZoneWaterSystems.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5Zone_IdealLoadsAirSystems_ReturnPlenum.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5Zone_Transformer.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5Zone_Unitary_HXAssistedCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5Zone_Unitary_VSDesuperheatWaterHeater.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -5Zone_Unitary_VSDesuperheater.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASIHPMixedTank.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AbsorptionChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ActiveTrombeWall.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AdaptiveThermostatASH55_5Zone_Miami.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -AirCooledElectricChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirEconomizerFaults_RefBldgLargeOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirEconomizerWithMaxMinOAFractions.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork3zVent.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork3zVentAutoWPC.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetworkAdvanced_SingleSided_NV.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -AirflowNetworkOccupantVentilationControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_Attic_Duct.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiAirLoops.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_House.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_House_FanModel.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_House_OvercoolDehumid.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -AirflowNetwork_MultiZone_House_TwoSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_LocalNode.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_SmallOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_SmallOffice_CoilHXAssistedDX.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -AirflowNetwork_MultiZone_SmallOffice_GenericContam.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_SmallOffice_HeatRecoveryHXSL.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_MultiZone_SmallOffice_VAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_Multizone_HorizontalOpening.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_PressureControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_Simple_House.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowNetwork_Simple_SmallOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowWindowsAndBetweenGlassBlinds.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -AirflowWindowsAndBetweenGlassShades.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_ApartmentHighRise_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_ApartmentMidRise_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_Hospital_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_HotelLarge_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_HotelSmall_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_OfficeLarge_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_OfficeMedium_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_OfficeSmall_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_OutPatientHealthCare_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_RestaurantFastFood_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_RestaurantSitDown_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_RetailStandalone_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_RetailStripmall_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_SchoolPrimary_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_SchoolSecondary_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ASHRAE9012016_Warehouse_Denver.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -BaseBoardElectric.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CVRhMinHum.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CentralChillerHeaterSystem_Cooling_Heating.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CentralChillerHeaterSystem_Simultaneous_Cooling_Heating.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ChangeoverBypassVAV.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -ChangeoverBypassVAV_AirToAir.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -ChangeoverBypassVAV_AirToAirHeatPump.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -ChangeoverBypassVAV_MaxTemp.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -CarrollMRT-RefBldgLargeOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ChillerPartLoadCurve_RefBldgLargeOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_Daylighting_SouthVB45deg.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_Daylighting_SouthVerticalVB45deg.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_MeasuredDeflectionAndShading.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_SchedSurfGains.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_SingleZone_Deflection.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_SingleZone_DoubleClearAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_SingleZone_Vacuum.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CmplxGlz_SmOff_IntExtShading.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoilWaterDesuperheating.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -CommonPipe_Pri-Sec.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CompSetPtControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CondFD1ZonePurchAirAutoSizeWithPCM.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ConstSpeedBranchPumpExercise.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Convection.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ConvectionAdaptiveSmallOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingCoilFreezingPrevention.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerDryBulbRangeOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerNomCap.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerRHRangeOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerWetBulbRangeOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerWithDBDeltaTempOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTowerWithWBDeltaTempOp.idf,USA_FL_Tampa.Intl.AP.722110_TMY3, -CoolingTower_FluidBypass.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_MerkelVariableSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_SingleSpeed_MultiCell.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_TwoSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_TwoSpeed_CondEntTempReset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_TwoSpeed_MultiCell.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed_CondEntTempReset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed_CondEntTempReset_MultipleTowers.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed_IdealCondEntTempSetpoint.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed_IdealCondEntTempSetpoint_MultipleTowers.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CoolingTower_VariableSpeed_MultiCell.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CooltowerSimpleTest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CooltowerSimpleTestwithVentilation.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -CrossVent_1Zone_AirflowNetwork.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -CrossVent_1Zone_AirflowNetwork_with2CrossflowJets.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -CustomSolarVisibleSpectrum_RefBldgSmallOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DDAutoSize.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DElight-Detailed-Comparison.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DElightCFSLightShelf.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DElightCFSWindow.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOASDXCOIL_wADPBFMethod.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOASDXCOIL_wADPBFMethod_NoReturnPath.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOASDualDuctSchool.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOAToFanCoilInlet.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOAToFanCoilSupply.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOAToPTAC.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOAToPTHP.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOAToUnitVentilator.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOAToUnitarySystem.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOAToVRF.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DOAToWaterToAirHPInlet.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DOAToWaterToAirHPSupply.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DXCoilSystemAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DaylightingDeviceShelf.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DaylightingDeviceTubular.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DesiccantCVRh.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DesiccantCVRhZoneRHCtrl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DesiccantCVRhZoneRHCtrl_AddedAutosize.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DesiccantDehumidifierWithAirToAirCoil.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DesiccantDehumidifierWithCompanionCoil.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -DirectIndirectEvapCoolers.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -DirectIndirectEvapCoolersVSAS.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -DisplacementVent_1ZoneOffice.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -DisplacementVent_Nat_AirflowNetwork.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -DisplacementVent_Nat_AirflowNetwork_AdaptiveComfort.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -DisplacementVent_VAV.idf,USA_CA_San.Francisco.Intl.AP.724940_TMY3, -DualDuctConstVolDamper.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DualDuctConstVolGasHC.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DualDuctVarVolDamper.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DualDuctWaterCoils.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -DynamicClothing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMPD5ZoneWaterCooled_HighRHControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSAirflowNetworkOpeningControlByHumidity.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSConstantVolumePurchasedAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSCurveOverride_PackagedTerminalHeatPump.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -EMSCustomOutputVariable.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSCustomSchedule.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSDemandManager_LargeOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSDiscreteAirSystemSizes.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSPlantLoopOverrideControl.idf,USA_FL_Orlando.Intl.AP.722050_TMY3, -EMSPlantOperation_largeOff.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSReplaceTraditionalManagers_LargeOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSTestMathAndKill.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSThermochromicWindow.idf,USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3, -EMSUserDefined5ZoneAirCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSUserDefinedWindACAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EMSWindowShadeControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EarthTubeSimpleTest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EcoroofOrlando.idf,USA_FL_Orlando.Intl.AP.722050_TMY3, -ElectricChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ElectricEIRChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ElectricEIRChillerHeatRecoveryAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EngineChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EquivalentLayerWindow.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EvaporativeFluidCooler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -EvaporativeFluidCooler_TwoSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ExhFiredAbsorptionChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ExteriorLightsAndEq.idf,USA_CO_Denver-Stapleton_TMY, -FanCoilAutoSize.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FanCoilAutoSizeScalableSizing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FanCoilAutoSize_MultiSpeedFan.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FanCoil_HybridVent_VentSch.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_ChillerSWTSensorOffset_RefBldgLargeOfficeNew2004.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_CoilSATSensorOffset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_CondenserSWTSensorOffset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_FoulingAirFilter_RefBldgMediumOfficeNew2004.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_FoulingChillerBoiler_RefBldgLargeOfficeNew2004.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_FoulingCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_FoulingCoolingTower.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Fault_FoulingEvapCooler_StripMallZoneEvapCooler.idf,USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3, -Fault_HumidistatOffset_Supermarket.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -Fault_HumidistatOffset_ThermostatOffset_Supermarket.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -Fault_ThermostatOffset_RefBldgMediumOfficeNew2004.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Flr_Rf_8Sides.idf,USA_CO_Denver-Stapleton_TMY, -FluidCooler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FluidCoolerTwoSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FourPipeBeamLargeOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FreeCoolingChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Furnace.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FurnaceFuelOil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FurnacePLRHeatingCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FurnaceWithDXSystem.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -FurnaceWithDXSystemComfortControl.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -FurnaceWithDXSystemRHcontrol.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -FurnaceWithDXSystemRHcontrol_cyclingfan.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -FurnaceWithDXSystem_CoolingHXAssisted.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -GSHP-GLHE-CalcGFunctions.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GSHP-GLHE.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GSHP-Slinky.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GSHPSimple-GLHE.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GasTurbChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GasTurbChillerHeatRecoveryAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Generator_PVWatts.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -Generators.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Generators_Transformer.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GeneratorswithPV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GeneratorwithWindTurbine.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -GeometryTest.idf,USA_CO_Colorado.Springs-Peterson.Field.724660_TMY3, -GroundTempOSCCompactSched.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HPAirToAir_wSolarCollectorHWCoil.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HP_wICSSolarCollector.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HVACStandAloneERV_Economizer.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneBaseboardHeat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneConstantVolumeChillerBoiler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneDualDuct.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneFanCoil-DOAS.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneFanCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneFurnaceDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZonePTAC-DOAS.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZonePTAC.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZonePTHP.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZonePackagedVAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZonePurchAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneUnitaryHeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneUnitarySystem.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneVAVFanPowered.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneVAVWaterCooled-ObjectReference.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneVAVWaterCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneVRF.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HVACTemplate-5ZoneWaterToAirHeatPumpTowerBoiler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeaderedPumpsConSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeaderedPumpsVarSpeed.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpAirToAirWithRHcontrol.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HeatPumpAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpCycFanWithEcono.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpIAQP_DCV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpIAQP_GenericContamControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpProportionalControl_DCV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpProportionalControl_DCVDesignRate.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpSecondaryCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpSimpleDCV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpVRP_DCV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpVSAS.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpWaterHeater.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HeatPumpWaterHeaterStratified.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HeatPumpWaterToAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpWaterToAirEquationFit.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpWaterToAirWithAntifreezeAndLatentModel.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpWaterToAirWithAntifreezeAndLatentModel2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatPumpWaterToAirWithRHControl.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HeatPumpWaterToAirEquationFit_WaterHeatingDesuperheater_StratifiedTank.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -HeatPumpwithBiquadraticCurves.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatRecoveryElectricChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatRecoveryPlantLoop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatRecoveryPlantLoopAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HeatRecoverywithStorageTank.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HospitalBaseline.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HospitalBaselineReheatReportEMS.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HospitalLowEnergy.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -House-2FurnaceAC-SequentialLoad.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -House-2FurnaceAC-SequentialUniformPLR.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -House-2FurnaceAC-UniformLoad.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -House-2FurnaceAC-UniformPLR.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HybridVentilationControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HybridVentilationControlGlobalSimple.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -HybridZoneModel.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -IceStorage-Parallel.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -IceStorage-Series-ChillerDownstream.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -IceStorage-Series-ChillerUpstream.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -IndEvapCoolerRTUoffice.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -IndirectAbsorptionChiller.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -LBuilding-G000.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LBuilding-G090.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LBuilding-G180.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LBuilding-G270.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LBuildingAppGRotPar.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LgOffVAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LgOffVAVusingBasement.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LookupTables.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -LrgOff_GridStorageDemandLeveling.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LrgOff_GridStorageEMSSmoothing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -LrgOff_GridStorageScheduled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MicroCogeneration.idf,USA_NJ_Newark.Intl.AP.725020_TMY3, -Minimal.idf,USA_CO_Denver-Stapleton_TMY, -MovableExtInsulationSimple.idf,USA_CO_Denver-Stapleton_TMY, -MovableIntInsulationLights.idf,USA_CO_Denver-Stapleton_TMY, -MovableIntInsulationLightsLowE.idf,USA_CO_Denver-Stapleton_TMY, -MovableIntInsulationSimple.idf,USA_CO_Denver-Stapleton_TMY, -MultiSpeedACFurnace.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MultiSpeedHP_StagedThermostat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MultiSpeedHeatPump_DirectSolution.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MultiSpeedHeatPump_MultiSolvers.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MultiStory.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -MultispeedHeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Mundt_System_Always_On.idf,USA_FL_Tampa.Intl.AP.722110_TMY3, -Mundt_System_On_During_the_Day.idf,USA_FL_Tampa.Intl.AP.722110_TMY3, -OptimalStart_RefBldgLargeOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -OutdoorAirUnit.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -OutdoorAirUnitwithAirloopHVAC.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PIUAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PackagedTerminalAirConditioner.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -PackagedTerminalAirConditionerVSAS.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -PackagedTerminalHeatPump.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -PackagedTerminalHeatPumpVSAS.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -ParametricInsulation-5ZoneAirCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PassiveTrombeWall.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PipeHeatTransfer_Outair.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PipeHeatTransfer_Schedule.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PipeHeatTransfer_Underground.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PipeHeatTransfer_Zone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PipingSystem_Underground_FHX.idf,USA_CO_Denver-Stapleton_TMY, -PipingSystem_Underground_TwoPipe.idf,USA_CO_Denver-Stapleton_TMY, -PipingSystem_Underground_TwoPipe_FD_GroundTemps.idf,USA_CO_Denver-Stapleton_TMY, -PipingSystem_Underground_TwoPipe_Xing_GroundTemps.idf,USA_CO_Denver-Stapleton_TMY, -PlantApplicationsGuide_Example1.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantApplicationsGuide_Example2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantApplicationsGuide_Example3.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantComponentTemperatureSource.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantHorizontalGroundHX.idf,USA_CO_Denver-Stapleton_TMY, -PlantLoadProfile.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoadProfileCoolingReturnReset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoadProfileCoolingReturnResetLookup.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoadProfile_AutosizedDistrictHeating.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopChainCooling.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopChainDeadband.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopChainDualDeadband.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopChainHeating.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopHeatPump_EIR_AirSource.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantLoopHeatPump_EIR_WaterSource.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantPressureDrop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantPressure_PumpCurve.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlantPressure_VFD_Scheduled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlateHeatExchanger.idf,USA_FL_Tampa.Intl.AP.722110_TMY3, -Plenum.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PlenumwithRetAirHeatGain.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PondGroundHeatExchanger.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -PurchAirTables.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirTables_SQL.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirTables_wAnnual.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWindowBlind.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWindowBlind_BlockBeamSolar.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWithDaylighting.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWithDaylightingAndShadeControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWithDaylightingAngleFac.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PurchAirWithDoubleFacadeDaylighting.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginAirflowNetworkOpeningControlByHumidity.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginConstantVolumePurchasedAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginCurveOverride_PackagedTerminalHeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginCustomOutputVariable.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginCustomSchedule.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginCustomTrendVariable.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginDemandManager_LargeOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginDiscreteAirSystemSizes.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginLrgOff_GridStorageSmoothing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginPlantLoopOverrideControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginPlantOperation_largeOff.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginReplaceTraditionalManagers_LargeOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginTestMathAndKill.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginThermochromicWindow.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginUserDefined5ZoneAirCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginUserDefinedWindACAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -PythonPluginWindowShadeControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -QTFtest.idf,USA_CO_Denver-Stapleton_TMY,,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadHiTempElecTermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadHiTempGasCtrlOpt.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadHiTempGasTermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoHydrHeatCoolAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoHydrHeatCoolAutoCondFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempCFloHeatCool.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempCFloHeatCoolCondFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempCFloHeatCool_AddedAutosizing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempCFloTermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempElecTermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempElecTermReheatCondFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrCoolTower.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrCoolTowerCondFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrCtrlOpt.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrCtrlOpt2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrHeatCool.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrHeatCool2D.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrHeatCoolDry.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrHeatCoolDryCondFD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrInterMulti.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrMulti10.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RadLoTempHydrTermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgFullServiceRestaurantNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgHospitalNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgLargeHotelNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgLargeOfficeNew2004_Chicago-ReturnReset.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgLargeOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgMediumOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgMediumOfficeNew2004_Chicago_JSON_Outputs.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgMidriseApartmentNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgOutPatientNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgPrimarySchoolNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgQuickServiceRestaurantNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgSecondarySchoolNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgSmallHotelNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgSmallOfficeNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgStand-aloneRetailNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgStripMallNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgSuperMarketNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefBldgWarehouseNew2004_Chicago.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefMedOffVAVAllDefVRP.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ReflectiveAdjacentBuilding.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RefrigeratedWarehouse.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ReliefIndEvapCoolerRTUoffice.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -ReportDaylightFactors.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RetailPackagedTESCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -RoomAirflowNetwork.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SeriesActiveBranch.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ShopWithPVandBattery.idf,USA_OK_Oklahoma.City-Will.Rogers.World.AP.723530_TMY3, -ShopWithPVandStorage.idf,USA_OK_Oklahoma.City-Will.Rogers.World.AP.723530_TMY3, -ShopWithSimplePVT.idf,USA_OK_Oklahoma.City-Will.Rogers.World.AP.723530_TMY3, -SingleFamilyHouse_TwoSpeed_CutoutTemperature.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SingleFamilyHouse_TwoSpeed_ZoneAirBalance.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SmOffPSZ-MultiModeDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SmOffPSZ.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SmOffPSZ_OnOffStagedControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SolarCollectorFlatPlateWater.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SolarShadingTest.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTestGPU.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTest_DisableSelfShading.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTest_DisableSelfShadingGroup.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTest_ExternalFraction.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTest_ImportedShading.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SolarShadingTest_SQL.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SpectralAngularOpticalProperties_TableData.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -StackedZonesWithInterzoneIRTLayers.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SteamSystemAutoSize.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -StormWindow.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -StripMallZoneEvapCooler.idf,USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3, -StripMallZoneEvapCoolerAutosized.idf,USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3, -SuperMarketDetailed_DesuperHeatingCoil.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SuperMarket_DesuperHeatingCoil.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SuperMarket_DetailedEvapCondenser.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SuperMarket_DetailedWaterCondenser.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SuperMarket_EvapCondenser.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SuperMarket_SharedEvapCondenser.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SuperMarket_WaterCondenser.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -Supermarket.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupermarketSecondary.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupermarketSubCoolersVariableSuction.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupermarketTranscriticalCO2.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupermarketTwoStageFlashIntercooler.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupermarketTwoStageShellCoilIntercooler.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -Supermarket_CascadeCond.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -Supermarket_Detailed.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -Supermarket_SharedAirCondenser.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -SupplyPlenumVAV.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SurfaceGroundHeatExchanger.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SurfaceHeatSourceTerm_RefBldgSmallOfficeNew2004.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -SurfacePropTest_SurfLWR.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SurfaceTest.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -SurfaceZonePropTest_LocalEnv.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -TRHConstFlowChillerOneBranch.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TRHEvapCoolerOAStaged.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -TRHEvapCoolerOAStagedWetCoil.idf,USA_AZ_Phoenix-Sky.Harbor.Intl.AP.722780_TMY3, -TermRHDXSystem.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermRHGasElecCoils.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermReheatPri-SecLoop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermReheatScheduledPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermReheatSurfTC.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermReheatZoneExh.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermRhDualSetpointWithDB.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermRhGenericOAHeatRecMinExh.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermRhGenericOAHeatRecPreheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TermRhSingleHeatCoolNoDB.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ThermalChimneyTest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ThermochromicWindow.idf,USA_NV_Las.Vegas-McCarran.Intl.AP.723860_TMY3, -TransparentInsulationSimple.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -TranspiredCollectors.idf,USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3, -TwoWayCommonPipe_Pri-Sec.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitHeater.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitHeaterAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitHeaterGasElec.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitVent5Zone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitVent5ZoneAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitVent5ZoneFixedOANoCoilOpt.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitaryHybridAC_DedicatedOutsideAir.idf,USA_CO_Denver-Stapleton_TMY, -UnitarySystem_5ZoneWaterLoopHeatPump.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_DXCoilSystemAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_FurnaceWithDXSystemRHcontrol.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -UnitarySystem_HeatPumpAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_MultiSpeedCoils_SingleMode.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_VSHeatPumpWaterToAirEquationFit.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_WaterCoils_wMultiSpeedFan.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_MultiSpeedDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_SingleSpeedDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_TwoSpeedDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_TwoStageDX.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_TwoStageDXWithHumidityControl.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UnitarySystem_VSCoolingCoil.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UserDefinedRoomAirPatterns.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -UserInputViewFactorFile-LshapedZone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VariableRefrigerantFlow_FluidTCtrl_wSuppHeater_5Zone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VariableRefrigerantFlow_wSuppHeater_5Zone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctConstFlowBoiler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctReheatBaseboard.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctReheatNoReheat.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctReheat_DualMax.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctReheat_MaxSAT_ReverseActing.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VAVSingleDuctVarFlowBoiler.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VSDXCoilSystemAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VSHeatPumpWaterHeater.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VSHeatPumpWaterToAirEquationFit.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VSHeatPumpWaterToAirWithRHControl.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VSWaterHeaterHeatPumpStratifiedTank.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VariableRefrigerantFlow_5Zone.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VariableRefrigerantFlow_5Zone_wAirloop.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VariableRefrigerantFlow_FluidTCtrl_5Zone.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VariableRefrigerantFlow_FluidTCtrl_HR_5Zone.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -VaryingLocationAndOrientation.idf,USA_CO_Denver-Stapleton_TMY, -VentilatedSlab.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VentilatedSlab_SeriesSlabs.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -VentilationSimpleTest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WCE_Diffuse_Shade.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WCE_DoubleClear_BSDF.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WCE_Interior_VB_-45_deg.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WWHPSimpleAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WaterHeaterDHWPlantLoop.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WaterHeaterHeatPumpStratifiedTank.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WaterHeaterHeatPumpWrappedCondenser.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -WaterHeaterStandAlone.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WaterSideEconomizer_Integrated.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WaterSideEconomizer_NonIntegrated.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WindACAirtoAir.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WindACAuto.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -WindACRHControl.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -WindowTests.idf,USA_CO_Denver-Stapleton_TMY, -WindowTestsSimple.idf,USA_CO_Denver-Stapleton_TMY, -ZoneCoupledGroundHTBasement.idf,USA_CO_Denver-Stapleton_TMY, -ZoneCoupledGroundHTSlabInGrade.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ZoneCoupledGroundHTSlabOnGrade.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ZoneCoupledKivaBasement.idf,USA_CO_Denver-Stapleton_TMY, -ZoneCoupledKivaConvection.idf,USA_CO_Denver-Stapleton_TMY, -ZoneCoupledKivaRefBldgMediumOffice.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ZoneCoupledKivaSlab.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -ZoneCoupledKivaWalkoutBasement.idf,USA_CO_Denver-Stapleton_TMY, -ZoneSysAvailManager.idf,USA_CO_Denver-Stapleton_TMY, -ZoneVSWSHP_wDOAS.idf,USA_CO_Denver-Stapleton_TMY, -ZoneWSHP_wDOAS.idf,USA_CO_Denver-Stapleton_TMY, -_1ZoneUncontrolled_Feb29.idf,USA_CO_Denver-Stapleton_TMY, -_1ZoneUncontrolled_SineOSC.idf,USA_CO_Denver-Stapleton_TMY, -_1ZoneUncontrolled_customrange.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_1a-Long0.0.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_5ZoneAirCooled_annual.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_5ZoneAirCooled_LeapYear_annual.idf,MadeUpLeapYear, -_5ZoneEvapCooled.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_AllOffOpScheme.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_BranchPumpsWithCommonPipe.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_CTFTestsPart1.idf,USA_CO_Denver-Stapleton_TMY, -_CTFTestsPart2.idf,USA_CO_Denver-Stapleton_TMY, -_ConvCoefftest.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_CoolingTowerDewPointRangeOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_CoolingTowerWithDPDeltaTempOp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_DOASDXCOIL_wUserSHRMethod.idf,USA_FL_Miami.Intl.AP.722020_TMY3, -_DemandVentilationFixedRateAndHighPriority.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_DemandVentilationReductionRatioAndHighPriority.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_DemandVentilationReductionRatioAndLowPriority.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_DualDuctConstVolDamperMultizoneAverageSetPointManager.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_ElectricREformulatedEIRChiller.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_ExternalInterface-actuator.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_ExternalInterface-functionalmockupunit-to-actuator.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_ExternalInterface-functionalmockupunit-to-schedule.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_ExternalInterface-functionalmockupunit-to-variable.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_ExternalInterface-schedule.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_ExternalInterface-variable.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3,Y -_FanCoilHybridVentAFN.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_FollowSysNodeTemp.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_FuelCellTest200.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_HybridVentilationControlGlobalAN.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_HybridVentilationControl_MinTime.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_MaterialTest.idf,USA_CO_Denver-Stapleton_TMY, -_MicroCHPTest301.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_MultiSpeedACElecFurnace.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_PurchAirWindowBlind2.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_PurchAirWindowBlind3.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_PurchAirWindowBlind4.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_SingleZoneTestCTFTwoDD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_SingleZoneTestCondFDTwoDD.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -_SmallOffice_Dulles.idf,USA_VA_Sterling-Washington.Dulles.Intl.AP.724030_TMY3, -_VAVSingleDuctConstFlowBoiler_otherfuel.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, -gasAbsorptionChillerHeater.idf,USA_IL_Chicago-OHare.Intl.AP.725300_TMY3, diff --git a/energyplus_regressions/runtests.py b/energyplus_regressions/runtests.py index 5635541..4988c6f 100755 --- a/energyplus_regressions/runtests.py +++ b/energyplus_regressions/runtests.py @@ -501,7 +501,7 @@ def both_files_exist(base_path_a, base_path_b, common_relative_path): @staticmethod def diff_perf_log(file_a, file_b, diff_file): # will do a pretty simple CSV text token comparison, no numeric comparison, and omit some certain patterns - tokens_to_skip = [1, 2, 30, 31] + tokens_to_skip = [1, 2, 27, 28, 30, 31] with io.open(file_a, encoding='utf-8') as f_txt_1: txt1 = f_txt_1.readlines() with io.open(file_b, encoding='utf-8') as f_txt_2: diff --git a/energyplus_regressions/tests/builds/test_base.py b/energyplus_regressions/tests/builds/test_base.py index 394e11c..57403f8 100644 --- a/energyplus_regressions/tests/builds/test_base.py +++ b/energyplus_regressions/tests/builds/test_base.py @@ -74,5 +74,8 @@ def test_get_idfs(self): f.write('ha') # ext interface as FMU with open(os.path.join(temp_idf_dir, 'HVAC3ZoneGeometry.imf'), 'w') as f: f.write('ha') # macro resource file + os.makedirs(os.path.join(temp_idf_dir, 'API')) + with open(os.path.join(temp_idf_dir, 'API', 'API_TestFile.idf'), 'w') as f: + f.write('ha') # API called input file that we skip # TODO: Modify the test to expect relevant IMF files as well and fix the function self.assertEqual(3, len(self.base_build.get_idfs_in_dir(temp_idf_dir))) diff --git a/energyplus_regressions/tests/diffs/tbl_resources/eplustbl_with_duplicate_table_name.htm b/energyplus_regressions/tests/diffs/tbl_resources/eplustbl_with_duplicate_table_name.htm new file mode 100644 index 0000000..13002b9 --- /dev/null +++ b/energyplus_regressions/tests/diffs/tbl_resources/eplustbl_with_duplicate_table_name.htm @@ -0,0 +1,51 @@ + + + +

+DX Cooling Coil AHRI 2023 Standard Rating Information

+ + + + + + + + + + + + + + + + + + + + +
EER2 {Btu/W-h}SEER2 User {Btu/W-h}SEER2 Standard {Btu/W-h}IEER 2022 {Btu/W-h}
9.119.689.429.6
8.569.338.778.7
+

+DX Cooling Coil AHRI 2023 Standard Rating Information

+ + + + + + + + + + + + + + + + + + + + +
EER2 {Btu/W-h}SEER2 {Btu/W-h}SEER2 Standard {Btu/W-h}IEER {Btu/W-h}
9.119.689.429.6
8.569.338.778.7
+ + diff --git a/energyplus_regressions/tests/diffs/test_table_diff.py b/energyplus_regressions/tests/diffs/test_table_diff.py index 86cfdf1..d517219 100644 --- a/energyplus_regressions/tests/diffs/test_table_diff.py +++ b/energyplus_regressions/tests/diffs/test_table_diff.py @@ -447,7 +447,30 @@ def test_catching_object_name_diff(self): self.assertEqual(0, response[2]) # big diffs self.assertEqual(0, response[3]) # small diffs self.assertEqual(374, response[4]) # equals - self.assertEqual(10, response[5]) # string diffs # There are indeed string diffs + self.assertEqual(10, response[5]) # string diffs self.assertEqual(0, response[6]) # size errors self.assertEqual(0, response[7]) # in file 2 but not in file 1 self.assertEqual(0, response[8]) # in file 1 but not in file 2 + + def test_odd_column_heading_mismatch_diff(self): + # The eplustbl output has two tables with duplicate names but different column header data + # which is causing diffs. Just use the same file twice here since the issue isn't actually + # between the two files, but rather an oddity inside table_diff for a single file + response = table_diff( + self.thresh_dict, + os.path.join(self.diff_files_dir, 'eplustbl_with_duplicate_table_name.htm'), + os.path.join(self.diff_files_dir, 'eplustbl_with_duplicate_table_name.htm'), + os.path.join(self.temp_output_dir, 'abs_diff.htm'), + os.path.join(self.temp_output_dir, 'rel_diff.htm'), + os.path.join(self.temp_output_dir, 'math_diff.log'), + os.path.join(self.temp_output_dir, 'summary.htm'), + ) + self.assertEqual('', response[0]) # diff status + self.assertEqual(2, response[1]) # count_of_tables # TODO: Should we count it as 2? + self.assertEqual(5, response[2]) # big diffs WHY + self.assertEqual(0, response[3]) # small diffs + self.assertEqual(12, response[4]) # equals + self.assertEqual(1, response[5]) # string diffs # TODO: What should this be? + self.assertEqual(1, response[6]) # size errors + self.assertEqual(0, response[7]) # in file 2 but not in file 1 + self.assertEqual(0, response[8]) # in file 1 but not in file 2 diff --git a/energyplus_regressions/tests/test_build_files_to_run.py b/energyplus_regressions/tests/test_build_files_to_run.py deleted file mode 100644 index 802e0bb..0000000 --- a/energyplus_regressions/tests/test_build_files_to_run.py +++ /dev/null @@ -1,238 +0,0 @@ -import json -import os -import tempfile -import unittest - -from energyplus_regressions.build_files_to_run import CsvFileEntry, FileListBuilder, FileListBuilderArgs - - -class TestCsvFileEntry(unittest.TestCase): - - def test_construction_full_line(self): - row_of_data = ['_filename', 'weather.epw', 'Y'] - c = CsvFileEntry(row_of_data) - self.assertTrue(c.has_weather_file) - self.assertTrue(c.external_interface) - self.assertTrue(c.underscore) - - def test_construction_regular_file(self): - row_of_data = ['filename', 'weather.epw', 'Y'] - c = CsvFileEntry(row_of_data) - self.assertTrue(c.has_weather_file) - self.assertTrue(c.external_interface) - self.assertFalse(c.underscore) - - def test_construction_not_ext_int(self): - row_of_data = ['_filename', 'weather.epw', ''] - c = CsvFileEntry(row_of_data) - self.assertTrue(c.has_weather_file) - self.assertFalse(c.external_interface) - self.assertTrue(c.underscore) - - def test_construction_missing_weather(self): - row_of_data = ['_filename', '', 'Y'] - c = CsvFileEntry(row_of_data) - self.assertFalse(c.has_weather_file) - self.assertTrue(c.external_interface) - self.assertTrue(c.underscore) - - def test_requires_three_columns(self): - row_of_data = ['_filename', ''] - with self.assertRaises(Exception): - CsvFileEntry(row_of_data) - - -class TestFileListBuilder(unittest.TestCase): - - def setUp(self): - self.cur_dir_path = os.path.dirname(os.path.realpath(__file__)) - self.something_dir = os.path.join(self.cur_dir_path, 'resources') - self.temp_idf_dir = tempfile.mkdtemp() - self.temp_csv_file = tempfile.mkstemp(suffix='.csv')[1] - - def test_just_build_all_in_master_file(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') - f.write('NewIDFFile1,weather,\n') - f.write('NewIDFFile2,weather,\n') - f.write('NewIDFFile3,weather,\n') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - f = FileListBuilder(args) - return_val = f.build_verified_list() - success, selected_files, eliminated_files, files_in_dir_found_not_listed_in_csv = return_val - self.assertTrue(success) - self.assertEqual(4, len(selected_files)) - self.assertEqual(0, len(eliminated_files)) - self.assertEqual(0, len(files_in_dir_found_not_listed_in_csv)) - - def test_verify_all_files_found(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') - f.write('NewIDFFile1,weather,\n') - f.write('NewIDFFile2,weather,\n') - f.write('NewIDFFile3,weather,\n') - for i in range(4): - file_name = 'NewIDFFile%s.idf' % i - with open(os.path.join(self.temp_idf_dir, file_name), 'w') as f2: - f2.write('HI') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - args.verify = self.temp_idf_dir - f = FileListBuilder(args) - return_val = f.build_verified_list() - success, selected_files, eliminated_files, files_in_dir_found_not_listed_in_csv = return_val - self.assertTrue(success) - self.assertEqual(4, len(selected_files)) - self.assertEqual(0, len(eliminated_files)) - self.assertEqual(0, len(files_in_dir_found_not_listed_in_csv)) - - def test_verify_some_files_missing(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') - f.write('NewIDFFile1,weather,\n') - f.write('NewIDFFile2,weather,\n') - f.write('NewIDFFile3,weather,\n') - for i in range(2): - file_name = 'NewIDFFile%s.idf' % i - with open(os.path.join(self.temp_idf_dir, file_name), 'w') as f2: - f2.write('HI') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - args.verify = self.temp_idf_dir - f = FileListBuilder(args) - return_val = f.build_verified_list() - success, selected_files, eliminated_files, files_in_dir_found_not_listed_in_csv = return_val - self.assertTrue(success) - self.assertEqual(2, len(selected_files)) - self.assertEqual(2, len(eliminated_files)) - self.assertEqual(0, len(files_in_dir_found_not_listed_in_csv)) - - def test_verify_extra_files_found(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') - f.write('NewIDFFile1,weather,\n') - for i in range(4): - file_name = 'NewIDFFile%s.idf' % i - with open(os.path.join(self.temp_idf_dir, file_name), 'w') as f2: - f2.write('HI') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - args.verify = self.temp_idf_dir - f = FileListBuilder(args) - return_val = f.build_verified_list() - success, selected_files, eliminated_files, files_in_dir_found_not_listed_in_csv = return_val - self.assertTrue(success) - self.assertEqual(2, len(selected_files)) - self.assertEqual(0, len(eliminated_files)) - self.assertEqual(2, len(files_in_dir_found_not_listed_in_csv)) - - def test_bad_csv_file(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename\tweather\text-int\n') - f.write('NewIDFFile0\tweather\t\n') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - f = FileListBuilder(args) - return_val = f.build_verified_list() - success, selected_files, eliminated_files, files_in_dir_found_not_listed_in_csv = return_val - self.assertFalse(success) - - def test_print_results_to_file(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') - f.write('NewIDFFile1,,\n') - f.write('NewIDFFile2,weather,\n') - args = FileListBuilderArgs() - args.all = True - args.master_data_file = self.temp_csv_file - args.gui = False - args.output_file = tempfile.mkstemp(suffix='.json')[1] - f = FileListBuilder(args) - f.build_verified_list() - f.print_file_list_to_file() - with open(args.output_file) as f_out: - obj = json.load(f_out) - self.assertIn('files_to_run', obj) - self.assertEqual(3, len(obj['files_to_run'])) - - def test_down_selection(self): - with open(self.temp_csv_file, 'w') as f: - f.write('filename,weather,ext-int\n') - f.write('NewIDFFile0,weather,\n') # regular with weather - f.write('NewIDFFile1,,\n') # regular no weather - f.write('_NewIDFFile2,weather,\n') # underscore with weather - f.write('_NewIDFFile3,,\n') # underscore no weather - f.write('NewIDFFile4,weather,Y\n') # regular with ext-int - f.write('NewIDFFile5,,Y\n') # regular with ext-int no weather - f.write('_NewIDFFile6,weather,Y\n') # underscore with ext-int with weather - f.write('_NewIDFFile7,,Y\n') # underscore with ext-int no weather - f.write('NewIDFFile8,weather,\n') # one more regular just for fun - args = FileListBuilderArgs() - args.master_data_file = self.temp_csv_file - - # first pass, let's get every file - args.all = True - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(9, len(f.down_select_idf_list())) - - # let's disable external interface - args.all = False - args.extinterface = False - args.weatherless = True - args.underscore = True - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(5, len(f.down_select_idf_list())) - - # let's disable weather-less - args.all = False - args.extinterface = True - args.weatherless = False - args.underscore = True - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(5, len(f.down_select_idf_list())) - - # let's disable underscore - args.all = False - args.extinterface = True - args.weatherless = True - args.underscore = False - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(5, len(f.down_select_idf_list())) - - # let's disable weather-less and underscores - args.all = False - args.extinterface = True - args.weatherless = False - args.underscore = False - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(3, len(f.down_select_idf_list())) - - # let's get a random list of 6 - args.all = True - args.random = 6 - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(6, len(f.down_select_idf_list())) - - # but if the random list is higher than the number of idfs, get all of them - args.all = True - args.random = 12 - f = FileListBuilder(args) - f.build_verified_list() - self.assertEqual(9, len(f.down_select_idf_list()))