Skip to content
This repository has been archived by the owner on Oct 31, 2023. It is now read-only.

Commit

Permalink
Fix error in MetricLogger for non-existing attributes (#282)
Browse files Browse the repository at this point in the history
  • Loading branch information
fmassa authored Dec 17, 2018
1 parent 4ab3356 commit 0dfac37
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
5 changes: 4 additions & 1 deletion maskrcnn_benchmark/utils/metric_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,10 @@ def update(self, **kwargs):
def __getattr__(self, attr):
if attr in self.meters:
return self.meters[attr]
return object.__getattr__(self, attr)
if attr in self.__dict__:
return self.__dict__[attr]
raise AttributeError("'{}' object has no attribute '{}'".format(
type(self).__name__, attr))

def __str__(self):
loss_str = []
Expand Down
28 changes: 28 additions & 0 deletions tests/test_metric_logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
import unittest

from maskrcnn_benchmark.utils.metric_logger import MetricLogger


class TestMetricLogger(unittest.TestCase):
def test_update(self):
meter = MetricLogger()
for i in range(10):
meter.update(metric=float(i))

m = meter.meters["metric"]
self.assertEqual(m.count, 10)
self.assertEqual(m.total, 45)
self.assertEqual(m.median, 4)
self.assertEqual(m.avg, 4.5)

def test_no_attr(self):
meter = MetricLogger()
_ = meter.meters
_ = meter.delimiter
def broken():
_ = meter.not_existent
self.assertRaises(AttributeError, broken)

if __name__ == "__main__":
unittest.main()

0 comments on commit 0dfac37

Please sign in to comment.