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)
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)
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)
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)