
    !<i                         d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlZd dlmZ ej        dk     r	d dlmZmZ nd dlmZmZ ej        dk    rd d	lmZ ndZ ed          Z eeed f                   Zd
 Zdedz  defdZdefdZdefdZdefdZdefdZdefdZdefdZ defdZ!defdZ"defdZ#dedefdZ$dedefdZ%dedefdZ&dedefdZ'dedefdZ(dedefdZ)de*fdZ+dS )    N)Flag)	UnionType)	AnnotatedAnyUnionget_args
get_origin)is_class_and_subclass)      )NotRequiredRequired)r      )TypeAliasTypec                     | t           u S NNoneTypehints    /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/cyclopts/annotations.pyis_nonetyper      s    8    type_returnc                     | t           u s	| t          u rdS | t          u s*| t          u s!| t          u s| t
          u st          |           rdS t          |           }|t           u p|t          u S )zChecks if a type is a union.TF)r   r   strintfloatboolis_annotatedr	   )r   origins     r   is_unionr#      sr     ~~)++t ||u||u~~$,W\J]J]uFU?1f	11r   c                 "    t          | d          S )N__pydantic_core_schema__hasattrr   s    r   is_pydanticr(   ,   s    43444r   c                     t          | d          o8| j        dk    o-t          | d          ot          t          | dd                    S )zQCheck if a type is a Pydantic secret type (SecretStr, SecretBytes, Secret, etc.).
__module__zpydantic.typesget_secret_valueN)r'   r*   callablegetattrr   s    r   is_pydantic_secretr.   0   sX     	l## 	>O//	>D,--	> WT#5t<<==	r   c                 "    t          | d          S )N__dataclass_fields__r&   r   s    r   is_dataclassr1   :   s    4/000r   c                 L    t          | t                    ot          | d          S )N_fields)r
   tupler'   r   s    r   is_namedtupler5   >   s!     u--J'$	2J2JJr   c                 *    t          j        |           S r   )attrshasr   s    r   is_attrsr9   B   s    9T??r   c                 ,    t          | t                    S )z.Check if a type hint is an enum.Flag subclass.)r
   r   r   s    r   is_enum_flagr;   F   s     t,,,r   c                 .    t          |           t          u S r   )typeAnnotatedTyper   s    r   r!   r!   K   s    ::&&r   c                     t          |           } t          |           r(t          fdt          |           D                       S t	          |           S )zIndicates if ``target_type`` is in a possibly annotated/unioned ``hint``.

    E.g. ``contains_hint(Union[int, str], str) == True``
    c              3   8   K   | ]}t          |          V  d S r   )contains_hint).0xtarget_types     r   	<genexpr>z contains_hint.<locals>.<genexpr>V   s-      IIQ=K00IIIIIIr   )resolver#   anyr   r
   )r   rD   s    `r   rA   rA   O   sW    
 4==D~~ 8IIII(4..IIIIII$T;777r   c                 8   t          |           } t          |           r&t          d t          |           D                       S t	          | t
                    sdS t          | d          o/t          | d          ot          | d          ot          | d          S )zDetermine if a type annotation is a TypedDict.

    This is surprisingly hard! Modified from Beartype's implementation:

        https://github.com/beartype/beartype/blob/main/beartype/_util/hint/pep/proposal/utilpep589.py
    c              3   4   K   | ]}t          |          V  d S r   )is_typeddictrB   rC   s     r   rE   zis_typeddict.<locals>.<genexpr>d   s(      ;;q<??;;;;;;r   F__annotations__	__total____required_keys____optional_keys__)rF   r#   rG   r   r
   dictr'   r   s    r   rJ   rJ   [   s     4==D~~ <;;HTNN;;;;;; t,, u 	'(( 	/D+&&	/D-..	/ D-..	r   c                     | t           j        j        u rt          S d}| |k    rS| }t	          |           } t          |           } t          |           } t          |           } t          |           } | |k    S| S )z$Perform all simplifying resolutions.N)	inspect	Parameteremptyr   resolve_type_aliasresolve_annotatedresolve_optionalresolve_requiredresolve_new_type)r   	type_prevs     r   rF   rF   q   s     !'''
I
9

	"5))!%(( '' '' '' 9

 Lr   c                 N   t          |           } t          |           s| S d t          |           D             }|st          d          t	          |          dk    r	|d         } n>t	          |          dk    r$t
          t          d |D                                S t          | S )z?Only resolves Union's of None + one other type (i.e. Optional).c                 $    g | ]}|t           u|S  r   )rB   ts     r   
<listcomp>z$resolve_optional.<locals>.<listcomp>   s"    FFFAAX4E4Ea4E4E4Er   z!Union type cannot be all NoneType   r   c              3   4   K   | ]}t          |          V  d S r   )rW   rK   s     r   rE   z#resolve_optional.<locals>.<genexpr>   s+      GG1+A..GGGGGGr   )rU   r#   r   
ValueErrorlenr   r4   NotImplementedError)r   non_none_typess     r   rW   rW      s    u%%E E?? FF%FFFN 	" <===	^			!	!q!	^		q	 	 UGGGGGGGHH!!Lr   c                 z    t          |           } t          |           t          u rt          |           d         } | S Nr   )rU   r=   r>   r   r   s    r   rV   rV      s5    u%%EE{{m##"Lr   c                 j    t          |           t          t          fv rt          |           d         } | S rg   )r	   r   r   r   rh   s    r   rX   rX      s/    %X{333"Lr   c                 P    	 t          | j                  S # t          $ r | cY S w xY wr   )rY   __supertype__AttributeErrorrh   s    r   rY   rY      s<     3444   s    %%c                 L    t           t          | t                     r| j        S | S )zMResolve TypeAliasType (Python 3.12+ 'type' statement) to its underlying type.)r   
isinstance	__value__rh   s    r   rU   rU      s$     Z}%E%E Lr   c                    t          | t                    r| S t          |           rdS | t          u rdS t	          |           r,d                    d t          |           D                       S t          |           x}rJt          |          }t          |           x}r(|dd                    d |D                       z   dz   z  }|S t          | d	          r| j
        S t          | d
d           | j        S t          |           S )NNoner   |c              3   4   K   | ]}t          |          V  d S r   get_hint_namerB   args     r   rE   z get_hint_name.<locals>.<genexpr>   s*      EEsc**EEEEEEr   [z, c              3   4   K   | ]}t          |          V  d S r   rt   rv   s     r   rE   z get_hint_name.<locals>.<genexpr>   s*      "F"F#=#5#5"F"F"F"F"F"Fr   ]__name___name)rn   r   r   r   r#   joinr   r	   ru   r'   r{   r-   r|   )r   r"   outargss       r   ru   ru      s   $ 4 vs{{u~~ FxxEEhtnnEEEEEED!!!v F##D>>!4 	M3"F"F"F"F"FFFFLLC
tZ   }tWd##/zt99r   ),rR   sysenumr   typesr   typingr   r   r   r   r	   r7   cyclopts.utilsr
   version_infotyping_extensionsr   r   r   r=   r   r   r>   r   r    r#   r(   r.   r1   r5   r9   r;   r!   rA   rJ   rF   rW   rV   rX   rY   rU   r   ru   r]   r   r   <module>r      s0    



             > > > > > > > > > > > > > >  0 0 0 0 0 0g777777777,,,,,,,,w$$$$$$$M 4::YsAv&''  2D4K 2D 2 2 2 25 5 5 5 5    1$ 1 1 1 1K4 K K K Kd    -$ - - - -
'$ ' ' ' '	8 	8 	8 	8 	8$    ,	   $C C    .S T    C D    C D    c c    3      r   