
    f3i                         d dl mZmZmZ d dlmZ d dlmZ erd dlm	Z	  G d de      Z
deeeee   f      deez  d	efd
Zddddedeeeee
   f      fdZddddedeedee   f      fdZy)    )TYPE_CHECKINGAny
NamedTuple)CommandSpec)Group)Appc                   0    e Zd ZU dZeedf   ed<   ded<   y)RegisteredCommandzAn App with the names it was registered under.

    Attributes
    ----------
    names : tuple[str, ...]
        All names (including aliases) this command is registered under.
    app : "App"
        The command's App instance.
    .namesr   appN)__name__
__module____qualname____doc__tuplestr__annotations__     c/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/cyclopts/group_extractors.pyr
   r
   
   s     c?	Jr   r
   group_mappinggroupelementc                    t        |t              rt        |      }nt        |t              rnt        | D ]4  }|d   j                  |j                  k(  s |d   j                  |        y  | j                  ||gf       y )Nr      )
isinstancer   r   	TypeErrornameappend)r   r   r   mappings       r   _create_or_appendr!      sx     %e	E5	!  11:??ejj(AJg&1
 	egY/0r   r   r   resolve_lazyreturnc                 x   t        | j                  t              rJ | j                  xs t        j                         }i }i }| D ]o  }| j                  |d      }t        |t              r|j                  s|s5| |   }t        |      }|j                  |g       j                  |       ||vsk|||<   q |g fg}	|j                         D ]  }t        |j                  t              sJ |j                  D ]k  }
t        |
t              s|	D ]@  }|d   |
u r "|d   j                  |
j                  k(  s)t        d|
j                   d       |	j                  |
g f       m  |j!                         D ]  \  }}t        ||         }t#        ||      }|j                  r;t        |j                  t              sJ |j                  D ]  }
t%        |	|
|        gt%        |	| j                  xs t        j                         |        |	D cg c]
  }|d   s	| }	}|	j'                  d        |	S c c}w )	a  Extract Group/App association from all commands of ``app``.

    Parameters
    ----------
    app : App
        The application to extract groups from.
    resolve_lazy : bool
        If ``True``, resolve lazy commands (import their modules) to include them
        in the output. If ``False`` (default), skip unresolved lazy commands.
        Set to ``True`` when generating static artifacts that need all commands,
        such as shell completion scripts.

    Returns
    -------
    list
        List of items where each item is a tuple containing:

        * :class:`.Group` - The group

        * ``list[RegisteredCommand]`` - List of RegisteredCommand tuples containing
          the registered names and app instance for each command.
    T)recurse_metar   zCommand Group "z" already exists.r   c                      | d   j                   S )Nr   )r   )xs    r   <lambda>z!groups_from_app.<locals>.<lambda>|   s    QqTYY r   )key)r   group_commandsr   r   create_default_commands	_get_itemr   is_resolvedid
setdefaultr   valuesr   r   r   
ValueErroritemsr
   r!   sort)r   r"   r*   	app_namesunique_appsr   cmdsubappapp_idr   r   r    r   registered_commandr'   s                  r   groups_from_appr:   .   sG   . #,,c222''J5+H+H+JN ')I"$K 	)mmDtm4c;'TFVR(//5$"(K	) 
BM
 $$& 
6&,,...\\ 	6E%', 6GqzU* EJJ6(?5::,FW)XYY	6 "((%5	6
6 &++- xi'(.uf=<<fllE222 L!-8JKL mS-?-?-b5C`C`Cbdvwx !.611Q6M6 ./ 7s   
H7H7	input_appc                 ,   g }g }t        | |      D ]A  \  }}|D ]7  }|j                  }	 |j                  |      }||   d   j                  |       9 C |S # t        $ r2 t	        |      }|j                  |g f       |j                  |       Y Ww xY w)N)r"   r   )r:   r   indexr1   lenr   )	r;   r"   out	seen_appsr   registered_commandsr9   r   r=   s	            r   inverse_groups_from_apprB      s    
CI&5il&[ 	("""5 	($((C&!,
 JqM  '	(	( J  &C

C9%  %&s   A8BBN)F)typingr   r   r   cyclopts.command_specr   cyclopts.groupr   cyclopts.corer   r
   listr   r   r!   boolr:   rB   r   r   r   <module>rI      s    1 1 -  !
 1eT#Y./01;1 1*P Pd PtE%QUVgQhJhDi?j Pfu D TRWX]_cdi_jXjRkMl r   