|
|
|
import os |
|
|
|
from omegaconf import DictConfig, OmegaConf |
|
|
|
from .instantiate import instantiate |
|
from .lazy import LazyCall, LazyConfig |
|
from .omegaconf_patch import to_object |
|
|
|
OmegaConf.to_object = to_object |
|
|
|
PLACEHOLDER = None |
|
LazyDict = DictConfig |
|
|
|
__all__ = ["instantiate", "LazyCall", "LazyConfig", "PLACEHOLDER", "LazyDict"] |
|
|
|
|
|
DOC_BUILDING = os.getenv("_DOC_BUILDING", False) |
|
|
|
|
|
def fixup_module_metadata(module_name, namespace, keys=None): |
|
""" |
|
Fix the __qualname__ of module members to be their exported api name, so |
|
when they are referenced in docs, sphinx can find them. Reference: |
|
https://github.com/python-trio/trio/blob/6754c74eacfad9cc5c92d5c24727a2f3b620624e/trio/_util.py#L216-L241 |
|
""" |
|
if not DOC_BUILDING: |
|
return |
|
seen_ids = set() |
|
|
|
def fix_one(qualname, name, obj): |
|
|
|
|
|
if id(obj) in seen_ids: |
|
return |
|
seen_ids.add(id(obj)) |
|
|
|
mod = getattr(obj, "__module__", None) |
|
if mod is not None and (mod.startswith(module_name) or mod.startswith("fvcore.")): |
|
obj.__module__ = module_name |
|
|
|
|
|
|
|
if hasattr(obj, "__name__") and "." not in obj.__name__: |
|
obj.__name__ = name |
|
obj.__qualname__ = qualname |
|
if isinstance(obj, type): |
|
for attr_name, attr_value in obj.__dict__.items(): |
|
fix_one(objname + "." + attr_name, attr_name, attr_value) |
|
|
|
if keys is None: |
|
keys = namespace.keys() |
|
for objname in keys: |
|
if not objname.startswith("_"): |
|
obj = namespace[objname] |
|
fix_one(objname, objname, obj) |
|
|
|
|
|
fixup_module_metadata(__name__, globals(), __all__) |
|
del fixup_module_metadata |
|
|