- if isinstance(value, AvgStdevMetadata):
- sum_0 += value.size
- sum_1 += value.avg * value.size
- sum_2 += value.stdev * value.stdev * value.size
- sum_2 += value.avg * value.avg * value.size
- else: # The value is assumed to be float.
- sum_0 += 1
- sum_1 += value
- sum_2 += value * value
- if sum_0 < 1:
+ if not isinstance(value, AvgStdevMetadata):
+ value = AvgStdevMetadata(size=1, avg=value)
+ old_size = size
+ delta = value.avg - avg
+ size += value.size
+ avg += delta * value.size / size
+ moment_2 += value.stdev * value.stdev * value.size
+ moment_2 += delta * delta * old_size * value.size / size
+ if size < 1: