o
    ȷe                     @   sH   d dl Z d dlZd dlZdddZdd Zdd Zdd	d
Zdd ZdS )    NFc                 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 infered. 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 infered 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'
    theN TFzat '%s'z'')nameverbosecapital)aanzAThe 'article' argument should be 'the', 'a', 'an', or None not %r)
isinstancestrlowerinspectisclasstype__name___prefixadd_articletypesFunctionType
MethodType__func____repr__objecthexidreprjoindescribe
ValueError)articlevaluer   r   r   typenameresult	tick_wrap r#   S/var/www/ideatree/venv/lib/python3.10/site-packages/traitlets/utils/descriptions.pyr      sT   
8


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   q   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+   c                 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 charater.

    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   aeiouzan za r   )recompilesubr   upper)r   definiter   r!   first_lettersr#   r#   r$   r      s   

r   c                 C   s   t | }| d|}|S )z]Return a string representation of a value and its type for readable

    error messages.
    r   )r   )objthe_typemsgr#   r#   r$   	repr_type   s   r7   )NFF)FF)r   r.   r   r   r   r+   r   r7   r#   r#   r#   r$   <module>   s    
k
