§
    9ˆtjX  ã                  ó  — U d Z ddlmZ 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 ddlmZmZmZmZ ddlmZmZmZmZ d	d
lmZ dZej        dk    sej        dk     rd7d„Znd7d„Zd8d„Zdddœd9d„Zed          Zd!ed"<   	  e  ee¦  «        ¦  «        Z!d#ed$<    G d%„ d&e¦  «        Z" G d'„ d(e#¦  «        Z$ G d)„ d*e
¦  «        Z%e%j&        Z&	 ee%j&                 Z'd!ed+<   	  G d,„ d-e¦  «        Z(d.d/œd:d1„Z)d;d5„Z*dd/œd<d6„Z+dS )=zEHigh-level introspection utilities, used to inspect type annotations.é    )ÚannotationsN)Ú	Generator)ÚInitVar)ÚEnumÚIntEnumÚauto)ÚAnyÚLiteralÚ
NamedTupleÚcast)Ú	TypeAliasÚassert_neverÚget_argsÚ
get_originé   )Útyping_objects)ÚAnnotationSourceÚForbiddenQualifierÚInspectedAnnotationÚ	QualifierÚget_literal_valuesÚinspect_annotationÚis_union_origin)é   é   )r   é
   Úobjr	   ÚreturnÚboolc               ó*   — t          j        | ¦  «        S ©aè  Return whether the provided origin is the union form.

        ```pycon
        >>> is_union_origin(typing.Union)
        True
        >>> is_union_origin(get_origin(int | str))
        True
        >>> is_union_origin(types.UnionType)
        True
        ```

        !!! note
            Since Python 3.14, both `Union[<t1>, <t2>, ...]` and `<t1> | <t2> | ...` forms create instances
            of the same [`typing.Union`][] class. As such, it is recommended to not use this function
            anymore (provided that you only support Python 3.14 or greater), and instead use the
            [`typing_objects.is_union()`][typing_inspection.typing_objects.is_union] function directly:

            ```python
            from typing import Union, get_origin

            from typing_inspection import typing_objects

            typ = int | str  # Or Union[int, str]
            origin = get_origin(typ)
            if typing_objects.is_union(origin):
                ...
            ```
        )r   Úis_union©r   s    ú]/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/typing_inspection/introspection.pyr   r      s   € õ: Ô& sÑ+Ô+Ð+ó    c               óF   — t          j        | ¦  «        p| t          j        u S r!   )r   r"   ÚtypesÚ	UnionTyper#   s    r$   r   r   >   s!   € õ: Ô& sÑ+Ô+ÐE¨sµe´oÐ/EÐEr%   ÚvalueÚNonec          	     ó¼   — t          | t          t          t          t          t
          t          j        f¦  «        s | t          j        urt          | › d�¦  «        ‚dS dS )zCType check the provided literal value against the legal parameters.zK is not a valid literal value, must be one of: int, bytes, str, Enum, None.N)	Ú
isinstanceÚintÚbytesÚstrr   r   r   ÚNoneTypeÚ	TypeError)r)   s    r$   Ú_literal_type_checkr2   ^   s^   € õ �u�s¥E­3µµd½NÔ<SÐTÑUÔUðoà�Ô0Ð0Ð0å˜5ÐmÐmÐmÑnÔnÐnð	oð oà0Ð0r%   FÚeager©Ú
type_checkÚunpack_type_aliasesÚ
annotationr5   r6   ú#Literal['skip', 'lenient', 'eager']úGenerator[Any]c            #  óH  K  — |dk    r<d}| j         D ]0}|rt          |¦  «         |�|t          j        u r	|sdV — d}Œ,|V — Œ1dS g }| j         D �]}t          j        |¦  «        r†	 |j        }t          |||¬¦  «        }|                     d„ |D ¦   «         ¦  «         ŒQ# t          $ r? |dk    r‚ |rt          |¦  «         | 	                    |t          |¦  «        f¦  «         Y Œ™w xY w|rt          |¦  «         |t          j        u r"| 	                    dt          j        f¦  «         ŒÞ| 	                    |t          |¦  «        f¦  «         �Œ	 t                               |¦  «        }d„ |D ¦   «         E d{V —† dS # t          $ r d	„ |D ¦   «         E d{V —† Y dS w xY w)
a=  Yield the values contained in the provided [`Literal`][typing.Literal] [special form][].

    Args:
        annotation: The [`Literal`][typing.Literal] [special form][] to unpack.
        type_check: Whether to check if the literal values are [legal parameters][literal-legal-parameters].
            Raises a [`TypeError`][] otherwise.
        unpack_type_aliases: What to do when encountering [PEP 695](https://peps.python.org/pep-0695/)
            [type aliases][type-aliases]. Can be one of:

            - `'skip'`: Do not try to parse type aliases. Note that this can lead to incorrect results:
              ```pycon
              >>> type MyAlias = Literal[1, 2]
              >>> list(get_literal_values(Literal[MyAlias, 3], unpack_type_aliases="skip"))
              [MyAlias, 3]
              ```

            - `'lenient'`: Try to parse type aliases, and fallback to `'skip'` if the type alias can't be inspected
              (because of an undefined forward reference).

            - `'eager'`: Parse type aliases and raise any encountered [`NameError`][] exceptions (the default):
              ```pycon
              >>> type MyAlias = Literal[1, 2]
              >>> list(get_literal_values(Literal[MyAlias, 3], unpack_type_aliases="eager"))
              [1, 2, 3]
              ```

    Note:
        While `None` is [equivalent to][none] `type(None)`, the runtime implementation of [`Literal`][typing.Literal]
        does not de-duplicate them. This function makes sure this de-duplication is applied:

        ```pycon
        >>> list(get_literal_values(Literal[NoneType, None]))
        [None]
        ```

    Example:
        ```pycon
        >>> type Ints = Literal[1, 2]
        >>> list(get_literal_values(Literal[1, Ints], unpack_type_alias="skip"))
        ["a", Ints]
        >>> list(get_literal_values(Literal[1, Ints]))
        [1, 2]
        >>> list(get_literal_values(Literal[1.0], type_check=True))
        Traceback (most recent call last):
        ...
        TypeError: 1.0 is not a valid literal value, must be one of: int, bytes, str, Enum, None.
        ```
    ÚskipFNTr4   c              3  ó8   K  — | ]}|t          |¦  «        fV — Œd S ©N)Útype)Ú.0Úas     r$   ú	<genexpr>z%get_literal_values.<locals>.<genexpr>Å   s,   è è € Ð*JÐ*J¸A¨A­t°A©w¬w¨<Ð*JÐ*JÐ*JÐ*JÐ*JÐ*Jr%   r3   c              3  ó    K  — | ]	\  }}|V — Œ
d S r=   © ©r?   ÚpÚ_s      r$   rA   z%get_literal_values.<locals>.<genexpr>Ô   s&   è è € Ð*Ð*™d˜a ˜Ð*Ð*Ð*Ð*Ð*Ð*r%   c              3  ó    K  — | ]	\  }}|V — Œ
d S r=   rC   rD   s      r$   rA   z%get_literal_values.<locals>.<genexpr>Ò   s&   è è € Ð6Ð6™d˜a ˜Ð6Ð6Ð6Ð6Ð6Ð6r%   )Ú__args__r2   r   r0   Úis_typealiastypeÚ	__value__r   ÚextendÚ	NameErrorÚappendr>   ÚdictÚfromkeysr1   )	r7   r5   r6   Ú	_has_noneÚargÚvalues_and_typeÚalias_valueÚsub_argsÚdcts	            r$   r   r   g   s`  è è € ðt ˜fÒ$Ð$Øˆ	ð Ô&ð 	ð 	ˆCØð )Ý# CÑ(Ô(Ð(Øˆ{˜c¥^Ô%<Ð<Ð<Ø ð Ø�J�J�JØ �	�	à�	�	�	�	ð	ð 	ð 8:ˆàÔ&ð 	=ñ 	=ˆCõ
 Ô.¨sÑ3Ô3ð =ðKØ"%¤-�Kõ  2Ø#°
ÐPcð ñ  ô  �Hð $×*Ò*Ð*JÐ*JÀÐ*JÑ*JÔ*JÑJÔJÐJÐJøõ !ð =ð =ð =Ø*¨gÒ5Ð5Øà!ð 1Ý+¨CÑ0Ô0Ð0Ø#×*Ò*¨Cµ°c±´Ð+;Ñ<Ô<Ð<Ð<Ð<ð=øøøð ð -Ý'¨Ñ,Ô,Ð,Ø�.Ô1Ð1Ð1Ø#×*Ò*¨Dµ.Ô2IÐ+JÑKÔKÐKÐKà#×*Ò*¨Cµ°c±´Ð+;Ñ<Ô<Ð<Ñ<ð	+Ý—-’- Ñ0Ô0ˆCð
 +Ð* cÐ*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ð*øõ	 ð 	7ð 	7ð 	7à6Ð6 oÐ6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7øøøs%   Á&BÂAC(Ã'C(ÅF ÆF!Æ F!)ÚrequiredÚnot_requiredÚ	read_onlyÚ	class_varÚinit_varÚfinalr   r   úset[Qualifier]Ú_all_qualifiersc                  óÚ   — e Zd ZdZ e¦   «         Z	  e¦   «         Z	  e¦   «         Z	  e¦   «         Z	  e¦   «         Z		  e¦   «         Z
	  e¦   «         Z	  e¦   «         Z	 edd„¦   «         ZdS )r   zœThe source of an annotation, e.g. a class or a function.

    Depending on the source, different [type qualifiers][type qualifier] may be (dis)allowed.
    r   r\   c                óB  — | t           j        u rdhS | t           j        u rddhS | t           j        u rh d£S | t           j        u rh d£S | t           j        t           j        t           j        fv rt          ¦   «         S | t           j	        u rt          S t          | ¦  «         dS )zIThe allowed [type qualifiers][type qualifier] for this annotation source.r[   rY   >   r[   rZ   rY   >   rV   rX   rW   N)r   ÚASSIGNMENT_OR_VARIABLEÚCLASSÚ	DATACLASSÚ
TYPED_DICTÚNAMED_TUPLEÚFUNCTIONÚBAREÚsetÚANYr]   r   ©Úselfs    r$   Úallowed_qualifiersz#AnnotationSource.allowed_qualifiers<  s»   € ð Õ#Ô:Ð:Ð:Ø�9ÐØÕ%Ô+Ð+Ð+Ø˜[Ð)Ð)ØÕ%Ô/Ð/Ð/Ø5Ð5Ð5Ð5ØÕ%Ô0Ð0Ð0Ø<Ð<Ð<Ð<ØÕ&Ô2Õ4DÔ4MÕO_ÔOdÐeÐeÐeÝ‘5”5ˆLØÕ%Ô)Ð)Ð)Ý"Ð"å˜ÑÔÐÐÐr%   N)r   r\   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r`   ra   rb   rc   rd   re   rh   rf   Úpropertyrk   rC   r%   r$   r   r   ß   sÏ   € € € € € ðð ð
 "˜T™VœVÐðð ˆD‰FŒF€Eð	ð �‘”€Ið
ð �‘”€Jð
ð �$‘&”&€Kð	ð ˆt‰vŒv€Hðð ˆ$‰&Œ&€Cðð
 ˆ4‰6Œ6€Dðð
 ðð ð ñ „Xðð ð r%   r   c                  ó(   — e Zd ZU dZded<   	 dd„ZdS )	r   z-The provided [type qualifier][] is forbidden.r   Ú	qualifierr   r*   c               ó   — || _         d S r=   )rr   )rj   rr   s     r$   Ú__init__zForbiddenQualifier.__init__V  s   € Ø"ˆŒˆˆr%   N)rr   r   r   r*   )rl   rm   rn   ro   Ú__annotations__rt   rC   r%   r$   r   r   P  s?   € € € € € € Ø7Ð7àÐÐÑØ"ð#ð #ð #ð #ð #ð #r%   r   c                  ó2   — e Zd Z e¦   «         Zdd„Zdd„ZdS )Ú_UnknownTypeEnumr   r/   c                ó   — dS )NÚUNKNOWNrC   ri   s    r$   Ú__str__z_UnknownTypeEnum.__str__]  s   € Øˆyr%   c                ó   — dS )Nz	<UNKNOWN>rC   ri   s    r$   Ú__repr__z_UnknownTypeEnum.__repr__`  s   € Øˆ{r%   N)r   r/   )rl   rm   rn   r   ry   rz   r|   rC   r%   r$   rw   rw   Z  sG   € € € € € Øˆd‰fŒf€Gðð ð ð ðð ð ð ð ð r%   rw   Ú_UnkownTypec                  ó6   — e Zd ZU dZded<   	 ded<   	 ded<   dS )	r   z'The result of the inspected annotation.zAny | _UnkownTyper>   r\   Ú
qualifiersz	list[Any]ÚmetadataN)rl   rm   rn   ro   ru   rC   r%   r$   r   r   k  sF   € € € € € € Ø1Ð1àÐÐÑðð ÐÐÑØJàÐÐÑØ!Ð!r%   r   r;   ©r6   Úannotation_sourcec              óÐ  — |j         }t          ¦   «         }g }	 t          | |¬¦  «        \  } }|r||z   }Œt          | ¦  «        }|��ut	          j        |¦  «        r7d|vrt          d¦  «        ‚|                     d¦  «         | j        d         } �nƒt	          j	        |¦  «        r7d|vrt          d¦  «        ‚|                     d¦  «         | j        d         } �n8t	          j
        |¦  «        r6d|vrt          d¦  «        ‚|                     d¦  «         | j        d         } nît	          j        |¦  «        r6d|vrt          d¦  «        ‚|                     d¦  «         | j        d         } n¤t	          j        |¦  «        r6d	|vrt          d¦  «        ‚|                     d	¦  «         | j        d         } nZn[t          | t          ¦  «        rCd
|vrt          d
¦  «        ‚|                     d
¦  «         t          t           | j        ¦  «        } nn�Œþt	          j	        | ¦  «        r0d|vrt          d¦  «        ‚|                     d¦  «         t$          } n|t	          j        | ¦  «        r0d|vrt          d¦  «        ‚|                     d¦  «         t$          } n8| t          u r/d
|vrt          d
¦  «        ‚|                     d
¦  «         t$          } t'          | ||¦  «        S )a
  Inspect an [annotation expression][], extracting any [type qualifier][] and metadata.

    An [annotation expression][] is a [type expression][] optionally surrounded by one or more
    [type qualifiers][type qualifier] or by [`Annotated`][typing.Annotated]. This function will:

    - Unwrap the type expression, keeping track of the type qualifiers.
    - Unwrap [`Annotated`][typing.Annotated] forms, keeping track of the annotated metadata.

    Args:
        annotation: The annotation expression to be inspected.
        annotation_source: The source of the annotation. Depending on the source (e.g. a class), different type
            qualifiers may be (dis)allowed. To allow any type qualifier, use
            [`AnnotationSource.ANY`][typing_inspection.introspection.AnnotationSource.ANY].
        unpack_type_aliases: What to do when encountering [PEP 695](https://peps.python.org/pep-0695/)
            [type aliases][type-aliases]. Can be one of:

            - `'skip'`: Do not try to parse type aliases (the default):
              ```pycon
              >>> type MyInt = Annotated[int, 'meta']
              >>> inspect_annotation(MyInt, annotation_source=AnnotationSource.BARE, unpack_type_aliases='skip')
              InspectedAnnotation(type=MyInt, qualifiers={}, metadata=[])
              ```

            - `'lenient'`: Try to parse type aliases, and fallback to `'skip'` if the type alias
              can't be inspected (because of an undefined forward reference):
              ```pycon
              >>> type MyInt = Annotated[Undefined, 'meta']
              >>> inspect_annotation(MyInt, annotation_source=AnnotationSource.BARE, unpack_type_aliases='lenient')
              InspectedAnnotation(type=MyInt, qualifiers={}, metadata=[])
              >>> Undefined = int
              >>> inspect_annotation(MyInt, annotation_source=AnnotationSource.BARE, unpack_type_aliases='lenient')
              InspectedAnnotation(type=int, qualifiers={}, metadata=['meta'])
              ```

            - `'eager'`: Parse type aliases and raise any encountered [`NameError`][] exceptions.

    Returns:
        The result of the inspected annotation, where the type expression, used qualifiers and metadata is stored.

    Example:
        ```pycon
        >>> inspect_annotation(
        ...     Final[Annotated[ClassVar[Annotated[int, 'meta_1']], 'meta_2']],
        ...     annotation_source=AnnotationSource.CLASS,
        ... )
        ...
        InspectedAnnotation(type=int, qualifiers={'class_var', 'final'}, metadata=['meta_1', 'meta_2'])
        ```
    Tr�   NrY   r   r[   rV   rW   rX   rZ   )rk   rg   Ú_unpack_annotatedr   r   Úis_classvarr   ÚaddrH   Úis_finalÚis_requiredÚis_notrequiredÚis_readonlyr,   r   r   r	   r>   ry   r   )r7   r‚   r6   rk   r   r€   Ú_metaÚorigins           r$   r   r   ƒ  s#  € ðp +Ô=ÐÝ!$¡¤€JØ€Hð*Ý-¨jÐNaÐbÑbÔbÑˆ
�EØð 	Ø˜xÑ'ˆHØå˜JÑ'Ô'ˆØÑÝÔ)¨&Ñ1Ô1ð ØÐ&8Ð8Ð8Ý,¨[Ñ9Ô9Ð9Ø—’˜{Ñ+Ô+Ð+Ø'Ô0°Ô3�
‘
ÝÔ(¨Ñ0Ô0ð ØÐ"4Ð4Ð4Ý,¨WÑ5Ô5Ð5Ø—’˜wÑ'Ô'Ð'Ø'Ô0°Ô3�
‘
ÝÔ+¨FÑ3Ô3ð ØÐ%7Ð7Ð7Ý,¨ZÑ8Ô8Ð8Ø—’˜zÑ*Ô*Ð*Ø'Ô0°Ô3�
�
ÝÔ.¨vÑ6Ô6ð Ø!Ð);Ð;Ð;Ý,¨^Ñ<Ô<Ð<Ø—’˜~Ñ.Ô.Ð.Ø'Ô0°Ô3�
�
ÝÔ+¨FÑ3Ô3ð ØÐ&8Ð8Ð8Ý,¨^Ñ<Ô<Ð<Ø—’˜{Ñ+Ô+Ð+Ø'Ô0°Ô3�
�
ð Ý˜
¥GÑ,Ô,ð 	ØÐ!3Ð3Ð3Ý(¨Ñ4Ô4Ð4Ø�NŠN˜:Ñ&Ô&Ð&Ý�c :¤?Ñ3Ô3ˆJˆJàñU*õZ Ô˜zÑ*Ô*ð ØÐ,Ð,Ð,Ý$ WÑ-Ô-Ð-Ø�Š�wÑÔÐÝˆ
ˆ
Ý	Ô	# JÑ	/Ô	/ð 	ØÐ0Ð0Ð0Ý$ [Ñ1Ô1Ð1Ø�Š�{Ñ#Ô#Ð#Ýˆ
ˆ
Ø	•wÐ	Ð	ØÐ/Ð/Ð/Ý$ ZÑ0Ô0Ð0Ø�Š�zÑ"Ô"Ð"Ýˆ
å˜z¨:°xÑ@Ô@Ð@r%   úLiteral['lenient', 'eager']Úcheck_annotatedútuple[Any, list[Any]]c                óL  — t          | ¦  «        }|rMt          j        |¦  «        r9| j        }t	          | j        ¦  «        }t          ||d¬¦  «        \  }}||z   }||fS t          j        | ¦  «        r>	 | j        }t          ||d¬¦  «        \  }}|r||fS | g fS # t          $ r
 |dk    r‚ Y nuw xY wt          j        |¦  «        r]	 |j        }	 || j
                 }n# t          $ r Y nw xY wt          ||d¬¦  «        \  }}|r||fS | g fS # t          $ r
 |dk    r‚ Y nw xY w| g fS )NF©r6   rŽ   Tr3   )r   r   Úis_annotatedÚ
__origin__ÚlistÚ__metadata__Ú_unpack_annotated_innerrI   rJ   rL   rH   r1   )	r7   r6   rŽ   rŒ   Úannotated_typer€   Úsub_metar)   Útyps	            r$   r–   r–   ÿ  sî  € õ ˜
Ñ#Ô#€FØð 9"�>Ô6°vÑ>Ô>ð 9"Ø#Ô.ˆÝ˜
Ô/Ñ0Ô0ˆõ
 $;ØÐ0CÐUZð$
ñ $
ô $
Ñ ˆ˜ð ˜hÑ&ˆØ˜xÐ'Ð'Ý	Ô	(¨Ñ	4Ô	4ð -"ð	"ØÔ(ˆEõ
 4ØÐ+>ÐPTðñ ô ‰MˆC�ð ð %ð ˜H�}Ð$Ø˜r�>Ð!øõ ð 	ð 	ð 	Ø" gÒ-Ð-Øð .Ð-ð	øøøõ 
Ô	(¨Ñ	0Ô	0ð "ð	"ØÔ$ˆEðð ˜jÔ1Ô2��øÝð ð ð ð �ðøøøõ 4ØÐ+>ÐPTðñ ô ‰MˆC�ð ð %Ø˜H�}Ð$Ø˜r�>Ð!øõ/ ð 	ð 	ð 	Ø" gÒ-Ð-Øð .Ð-ð	øøøð2 �rˆ>Ðs6   Á4B ÂB.Â-B.ÃD ÃC Ã
C)Ã(C)ÄDÄDc              ó²   — |dk    r@t          j        t          | ¦  «        ¦  «        r| j        t	          | j        ¦  «        fS | g fS t          | |d¬¦  «        S )Nr;   Tr‘   )r   r’   r   r“   r”   r•   r–   )r7   r6   s     r$   r„   r„   B  sd   € ð ˜fÒ$Ð$ÝÔ&¥z°*Ñ'=Ô'=Ñ>Ô>ð 	"ØÔ(­$¨zÔ/FÑ*GÔ*GÐGÐGà˜r�>Ð!å" :ÐCVÐhlÐmÑmÔmÐmr%   )r   r	   r   r   )r)   r	   r   r*   )r7   r	   r5   r   r6   r8   r   r9   )r7   r	   r‚   r   r6   r8   r   r   )r7   r	   r6   r�   rŽ   r   r   r�   )r7   r	   r6   r8   r   r�   ),ro   Ú
__future__r   Úsysr'   Úcollections.abcr   Údataclassesr   Úenumr   r   r   Útypingr	   r
   r   r   Útyping_extensionsr   r   r   r   Ú r   Ú__all__Úversion_infor   r2   r   r   ru   rg   r]   r   Ú	Exceptionr   rw   ry   r}   r   r   r–   r„   rC   r%   r$   ú<module>r¦      s  ðØ KÐ KÐ Kà "Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kà Ð Ð Ð Ð Ð ð€ð Ô�wÒÐ #Ô"2°WÒ"<Ð"<ð,ð ,ð ,ð ,ð ,ðDFð Fð Fð Fð@oð oð oð oð Ø?Fðm+ð m+ð m+ð m+ð m+ð m+ð` ÐhÔi€	Ð iÐ iÐ iÑ iØ à"% # h h¨yÑ&9Ô&9Ñ":Ô":€Ð :Ð :Ð :Ñ :ð
nð nð nð nð n�wñ nô nð nðb#ð #ð #ð #ð #˜ñ #ô #ð #ðð ð ð ð �tñ ô ð ð Ô
"€Ø Cà Ð!1Ô!9Ô:€Ð :Ð :Ð :Ñ :Ø Zð"ð "ð "ð "ð "˜*ñ "ô "ð "ð: @FðyAð yAð yAð yAð yAð yAðx?ð ?ð ?ð ?ðH W^ð	nð 	nð 	nð 	nð 	nð 	nð 	nð 	nr%   