B
    *d!                 @  s  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ dddd	d
ddddddddddgZdejkZedddZG dd dee ZG dd de
d ZG dd deeef Ze Zdddd dZd!d"d#d	Zd!d"d$dZ d!d"d%d&Z!d!d"d'd
Z"d!d"d(dZ#d!d"d)dZ$dd"d*dZ%ed+Z&d,d-d.d/d0dZ'd1dd2d3dZ(d4dd2d5dZ)ee	g e*f e*f Z+dd6d2d7dZ,d;d8d!d9d:dZ-dS )<    )annotationsN)deque)
CallableContextManagerDequeDict	GeneratorGenericListOptionalTypeVarUnion)wcwidthEventDummyContext
get_cwidthsuspend_to_background_supportedis_conemu_ansi
is_windowsin_main_threadget_bell_environment_variableget_term_environment_variabletake_using_weightsto_strto_intAnyFloatto_floatis_dumb_terminalzsphinx.ext.autodoc_SenderT)	covariantc               @  s   e Zd ZdZdddddddZdd	d
dZdd	ddZdddddZdddddZdddddZ	dddddZ
dS )r   a  
    Simple event to which event handlers can be attached. For instance::

        class Cls:
            def __init__(self):
                # Define event. The first parameter is the sender.
                self.event = Event(self)

        obj = Cls()

        def handler(sender):
            pass

        # Add event handler by using the += operator.
        obj.event += handler

        # Fire event.
        obj.event()
    Nr   z Callable[[_Sender], None] | NoneNone)senderhandlerreturnc             C  s    || _ g | _|d k	r| |7 } d S )N)r!   	_handlers)selfr!   r"    r&   a/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/prompt_toolkit/utils.py__init__E   s    zEvent.__init__)r#   c             C  s   x| j D ]}|| j qW dS )zFire event.N)r$   r!   )r%   r"   r&   r&   r'   __call__N   s    zEvent.__call__c             C  s
   |   dS )z!Alias for just calling the event.Nr&   )r%   r&   r&   r'   fireS   s    z
Event.firezCallable[[_Sender], None])r"   r#   c             C  s   | j | dS )z
        Add another handler to this callback.
        (Handler should be a callable that takes exactly one parameter: the
        sender object.)
        N)r$   append)r%   r"   r&   r&   r'   add_handlerW   s    zEvent.add_handlerc             C  s   || j kr| j | dS )z6
        Remove a handler from this callback.
        N)r$   remove)r%   r"   r&   r&   r'   remove_handler`   s    
zEvent.remove_handlerzEvent[_Sender]c             C  s   |  | | S )zC
        `event += handler` notation for adding a handler.
        )r,   )r%   r"   r&   r&   r'   __iadd__g   s    
zEvent.__iadd__c             C  s   |  | | S )zE
        `event -= handler` notation for removing a handler.
        )r.   )r%   r"   r&   r&   r'   __isub__n   s    
zEvent.__isub__)N)__name__
__module____qualname____doc__r(   r)   r*   r,   r.   r/   r0   r&   r&   r&   r'   r   0   s   	c               @  s.   e Zd ZdZddddZddddd	Zd
S )r   z5
    (contextlib.nested is not available on Py3)
    r    )r#   c             C  s   d S )Nr&   )r%   r&   r&   r'   	__enter__{   s    zDummyContext.__enter__object)ar#   c             G  s   d S )Nr&   )r%   r7   r&   r&   r'   __exit__~   s    zDummyContext.__exit__N)r1   r2   r3   r4   r5   r8   r&   r&   r&   r'   r   v   s   c                  s>   e Zd ZdZdZdZdd fddZdd	d
ddZ  ZS )_CharSizesCachez"
    Cache for wcwidth sizes.
    @      r    )r#   c               s   t    t | _d S )N)superr(   r   _long_strings)r%   )	__class__r&   r'   r(      s    
z_CharSizesCache.__init__strint)stringr#   c               s   t |dkrtdt|}nt fdd|D }| |< t | jkr| j}|| t | jkr|| }| kr| |= |S )N   r   c             3  s   | ]} | V  qd S )Nr&   ).0c)r%   r&   r'   	<genexpr>   s    z._CharSizesCache.__missing__.<locals>.<genexpr>)	lenmaxr   sumLONG_STRING_MIN_LENr=   r+   MAX_LONG_STRINGSpopleft)r%   rA   resultZlong_stringsZkey_to_remover&   )r%   r'   __missing__   s    
z_CharSizesCache.__missing__)	r1   r2   r3   r4   rI   rJ   r(   rM   __classcell__r&   r&   )r>   r'   r9      s
   r9   r?   r@   )rA   r#   c             C  s   t |  S )z?
    Return width of a string. Wrapper around ``wcwidth``.
    )_CHAR_SIZES_CACHE)rA   r&   r&   r'   r      s    bool)r#   c               C  s
   t tdS )z
    Returns `True` when the Python implementation supports
    suspend-to-background. This is typically `False' on Windows systems.
    SIGTSTP)hasattrsignalr&   r&   r&   r'   r      s    c               C  s
   t jdkS )z)
    True when we are using Windows.
    win32)sysplatformr&   r&   r&   r'   r      s    c              C  s    t jdkrddlm}  |  S dS )zS
    True when we are using Windows, but VT100 escape sequences are supported.
    rT   r   )is_win_vt100_enabledF)rU   rV   Zprompt_toolkit.output.windows10rW   )rW   r&   r&   r'   is_windows_vt100_supported   s    
rX   c               C  s   t jdkotjdddkS )z7
    True when the ConEmu Windows console is used.
    rT   Z
ConEmuANSIZOFFON)rU   rV   osenvirongetr&   r&   r&   r'   r      s    c               C  s   t  jjdkS )z:
    True when the current thread is the main thread.
    _MainThread)	threadingcurrent_threadr>   r1   r&   r&   r&   r'   r      s    c              C  s   t jdd} |  dkS )zD
    True if env variable is set to true (true, TRUE, TrUe, 1).
    ZPROMPT_TOOLKIT_BELLtrue)1r`   )rZ   r[   r\   lower)valuer&   r&   r'   r      s    c               C  s   t jddS )z&Return the $TERM environment variable.TERM )rZ   r[   r\   r&   r&   r&   r'   r      s    _Tzlist[_T]z	list[int]zGenerator[_T, None, None])itemsweightsr#   c             c  s  t | t |kstt | dks$tg }g }x2t| |D ]$\}}|dkr8|| || q8W |} |}| sttddd | D }t | }t|}d}	xpd}
x^|
rd}
xPtt|| |D ]<\}}}|| |	| t| k r|V  ||  d7  < d}
qW qW |	d7 }	qW dS )	a  
    Generator that keeps yielding items from the items list, in proportion to
    their weight. For instance::

        # Getting the first 70 items from this generator should have yielded 10
        # times A, 20 times B and 40 times C, all distributed equally..
        take_using_weights(['A', 'B', 'C'], [5, 10, 20])

    :param items: List of items to take from.
    :param weights: Integers representing the weight. (Numbers have to be
                    integers, not floats.)
    r   z+Did't got any items with a positive weight.c             S  s   g | ]}d qS )r   r&   )rC   ir&   r&   r'   
<listcomp>  s    z&take_using_weights.<locals>.<listcomp>TFrB   N)rF   AssertionErrorzipr+   
ValueErrorrG   rangefloat)rg   rh   Zitems2Zweights2itemwZalready_taken
item_countZ
max_weightri   ZaddingZitem_iweightr&   r&   r'   r      s4    
zCallable[[], str] | str)rc   r#   c             C  s   t | rt|  S t| S dS )z$Turn callable or string into string.N)callabler   r?   )rc   r&   r&   r'   r   %  s    
zCallable[[], int] | intc             C  s   t | rt|  S t| S dS )zTurn callable or int into int.N)rt   r   r@   )rc   r&   r&   r'   r   -  s    
ro   c             C  s   t | rt|  S t| S dS )z"Turn callable or float into float.N)rt   r   ro   )rc   r&   r&   r'   r   8  s    
z
str | None)termr#   c             C  s&   | dkrt tjddS |  dkS )z
    True if this terminal type is considered "dumb".

    If so, we should fall back to the simplest possible form of line editing,
    without cursor positioning and color support.
    Nrd   re   )dumbunknown)r   rZ   r[   r\   rb   )ru   r&   r&   r'   r   @  s    )N).
__future__r   rZ   rS   rU   r^   collectionsr   typingr   r   r   r   r   r	   r
   r   r   r   r   __all__modulesZSPHINX_AUTODOC_RUNNINGr   r   r   r?   r@   r9   rO   r   r   r   rX   r   r   r   r   rf   r   r   r   ro   r   r   r   r&   r&   r&   r'   <module>   sV   0
F)6