def test_fails_mismatch_array_sizes(self):
     """Test it fails if weights and missing_weights not the same size."""
     weights_in = np.array([0.7, 0.2, 0.1])
     missing_weights = np.ones(2)
     msg = ('Arrays weights and forecast_present not the same size')
     with self.assertRaisesRegex(ValueError, msg):
         WeightsUtilities.redistribute_weights(weights_in, missing_weights)
 def test_fails_weight_less_than_zero(self):
     """Test it fails if weight less than zero. """
     weights_in = np.array([-0.1, 1.1])
     missing_weights = np.ones(2)
     msg = ('Weights should be positive or at least one > 0.0')
     with self.assertRaisesRegex(ValueError, msg):
         WeightsUtilities.redistribute_weights(weights_in, missing_weights)
 def test_fails_sum__not_equal_to_one(self):
     """Test it fails if sum of input weights not equal to one. """
     weights_in = np.array([3.0, 2.0, 1.0])
     missing_weights = np.ones(3)
     msg = ('Sum of weights must be 1.0')
     with self.assertRaisesRegex(ValueError, msg):
         WeightsUtilities.redistribute_weights(weights_in, missing_weights)
 def test_all_missing(self):
     """Test it raises the correct error when none of the expected
        coordinate values are present on the cube."""
     weights_in = np.array([0.6, 0.3, 0.1])
     missing_weights = np.zeros(3)
     msg = 'None of the expected forecasts were found.'
     with self.assertRaisesRegexp(ValueError, msg):
         WeightsUtilities.redistribute_weights(weights_in, missing_weights)
 def test_basic(self):
     """Test that the function returns an array of weights. """
     weights_in = np.array([0.6, 0.3, 0.1])
     missing_weights = np.ones(3)
     result = WeightsUtilities.redistribute_weights(weights_in,
                                                    missing_weights)
     self.assertIsInstance(result, np.ndarray)
 def test_returns_correct_values_evenly(self):
     """Test it returns the correct values, method is evenly."""
     weights_in = np.array([0.41957573, 0.25174544,
                            0.15104726, 0.09062836,
                            0.05437701, 0.03262621])
     missing_weights = np.ones(6)
     missing_weights[2] = 0.0
     result = WeightsUtilities.redistribute_weights(weights_in,
                                                    missing_weights)
     expected_result = np.array([0.44978518, 0.28195489,
                                 0.12083781,
                                 0.08458647, 0.06283566])
     self.assertArrayAlmostEqual(result, expected_result)
 def test_returns_correct_values_proportional(self):
     """Test it returns the correct values, method is proportional."""
     weights_in = np.array([0.41957573, 0.25174544,
                            0.15104726, 0.09062836,
                            0.05437701, 0.03262621])
     missing_weights = np.ones(6)
     missing_weights[2] = 0.0
     result = WeightsUtilities.redistribute_weights(weights_in,
                                                    missing_weights,
                                                    method='proportional')
     expected_result = np.array([0.49422742, 0.29653645,
                                 0.10675312,
                                 0.06405187, 0.03843112])
     self.assertArrayAlmostEqual(result, expected_result)