Scheaven
2021-09-18 291deeb1fcf45dbf39a24aa72a213ff3fd6b3405
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
U
Et–_Eã@s$ddlmZmZGdd„deƒZdS)é)ÚDictÚOptionalc@sXeZdZdZeddœdd„Zeeddœdd„Zdeeed    œd
d „Z    eedœd d „Z
dS)ÚRegistryaÉ
    The registry that provides name -> object mapping, to support third-party
    users' custom modules.
    To create a registry (e.g. a backbone registry):
    .. code-block:: python
        BACKBONE_REGISTRY = Registry('BACKBONE')
    To register an object:
    .. code-block:: python
        @BACKBONE_REGISTRY.register()
        class MyBackbone():
            ...
    Or:
    .. code-block:: python
        BACKBONE_REGISTRY.register(MyBackbone)
    N)ÚnameÚreturncCs||_i|_dS)zI
        Args:
            name (str): the name of this registry
        N)Ú_nameÚ_obj_map)Úselfr©r
ú./utils/registry.pyÚ__init__szRegistry.__init__)rÚobjrcCs*||jkstd ||j¡ƒ‚||j|<dS)Nz=An object named '{}' was already registered in '{}' registry!)rÚAssertionErrorÚformatr)r    rr r
r
r Ú _do_register sÿÿþzRegistry._do_register)r rcs6|dkr ttdœ‡fdd„ }|S|j}ˆ ||¡dS)z§
        Register the given object under the the name `obj.__name__`.
        Can be used as either a decorator or not. See docstring of this class for usage.
        N)Ú func_or_classrcs|j}ˆ ||¡|S)N)Ú__name__r)rr©r    r
r Údeco/s zRegistry.register.<locals>.deco)Úobjectrr)r    r rrr
rr Úregister(s
zRegistry.registercCs*|j |¡}|dkr&td ||j¡ƒ‚|S)Nz,No object named '{}' found in '{}' registry!)rÚgetÚKeyErrorrr)r    rÚretr
r
r r:s ÿÿz Registry.get)N) rÚ
__module__Ú __qualname__Ú__doc__Ústrr rrrrrr
r
r
r rs
rN)Útypingrrrrr
r
r
r Ú<module>s