Example #1
0
    def __call__(self, asset, hazard):
        vulnerability_function = self.vulnerability_model[asset.taxonomy]

        loss_ratio_curve = scientific.classical(
            vulnerability_function, self.matrices[asset.taxonomy],
            hazard, self.steps)

        loss_curve = loss_ratio_curve.rescale_abscissae(asset.value)

        return scientific.ClassicalOutput(
            asset, loss_ratio_curve, loss_curve, None)
Example #2
0
    def test_compute_loss_ratio_curve(self):
        hazard_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)]

        imls = [0.1, 0.2, 0.4, 0.6]
        covs = [0.5, 0.3, 0.2, 0.1]
        loss_ratios = [0.05, 0.08, 0.2, 0.4]

        vulnerability_function = scientific.VulnerabilityFunction(
            imls, loss_ratios, covs, "LN", "RC")

        # pre computed values just use one intermediate
        # values between the imls, so steps=2
        lrem = [[1., 1., 1., 1.],
                [8.90868149e-01, 9.99932030e-01, 1., 1.],
                [4.06642478e-01, 9.27063668e-01, 1., 1.],
                [2.14297309e-01, 7.12442306e-01, 9.99999988e-01, 1.],
                [1.09131851e-01, 4.41652761e-01, 9.99997019e-01, 1.],
                [7.84971008e-03, 2.00321301e-02, 9.55620783e-01, 1.],
                [7.59869969e-04, 5.41393717e-04, 4.60560758e-01, 1.],
                [2.79797605e-05, 1.66547090e-06, 1.59210054e-02,
                 9.97702369e-01],
                [1.75697664e-06, 9.04938835e-09, 1.59710253e-04,
                 4.80110732e-01],
                [2.89163471e-09, 2.43138842e-14, 6.60395072e-11,
                 7.56938368e-09],
                [2.38464803e-11, 0., 1.11022302e-16, 0.]]

        loss_ratio_curve = scientific.classical(
            vulnerability_function, lrem, hazard_curve, 2)

        expected_curve = Curve([
            (0.0, 0.96), (0.025, 0.96),
            (0.05, 0.91), (0.065, 0.87),
            (0.08, 0.83), (0.14, 0.75),
            (0.2, 0.60), (0.3, 0.47),
            (0.4, 0.23), (0.7, 0.00),
            (1.0, 0.00)])

        for x_value in expected_curve.abscissae:
            numpy.testing.assert_allclose(
                expected_curve.ordinate_for(x_value),
                loss_ratio_curve.ordinate_for(x_value), atol=0.005)