
    !<i>%                     l    d Z ddlmZmZ erddlmZ ddlmZ ddlm	Z	 ddlm
Z
mZ  G d d          Zd	S )
z,Base utilities for documentation generation.    )TYPE_CHECKINGAny)App)	HelpPanel)CommandSpec)
format_docformat_usagec                      e Zd ZdZeddddee         dz  deeeef         fd            Zedee         dz  ded	edee         fd
            Z	ededdddde
de
f
d            Zeddde
dee         fd            Zedddededz  fd            Zedddedz  fd            Zeddedee         dedefd            Ze	 ddeeedf                  de
deeeeedf                  f         fd            Zedddde
fd            ZdS ) BaseDocGeneratorz>Base class for documentation generators with shared utilities.Nappr   command_chainreturnc                     |s| j         d         }|}|}n.|r|d         n| j         d         }d                    |          }|}|||fS )ad  Get app name, full command path, and title.

        Parameters
        ----------
        app : App
            The cyclopts App instance.
        command_chain : Optional[List[str]]
            Chain of parent commands leading to this app.

        Returns
        -------
        Tuple[str, str, str]
            (app_name, full_command, title)
        r    )namejoin)r   r   app_namefull_commandtitles        /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/cyclopts/docs/base.pyget_app_infozBaseDocGenerator.get_app_info   s`       	!x{H#LEE+8I}Q''chqkH88M22L Eu,,    command_namer   c                     | r| |gz   S ||gS )ar  Build command chain for a subcommand.

        Parameters
        ----------
        command_chain : Optional[List[str]]
            Current command chain.
        command_name : str
            Name of the subcommand.
        app_name : str
            Name of the root app.

        Returns
        -------
        List[str]
            Updated command chain.
         )r   r   r   s      r   build_command_chainz$BaseDocGenerator.build_command_chain+   s$    $  	, L>11l++r   subapp
parent_appinclude_hiddenc                     | |j         v s	| |j        v rdS t          |t          |                    sdS |s	|j        sdS dS )a  Check if a command should be skipped.

        Parameters
        ----------
        command_name : str
            Name of the command.
        subapp : App
            The subcommand App instance.
        parent_app : App
            The parent App instance.
        include_hidden : bool
            Whether to include hidden commands.

        Returns
        -------
        bool
            True if command should be skipped.
        TF)_help_flags_version_flags
isinstancetypeshow)r   r   r   r   s       r   should_skip_commandz$BaseDocGenerator.should_skip_commandB   s^    ( :111\ZE^5^5^4&$z"2"233 	4 	fk 	4ur   panelr   c                 6    |r| j         S d | j         D             S )aK  Filter help panel entries based on visibility settings.

        Parameters
        ----------
        panel : HelpPanel
            The help panel to filter.
        include_hidden : bool
            Whether to include hidden entries.

        Returns
        -------
        List[Any]
            Filtered panel entries.
        c                 \    g | ])}|j         rt          d  |j         D                       '|*S )c              3   v   K   | ]4}|                     d           p|                     d          p|dk    V  5dS )--help	--version-hN)
startswith.0ns     r   	<genexpr>zBBaseDocGenerator.filter_help_entries.<locals>.<listcomp>.<genexpr>w   sL      #v#vijALL$:$:$dall;>W>W$d[\`d[d#v#v#v#v#v#vr   namesallr0   es     r   
<listcomp>z8BaseDocGenerator.filter_help_entries.<locals>.<listcomp>t   sU     
 
 
G
 !$#v#vnonu#v#v#v v v

 
 
r   )entries)r'   r   s     r   filter_help_entriesz$BaseDocGenerator.filter_help_entriesa   s7       	!= 
 
]
 
 
 	
r   help_formatc                 &    t          | |          }|S )a  Extract app description.

        Parameters
        ----------
        app : App
            The App instance.
        help_format : str
            Help format type.

        Returns
        -------
        Optional[Any]
            The extracted description object, or None.
        )r   )r   r;   descriptions      r   extract_descriptionz$BaseDocGenerator.extract_descriptionz   s      !k22r   c                 T    | j         | j         r| j         ndS t          | g           }|S )zExtract usage string.

        Parameters
        ----------
        app : App
            The App instance.

        Returns
        -------
        Optional[Any]
            The extracted usage object, or None.
        N)usager	   )r   r@   s     r   extract_usagezBaseDocGenerator.extract_usage   s3     9  #	3399t3S"%%r   $
usage_textprefixc                 V   | sdS d| v r(|                      dd                                          } |rd                    |          nd}|                     dd          }t	          |          dk    r|r| d| d|d          }n|r| d| }n| d|  }|                                S )ap  Format usage line with proper command path.

        Parameters
        ----------
        usage_text : str
            Raw usage text.
        command_chain : List[str]
            Command chain for the app.
        prefix : str
            Prefix for the usage line (e.g., "$").

        Returns
        -------
        str
            Formatted usage line.
         zUsage:r   N   )replacestripr   splitlen)rC   r   rD   r   parts
usage_lines         r   format_usage_linez"BaseDocGenerator.format_usage_line   s    $  	2z!!#++Hb99??AAJ2?Gsxx...R  q))u::>>m>">>\>>E!H>>JJ 	2"33\33JJ"11Z11J!!!r   Fhelp_panels_with_groupsc                    g g g g d}| D ]\  }}|s
|r|j         s|j        dk    r||s\d |j        D             }|rH t          |          ||j        |j        |j                  }|d                             ||f           {|d                             ||f           |j        dk    r$|j        }|dk    r|d                             ||f           |r"|d	vr|d
                             ||f           g }g }	|j        D ]?}
|
j        o|
j        du }|r|                    |
           *|	                    |
           @|rC t          |          |d|j        |j                  }|d                             ||f           |	rC t          |          |	d|j        |j                  }|d                             ||f           |S )a  Categorize help panels by type.

        Parameters
        ----------
        help_panels_with_groups : List[Tuple[Any, HelpPanel]]
            List of (group, panel) tuples.
        include_hidden : bool
            Whether to include hidden panels.

        Returns
        -------
        Dict[str, List[Tuple[Any, HelpPanel]]]
            Categorized panels with keys: 'commands', 'arguments', 'options', 'grouped'.
        )commands	argumentsoptionsgroupedcommandc                 \    g | ])}|j         rt          d  |j         D                       '|*S )c              3      K   | ]}|d v V  	dS ))r+   r,   r-   Nr   r/   s     r   r2   z@BaseDocGenerator.categorize_panels.<locals>.<listcomp>.<genexpr>   s)      /d/dWX5R0R/d/d/d/d/d/dr   r3   r6   s     r   r8   z6BaseDocGenerator.categorize_panels.<locals>.<listcomp>   sU     ( ( ( !( -0/d/d\]\c/d/d/d,d,d(( ( (r   )r9   r   r=   formatrQ   	parameter	ArgumentsrR   )
ParametersOptionsrT   Nr\   rS   )	r%   rX   r9   r$   r   r=   appendrequireddefault)rO   r   resultgroupr'   filtered_entries
panel_copyr   argsoptsentryis_positionals               r   categorize_panelsz"BaseDocGenerator.categorize_panels   sy   $ !rbRPP3 0	F 0	FLE5! e EJ |y((% >( (!&( ( ($
 ( G%0T%[[$4"'+(-(9#(<	& & &
 z*115*2EFFF:&--uen====,,K'';'..u~>>>> Fu,EEE9%,,eU^<<<<DD!& / /(-(P5=D;P( / KK.... KK.... H%0T%[[$(IZchco& & &
 {+22E:3FGGG F%0T%[[$(	uGXafam& & &
 y)00%1DEEEr   c              #   4  K   | j         sdS | j                                         D ]r\  }}|| j        v s	|| j        v rt	          |t
                    r|                    |           n|}t	          |t          |                     sb|s|j        sl||fV  sdS )a  Iterate through app commands, yielding valid resolved subapps.

        Automatically resolves CommandSpec instances to App instances.

        Parameters
        ----------
        app : App
            The App instance.
        include_hidden : bool
            Whether to include hidden commands.

        Yields
        ------
        Tuple[str, App]
            (command_name, resolved_subapp) for each valid command.
        N)		_commandsitemsr!   r"   r#   r   resolver$   r%   )r   r   r   app_or_specr   s        r   iterate_commandsz!BaseDocGenerator.iterate_commands  s      $ } 	F!$!4!4!6!6 	 	D+s&&$#2D*D*D 2<K1U1Uf[((---[fFfd3ii00 ! &+ ,	 	r   )N)rB   )F)__name__
__module____qualname____doc__staticmethodliststrtupler   r   boolr&   r   r:   r>   rA   rN   dictrh   rn   r   r   r   r   r      s       HH- -% -S	D0@ -ERUWZ\_R_L` - - - \-4 ,49t+; ,3 ,Z] ,bfgjbk , , , \,, # u % ae jn    \< 
; 
 
c 
 
 
 \
0  S S4Z    \$ 5 S4Z    \& !" !"c !"$s) !"S !"[^ !" !" !" \!"F W\E E!%eC,<&=!>EPTE	c4c;./00	1E E E \EN ! !e !T ! ! ! \! ! !r   r   N)rr   typingr   r   cyclopts.corer   cyclopts.helpr   cyclopts.command_specr   r   r	   r   r   r   r   <module>r}      s    2 2 % % % % % % % % (!!!!!!'''''' - - - - - - 2 2 2 2 2 2 2 2b b b b b b b b b br   