From 46a2a0952b05d366574ce3ce6889e1c2b9381897 Mon Sep 17 00:00:00 2001 From: nbei Date: Thu, 15 Apr 2021 17:30:01 +0800 Subject: [PATCH 1/5] fix raise error bug in registering multiple names --- mmcv/utils/registry.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/mmcv/utils/registry.py b/mmcv/utils/registry.py index f4e129e035..70948796b3 100644 --- a/mmcv/utils/registry.py +++ b/mmcv/utils/registry.py @@ -1,5 +1,6 @@ -import inspect import warnings + +import inspect from functools import partial from .misc import is_seq_of @@ -239,11 +240,6 @@ def _register_module(self, module_class, module_name=None, force=False): module_name = module_class.__name__ if isinstance(module_name, str): module_name = [module_name] - else: - assert is_seq_of( - module_name, - str), ('module_name should be either of None, an ' - f'instance of str or list, but got {type(module_name)}') for name in module_name: if not force and name in self._module_dict: raise KeyError(f'{name} is already registered ' @@ -304,8 +300,10 @@ def register_module(self, name=None, force=False, module=None): return module # raise the error ahead of time - if not (name is None or isinstance(name, str)): - raise TypeError(f'name must be a str, but got {type(name)}') + if not (name is None or isinstance(name, str) or is_seq_of(name, str)): + raise TypeError( + 'name must be either of None, an instance of str or list,' + f' but got {type(name)}') # use it as a decorator: @x.register_module() def _register(cls): From 816439d6b9bf94460739c48b0c863ffa48b6e8cd Mon Sep 17 00:00:00 2001 From: nbei Date: Fri, 16 Apr 2021 14:07:22 +0800 Subject: [PATCH 2/5] fix bug in checking the type of name --- mmcv/utils/registry.py | 12 ++++++------ tests/test_utils/test_registry.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mmcv/utils/registry.py b/mmcv/utils/registry.py index 70948796b3..b7c9107bb5 100644 --- a/mmcv/utils/registry.py +++ b/mmcv/utils/registry.py @@ -293,18 +293,18 @@ def register_module(self, name=None, force=False, module=None): if isinstance(name, type): return self.deprecated_register_module(name, force=force) + # raise the error ahead of time + if not (name is None or isinstance(name, str) or is_seq_of(name, str)): + raise TypeError( + 'name must be either of None, an instance of str or a sequence' + f' of str, but got {type(name)}') + # use it as a normal method: x.register_module(module=SomeClass) if module is not None: self._register_module( module_class=module, module_name=name, force=force) return module - # raise the error ahead of time - if not (name is None or isinstance(name, str) or is_seq_of(name, str)): - raise TypeError( - 'name must be either of None, an instance of str or list,' - f' but got {type(name)}') - # use it as a decorator: @x.register_module() def _register(cls): self._register_module( diff --git a/tests/test_utils/test_registry.py b/tests/test_utils/test_registry.py index 4a1cc90f6e..6ec619050f 100644 --- a/tests/test_utils/test_registry.py +++ b/tests/test_utils/test_registry.py @@ -78,7 +78,7 @@ class SphynxCat: assert repr(CATS) == repr_str # name type - with pytest.raises(AssertionError): + with pytest.raises(TypeError): CATS.register_module(name=7474741, module=SphynxCat) # the registered module should be a class From d1f35b5e39ccb350be2cda7792154d98f4ad102e Mon Sep 17 00:00:00 2001 From: nbei Date: Fri, 16 Apr 2021 14:31:46 +0800 Subject: [PATCH 3/5] fix lint --- mmcv/utils/registry.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mmcv/utils/registry.py b/mmcv/utils/registry.py index b7c9107bb5..2d4bf103ba 100644 --- a/mmcv/utils/registry.py +++ b/mmcv/utils/registry.py @@ -1,6 +1,5 @@ -import warnings - import inspect +import warnings from functools import partial from .misc import is_seq_of From 13452138177264f274b5155eee198cf4cacff618 Mon Sep 17 00:00:00 2001 From: nbei Date: Sat, 17 Apr 2021 19:49:28 +0800 Subject: [PATCH 4/5] fix unit test for registry --- tests/test_utils/test_registry.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/test_utils/test_registry.py b/tests/test_utils/test_registry.py index 6ec619050f..0fa18d6bda 100644 --- a/tests/test_utils/test_registry.py +++ b/tests/test_utils/test_registry.py @@ -46,11 +46,12 @@ class BritishShorthair: assert CATS.get('PersianCat') is None assert 'PersianCat' not in CATS - @CATS.register_module(name='Siamese') + @CATS.register_module(name=['Siamese', 'Siamese2']) class SiameseCat: pass assert CATS.get('Siamese').__name__ == 'SiameseCat' + assert CATS.get('Siamese2').__name__ == 'SiameseCat' class SphynxCat: pass From bdcf291a042420b3e9e2b7c688c7ffdd7ece88da Mon Sep 17 00:00:00 2001 From: nbei Date: Sun, 25 Apr 2021 10:57:00 +0800 Subject: [PATCH 5/5] fix bug in unit test --- tests/test_utils/test_registry.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/test_utils/test_registry.py b/tests/test_utils/test_registry.py index 0fa18d6bda..bfef531353 100644 --- a/tests/test_utils/test_registry.py +++ b/tests/test_utils/test_registry.py @@ -69,6 +69,8 @@ class SphynxCat: ".Munchkin'>, ") repr_str += ("'Siamese': .SiameseCat'>, ") + repr_str += ("'Siamese2': .SiameseCat'>, ") repr_str += ("'Sphynx': .SphynxCat'>, ") repr_str += ("'Sphynx1':