Beispiel #1
0
    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))
Beispiel #2
0
    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))
Beispiel #3
0
    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)
Beispiel #4
0
 def test_empty_lrem(self):
     self.assertEqual([None], psha._compute_lrem(shapes.Curve.from_json(
         self.vulnerability_curves[vulnerability.EMPTY_CODE]),
         shapes.EMPTY_CURVE))