
    !<i8              	       V   d Z ddlZddlZddlZddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZ ddlmZmZ  ed          Zerdd	lmZ dd
lmZ ddlmZ nddlmZ  ej        ed          ZddlmZ  G d de          Z G d de          Z  G d de           Z!de"deee         gee         f         fdZ#de$fdZ%de$fdZ&ddez  ee         z  de'edf         fdZ(ddez  ee         z  de)e         fdZ*ddez  ee         z  de'edf         dz  fd Z+dedefd!Z,d"ded#         z  ez  dedz  fd$Z-d%e"de"fd&Z.d%e"de"fd'Z/d(ee         d)e0dee'edf                  fd*Z1d+d,d-e"de$fd.Z2d/ede$fd0Z3d1 Z4e G d2 d3                      Z5d<d5d6d7e0de"fd8Z6d=d;Z7dS )>z^To prevent circular dependencies, this module should never import anything else from Cyclopts.    N)CallableIterableIteratorSequence)suppress)
itemgetter)TYPE_CHECKINGAnyLiteralTypeVar)fieldfrozenT)JSONDecodeError)r   Console)defineT)unsafe_hash)stdlib_module_namesc                   2    e Zd ZdefdZded         fdZdS )SentinelMetareturnc                     d| j          dS )N<>)__name__clss    /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/cyclopts/utils.py__repr__zSentinelMeta.__repr__   s    "3<""""    Fc                     dS )NF r   s    r   __bool__zSentinelMeta.__bool__!   s    ur!   N)r   
__module____qualname__strr    r   r$   r#   r!   r   r   r      sN        # # # # #      r!   r   c                       e Zd Zd ZdS )Sentinelc                      t          d          )NzGSentinel objects are not intended to be instantiated. Subclass instead.)
ValueErrorr   s    r   __new__zSentinel.__new__&   s    bcccr!   N)r   r%   r&   r,   r#   r!   r   r)   r)   %   s(        d d d d dr!   r)   )	metaclassc                       e Zd ZdZdS )UNSETzTSpecial sentinel value indicating that no data was provided. **Do not instantiate**.N)r   r%   r&   __doc__r#   r!   r   r/   r/   *   s        ^^^^r!   r/   targetr   c                 \     dt           t                   dt           t                   f fd}|S )zJClass decorator that records init argument names as a tuple to ``target``.r   r   c                     | j         t          j                  }t          d |j        D                       t          j                  fd            }|| _         | S )Nc              3   &   K   | ]}|d k    |V  dS )selfNr#   ).0names     r   	<genexpr>z1record_init.<locals>.decorator.<locals>.<genexpr>4   s'      ]]TdV\nnDnnnn]]r!   c                      | g|R i | t                               | t          fdt          t	          |                    D                       t          |          z              d S )Nc              3   (   K   | ]}|         V  d S Nr#   )r6   iparam_namess     r   r8   zCrecord_init.<locals>.decorator.<locals>.new_init.<locals>.<genexpr>:   s'      2\2\a;q>2\2\2\2\2\2\r!   )object__setattr__tuplerangelen)r5   argskwargsoriginal_initr=   r1   s      r   new_initz0record_init.<locals>.decorator.<locals>.new_init6   s    M$0000000tVU2\2\2\2\5QTUYQZQZK[K[2\2\2\-\-\_dek_l_l-lmmmmmr!   )__init__inspect	signaturer@   
parameters	functoolswraps)r   function_signaturerF   rE   r=   r1   s      @@r   	decoratorzrecord_init.<locals>.decorator1   s    $.}==]]-?-J]]]]]		'	'	n 	n 	n 	n 	n 	n 
(	'	n
  
r!   )typer   )r1   rN   s   ` r   record_initrP   .   s?    tAw 47       r!   c                     t          | t          t          z  t          z  t          z            rdS t          | t
                     ot          | t                    S )NT)
isinstancelistr@   setdictr'   r   objs    r   is_iterablerX   B   sI    #te|c)D011 t#s###A
3(A(AAr!   c                 n    	 t          j        |           ot          | |          S # t          $ r Y dS w xY w)ac  Safely check if a type is both a class and a subclass of target_class.

    Parameters
    ----------
    hint : Any
        The type to check.
    target_class : type
        The target class to check subclass relationship against.

    Returns
    -------
    bool
        True if hint is a class and is a subclass of target_class, False otherwise.
    F)rH   isclass
issubclass	TypeError)hinttarget_classs     r   is_class_and_subclassr_   H   sH    t$$GD,)G)GG   uus   #& 
44value.c                 L    | dS t          |           rt          |           S | fS )a  Convert a single element or an iterable of elements into a tuple.

    Intended to be used in an ``attrs.Field``. If :obj:`None` is provided, returns an empty tuple.
    If a single element is provided, returns a tuple containing just that element.
    If an iterable is provided, converts it into a tuple.

    Parameters
    ----------
    value: Any | Iterable[Any] | None
        An element, an iterable of elements, or None.

    Returns
    -------
    tuple[Any, ...]: A tuple containing the elements.
    Nr#   )rX   r@   r`   s    r   to_tuple_converterrc   ^   s1      }r	U		 U||xr!   c                 :    t          t          |                     S r;   )rS   rc   rb   s    r   to_list_converterre   v   s    "5))***r!   c                 0    | dS | sdS t          |           S )zsConvert a string or Iterable or None into an Iterable or None.

    Intended to be used in an ``attrs.Field``.
    Nr#   )rc   rb   s    r   optional_to_tuple_converterrg   z   s)    
 }t re$$$r!   c                 ^    | t           S t          j        |           rt          |           S | S )aB  Convert sort_key value, consuming generators with :func:`next`.

    Parameters
    ----------
    value : Any
        The sort_key value to convert. Can be None, a generator, or any other value.

    Returns
    -------
    Any
        UNSET if value is None, ``next(value)`` if generator, otherwise value unchanged.
    )r/   rH   isgeneratornextrb   s    r   sort_key_converterrk      s2     }		U	#	# E{{r!   input_value)defaultplainc                     | dS t          | t                    r?| dk    rddlm}  |            S | dk    rddlm}  |            S t          d| d          | S )	a  Convert string literals to help formatter instances.

    Parameters
    ----------
    input_value : None | Literal["default", "plain"] | Any
        The input value to convert. Can be None, "default", "plain", or a formatter instance.

    Returns
    -------
    Any | None
        None, or a HelpFormatter instance.

    Notes
    -----
    Lazily imports formatters to avoid importing Rich during normal execution.
    Nrm   r   )DefaultFormatterrn   )PlainFormatterzUnknown formatter: z. Must be 'default' or 'plain')rR   r'   cyclopts.help.formattersrp   rq   r+   )rl   rp   rq   s      r   help_formatter_converterrs      s    & t	K	%	% )##AAAAAA##%%%G##??????!>###`;```aaa r!   sc                     t          j        dd |           }t          j        dd |          }t          j        dd |          }|                                S )Nz([A-Z]+)([A-Z][a-z])c                 \    |                      d           d|                      d           S N   _   groupms    r   <lambda>z"_pascal_to_snake.<locals>.<lambda>   s(    6R6Raggajj6R6R r!   z([a-z])([A-Z])c                 \    |                      d           d|                      d           S rw   r{   r}   s    r   r   z"_pascal_to_snake.<locals>.<lambda>   (    1771::0L0L

0L0L r!   z([0-9])([A-Z])c                 \    |                      d           d|                      d           S rw   r{   r}   s    r   r   z"_pascal_to_snake.<locals>.<lambda>   r   r!   )resublower)rt   snakes     r   _pascal_to_snaker      s[     F*,R,RTUVVEF$&L&LeTTEF$&L&LeTTE;;==r!   c                     t          |                                                               dd                              d          S )a  Converts a python identifier into a CLI token.

    Performs the following operations (in order):

    1. Convert PascalCase to snake_case.
    2. Convert the string to all lowercase.
    3. Replace ``_`` with ``-``.
    4. Strip any leading/trailing ``-`` (also stripping ``_``, due to point 3).

    Intended to be used with :attr:`App.name_transform` and :attr:`Parameter.name_transform`.

    Parameters
    ----------
    s: str
        Input python identifier string.

    Returns
    -------
    str
        Transformed name.
    ry   -)r   r   replacestrip)rt   s    r   default_name_transformr      s<    , A$$&&..sC88>>sCCCr!   iterablenc                     t          |           |z  rt          | d| d          t          |           g|z  }t          |ddiS )a-  Collect data into non-overlapping fixed-length chunks or blocks.

    https://docs.python.org/3/library/itertools.html#itertools-recipes

    Parameters
    ----------
    iterable: Sequence[Any]
        Some iterable sequence to group.
    n: int
        Number of elements to put in each group.
    z is not divisible by .strictF)rB   r+   iterzip)r   r   	iteratorss      r   grouperr      s]     8}}q CHAAQAAABBBh 1$I	(%(((r!   F)allow_numberstokenc                    |sct          t                    5  t          |            |                                 dk    r	 ddd           dS 	 ddd           dS # 1 swxY w Y   |                     d          S )a8  Checks if a token looks like an option.

    Namely, negative numbers are not options, but a token like ``--foo`` is.

    Parameters
    ----------
    token: str
        String to interpret.
    allow_numbers: bool
        If :obj:`True`, then negative numbers (e.g. ``"-2"``) will return :obj:`True`.
        Otherwise, numbers will be interpreted as non-option-like (:obj:`False`).
        Note: ``-j`` **is option-like**, even though it can represent an imaginary number.

    Returns
    -------
    bool
        Whether or not the ``token`` is option-like.
    z-jNTFr   )r   r+   complexr   
startswith)r   r   s     r   is_option_liker      s    &  j!! 	 	ENNN{{}}$$ 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 C   s   )AAA"ArW   c                 d    t          | dd                              d          d         t          v S )Nr%    r   r   )getattrsplitr   rV   s    r   
is_builtinr     s-    3b))//44Q7;NNNr!   c                    t          | t          t                              r| S t          |           r | |i |S t	          |           rg }| D ]}t          |t          t                              r|                    |           :t          |          r|                     ||i |           et	          |          r$|                    t          |g|R i |           |                    |           t          |          S | S )a  Recursively resolves callable elements in a tuple.

    Returns an object that "looks like" the input, but with all callable's invoked
    and replaced with their return values. Positional and keyword elements will be
    passed along to each invocation.
    )rR   rO   r)   callablerX   appendresolve_callablesr@   )trC   rD   resolvedelements        r   r   r     s+    !T(^^$$ {{ q$!&!!!	Q  	) 	)G'4>>22 )(((('"" ) 8 8 89999W%% ) 1' KD K K KF K KLLLL((((Xr!   c                       e Zd ZU dZeed<   	  ee          Zeed<   	 eed<   	 e	de
d          ded          fd            Zd	S )

SortHelperzLSort a list of objects by an external key and retrieve the objects in-order.key)	converterfallback_keyr`   entriesr   c                 \   ddl m}m}m} g }g }g }g }g }g }	| D ]}
|
j        |u r|                    d|
f           $|
j        |u r|                    d|
f           E|
j        |u r|                    d|
f           f|
j        t          dfv r|	                    |
j        |
f           t          |
j                  rC|
j        d         t          dfv r-|                    |
j        dd         |
j        z   |
f           |                    |
j        |
j        f|
f           |	                    t          d                     |	                    t          d                     |		                    t          d                     ||z   |z   |z   |z   |	z   }d |D             S )z(Sorts a sequence of :class:`SortHelper`.r   )#DEFAULT_ARGUMENTS_GROUP_SORT_MARKER"DEFAULT_COMMANDS_GROUP_SORT_MARKER$DEFAULT_PARAMETERS_GROUP_SORT_MARKERNrx   )r   c                     g | ]
}|d          S )rx   r#   )r6   xs     r   
<listcomp>z#SortHelper.sort.<locals>.<listcomp>u  s    '''!'''r!   )cyclopts.groupr   r   r   r   r   r/   r   rX   sortr   )r   r   r   r   default_commands_groupdefault_arguments_groupdefault_parameters_groupuser_sort_keyordered_no_user_sort_keyno_user_sort_keyentrycombineds               r   r   zSortHelper.sortH  s8   	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 "$"$#% #%  	O 	OEy>>>&--tUm<<<<AAA'..e}====BBB(//u>>>>udm++ '');U(CDDDDUY'' OEIaLUDM,I,I )//122AS1SUZ0[\\\\$$uy%2D&Eu%MNNNNz!}}--- %%*Q--%888*Q--000 #%&&'  '	'
  	 ('h''''r!   N)r   r%   r&   r0   r
   __annotations__r   rc   r   staticmethodr   rS   r   r#   r!   r   r   r   7  s         VV	HHH
 (:;;;L#;;; JJJJ,(h|, ,(l1C ,( ,( ,( \,( ,( ,(r!   r      decode_errorr   contextc           
      x   | j                                         }|| j        dz
           }| j        dz
  }||z
  }|dk    rd}d}|}nd}||z
  }||z   }|t	          |          k    rt	          |          dz   }d}	nd}	|||         }
dt	          |          |z   z  dz   }d| |
 |	 d	| d
t          |            }|S )zNot intended to be a super robust implementation, but robust enough to be helpful.

    Parameters
    ----------
    context: int
        Number of surrounding-character context
    rx   r   r   z... z ... ^zJSONDecodeError:
    z
    
)doc
splitlineslinenocolnorB   r'   )r   r   lineslineerror_indexstartprefix_ellipsissegment_error_indexendsuffix_ellipsissegmentcarat_pointerresponses                r   json_decode_error_verbosifierr   x  s    ''))E$q()D$q(K'!Ezz) )E1

C
c$ii$ii!m 59oG3//2EEFLM 	wv'v?vvR_vvcfgsctctvv  Or!   consoler   c           
         ddl m} | j        pd} |di ddd|dt          | dd	          d
| j        pd	d| j        pd	d| j        d| j        dt          | dd	          d| j        dt          | dd          dt          | dd          dt          | dd	          dt          | dd          d| j	        d| j
        d| j        dt          | dd	          dt          | dd	          dt          | dd	          S ) a'  Create an error console (stderr=True) that inherits settings from a source console.

    Parameters
    ----------
    console : Console
        Source Rich Console to copy settings from.

    Returns
    -------
    Console
        New Rich Console with stderr=True and inherited settings.
    r   r   autostderrTcolor_systemforce_terminal_force_terminalNforce_jupyterforce_interactive	soft_wrapwidthheight_heighttab_sizemarkup_markupemoji_emojiemoji_variant_emoji_variant	highlight
_highlightno_colorlegacy_windowssafe_box_environget_datetimeget_timer#   )rich.consoler   r   r   
is_jupyteris_interactiver   _widthr   r   r   r   )r   r   r   s      r   !create_error_console_from_consoler     s    %$$$$$'16L7   t!\ w(94@@@ (0D	
 "08D ## nn w	4000 !! w	4000 gx... g'7>>> '<666 !! --  !!!" *d333#$ Wnd;;;%& *d333' r!   )r   )r   r   r   r   )8r0   rK   rH   r   collections.abcr   r   r   r   
contextlibr   operatorr   typingr	   r
   r   r   attrsr   r   r   jsonr   r   r   r   partialsysr   rO   r   r)   r/   r'   rP   boolrX   r_   r@   rc   rS   re   rg   rk   rs   r   r   intr   r   r   r   r   r   r   r#   r!   r   <module>r     s   d d      				 B B B B B B B B B B B B             7 7 7 7 7 7 7 7 7 7 7 7        GCLL  9$$$$$$$$$$$$$Yv4888F # # # # # #    4   d d d d d d d d d
_ _ _ _ _H _ _ _ $q'DG); <    (B B B B B    ,dSj8C=8 U38_    0+TCZ(3-7 +DI + + + +%tczHSM'A %eCQTHoX\F\ % % % %c c    *" 233c9"4Z" " " "J     Dc Dc D D D D2)hsm ) )sCx0I ) ) ) )$ 16 ! ! !# !$ ! ! ! !>OC OD O O O O  8 =( =( =( =( =( =( =( =(@" "0A "C "Y\ " " " "J% % % % % %r!   