def test_lr_eq_0_cov_gt_0(self): # If a vulnerability function loss ratio is 0 and its corresponding CoV # is > 0, a ValueError should be raised vuln_content = StringIO.StringIO("""\ <?xml version='1.0' encoding='utf-8'?> <nrml xmlns="http://openquake.org/xmlns/nrml/0.4" xmlns:gml="http://www.opengis.net/gml"> <vulnerabilityModel> <discreteVulnerabilitySet vulnerabilitySetID="PAGER" assetCategory="population" lossCategory="fatalities"> <IML IMT="PGV">0.005 0.007 0.0098 0.0137</IML> <discreteVulnerability vulnerabilityFunctionID="A" probabilisticDistribution="LN"> <lossRatio>0.00 0.06 0.18 0.36</lossRatio> <coefficientsVariation>0.30 0.30 0.30 0.30</coefficientsVariation> </discreteVulnerability> </discreteVulnerabilitySet> </vulnerabilityModel> </nrml> """) with self.assertRaises(ValueError) as ar: loaders.vulnerability(vuln_content) expected_error = ("Invalid vulnerability function with ID 'A': It is " "not valid to define a loss ratio = 0.0 with a " "corresponding coeff. of varation > 0.0") self.assertEqual(expected_error, ar.exception.message)
def test_one_taxonomy_many_imts(self): # Should raise a ValueError if a vulnerabilityFunctionID is used for # multiple IMTs. # In this test input, we've defined two functions in separate sets # with the same ID and different IMTs. vuln_content = StringIO.StringIO("""\ <?xml version='1.0' encoding='utf-8'?> <nrml xmlns="http://openquake.org/xmlns/nrml/0.4" xmlns:gml="http://www.opengis.net/gml"> <vulnerabilityModel> <discreteVulnerabilitySet vulnerabilitySetID="PAGER" assetCategory="population" lossCategory="fatalities"> <IML IMT="PGA">0.005 0.007 0.0098 0.0137</IML> <discreteVulnerability vulnerabilityFunctionID="A" probabilisticDistribution="LN"> <lossRatio>0.01 0.06 0.18 0.36</lossRatio> <coefficientsVariation>0.30 0.30 0.30 0.30</coefficientsVariation> </discreteVulnerability> </discreteVulnerabilitySet> <discreteVulnerabilitySet vulnerabilitySetID="PAGER" assetCategory="population" lossCategory="fatalities"> <IML IMT="MMI">0.005 0.007 0.0098 0.0137</IML> <discreteVulnerability vulnerabilityFunctionID="A" probabilisticDistribution="LN"> <lossRatio>0.01 0.06 0.18 0.36</lossRatio> <coefficientsVariation>0.30 0.30 0.30 0.30</coefficientsVariation> </discreteVulnerability> </discreteVulnerabilitySet> </vulnerabilityModel> </nrml> """) with self.assertRaises(ValueError) as ar: loaders.vulnerability(vuln_content) expected_error = ('Error creating vulnerability function for taxonomy ' 'A. A taxonomy can not be associated with different ' 'vulnerability functions') self.assertEqual(expected_error, ar.exception.message)
def get_risk_models(self, retrofitted=False): """ Parse vulnerability models for each loss type in `openquake.engine.db.models.LOSS_TYPES`, then set the `risk_models` attribute. :param bool retrofitted: True if retrofitted models should be retrieved :returns: A nested dict taxonomy -> loss type -> instances of `RiskModel`. """ risk_models = collections.defaultdict(dict) for v_input, loss_type in self.rc.vulnerability_inputs(retrofitted): for taxonomy, model in loaders.vulnerability(v_input): risk_models[taxonomy][loss_type] = model return risk_models