def test_conditional_loss_duplicates(self): # we feed compute_conditional_loss with some duplicated data to see if # it's handled correctly loss1 = scientific.conditional_loss(Curve([ (0.21, 0.131), (0.24, 0.108), (0.27, 0.089), (0.30, 0.066), ]), 0.100) # duplicated y values, different x values, (0.19, 0.131), (0.20, 0.131) # should be skipped loss2 = scientific.conditional_loss(Curve([ (0.19, 0.131), (0.20, 0.131), (0.21, 0.131), (0.24, 0.108), (0.27, 0.089), (0.30, 0.066), ]), 0.100) numpy.testing.assert_allclose(loss1, loss2)
def test_conditional_loss_computation(self): loss_curve = Curve([ (0.21, 0.131), (0.24, 0.108), (0.27, 0.089), (0.30, 0.066), ]) self.assertAlmostEqual(0.2526, scientific.conditional_loss( loss_curve, 0.100), 4)
def test_loss_is_max_if_probability_is_too_low(self): loss_curve = Curve([ (0.21, 0.131), (0.24, 0.108), (0.27, 0.089), (0.30, 0.066), ]) self.assertAlmostEqual(0.30, scientific.conditional_loss(loss_curve, 0.050))
def __call__(self, asset, hazard): asset_output = self.loss_curve_calculator(asset, hazard) cl = dict((poe, scientific.conditional_loss(asset_output.loss_curve, poe)) for poe in self.conditional_loss_poes) return asset_output._replace(conditional_losses=cl)