o
    MEg                     @   s   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 er4ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ e
dZG d	d
 d
ZG dd dZdS )    )zip_longest)	IteratorIterableListOptionalUnioncastoverloadTypeVarTYPE_CHECKING   )ConsoleConsoleOptionsJustifyMethodOverflowMethodRenderResultRenderableTypeText)cell_len)MeasurementTc                   @   sv   e Zd ZdZ	ddeed  ddfddZ				
			dddZ				
			dddZdddZ	ded fddZ
dS )Renderablesz:A list subclass which renders its contents to the console.Nrenderablesr   returnc                 C   s    |d urt || _d S g | _d S N)list_renderables)selfr    r   i/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/rich/containers.py__init__"   s   zRenderables.__init__consoler   optionsr   r   c                 c       | j E dH  dS z,Console render method to insert line-breaks.N)r   r   r"   r#   r   r   r    __rich_console__)      zRenderables.__rich_console__r   c                    sR    fdd| j D }|stddS tdd |D }tdd |D }t||S )Nc                    s   g | ]	}t  |qS r   )r   get).0
renderabler"   r#   r   r    
<listcomp>2   s    z0Renderables.__rich_measure__.<locals>.<listcomp>r   c                 s       | ]}|j V  qd S r   )minimumr*   	dimensionr   r   r    	<genexpr>8       z/Renderables.__rich_measure__.<locals>.<genexpr>c                 s   r.   r   )maximumr0   r   r   r    r2   9   r3   )r   r   max)r   r"   r#   
dimensions_min_maxr   r,   r    __rich_measure__/   s   

zRenderables.__rich_measure__r+   c                 C      | j | d S r   )r   append)r   r+   r   r   r    r;   <      zRenderables.appendc                 C   
   t | jS r   )iterr   r   r   r   r    __iter__?      
zRenderables.__iter__r   r"   r   r#   r   r   r   )r"   r   r#   r   r   r   )r+   r   r   N)__name__
__module____qualname____doc__r   r   r!   r'   r9   r;   r@   r   r   r   r    r      s0    




r   c                   @   s0  e Zd ZdZd/ded ddfddZdefd	d
Zded fddZ	e
deddfddZe
deded fddZdeeef deded f fddZdedddd fddZdefddZ						d0ddZd1dd Zded ddfd!d"Zd2deddfd$d%Z	&	'd3ddd(ed)d*d+d,ddf
d-d.ZdS )4Linesz0A list subclass which can render to the console.r   linesr   r   Nc                 C   s   t || _d S r   )r   _linesr   rH   r   r   r    r!   F      zLines.__init__c                 C   s   d| j dS )NzLines()rI   r?   r   r   r    __repr__I   rK   zLines.__repr__c                 C   r=   r   )r>   rI   r?   r   r   r    r@   L   rA   zLines.__iter__indexc                 C      d S r   r   r   rO   r   r   r    __getitem__O      zLines.__getitem__c                 C   rP   r   r   rQ   r   r   r    rR   S   rS   c                 C   s
   | j | S r   rM   rQ   r   r   r    rR   W   rA   valuec                 C   s   || j |< | S r   rM   )r   rO   rT   r   r   r    __setitem__Z   s   
zLines.__setitem__c                 C   s
   | j  S r   )rI   __len__r?   r   r   r    rV   ^   rA   zLines.__len__r"   r   r#   r   r   c                 c   r$   r%   rM   r&   r   r   r    r'   a   r(   zLines.__rich_console__linec                 C   r:   r   )rI   r;   )r   rW   r   r   r    r;   g   r<   zLines.appendc                 C   r:   r   )rI   extendrJ   r   r   r    rX   j   r<   zLines.extendc                 C   s   | j |S r   )rI   poprQ   r   r   r    rZ   m   s   z	Lines.popleftfoldwidthjustifyr   overflowr   c                 C   s2  ddl m} |dkr| jD ]
}|j||dd qdS |dkrG| jD ]#}|  |j||d ||t|j d  ||t|j  q!dS |d	krh| jD ]}|  |j||d ||t|j  qNdS |d
krt	| jD ]\}}|t
| jd kr dS |d}tdd |D }	t
|d }
dd t|
D }d}|r|	|
 |k r|t
|| d   d7  < |
d7 }
|d t
| }|	|
 |k sg }t	t||dd D ]4\}\}}|| |t
|k r
||d}||d}||kr|n|j}||d||  |d q|d|| |< qrdS dS )a  Justify and overflow text to a given width.

        Args:
            console (Console): Console instance.
            width (int): Number of characters per line.
            justify (str, optional): Default justify method for text: "left", "center", "full" or "right". Defaults to "left".
            overflow (str, optional): Default overflow for text: "crop", "fold", or "ellipsis". Defaults to "fold".

        r   r   r[   T)r_   padcenter)r_      rightfull c                 s   s    | ]}t |jV  qd S r   )r   plain)r*   wordr   r   r    r2      s    z Lines.justify.<locals>.<genexpr>c                 S   s   g | ]}d qS )r   r   )r*   _r   r   r    r-      s    z!Lines.justify.<locals>.<listcomp>r   NrY   )style )textr   rI   truncaterstrippad_leftr   rf   	pad_right	enumeratelensplitsumranger   r;   get_style_at_offsetri   join)r   r"   r]   r^   r_   r   rW   
line_indexwords
words_size
num_spacesspacesrO   tokensrg   	next_wordri   
next_stylespace_styler   r   r    r^   p   s^   





zLines.justify)r   rB   )rW   r   r   N)rY   )r[   r\   )rC   rD   rE   rF   r   r!   strrN   r   r@   r	   intrR   slicer   r   rU   rV   r'   r;   rX   rZ   r^   r   r   r   r    rG   C   sF    &

rG   N)	itertoolsr   typingr   r   r   r   r   r   r	   r
   r   r"   r   r   r   r   r   r   rk   r   cellsr   measurer   r   r   rG   r   r   r   r    <module>   s    , $