def _has_lazy_label(node: TypeInfo) -> bool:
    """
    Check whether a choices type has any lazy strings for labels.

    This is used to determine choices types that do not use lazy strings for labels such that a
    more simple type can be used instead of the default in the stubs.
    """
    assert node.is_enum

    if (sym := node.get("__empty__")) is not None:
        _empty_type = get_proper_type(sym.type)
        if isinstance(_empty_type, Instance) and _empty_type.type.has_base(fullnames.STR_PROMISE_FULLNAME):
            # If the empty label is lazy, then we don't need to check all the members.
            return True

    # TODO: [mypy 1.14+] Use `node.enum_members` and remove `_get_enum_members()` backport.
    for member_name in _get_enum_members(node):
        if (sym := node.get(member_name)) is None:
            continue

        _member_type = get_proper_type(sym.type)
        if not isinstance(_member_type, TupleType):
            # Member has auto-generated plain string label - enum.auto() or no explicit label.
            continue

        if _member_type.length() < 2:
            # There need to be at least two items in the tuple.
            continue

        _label_type = get_proper_type(_member_type.items[-1])
        if isinstance(_label_type, Instance) and _label_type.type.has_base(fullnames.STR_PROMISE_FULLNAME):
            # If any member label is lazy, then we don't need to check the remaining members.
            return True

    return False

    Check whether a choices type has any lazy strings for labels.

    This is used to determine choices types that do not use lazy strings for labels such that a
    more simple type can be used instead of the default in the stubs.
    
mypy_django_plugin/transformers/choices.py