o
    ˷e!                  	   @   s  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 g dZdejv 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edefddZdefddZdefddZdefddZ defddZ!defddZ"defddZ#defd d!Z$ed"Z%d#ee% d$ee dee%ddf fd%d&Z&d'eeg ef ef defd(d)Z'd'eeg ef ef defd*d+Z(eeg e)f e)f Z*d'e*de)fd,d-Z+d1d.ee defd/d0Z,dS )2    N)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edeeegdf  ddfddZddd	Zdd
dZ	deegdf ddfddZ
deegdf ddfddZdeegdf ddfddZdeegdf ddf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()
    Nsenderhandlerreturnc                 C   s$   || _ g | _|d ur| |7 } d S d S N)r   	_handlers)selfr   r     r%   K/var/www/ideatree/venv/lib/python3.10/site-packages/prompt_toolkit/utils.py__init__C   s
   zEvent.__init__c                 C   s   | j D ]}|| j qdS )zFire event.N)r#   r   r$   r    r%   r%   r&   __call__L   s   
zEvent.__call__c                 C   s
   |   dS )z!Alias for just calling the event.Nr%   r$   r%   r%   r&   fireQ   s   
z
Event.firec                 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#   appendr(   r%   r%   r&   add_handlerU   s   zEvent.add_handlerc                 C   s   || j v r| j | dS dS )z6
        Remove a handler from this callback.
        N)r#   remover(   r%   r%   r&   remove_handler^   s   
zEvent.remove_handlerzEvent[_Sender]c                 C      |  | | S )zC
        `event += handler` notation for adding a handler.
        )r-   r(   r%   r%   r&   __iadd__e      
zEvent.__iadd__c                 C   r0   )zE
        `event -= handler` notation for removing a handler.
        )r/   r(   r%   r%   r&   __isub__l   r2   zEvent.__isub__r"   r!   N)__name__
__module____qualname____doc__r   r
   r   r'   r)   r+   r-   r/   r1   r3   r%   r%   r%   r&   r   .   s     

	
	 r   c                   @   s,   e Zd ZdZd	ddZdeddfddZdS )
r   z5
    (contextlib.nested is not available on Py3)
    r!   Nc                 C      d S r"   r%   r*   r%   r%   r&   	__enter__y      zDummyContext.__enter__ac                 G   r9   r"   r%   )r$   r<   r%   r%   r&   __exit__|   r;   zDummyContext.__exit__r4   )r5   r6   r7   r8   r:   objectr=   r%   r%   r%   r&   r   t   s    
r   c                       s<   e Zd ZdZdZdZd fddZdedefd	d
Z	  Z
S )_CharSizesCachez"
    Cache for wcwidth sizes.
    @      r!   Nc                    s   t    t | _d S r"   )superr'   r   _long_stringsr*   	__class__r%   r&   r'      s   
z_CharSizesCache.__init__stringc                    s   t |dkrtdt|}nt fdd|D }| |< t | jkr> j}|| t | jkr>| }| v r> |= |S )N   r   c                 3   s    | ]} | V  qd S r"   r%   ).0cr*   r%   r&   	<genexpr>   s    z._CharSizesCache.__missing__.<locals>.<genexpr>)	lenmaxr   sumLONG_STRING_MIN_LENrC   r,   MAX_LONG_STRINGSpopleft)r$   rF   resultlong_stringskey_to_remover%   r*   r&   __missing__   s   
z_CharSizesCache.__missing__r4   )r5   r6   r7   r8   rN   rO   r'   strintrT   __classcell__r%   r%   rD   r&   r?      s    r?   rF   r!   c                 C   s   t |  S )z?
    Return width of a string. Wrapper around ``wcwidth``.
    )_CHAR_SIZES_CACHE)rF   r%   r%   r&   r      s   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   
r   c                   C   s
   t jdkS )z)
    True when we are using Windows.
    win32)sysplatformr%   r%   r%   r&   r      s   
r   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.
    r\   r   is_win_vt100_enabledF)r]   r^   prompt_toolkit.output.windows10r`   r_   r%   r%   r&   is_windows_vt100_supported   s   
rb   c                   C   s   t jdkotjdddkS )z7
    True when the ConEmu Windows console is used.
    r\   
ConEmuANSIOFFON)r]   r^   osenvirongetr%   r%   r%   r&   r      s   r   c                   C   s   t  jjdkS )z:
    True when the current thread is the main thread.
    _MainThread)	threadingcurrent_threadrE   r5   r%   r%   r%   r&   r      s   r   c                  C   s   t jdd} |  dv S )zD
    True if env variable is set to true (true, TRUE, TrUe, 1).
    PROMPT_TOOLKIT_BELLtrue)1rm   )rf   rg   rh   lowervaluer%   r%   r&   r      s   r   c                   C   s   t jddS )z&Return the $TERM environment variable.TERM )rf   rg   rh   r%   r%   r%   r&   r      s   r   _Titemsweightsc                 c   s    t | t |ksJ t | dksJ g }g }t| |D ]\}}|dkr.|| || q|} |}| s9tddd | D }t | }t|}d}		 d}
|
rzd}
tt|| |D ]\}}}|| |	| t| k rw|V  ||  d7  < d}
qY|
sO|	d7 }	qK)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%   )rH   ir%   r%   r&   
<listcomp>  s    z&take_using_weights.<locals>.<listcomp>TFrG   )rK   zipr,   
ValueErrorrL   rangefloat)ru   rv   items2weights2itemwalready_taken
item_count
max_weightrw   addingitem_iweightr%   r%   r&   r      s>   

	r   rq   c                 C      t | r	t|  S t| S )z$Turn callable or string into string.)callabler   rU   rp   r%   r%   r&   r   #     
r   c                 C   r   )zTurn callable or int into int.)r   r   rV   rp   r%   r%   r&   r   +  r   r   c                 C   r   )z"Turn callable or float into float.)r   r   r|   rp   r%   r%   r&   r   6  r   r   termc                 C   s&   | du rt tjddS |  dv 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.
    Nrr   rs   )dumbunknown)r   rf   rg   rh   ro   )r   r%   r%   r&   r   >  s   r   r"   )-rf   r[   r]   rj   collectionsr   typingr   r   r   r   r   r   r	   r
   r   r   r   __all__modulesSPHINX_AUTODOC_RUNNINGr   r   r   rU   rV   r?   rX   r   boolr   r   rb   r   r   r   r   rt   r   r   r   r|   r   r   r   r%   r%   r%   r&   <module>   sF    0
F)
"6"