@@ -36,12 +36,8 @@ def _compute_coherence_residual(
3636 Returns:
3737 Coherence residual array with same shape as y.
3838 """
39- if y .ndim == 1 :
40- y_bottom = y [idx_bottom ]
41- y_implied = S @ y_bottom
42- else :
43- y_bottom = y [idx_bottom , :]
44- y_implied = S @ y_bottom
39+ y_bottom = y [idx_bottom ]
40+ y_implied = S @ y_bottom
4541 return y - y_implied
4642
4743
@@ -65,33 +61,27 @@ def _compute_diagnostics_for_level(
6561 Dictionary of metric names to values.
6662 """
6763 # Extract level data
68- y_before_level = y_before [level_indices , : ].flatten ()
69- y_after_level = y_after [level_indices , : ].flatten ()
70- residual_before_level = residual_before [level_indices , : ].flatten ()
71- residual_after_level = residual_after [level_indices , : ].flatten ()
64+ y_before_level = y_before [level_indices ].flatten ()
65+ y_after_level = y_after [level_indices ].flatten ()
66+ residual_before_level = residual_before [level_indices ].flatten ()
67+ residual_after_level = residual_after [level_indices ].flatten ()
7268
7369 # Adjustments
7470 adjustment = y_after_level - y_before_level
7571
7672 metrics = {
77- "coherence_residual_mae_before" : float (np .mean (np .abs (residual_before_level ))),
78- "coherence_residual_rmse_before" : float (
79- np .sqrt (np .mean (residual_before_level ** 2 ))
80- ),
81- "coherence_residual_mae_after" : float (np .mean (np .abs (residual_after_level ))),
82- "coherence_residual_rmse_after" : float (
83- np .sqrt (np .mean (residual_after_level ** 2 ))
84- ),
85- "adjustment_mae" : float (np .mean (np .abs (adjustment ))),
86- "adjustment_rmse" : float (np .sqrt (np .mean (adjustment ** 2 ))),
87- "adjustment_max" : float (np .max (np .abs (adjustment ))),
88- "adjustment_mean" : float (np .mean (adjustment )),
89- "negative_count_before" : int (np .sum (y_before_level < 0 )),
90- "negative_count_after" : int (np .sum (y_after_level < 0 )),
91- "negative_introduced" : int (
92- np .sum ((y_before_level >= 0 ) & (y_after_level < 0 ))
93- ),
94- "negative_removed" : int (np .sum ((y_before_level < 0 ) & (y_after_level >= 0 ))),
73+ "coherence_residual_mae_before" : np .mean (np .abs (residual_before_level ), dtype = np .float64 ),
74+ "coherence_residual_rmse_before" : np .sqrt (np .mean (residual_before_level ** 2 ), dtype = np .float64 ),
75+ "coherence_residual_mae_after" : np .mean (np .abs (residual_after_level ), dtype = np .float64 ),
76+ "coherence_residual_rmse_after" : np .sqrt (np .mean (residual_after_level ** 2 ), dtype = np .float64 ),
77+ "adjustment_mae" : np .mean (np .abs (adjustment ), dtype = np .float64 ),
78+ "adjustment_rmse" : np .sqrt (np .mean (adjustment ** 2 ), dtype = np .float64 ),
79+ "adjustment_max" : np .max (np .abs (adjustment , dtype = np .float64 )),
80+ "adjustment_mean" : np .mean (adjustment , dtype = np .float64 ),
81+ "negative_count_before" : np .sum (y_before_level < 0 , dtype = np .int64 ),
82+ "negative_count_after" : np .sum (y_after_level < 0 , dtype = np .int64 ),
83+ "negative_introduced" : np .sum ((y_before_level >= 0 ) & (y_after_level < 0 ), dtype = np .int64 ),
84+ "negative_removed" : np .sum ((y_before_level < 0 ) & (y_after_level >= 0 ), dtype = np .int64 ),
9585 }
9686 return metrics
9787
0 commit comments