class_docstr: Register from names to classes. In particular, we say that direct subclasses of
  ReplaceableBase are "base classes" and we register subclasses of each base class
  in a separate namespace.
docstr: Register a new member.
  
  Args:
      cls: the new member
      base_class: (optional) what the new member is a type for
      name: name for the new member
docstr_tok: ["Register","a","new","member",".","Args",":","cls",":","the","new","member","base_class",":","(","optional",")","what","the","new","member","is","a","type","for","name",":","name","for","the","new","member"]
code: def _register(
      self,
      some_class: Type[ReplaceableBase],
      *,
      base_class: Optional[Type[ReplaceableBase]] = None,
      name: str,
  ) -> None:
      """
      Register a new member.
  
      Args:
          cls: the new member
          base_class: (optional) what the new member is a type for
          name: name for the new member
      """
      if base_class is None:
          base_class = self._base_class_from_class(some_class)
          if base_class is None:
              raise ValueError(
                  f"Cannot register {some_class}. Cannot tell what it is."
              )
      self._mapping[base_class][name] = some_class
  
imports: import dataclasses
  import inspect
  import itertools
  import sys
  import warnings
  from collections import Counter, defaultdict
  from enum import Enum
  from functools import partial
  from typing import Any, Callable, Dict, get_args, get_origin, List, Optional, Tuple, Type, TypeVar, Union
  from omegaconf import DictConfig, OmegaConf, open_dict
label_desc: Use image node_id 3 for calling the _Registry obj's underlying member method code with example usage: obj._register(some_class) without return types