(modules, module_name, visit_path, resolved)
Resolve all placeholder children under a module.

    :param modules: A mapping of module names to their data dictionary.
        Placeholders are resolved in place.
    :type modules: dict(str, dict)
    :param module_name: The name of the module to resolve.
    :type module_name: str
    :param visit_path: An ordered set of visited module names.
    :type visited: collections.OrderedDict
    :param resolved: A set of already resolved module names.
    :type resolved: set(str)
Resolve all placeholder children under a module.
Resolve all placeholder children under a module .
def _resolve_module_placeholders(modules, module_name, visit_path, resolved):
    """Resolve all placeholder children under a module.

    :param modules: A mapping of module names to their data dictionary.
        Placeholders are resolved in place.
    :type modules: dict(str, dict)
    :param module_name: The name of the module to resolve.
    :type module_name: str
    :param visit_path: An ordered set of visited module names.
    :type visited: collections.OrderedDict
    :param resolved: A set of already resolved module names.
    :type resolved: set(str)
    """
    if module_name in resolved:
        return

    visit_path[module_name] = True

    module, children = modules[module_name]
    for child in list(children.values()):
        if child["type"] != "placeholder":
            continue

        if child["original_path"] in modules:
            module["children"].remove(child)
            children.pop(child["name"])
            continue

        imported_from, original_name = child["original_path"].rsplit(".", 1)
        if imported_from in visit_path:
            msg = "Cannot resolve cyclic import: {0}, {1}".format(
                ", ".join(visit_path), imported_from
            )
            LOGGER.warning(msg, type="autoapi", subtype="python_import_resolution")
            module["children"].remove(child)
            children.pop(child["name"])
            continue

        if imported_from not in modules:
            msg = "Cannot resolve import of unknown module {0} in {1}".format(
                imported_from, module_name
            )
            LOGGER.warning(msg, type="autoapi", subtype="python_import_resolution")
            module["children"].remove(child)
            children.pop(child["name"])
            continue

        _resolve_module_placeholders(modules, imported_from, visit_path, resolved)

        if original_name == "*":
            original_module, originals_map = modules[imported_from]

            # Replace the wildcard placeholder
            # with a list of named placeholders.
            new_placeholders = _expand_wildcard_placeholder(
                original_module, originals_map, child
            )
            child_index = module["children"].index(child)
            module["children"][child_index : child_index + 1] = new_placeholders
            children.pop(child["name"])

            for new_placeholder in new_placeholders:
                if new_placeholder["name"] not in children:
                    children[new_placeholder["name"]] = new_placeholder
                original = originals_map[new_placeholder["name"]]
                _resolve_placeholder(new_placeholder, original)
        elif original_name not in modules[imported_from][1]:
            msg = "Cannot resolve import of {0} in {1}".format(
                child["original_path"], module_name
            )
            LOGGER.warning(msg, type="autoapi", subtype="python_import_resolution")
            module["children"].remove(child)
            children.pop(child["name"])
            continue
        else:
            original = modules[imported_from][1][original_name]
            _resolve_placeholder(child, original)

    del visit_path[module_name]
    resolved.add(module_name)
def _resolve_module_placeholders ( modules , module_name , visit_path , resolved ) : if module_name in resolved : return visit_path [ module_name ] = True module , children = modules [ module_name ] for child in list ( children . values ( ) ) : if child [ "type" ] != "placeholder" : continue if child [ "original_path" ] in modules : module [ "children" ] . remove ( child ) children . pop ( child [ "name" ] ) continue imported_from , original_name = child [ "original_path" ] . rsplit ( "." , 1 ) if imported_from in visit_path : msg = "Cannot resolve cyclic import: {0}, {1}" . format ( ", " . join ( visit_path ) , imported_from ) LOGGER . warning ( msg , type = "autoapi" , subtype = "python_import_resolution" ) module [ "children" ] . remove ( child ) children . pop ( child [ "name" ] ) continue if imported_from not in modules : msg = "Cannot resolve import of unknown module {0} in {1}" . format ( imported_from , module_name ) LOGGER . warning ( msg , type = "autoapi" , subtype = "python_import_resolution" ) module [ "children" ] . remove ( child ) children . pop ( child [ "name" ] ) continue _resolve_module_placeholders ( modules , imported_from , visit_path , resolved ) if original_name == "*" : original_module , originals_map = modules [ imported_from ] # Replace the wildcard placeholder # with a list of named placeholders. new_placeholders = _expand_wildcard_placeholder ( original_module , originals_map , child ) child_index = module [ "children" ] . index ( child ) module [ "children" ] [ child_index : child_index + 1 ] = new_placeholders children . pop ( child [ "name" ] ) for new_placeholder in new_placeholders : if new_placeholder [ "name" ] not in children : children [ new_placeholder [ "name" ] ] = new_placeholder original = originals_map [ new_placeholder [ "name" ] ] _resolve_placeholder ( new_placeholder , original ) elif original_name not in modules [ imported_from ] [ 1 ] : msg = "Cannot resolve import of {0} in {1}" . format ( child [ "original_path" ] , module_name ) LOGGER . warning ( msg , type = "autoapi" , subtype = "python_import_resolution" ) module [ "children" ] . remove ( child ) children . pop ( child [ "name" ] ) continue else : original = modules [ imported_from ] [ 1 ] [ original_name ] _resolve_placeholder ( child , original ) del visit_path [ module_name ] resolved . add ( module_name )