Пример #1
0
    def test_constant(self):
        expected = [10] * 100
        actual = scientific.event_based(expected, 50, 50, 11)

        numpy.testing.assert_allclose([10] * 11, actual.abscissae)
        numpy.testing.assert_allclose(
            numpy.arange(0, 1.1, 0.1), actual.ordinates)
Пример #2
0
    def test_sample_based_beta(self):
        vulnerability_function_rm = (
            scientific.VulnerabilityFunction(
                [0.001, 0.2, 0.3, 0.5, 0.7], [0.01, 0.1, 0.2, 0.4, 0.8],
                [0.0001, 0.0001, 0.0001, 0.0001, 0.0001], "BT", "RC"))

        vulnerability_function_rc = (
            scientific.VulnerabilityFunction(
                [0.001, 0.2, 0.3, 0.5, 0.7], [0.0035, 0.07, 0.14, 0.28, 0.56],
                [0.0001, 0.0001, 0.0001, 0.0001, 0.0001], "BT", "RC"))

        vulnerability_model = {"RM": vulnerability_function_rm,
                               "RC": vulnerability_function_rc}

        peb_calculator = api.ProbabilisticEventBased(
            vulnerability_model, None, None)
        peb_conditional_losses = api.ConditionalLosses([0.99], peb_calculator)

        for i in range(3):
            asset_output = peb_conditional_losses(
                sb.input_models_asset[i],
                {"IMLs": gmf_bd[i], "TSES": 2500, "TimeSpan": 50})
            self.assert_allclose(
                sb.expected_poes[i],
                asset_output.insured_losses.ordinates)

            self.assert_allclose(
                sb.expected_losses[i],
                asset_output.insured_losses.abscissae)

        aggregate_curve = scientific.event_based(
            peb_calculator.aggregate_losses, 2500, 50, 10)

        expected_aggregate_poes = [1.0, 0.732864698034, 0.228948414196,
                                   0.147856211034, 0.0768836536134,
                                   0.0768836536134, 0.0198013266932,
                                   0.0198013266932, 0.0198013266932]

        expected_aggregate_losses = [
            102.669407618, 308.008222854, 513.347038089,
            718.685853325, 924.024668561, 1129.3634838,
            1334.70229903, 1540.04111427, 1745.3799295]

        self.assert_allclose(
            expected_aggregate_poes, aggregate_curve.ordinates)

        self.assert_allclose(
            expected_aggregate_losses, aggregate_curve.abscissae)
Пример #3
0
    def __call__(self, asset, hazard):
        taxonomies = self.vulnerability_model.keys()
        vulnerability_function = self.vulnerability_model[asset.taxonomy]

        if self._aggregate_losses is None:
            self._aggregate_losses = numpy.zeros(len(hazard))
        vulnerability_function.seed(
            self.seed, self.correlation_type, taxonomies)
        self.loss_ratios = vulnerability_function(hazard)

        loss_ratio_curve = scientific.event_based(
            self.loss_ratios,
            tses=self.tses, time_span=self.time_span,
            curve_resolution=self.curve_resolution)

        losses = self.loss_ratios * asset.value
        loss_curve = loss_ratio_curve.rescale_abscissae(asset.value)

        self._aggregate_losses += losses

        return scientific.ProbabilisticEventBasedOutput(
            asset, losses, loss_ratio_curve, loss_curve,
            None, None, None, None)
Пример #4
0
    def test_mean_based(self):
        vulnerability_function_rm = (
            scientific.VulnerabilityFunction(
                [0.001, 0.2, 0.3, 0.5, 0.7], [0.01, 0.1, 0.2, 0.4, 0.8],
                [0.0, 0.0, 0.0, 0.0, 0.0], "LN", "RM"))

        vulnerability_function_rc = (
            scientific.VulnerabilityFunction(
                [0.001, 0.2, 0.3, 0.5, 0.7], [0.0035, 0.07, 0.14, 0.28, 0.56],
                [0.0, 0.0, 0.0, 0.0, 0.0], "LN", "RC"))

        vulnerability_model = {"RM": vulnerability_function_rm,
                               "RC": vulnerability_function_rc}

        peb_calculator = api.ProbabilisticEventBased(
            vulnerability_model, 50, 50)

        peb_conditional_losses = api.ConditionalLosses(
            [CONDITIONAL_LOSS_POES], peb_calculator)

        for i in range(3):
            asset_output = peb_conditional_losses(
                mb.input_models_asset[i], gmf[i])

            self.assertAlmostEqual(
                mb.expected_loss_map[i],
                asset_output.conditional_losses[CONDITIONAL_LOSS_POES],
                delta=0.05 * mb.expected_loss_map[i])

            self.assert_allclose(mb.expected_poes,
                                 asset_output.loss_ratio_curve.ordinates)

            self.assert_allclose(mb.expected_poes,
                                 asset_output.loss_curve.ordinates)

            self.assert_allclose(mb.expected_losses[i],
                                 asset_output.loss_curve.abscissae)

            self.assert_allclose(
                mb.expected_losses[i] / mb.input_models_asset[i].value,
                asset_output.loss_ratio_curve.abscissae)

        expected_aggregate_poes = [0, 0.020408606, 0.04081678, 0.061224955,
                                   0.08163313, 0.102041305, 0.12244948,
                                   0.142857655, 0.163265829, 0.183674004,
                                   0.204082179, 0.224490354, 0.244898529,
                                   0.265306704, 0.285714879, 0.306123053,
                                   0.326531228, 0.346939403, 0.367347578,
                                   0.387755753, 0.408163928, 0.428572102,
                                   0.448980277, 0.469388452, 0.489796627,
                                   0.510204802, 0.530612977, 0.551021151,
                                   0.571429326, 0.591837501, 0.612245676,
                                   0.632653851, 0.653062026, 0.673470201,
                                   0.693878375, 0.71428655, 0.734694725,
                                   0.7551029, 0.775511075, 0.79591925,
                                   0.816327424, 0.836735599, 0.857143774,
                                   0.877551949, 0.897960124, 0.918368299,
                                   0.938776473, 0.959184648, 0.979592823,
                                   1][::-1]

        expected_aggregate_losses = [330.0596974, 326.5857542, 323.111811,
                                     319.6378677, 316.1639245, 312.6899813,
                                     309.2160381, 305.7420949, 302.2681517,
                                     298.7942084, 295.3202652, 291.846322,
                                     288.3723788, 284.8984356, 281.4244924,
                                     277.9505491, 274.4766059, 271.0026627,
                                     267.5287195, 264.0547763, 260.5808331,
                                     257.1068899, 253.6329466, 250.1590034,
                                     246.6850602, 243.211117, 239.7371738,
                                     236.2632306, 232.7892873, 229.3153441,
                                     225.8414009, 222.3213759, 217.0814518,
                                     211.8415276, 206.6016035, 201.3616793,
                                     196.1217552, 190.881831, 185.6419069,
                                     180.4019828, 175.1620586, 169.9221345,
                                     164.6822103, 155.7023863, 144.5398623,
                                     133.3773383, 122.2148143, 115.92256,
                                     115.8386574, 55.3134][::-1]

        aggregate_curve = scientific.event_based(
            peb_calculator.aggregate_losses, 50, 50)

        self.assert_allclose(
            expected_aggregate_losses, aggregate_curve.abscissae)

        self.assert_allclose(
            expected_aggregate_poes, aggregate_curve.ordinates)