def test_amsaves_results(): """ Pass the results of get_model_comparisons to the amsaves_results function, confirm DataFrame returned in requested results format for the 'America Saves!' program (write contents to .CSV file for review) """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) modelIDs = [] for key, value in bldgModelsDct.iteritems(): jsonModelsDct = value for key, value in jsonModelsDct.iteritems(): modelIDs.append(str(value['SolutionID'])) comparisonsDct = deltamtrsvs.get_model_comparisons(comparison_url, bldgModelsDct, headers) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) usesDf = ams.amsaves_results(comparisonsDct, bldgModelsDct, bldgIDct) fname = site+'-results.csv' with open(fname, 'wb') as outf: outcsv = usesDf.to_csv(fname) assert isinstance(usesDf, pd.DataFrame) assert usesDf.shape[1] == 16
def test_amsaves_audit(): """ Pass the results of get_model_audits function, confirm DataFrame returned in requested results format for the 'America Saves!' program (write contents to .CSV file for review) """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) refModelsDct = {} for key, value in bldgModelsDct.iteritems(): refModelsDct[key] = value['Reference Model'] audits = deltamtrsvs.get_model_audits(audit_url, refModelsDct, headers) combinedUsageDct = ams.amsaves_audit(audits) assert isinstance(combinedUsageDct, dict) assert len(combinedUsageDct) == len(audits) for key, value in combinedUsageDct.iteritems(): df = value print(df) assert type(key) == tp.StringType assert re.match('\d{3}', key) assert isinstance(value, pd.DataFrame) #assert df.shape[1] == 14 fname = key + '-audit.csv' with open(fname, 'wb') as outf: outcsv = df.to_csv(fname)
def test_get_model_audits(): """ Pass a list of model IDs; confirm the funciton returns valid audit IDs and the expected audit data """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) refModelsDct = {} for key, value in bldgModelsDct.iteritems(): refModelsDct[key] = value['Reference Model'] print(refModelsDct.keys()) audits = deltamtrsvs.get_model_audits(audit_url, refModelsDct, headers) print(audits.keys()) type(audits) == tp.DictType for key, values in audits.iteritems(): assert re.match('\d{3}', key) assert type(values) == tp.ListType assert [type(value) == tp.DictType for value in values]
def test_get_bldg_models(): """ Pass a list of bldg ids & header, confirm the fuction returns the expected valid bldg IDs """ with HTTMock(model_response_content): bldgIDs = ['1266'] bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, private.headers) for key, value in bldgModelsDct.iteritems(): assert type(value) == tp.DictType assert type(key)== tp.StringType assert re.match('\d{4}', key) jsonModelsDct = value for key, value in jsonModelsDct.iteritems(): assert type(key) == tp.StringType assert type(value) == tp.DictType
def test_amsaves_usage_range(): """ Pass the results of get_model_audits function, confirm returned dictionary in requested results format for the 'America Saves!' program """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) refModelsDct = {} for key, value in bldgModelsDct.iteritems(): refModelsDct[key] = value['Reference Model'] audits = deltamtrsvs.get_model_audits(audit_url, refModelsDct, headers) auditSpans = ams.amsaves_usage_range(audits) assert type(auditSpans) == tp.DictType # assert len(auditSpans) == len(refModelIDs) spans = [] for key, value in auditSpans.iteritems(): assert type(key) == tp.StringType assert type(value) == tp.DictType vals = [key, auditSpans[key]['E. Per. Begin'], auditSpans[key]['E. Per. End'], auditSpans[key]['G. Per. Begin'], auditSpans[key]['G. Per. End']] # TODO (eayoungs): Add exception handling and include in final # *else* statement spans.append(vals) colNms = ['Ref. Model ID', 'E. Per. Begin', 'E. Per. End', 'G. Per. Begin', 'G. Per. End'] df = pd.DataFrame(data=spans, columns=colNms) fname = site +'-use_ranges.csv' with open(fname, 'wb') as outf: outcsv = df.to_csv(fname)
def test_get_meter_records(): """ Pass a dictionary of *audit* spans from amsaves_usage_range with reference model IDs from the amsaves_usage_range function as keys and a list of meter IDs from get_bldg_meters function """ #for site in sites: site = '46' bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) refModelsDct = {} for key, value in bldgModelsDct.iteritems(): refModelsDct[key] = value['Reference Model'] comparisonsDct = deltamtrsvs.get_model_comparisons(comparison_url, bldgModelsDct, headers) audits = deltamtrsvs.get_model_audits(audit_url, refModelsDct, headers) auditSpans = ams.amsaves_usage_range(audits) bldgMeterDct = deltamtrsvs.get_bldg_meters(pvt.bldg_meters_url, bldgIDs, headers) bldgMeterRecordsDct = deltamtrsvs.get_meter_records(auditSpans, bldgMeterDct, pvt.meter_records_url, headers) assert type(bldgMeterRecordsDct) == tp.DictType for key, value in bldgMeterRecordsDct.iteritems(): assert type(key) == tp.StringType assert type(value) == tp.DictType assert len(value) <= 2 elecMtrVals = value['Elec. Meter Records'] assert type(elecMtrVals) == tp.ListType assert [type(elecMtrVal) == tp.DictType for elecMtrVal in elecMtrVals] if len(value) == 2: gasMtrVals = value['Gas Meter Records'] assert type(gasMtrVals) == tp.ListType assert [type(gasMtrVal) == tp.DictType for gasMtrVal in gasMtrVals] assert elecMtrVals != gasMtrVals
def test_get_model_comparisons(): """ Pass a list of models' data, confirm the fuction returns the expected model IDs """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) comparisonsDct = deltamtrsvs.get_model_comparisons(comparison_url, bldgModelsDct, headers) assert type(comparisonsDct) == tp.DictType for key, value in comparisonsDct.iteritems(): assert type(key) == tp.StringType assert type(value) == tp.DictType
def test_get_bldg_models(): """ Pass a list of bldg ids & header, confirm the fuction returns the expected valid bldg IDs """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) bldgModelsDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) for key, value in bldgModelsDct.iteritems(): assert type(value) == tp.DictType assert type(key)==tp.StringType assert re.match('\d{4}', key) jsonModelsDct = value for key, value in jsonModelsDct.iteritems(): assert type(key) == tp.StringType assert type(value) == tp.DictType
def test_amsaves_flags(): """ """ for site in sites: bldgIDct = deltamtrsvs.get_property_bldgs(properties_url, site, headers) bldgIDs = [] for key in bldgIDct: bldgIDs.append(str(key)) modelsJsonDct = deltamtrsvs.get_bldg_models(model_url, bldgIDs, headers) valBldgIDs = [] for key in modelsJsonDct: valBldgIDs.append(str(key)) fvCharts = deltamtrsvs.get_fv_charts(pvt.fv_charts_url, valBldgIDs, headers) diagnMsgCodes = ams.amsaves_flags(fvCharts) # TODO (eayoungs): Needs more robust assertions assert type(diagnMsgCodes) == tp.DictType siteFlags = [] for key, value in diagnMsgCodes.iteritems(): bldgvalues = [] if value['Occupant Load'][0] == 'A' or \ value['Occupant Load'][0] == 'B' or \ value['Occupant Load'][0] == 'C': intrnElec = value['Occupant Load'][0] ultrHighIntExt = '' elif value['Occupant Load'][0] == 'O' or \ value['Occupant Load'] == 'P': ultrHighIntExt = value['Occupant Load'][0] intrnElec = '' # TODO (eayoungs): Add exception handling for final *else* # statement if value['Summer Gas Use'][1] == "High": highGasBaseLd = "M" else: highGasBaseLd = "" bldgFlags = [key, intrnElec, ultrHighIntExt, value['Controls Heating'][0], value['Shell Ventilation'][0], value['Controls Cooling'][0], value['Cooling Efficiency'][0], value['Data Consistency'][0], highGasBaseLd] siteFlags.append(bldgFlags) assert len(bldgFlags) == 9 assert [type(bldgFlag) == tp.StringType for bldgFlag in bldgFlags] assert [len(bldgFlag) == 1 for bldgFlag in bldgFlags] colNms = ['Bldg ID','Int. Elec.', 'Ultra-High Elec.', 'Excessive Htg.', 'Shell & Vent.', 'Excessive Clg', 'Inefficient Clg', 'Erratic Operation', 'High Gas Eqp.'] df = pd.DataFrame(data=siteFlags, columns=colNms) fname = site+'-flags.csv' with open(fname, 'wb') as outf: outcsv = df.to_csv(fname) assert len(siteFlags) == len(diagnMsgCodes) assert len(fvCharts) <= len(bldgIDs)