def test_merge(): x = NumberTracker() for v in [10, 11, 13]: x.track(v) merged = x.merge(x) assert merged.ints.count == 6 assert merged.floats.count == 0 assert merged.histogram.get_n() == 6 assert merged.histogram.get_max_value() == 13.0 assert merged.histogram.get_min_value() == 10.0 msg = merged.to_protobuf() NumberTracker.from_protobuf(msg)
def test_merge(): x = NumberTracker() for v in [10, 11, 13]: x.track(v) merged = x.merge(x) assert merged.ints.count == 6 assert merged.floats.count == 0 assert merged.histogram.get_n() == 6 assert merged.histogram.get_max_value() == 13.0 assert merged.histogram.get_min_value() == 10.0 expected_freq = [ (10, 2, 2, 2), (11, 2, 2, 2), (13, 2, 2, 2), ] compare_frequent_items(expected_freq, merged.frequent_numbers.get_frequent_items()) msg = merged.to_protobuf() NumberTracker.from_protobuf(msg)
class NLPMetrics: def __init__(self, prediction_field: str = None, target_field: str = None): self.prediction_field = prediction_field self.target_field = target_field self.mer = NumberTracker() self.wer = NumberTracker() self.wil = NumberTracker() def update(self, predictions: Union[List[str], str], targets: Union[List[str]], transform=None) -> None: """ Function adds predictions and targets computation of nlp metrics. Args: predictions (Union[str,List[str]]): targets (Union[List[str],str]): """ if transform: mes = jiwer.compute_measures(truth=targets, hypothesis=predictions, truth_transform=transform, hypothesis_transform=transform) else: mes = jiwer.compute_measures(truth=targets, hypothesis=predictions) self.mer.track(mes["mer"]) self.wer.track(mes["wer"]) self.wil.track(mes["wil"]) def merge(self, other: "NLPMetrics") -> "NLPMetrics": """ Merge two seperate nlp metrics Args: other : nlp metrics to merge with self Returns: NLPMetrics: merged nlp metrics """ if other is None: return self merged_nlp_metrics = NLPMetrics() merged_nlp_metrics.mer = self.mer.merge(other.mer) merged_nlp_metrics.wer = self.wer.merge(other.wer) merged_nlp_metrics.wil = self.wil.merge(other.wil) return merged_nlp_metrics return merged_nlp_metrics def to_protobuf( self, ) -> NLPMetricsMessage: """ Convert to protobuf Returns: TYPE: Protobuf Message """ return NLPMetricsMessage( mer=self.mer.to_protobuf(), wer=self.wer.to_protobuf(), wil=self.wil.to_protobuf(), ) @classmethod def from_protobuf( cls: "NLPMetrics", message: NLPMetricsMessage, ): nlp_met = NLPMetrics() nlp_met.wer = NumberTracker.from_protobuf(message.wer) nlp_met.wil = NumberTracker.from_protobuf(message.wil) nlp_met.mer = NumberTracker.from_protobuf(message.mer) return nlp_met
def test_empty_merge_succeeds(): x1 = NumberTracker() x2 = NumberTracker() x3 = x1.merge(x2) assert isinstance(x3, NumberTracker)