
    f3i                         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+y)    N)Flag)	UnionType)	AnnotatedAnyUnionget_args
get_origin)is_class_and_subclass)      )NotRequiredRequired)r      )TypeAliasTypec                     | t         u S N)NoneTypehints    ^/mnt/e/genesis-system/.venvs/voice-bridge/lib/python3.12/site-packages/cyclopts/annotations.pyis_nonetyper      s    8    type_returnc                     | t         u s| t        u ry| t        u s#| t        u s| t        u s| t
        u st        |       ryt        |       }|t         u xs |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"      sY     ~)+ |u|u~$,W\J]FU?1f	11r   c                     t        | d      S )N__pydantic_core_schema__hasattrr   s    r   is_pydanticr'   ,   s    4344r   c                     t        | d      xr5 | j                  dk(  xr$ t        | d      xr 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   sN     	l# 	>OO//	>D,-	> WT#5t<=	r   c                     t        | d      S )N__dataclass_fields__r%   r   s    r   is_dataclassr0   :   s    4/00r   c                 >    t        | t              xr t        | d      S )N_fields)r
   tupler&   r   s    r   is_namedtupler4   >   s     u-J'$	2JJr   c                 ,    t        j                  |       S r   )attrshasr   s    r   is_attrsr8   B   s    99T?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   6   K   | ]  }t        |        y wr   )contains_hint).0xtarget_types     r   	<genexpr>z contains_hint.<locals>.<genexpr>V   s     IQ=K0Is   )resolver"   anyr   r
   )r   rC   s    `r   r@   r@   O   s7    
 4=D~I(4.III$T;77r   c                     t        |       } t        |       rt        d t        |       D              S t	        | t
              syt        | d      xr( t        | d      xr t        | d      xr 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   2   K   | ]  }t        |        y wr   )is_typeddictrA   rB   s     r   rD   zis_typeddict.<locals>.<genexpr>d   s     ;q<?;   F__annotations__	__total____required_keys____optional_keys__)rE   r"   rF   r   r
   dictr&   r   s    r   rI   rI   [   sy     4=D~;HTN;;; t, 	'( 	/D+&	/D-.	/ D-.	r   c                     | t         j                  j                  u rt        S d}| |k7  r?| }t	        |       } t        |       } t        |       } t        |       } t        |       } | |k7  r?| 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   rE   rE   q   sr     !!'''
I
9
	"5)!%( ' ' ' 9
 Lr   c                    t        |       } t        |       s| S t        |       D cg c]  }|t        us| }}|st	        d      t        |      dk(  r|d   } | S t        |      dkD  rt        t        d |D                 S t        c c}w )z?Only resolves Union's of None + one other type (i.e. Optional).z!Union type cannot be all NoneType   r   c              3   2   K   | ]  }t        |        y wr   )rW   rJ   s     r   rD   z#resolve_optional.<locals>.<genexpr>   s     G1+A.GrK   )	rU   r"   r   r   
ValueErrorlenr   r3   NotImplementedError)r   tnon_none_typess      r   rW   rW      s    u%E E?!)%FAAX4EaFNF <==	^		!q! L 
^	q	 UGGGHH!! Gs
   B	B	c                 Z    t        |       } t        |       t        u rt        |       d   } | S Nr   )rU   r<   r=   r   r   s    r   rV   rV      s+    u%EE{m#"Lr   c                 P    t        |       t        t        fv rt        |       d   } | S rd   )r	   r   r   r   re   s    r   rX   rX      s'    %X{33"Lr   c                 P    	 t        | j                        S # t        $ r | cY S w xY wr   )rY   __supertype__AttributeErrorre   s    r   rY   rY      s,     3 344 s    %%c                 J    t         t        | t               r| j                  S | S )zMResolve TypeAliasType (Python 3.12+ 'type' statement) to its underlying type.)r   
isinstance	__value__re   s    r   rU   rU      s      Z}%ELr   c                    t        | t              r| S t        |       ry| t        u ryt	        |       r!dj                  d t        |       D              S t        |       x}r;t        |      }t        |       x}r!|ddj                  d |D              z   dz   z  }|S t        | d	      r| j                  S t        | d
d       | j                  S t        |       S )NNoner   |c              3   2   K   | ]  }t        |        y wr   get_hint_namerA   args     r   rD   z get_hint_name.<locals>.<genexpr>   s     Esc*ErK   [z, c              3   2   K   | ]  }t        |        y wr   rq   rs   s     r   rD   z get_hint_name.<locals>.<genexpr>   s     "F#=#5"FrK   ]__name___name)rk   r   r   r   r"   joinr   r	   rr   r&   rx   r,   ry   )r   r!   outargss       r   rr   rr      s    $4s{~xxEhtnEEED!!v!F#D>!4!3"F"FFFLLC
tZ }}tWd#/zzt9r   ),rR   sysenumr   typesr   typingr   r   r   r   r	   r6   cyclopts.utilsr
   version_infotyping_extensionsr   r   r   r<   r   r   r=   r   r   r"   r'   r-   r0   r4   r8   r:   r    r@   rI   rE   rW   rV   rX   rY   rU   r   rr    r   r   <module>r      sr    
   > >  0g77,w$M :YsAv&'2D4K 2D 25 5 1$ 1K4 Kd -$ -
'$ '	8 	8$ ,	$C C .S T C D C D c c 3 r   