コード例 #1
0
    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]))
コード例 #2
0
    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)
コード例 #3
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)
コード例 #4
0
    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)
コード例 #5
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)
            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)
コード例 #6
0
    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)