def test_from_xml(self): # TODO: This needs to be updated! filename = build_example1() vuln_sets = vuln_sets_from_xml_file([filename]) os.remove(filename) filename = build_example2() vuln_sets.update(vuln_sets_from_xml_file([filename])) os.remove(filename) self.assertTrue( allclose(vuln_sets["PAGER"].intensity_measure_level, asarray([5.00, 7.00, 10.00]))) self.assertEqual(vuln_sets["PAGER"].intensity_measure_type, "MMI") self.assertEqual(vuln_sets["PAGER"].vulnerability_set_id, "PAGER") self.assertEqual(vuln_sets["PAGER"].asset_category, "chickens") self.assertEqual(vuln_sets["PAGER"].loss_category, "feathers") loss_rs = { "IR": asarray([0.0, 0.01, 0.36]), "PK": asarray([0.0, 0.02, 0.36]) } covs = {"IR": asarray([0.3, 0.3, 0.3]), "PK": asarray([0.4, 0.4, 0.4])} for key in loss_rs: vul_funct = vuln_sets["PAGER"].vulnerability_functions[key] self.assertTrue(allclose(vul_funct.mean_loss, loss_rs[key])) self.assertTrue( allclose(vul_funct.coefficient_of_variation, covs[key])) self.assertTrue( allclose(vuln_sets["NPAGER"].intensity_measure_level, asarray([6.00, 8.00, 11.00]))) self.assertEqual(vuln_sets["NPAGER"].intensity_measure_type, "MMI") self.assertEqual(vuln_sets["NPAGER"].vulnerability_set_id, "NPAGER") self.assertEqual(vuln_sets["NPAGER"].asset_category, "population") self.assertEqual(vuln_sets["NPAGER"].loss_category, "fatalities") loss_rs = { "AA": asarray([0.0, 0.03, 0.36]), "BB": asarray([0.0, 0.06, 0.36]) } covs = {"AA": asarray([0.5, 0.5, 0.5]), "BB": asarray([0.6, 0.6, 0.6])} for key in loss_rs: vul_funct = vuln_sets["NPAGER"].vulnerability_functions[key] self.assertTrue(allclose(vul_funct.mean_loss, loss_rs[key])) self.assertTrue( allclose(vul_funct.coefficient_of_variation, covs[key]))
def test_domestic_wind_vul_curves(self): vuln_sets = vuln_sets_from_xml_file( [os.path.join(RESOURCE_DIR, 'content_flood_avg_curve.xml')]) set_id = vuln_sets["contents_domestic_flood_2012"] actual = set_id.intensity_measure_type self.assertEqual(actual, "water depth above ground floor (m)") # Check the first loss value of the last model vul_funct = set_id.vulnerability_functions['FCM1_INSURED_NOACTION'] self.assertAlmostEqual(vul_funct.mean_loss[0], 0.0)
def __call__(self, context, file_name): """ Read a csv exposure file into the context object. :param context: The context instance, used to move data around. :param file_name: The xml file to load. """ if file_name is not None: vuln_sets = vuln_sets_from_xml_file(file_name) context.vulnerability_sets.update(vuln_sets)
def test1_csv_curve2nrml(self): # Write a file to test # pylint: disable=R0801 f = tempfile.NamedTemporaryFile(suffix='.csv', prefix='test_creazte_vuln_xml', delete=False, mode='w') f.write('vulnerabilityFunctionID, vulnerabilitySetID, assetCategory,') f.write(' lossCategory, Alpha, Beta, IMT, IML, 17, 20\r\n') f.write('dw1, d2012, , structural, 0.1, 0.01,') f.write(' 0.2s gust at 10m height m/s, 17, 0.01, 0.1 \r\n') f.write('dw2, d2012, , structural, 0.2, 0.02,') f.write(' 0.2s gust at 10m height m/s, 20, 0.02, 0.2 \r\n') f.close() csv_name = f.name f = tempfile.NamedTemporaryFile(suffix='.xml', prefix='test_create_vuln_xml', delete=False, mode='w') xml_name = f.name create_vuln_xml.csv_curve2nrml(csv_name, xml_name) vuln_sets = vuln_sets_from_xml_file([xml_name]) self.assertTrue(allclose(vuln_sets["d2012"].intensity_measure_level, asarray([17, 20]))) self.assertEqual("0.2s gust at 10m height m/s", vuln_sets["d2012"].intensity_measure_type) self.assertEqual(vuln_sets["d2012"].vulnerability_set_id, "d2012") self.assertEqual(vuln_sets["d2012"].asset_category, "") self.assertEqual(vuln_sets["d2012"].loss_category, "structural") loss_rs = {"dw1": asarray([0.01, 0.1]), "dw2": asarray([0.02, 0.2])} covs = {"dw1": asarray([0., 0.]), "dw2": asarray([0., 0.])} for key in loss_rs: vul_funct = vuln_sets["d2012"].vulnerability_functions[key] self.assertTrue(allclose(vul_funct.mean_loss, loss_rs[key])) self.assertTrue(allclose(vul_funct.coefficient_of_variation, covs[key])) f.close() os.remove(csv_name) os.remove(xml_name)
def __call__(self, context, file_name): """ Read a csv exposure file into the context object. :param context: The context instance, used to move data around. :param file_name: The xml file to load. """ if file_name is not None: vuln_sets = vuln_sets_from_xml_file(file_name) context.vulnerability_sets.update(vuln_sets) dt = misc.get_file_mtime(file_name) vulent = context.prov.entity( ":vulnerability file", { 'prov:type': 'prov:Collection', 'prov:generatedAtTime': dt, 'prov:atLocation': os.path.basename(file_name) }) context.prov.used(context.provlabel, vulent)
def test1_excel_curve2nrml(self): dirs = determine_this_file_path() excel_file = 'synthetic_data_Flood_2012.xls' excel_file = os.path.join(dirs, excel_file) contents_filename = 'contents_synthetic.xml' fabric_filename = 'fabric_synthetic.xml' create_vuln_xml.excel_curve2nrml(contents_filename, fabric_filename, excel_file) # load in the xml file to see if it's ok. vuln_sets = vuln_sets_from_xml_file([contents_filename]) skey = create_vuln_xml.FLOOD_HOUSE_CONTENTS self.assertTrue(allclose(vuln_sets[skey].intensity_measure_level, asarray([0, 1]))) self.assertEqual("water depth above ground floor (m)", vuln_sets[skey].intensity_measure_type) self.assertEqual(vuln_sets[skey].vulnerability_set_id, skey) self.assertEqual(vuln_sets[skey].asset_category, "") self.assertEqual(vuln_sets[skey].loss_category, "contents_loss_ratio") act_cont = { 'FCM1_INSURED_SAVE': array([0., 0.2]), 'FCM1_INSURED_NOACTION': array([0., 0.3]), 'FCM1_INSURED_EXPOSE': array([0., 0.4]), 'FCM1_UNINSURED_SAVE': array([0., 0.6]), 'FCM1_UNINSURED_NOACTION': array([0., 0.7]), 'FCM1_UNINSURED_EXPOSE': array([0., 0.8]), 'FCM2_INSURED_SAVE': array([0., 0.22]), 'FCM2_INSURED_NOACTION': array([0., 0.32]), 'FCM2_INSURED_EXPOSE': array([0., 0.42]), 'FCM2_UNINSURED_SAVE': array([0., 0.62]), 'FCM2_UNINSURED_NOACTION': array([0., 0.72]), 'FCM2_UNINSURED_EXPOSE': array([0., 0.82]) } for key in act_cont: vul_funct = vuln_sets[skey].vulnerability_functions[key] self.assertTrue(allclose(vul_funct.mean_loss, act_cont[key])) self.assertTrue(allclose(vul_funct.coefficient_of_variation, array([0., 0.]))) vuln_sets = vuln_sets_from_xml_file([fabric_filename]) skey = create_vuln_xml.FLOOD_HOUSE_FABRIC self.assertTrue(allclose(vuln_sets[skey].intensity_measure_level, asarray([0, 1]))) self.assertEqual("water depth above ground floor (m)", vuln_sets[skey].intensity_measure_type) self.assertEqual(vuln_sets[skey].vulnerability_set_id, skey) self.assertEqual(vuln_sets[skey].asset_category, "") self.assertEqual(vuln_sets[skey].loss_category, "structural_loss_ratio") actually_fab = {'FCM1_INSURED': array([0., 0.1]), 'FCM2_INSURED': array([0., 0.12]), 'FCM1_UNINSURED': array([0., 0.5]), 'FCM2_UNINSURED': array([0., 0.52])} for key in actually_fab: vul_funct = vuln_sets[skey].vulnerability_functions[key] self.assertTrue(allclose(vul_funct.mean_loss, actually_fab[key])) self.assertTrue(allclose(vul_funct.coefficient_of_variation, array([0., 0.]))) os.remove(contents_filename) os.remove(fabric_filename)