
    ~f                    |    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ZddZddZ	dddZ
ddZy)    )annotationsN)Anyc                   t        | t              r| j                         } t        j                  |      st        |      j                  }n|j                  }|rt        |      |z   }| dk(  s| ?t        j                  |      s)|| d| }| t        |d|      S |S d}t        j                  |      r|j                  }nt        |t        j                        r|j                  }d}nt        |t        j                        r|j                  j                  }d}n\t        |      j                  t        j                  t
        j                  fv rdt        t!        |            z  }d}nt#        |      }d}|rt        |      |z   }|r|j%                  d      }t'        | ||||      S | dv s| | |S t        |d|      S t)        d	| z        )
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'
    the 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_wraps           W/var/www/cvtools/html/venv/lib/python3.12/site-packages/traitlets/utils/descriptions.pyr    r    	   s   | '3--/??5!;''>>5>H,%GOGOOE4J z4&)F""6499Iu%~~E5#5#56~~ 	E5#3#34~~.. 	e%%*  !3r%y>1E{u~,yyGUwPWXX	K	7??O8UG44ORYY
 	
    c                    t        | t        j                        rt        d | j                  d      dz   }|S t        j                  |       }| |j                  dk7  r|j                  dz   }|S d}|S )NT)r	   .builtins )r   r   r   r    __self__r   	getmoduler   )r#   r   modules      r'   r   r   z   st    %))*ennd;cA K ""5)&//Z"???S(D K DKr(   c                ~    t        j                  |       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#   s    r'   r1   r1      s.    
 u5>>**U$$r(   c                    |rd| z   }nEt        j                  d      j                  d|       }|dd j                         dv rd| z   }nd| z   }|r|d	   j	                         |dd z   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   aeiouzan za r   )recompilesubr   upper)r   definiter
   r%   first_letterss        r'   r   r      sy    " $

9-11"d;!""$/T\FD[Fay 6!":--r(   c                &    t        |       }| d|S )z]Return a string representation of a value and its type for readable

    error messages.
    r   )r   )objthe_types     r'   	repr_typer>      s    
 CyHWAh\""r(   )NFF)r"   
str | Noner#   r   r   r?   r	   boolr
   r@   returnr   )r#   r   rA   r   )r#   r   rA   r   )FF)r   r   r9   r@   r
   r@   rA   r   )r<   r   rA   r   )
__future__r   r   r5   r   typingr   r    r   r1   r   r>    r(   r'   <module>rE      sx    "  	   n
n
n
 n
 	n

 n
 	n
b	%>#r(   