def test_lrem_po_computation(self): hazard_curve = shapes.Curve([ (0.01, 0.99), (0.08, 0.96), (0.17, 0.89), (0.26, 0.82), (0.36, 0.70), (0.55, 0.40), (0.70, 0.01)]) # pre computed values just use one intermediate # values between the imls psha.STEPS_PER_INTERVAL = 2 imls = [0.1, 0.2, 0.4, 0.6] loss_ratios = [0.05, 0.08, 0.2, 0.4] covs = [0.5, 0.3, 0.2, 0.1] vuln_function = shapes.VulnerabilityFunction(imls, loss_ratios, covs) lrem = psha._compute_lrem(vuln_function) lrem_po = psha._compute_lrem_po(vuln_function, lrem, hazard_curve) self.assertTrue(numpy.allclose(0.07, lrem_po[0][0], atol=0.005)) self.assertTrue(numpy.allclose(0.06, lrem_po[1][0], atol=0.005)) self.assertTrue(numpy.allclose(0.13, lrem_po[0][1], atol=0.005)) self.assertTrue(numpy.allclose(0.47, lrem_po[5][3], atol=0.005)) self.assertTrue(numpy.allclose(0.23, lrem_po[8][3], atol=0.005)) self.assertTrue(numpy.allclose(0.00, lrem_po[10][0], atol=0.005))
def test_lrem_po_computation(self): hazard_curve = shapes.Curve([ (0.01, 0.99), (0.08, 0.96), (0.17, 0.89), (0.26, 0.82), (0.36, 0.70), (0.55, 0.40), (0.70, 0.01)]) # pre computed values just use one intermediate # values between the imls psha.STEPS_PER_INTERVAL = 2 vuln_function = shapes.VulnerabilityFunction([(0.1, (0.05, 0.5)), (0.2, (0.08, 0.3)), (0.4, (0.2, 0.2)), (0.6, (0.4, 0.1))]) lrem = psha._compute_lrem(vuln_function) lrem_po = psha._compute_lrem_po(vuln_function, lrem, hazard_curve) self.assertTrue(numpy.allclose(0.07, lrem_po[0][0], atol=0.005)) self.assertTrue(numpy.allclose(0.06, lrem_po[1][0], atol=0.005)) self.assertTrue(numpy.allclose(0.13, lrem_po[0][1], atol=0.005)) self.assertTrue(numpy.allclose(0.47, lrem_po[5][3], atol=0.005)) self.assertTrue(numpy.allclose(0.23, lrem_po[8][3], atol=0.005)) self.assertTrue(numpy.allclose(0.00, lrem_po[10][0], atol=0.005))
def test_end_to_end(self): # manually computed values by Vitor Silva hazard_curve = shapes.Curve( [(5.0, 0.4), (6.0, 0.2), (7.0, 0.05)]) lrem = psha._compute_lrem(shapes.Curve.from_json( self.vulnerability_curves[self.vuln_curve_code_test])) loss_ratio_curve = psha.compute_loss_ratio_curve( shapes.Curve.from_json( self.vulnerability_curves[self.vuln_curve_code_test]), hazard_curve) lr_curve_expected = shapes.Curve([(0.0, 0.650), (0.05, 0.650), (0.10, 0.632), (0.15, 0.569), (0.20, 0.477), (0.25, 0.382), (0.28, 0.330), (0.31, 0.283), (0.34, 0.241), (0.37, 0.205), (0.40, 0.173), (0.44, 0.137), (0.48, 0.108), (0.52, 0.085), (0.56, 0.066), (0.60, 0.051)]) for x_value in lr_curve_expected.abscissae: self.assertAlmostEqual(lr_curve_expected.ordinate_for(x_value), loss_ratio_curve.ordinate_for(x_value), 3)
def test_empty_lrem(self): self.assertEqual([None], psha._compute_lrem(shapes.Curve.from_json( self.vulnerability_curves[vulnerability.EMPTY_CODE]), shapes.EMPTY_CURVE))