o
    BZh                     @  sp   d dl mZ d dlZd dlZd dlZd dlmZ 			ddddZdddZdddZ	dd ddZ
d!ddZdS )"    )annotationsN)AnyFarticle
str | Nonevaluer   nameverboseboolcapitalreturnstrc                 C  sj  t | tr	|  } t|st|j}n|j}|rt|| }| dks,| du rt|s|durC| d| }| durAt|d|S |S d}t|rN|j}n5t |t	j
rZ|j}d}n)t |t	jrg|jj}d}nt|jtjtjfv r}dtt| }d}nt|}d}|rt|| }|r|d}t| ||||dS | d	v s| du r| du r|S t|d|S td
|  )a  Return string that describes a value

    Parameters
    ----------
    article : str or None
        A definite or indefinite article. If the article is
        indefinite (i.e. "a" or "an") the appropriate one
        will be inferred. Thus, the arguments of ``describe``
        can themselves represent what the resulting string
        will actually look like. If None, then no article
        will be prepended to the result. For non-articled
        description, values that are instances are treated
        definitely, while classes are handled indefinitely.
    value : any
        The value which will be named.
    name : str or None (default: None)
        Only applies when ``article`` is "the" - this
        ``name`` is a definite reference to the value.
        By default one will be inferred from the value's
        type and repr methods.
    verbose : bool (default: False)
        Whether the name should be concise or verbose. When
        possible, verbose names include the module, and/or
        class name where an object was defined.
    capital : bool (default: False)
        Whether the first letter of the article should
        be capitalized or not. By default it is not.

    Examples
    --------
    Indefinite description:

    >>> describe("a", object())
    'an object'
    >>> describe("a", object)
    'an object'
    >>> describe("a", type(object))
    'a type'

    Definite description:

    >>> describe("the", object())
    "the object at '...'"
    >>> describe("the", object)
    'the object object'
    >>> describe("the", type(object))
    'the type type'

    Definitely named description:

    >>> describe("the", object(), "I made")
    'the object I made'
    >>> describe("the", object, "I will use")
    'the object I will use'
    ZtheN TFzat '%s'z'')r   r   r
   )aanzAThe 'article' argument should be 'the', 'a', 'an', or None not %r)
isinstancer   lowerinspectisclasstype__name___prefixadd_articletypesFunctionType
MethodType__func____repr__objecthexidreprjoindescribe
ValueError)r   r   r   r   r
   typenameresultZ	tick_wrap r&   S/var/www/html/lang_env/lib/python3.10/site-packages/traitlets/utils/descriptions.pyr"   	   sT   
>


r"   c                 C  sV   t | tjrtd | jddd }|S t| }|d ur'|jdkr'|jd }|S d}|S )NT)r   .builtins )r   r   r   r"   __self__r   	getmoduler   )r   r   moduler&   r&   r'   r   z   s   

r   c                 C  s    t | r
t| jS tt| S )zsReturns a string of the value's type with an indefinite article.

    For example 'an Image' or 'a PlotValue'.
    )r   r   r   r   class_ofr   )r   r&   r&   r'   r.      s   

r.   definitec                 C  sf   |rd|  }nt dd| }|dd  dv rd|  }nd|  }|r1|d	  |dd  S |S )
a  Returns the string with a prepended article.

    The input does not need to begin with a character.

    Parameters
    ----------
    name : str
        Name to which to prepend an article
    definite : bool (default: False)
        Whether the article is definite or not.
        Indefinite articles being 'a' and 'an',
        while 'the' is definite.
    capital : bool (default: False)
        Whether the added article should have
        its first letter capitalized or not.
    zthe z[\W_]+r*   N   Zaeiouzan za r   )recompilesubr   upper)r   r/   r
   r%   Zfirst_lettersr&   r&   r'   r      s   

r   objc                 C  s   t | }| d|S )z]Return a string representation of a value and its type for readable

    error messages.
    r   )r   )r5   Zthe_typer&   r&   r'   	repr_type   s   r6   )NFF)r   r   r   r   r   r   r   r	   r
   r	   r   r   )r   r   r   r   )r   r   r   r   )FF)r   r   r/   r	   r
   r	   r   r   )r5   r   r   r   )
__future__r   r   r1   r   typingr   r"   r   r.   r   r6   r&   r&   r&   r'   <module>   s    
q
