Skip to content

Commit 6444ac8

Browse files
authored
(Feature): Sampling rate can be NULL (#1045)
* (Feature): Sampling rate can be NULL * (Fix): software_carbon_intensity_global was still using 0 instead of NULL [skip ci] * (Fix): Decimal instead of float * (Rework): Sampling rate avg must be present [skip ci] * (Fix): Tests [skip ci]
1 parent f30682e commit 6444ac8

File tree

7 files changed

+217
-233
lines changed

7 files changed

+217
-233
lines changed

api/api_helpers.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -558,15 +558,15 @@ def get_phase_stats_object(phase_stats, case=None, comparison_details=None, comp
558558
detail_data = phase_stats_object['data'][phase][metric_name]['data'][detail_name]['data']
559559
if key not in detail_data:
560560
detail_data[key] = {
561-
'mean': None, # this is the mean over all repetitions of the detail_name for the key
561+
'mean': value, # this is the mean over all repetitions of the detail_name for the key
562562
'max': max_value,
563563
'min': min_value,
564-
'max_mean': None,
565-
'min_mean': None,
564+
'max_mean': max_value,
565+
'min_mean': min_value,
566566
'stddev': None,
567-
'sr_avg_avg': None,
568-
'sr_max_max': None,
569-
'sr_95p_max': None,
567+
'sr_avg_avg': sampling_rate_avg,
568+
'sr_max_max': sampling_rate_max,
569+
'sr_95p_max': sampling_rate_95p,
570570
'sr_avg_values': [sampling_rate_avg], # temporary, we will delete this later
571571
'sr_max_values': [sampling_rate_max], # temporary, we will delete this later
572572
'sr_95p_values': [sampling_rate_95p], # temporary, we will delete this later
@@ -590,8 +590,8 @@ def get_phase_stats_object(phase_stats, case=None, comparison_details=None, comp
590590

591591
# since we do not save the min/max values we need to to the comparison here in every loop again
592592
# all other statistics are derived later in add_phase_stats_statistics()
593-
detail_data[key]['max'] = max((x for x in [max_value, detail_data[key]['max']] if x is not None), default=None)
594-
detail_data[key]['min'] = min((x for x in [min_value, detail_data[key]['min']] if x is not None), default=None)
593+
detail_data[key]['max'] = max((x for x in [max_value, detail_data[key]['max']] if x is not None), default=max_value)
594+
detail_data[key]['min'] = min((x for x in [min_value, detail_data[key]['min']] if x is not None), default=min_value)
595595

596596
return phase_stats_object
597597

@@ -621,20 +621,12 @@ def add_phase_stats_statistics(phase_stats_object):
621621
sr_max_values_none_filtered = [item for item in key_obj['sr_max_values'] if item is not None]
622622
sr_95p_values_none_filtered = [item for item in key_obj['sr_95p_values'] if item is not None]
623623

624-
key_obj['mean'] = values_none_filtered[0] # default. might be overridden
625-
key_obj['max_mean'] = values_none_filtered[0] # default. might be overridden
626-
key_obj['min_mean'] = values_none_filtered[0] # default. might be overridden
627-
key_obj['sr_avg_avg'] = sr_avg_values_none_filtered[0] # default. might be overridden
628-
key_obj['sr_max_max'] = sr_max_values_none_filtered[0] # default. might be overridden
629-
key_obj['sr_95p_max'] = sr_95p_values_none_filtered[0] # default. might be overridden
630-
631624
if len(values_none_filtered) > 1:
632625

633626
t_stat = get_t_stat(len(values_none_filtered))
634627

635628
# JSON does not recognize the numpy data types. Sometimes int64 is returned
636629
key_obj['mean'] = np.mean(values_none_filtered).item()
637-
key_obj['sr_avg_avg'] = np.mean(sr_avg_values_none_filtered).item()
638630

639631
key_obj['stddev'] = np.std(values_none_filtered, correction=1).item()
640632
# We are using now the STDDEV of the sample for two reasons:
@@ -644,11 +636,15 @@ def add_phase_stats_statistics(phase_stats_object):
644636
# Still one could argue that one does not want to characterize the measured software but rather the measurement setup
645637
# it is safer to use the sample STDDEV as it is always higher
646638

647-
key_obj['max_mean'] = np.max(values_none_filtered).item() # overwrite with max of list
648-
key_obj['sr_max_max'] = np.max(sr_max_values_none_filtered).item() # overwrite with max of list
649-
key_obj['sr_95p_max'] = np.max(sr_95p_values_none_filtered).item() # overwrite with max of list
639+
key_obj['max_mean'] = np.max(values_none_filtered).item()
640+
key_obj['min_mean'] = np.min(values_none_filtered).item()
650641

651-
key_obj['min_mean'] = np.min(values_none_filtered).item() # overwrite with min of list
642+
if sr_avg_values_none_filtered:
643+
key_obj['sr_avg_avg'] = np.mean(sr_avg_values_none_filtered).item()
644+
if sr_max_values_none_filtered:
645+
key_obj['sr_max_max'] = np.max(sr_max_values_none_filtered).item()
646+
if sr_95p_values_none_filtered:
647+
key_obj['sr_95p_max'] = np.max(sr_95p_values_none_filtered).item()
652648

653649
key_obj['ci'] = (key_obj['stddev']*t_stat).item()
654650

0 commit comments

Comments
 (0)