o
    ni                     @   s   d Z ddlZddlZddlZdZdZdZee Zdeddfdd	Z	ded
e
defddZded
e
defddZded
e
defddZ	dded
e
dededef
ddZzddlZW n eym   ddlZddlZeZY dS w ddlZeZdS )zotimed_input: add a timeout to standard input.

Approach was inspired by: https://github.com/johejo/inputimeout
    N 
promptreturnc                 C   s   t j|  t j  d S N)sysstdoutwriteflush)r    r   W/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/wandb/sdk/lib/timed_input.py_echo   s   r   timeoutc                 C   s~   t |  t }|jtjtjtjjd |j|d}|D ]\}}|j	}| }|s*t
|t  S t t ttjtj t
)N)data)r   )r   	selectorsDefaultSelectorregisterr   stdin
EVENT_READreadlineselectr   TimeoutErrorrstripLFtermiostcflushTCIFLUSH)r   r   seleventskey_input_callback
input_datar   r   r   _posix_timed_input   s   r$   c                 C   s   d}t |  t }|| }d}t |k r`t rUt }|ttfv r*t t |S |dkr0t	|dkrQ|d d }t
t| | t
  }t dt|t| |g n||7 }t| t |k st t t)Ng? )r   time	monotonicmsvcrtkbhitgetwcheCRr   CRLFKeyboardInterruptSPlenjoinsleepr   )r   r   intervalbeginendlineccoverr   r   r   _windows_timed_input(   s,   
r;   c                    s   d}zddl m} W n ty   d}td Y nw t|  d t  d
 fdd}tj|d	}|	  |
|    rDS |rI|  t)NTr   )clear_outputFzCUnable to clear output, can't import clear_output from ipython.corer   c                     s   t  }   r	d S | d S r   )inputis_set)raweventuser_inpr   r   	get_inputS   s   z'_jupyter_timed_input.<locals>.get_input)target)r   N)IPython.core.displayr<   ImportErrorwandbtermwarnr   	threadingEventThreadstartr3   setr   )r   r   clearr<   rC   tr   r@   r   _jupyter_timed_inputD   s,   
rP   TFshow_timeoutjupyterc                 C   s2   |r|  d|dd} |rt | |dS t| |dS )a_  Behaves like builtin `input()` but adds timeout.

    Args:
        prompt (str): Prompt to output to stdout.
        timeout (float): Timeout to wait for input.
        show_timeout (bool): Show timeout in prompt
        jupyter (bool): If True, use jupyter specific code.

    Raises:
        TimeoutError: exception raised if timeout occurred.
    (z.0fz second timeout) )r   r   )rP   _timed_input)r   r   rQ   rR   r   r   r   timed_inpute   s
   rU   )TF)__doc__r   rI   rG   r1   r.   r   r/   strr   floatr$   r;   rP   boolrU   r+   rF   r   r   rT   r)   r   r   r   r   <module>   sB    "

