def METHOD_NAME(port, debug_info):
    if port.is_output():
        return
    if port.is_inout() and port.wired():
        # TODO(leonardt/rsetaluri): Ideally, we should trace in both directions
        # for an inout; for now we assume that if it's "wired()", then it is
        # connected.
        return
    if port.is_mixed():
        for elt in port:
            yield from METHOD_NAME(elt, debug_info)
        return
    if port.trace() is None:
        # If we encounter a clock, issue a debug message that we are not
        # counting this as an unconnected port and instead will attempt to
        # automatically wire it downstream.
        if isinstance(port, ClockTypes):
            msg = "{} not driven, will attempt to automatically wire"
            _logger.debug(WiringLog(msg, port), debug_info=debug_info)
            return
        # If there is a clock nested in @port, then we need to traverse its
        # children. Note that although we use is_clock_or_nested_clock here,
        # because of the preceding check for ClockTypes, this conditional will
        # only catch the nested clock case.
        if is_clock_or_nested_clock(type(port)):
            for elt in port:
                yield from METHOD_NAME(elt, debug_info)
            return
        yield UnconnectedPortInfo(port, debug_info)
        return
    return