# Source code for avalanche.evaluation.metrics.mean

```################################################################################
# Copyright (c) 2021 ContinualAI.                                              #
# See the accompanying LICENSE file for terms.                                 #
#                                                                              #
# Date: 19-01-2021                                                             #
# Author(s): Lorenzo Pellegrini                                                #
# E-mail: contact@continualai.org                                              #
# Website: www.continualai.org                                                 #
################################################################################

from typing import SupportsFloat

from avalanche.evaluation import Metric

[docs]class Mean(Metric[float]):
"""
The standalone mean metric.

This utility metric is a general purpose metric that can be used to keep
track of the mean of a sequence of values.
"""

[docs]    def __init__(self):
"""
Creates an instance of the mean metric.

This metric in its initial state will return a mean value of 0.
The metric can be updated by using the `update` method while the mean
can be retrieved using the `result` method.
"""
self.summed: float = 0.0
self.weight: float = 0.0

def update(self, value: SupportsFloat, weight: SupportsFloat = 1.0) -> None:
"""
Update the running mean given the value.

The value can be weighted with a custom value, defined by the `weight`
parameter.

:param value: The value to be used to update the mean.
:param weight: The weight of the value. Defaults to 1.
:return: None.
"""
value = float(value)
weight = float(weight)
self.summed += value * weight
self.weight += weight

def result(self) -> float:
"""
Retrieves the mean.

Calling this method will not change the internal state of the metric.

:return: The mean, as a float.
"""
if self.weight == 0.0:
return 0.0
return self.summed / self.weight

def reset(self) -> None:
"""
Resets the metric.

:return: None.
"""
self.summed = 0.0
self.weight = 0.0

def __add__(self, other: "Mean") -> "Mean":
"""
Return a metric representing the weighted mean of the 2 means.

:param other: the other mean
:return: The weighted mean"""
res = Mean()
res.summed = self.summed + other.summed
res.weight = self.weight + other.weight
return res

[docs]class Sum(Metric[float]):
"""
The standalone sum metric.

This utility metric is a general purpose metric that can be used to keep
track of the sum of a sequence of values.

Beware that this metric only supports summing numbers and the result is
always a float value, even when `update` is called by passing `int` only.
"""

[docs]    def __init__(self):
"""
Creates an instance of the sum metric.

This metric in its initial state will return a sum value of 0.
The metric can be updated by using the `update` method while the sum
can be retrieved using the `result` method.
"""
self.summed: float = 0.0

def update(self, value: SupportsFloat) -> None:
"""
Update the running sum given the value.

:param value: The value to be used to update the sum.
:return: None.
"""
self.summed += float(value)

def result(self) -> float:
"""
Retrieves the sum.

Calling this method will not change the internal state of the metric.

:return: The sum, as a float.
"""
return self.summed

def reset(self) -> None:
"""
Resets the metric.

:return: None.
"""
self.summed = 0.0

__all__ = ["Mean", "Sum"]
```