U
    &%e6                     @   st  d dl mZmZ d dlmZ d dlm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 ddlmZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddl m!Z! ddl"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z* e
rd dl+m,Z, G dd deZ-ede#f Z.ede-f Z/G dd de0Z1G dd de1Z2G dd dZ3G dd deZ4G dd de4Z5G dd  d e4Z6e&G d!d dZ7e8d"krpd d#l9mZ e Ze7 Z:e:;e7d$d%d&e7dd'd(e7d)d*d+ e:d' <e7d,d-e7d.d/d0 e:d. <e7d1d/d0e7d2d- e:d2 ;e7d3d-e7d4d-e7d5d- e:d, ;e7e:j=d6d-e7d7d- e:d1 >d8 e?e: d9S ):    )ABCabstractmethod)islice)
itemgetter)RLock)	TYPE_CHECKINGDictIterableList
NamedTupleOptionalSequenceTupleUnion   )ratio_resolve)Align)ConsoleConsoleOptionsRenderableTypeRenderResult)ReprHighlighter)Panel)Pretty)Region)Result	rich_repr)Segment)	StyleTypeTreec                   @   s*   e Zd ZU dZeed< eee  ed< dS )LayoutRenderzAn individual layout render.regionrenderN)__name__
__module____qualname____doc__r   __annotations__r
   r    r)   r)   V/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/pip/_vendor/rich/layout.pyr!       s   
r!   Layoutc                   @   s   e Zd ZdZdS )LayoutErrorzLayout related error.Nr$   r%   r&   r'   r)   r)   r)   r*   r,   +   s   r,   c                   @   s   e Zd ZdZdS )
NoSplitterz"Requested splitter does not exist.Nr-   r)   r)   r)   r*   r.   /   s   r.   c                   @   s<   e Zd ZdZe ZddeddddZee	e
dd	d
ZdS )_Placeholderz4An internal renderable used as a Layout placeholder. r+   N)layoutstylereturnc                 C   s   || _ || _d S N)r1   r2   )selfr1   r2   r)   r)   r*   __init__8   s    z_Placeholder.__init__consoleoptionsr3   c                 c   sx   |j }|jp|jj}| j}|jr8|jd| d| dnd| d| d}ttjt|dd| j	| 
|d|dV  d S )	Nz (z x )(middle)verticalblue)r2   titleborder_styleheight)	max_widthrA   sizer1   namer   r   centerr   r2   highlighter)r5   r8   r9   widthrA   r1   r?   r)   r)   r*   __rich_console__<   s    z_Placeholder.__rich_console__)r0   )r$   r%   r&   r'   r   rF   r   r6   r   r   r   rH   r)   r)   r)   r*   r/   3   s    r/   c                   @   sV   e Zd ZU dZdZeed< eedddZee	d e
eede
f  dd	d
ZdS )SplitterzBase class for a splitter.r0   rD   r3   c                 C   s   dS )z(Get the icon (emoji) used in layout.treeNr)   r5   r)   r)   r*   get_tree_iconU   s    zSplitter.get_tree_iconr+   childrenr"   r3   c                 C   s   dS )zDivide a region amongst several child layouts.

        Args:
            children (Sequence(Layout)): A number of child layouts.
            region (Region): A rectangular region to divide.
        Nr)   )r5   rN   r"   r)   r)   r*   divideY   s    zSplitter.divideN)r$   r%   r&   r'   rD   strr(   r   rL   r   r   r	   r   rO   r)   r)   r)   r*   rI   P   s   
 rI   c                   @   sD   e Zd ZdZdZedddZed ee	e
def  ddd	Zd
S )RowSplitterz!Split a layout region in to rows.rowrJ   c                 C   s   dS )Nu   [layout.tree.row]⬌r)   rK   r)   r)   r*   rL   j   s    zRowSplitter.get_tree_iconr+   rM   c                 c   sV   |\}}}}t ||}d}t}	t||D ](\}
}|
|	|| |||fV  ||7 }q(d S Nr   r   r   zip)r5   rN   r"   xyrG   rA   Zrender_widthsoffset_Regionchildchild_widthr)   r)   r*   rO   m   s    
zRowSplitter.divideNr$   r%   r&   r'   rD   rP   rL   r   r   r	   r   rO   r)   r)   r)   r*   rQ   e   s    rQ   c                   @   sD   e Zd ZdZdZedddZed ee	e
def  ddd	Zd
S )ColumnSplitterz$Split a layout region in to columns.columnrJ   c                 C   s   dS )Nu   [layout.tree.column]⬍r)   rK   r)   r)   r*   rL   ~   s    zColumnSplitter.get_tree_iconr+   rM   c                 c   sV   |\}}}}t ||}d}t}	t||D ](\}
}|
|	||| ||fV  ||7 }q(d S rS   rT   )r5   rN   r"   rV   rW   rG   rA   Zrender_heightsrX   rY   rZ   child_heightr)   r)   r*   rO      s    
zColumnSplitter.divideNr\   r)   r)   r)   r*   r]   y   s    r]   c                
   @   s  e Zd ZdZeedZd8ddddddee ee	 ee
 e
e
edddd	Zed
ddZeed
ddZeed  d
ddZeed
ddZe	ed  dddZe	d dddZedd
ddZdded ef eee	f ddddZed ef dd d!d"Zed ef dd d#d$Zed ef dd d%d&Zdd
d'd(Zedd)d*d+Zd,e	dd-d.d/Z e
e
e!d0d1d2Z"e#e$ed3d4d5Z%e#e$e&d3d6d7Z'dS )9r+   aB  A renderable to divide a fixed height in to rows or columns.

    Args:
        renderable (RenderableType, optional): Renderable content, or None for placeholder. Defaults to None.
        name (str, optional): Optional identifier for Layout. Defaults to None.
        size (int, optional): Optional fixed size of layout. Defaults to None.
        minimum_size (int, optional): Minimum size of layout. Defaults to 1.
        ratio (int, optional): Optional ratio for flexible layout. Defaults to 1.
        visible (bool, optional): Visibility of layout. Defaults to True.
    )rR   r^   Nr   T)rD   rC   minimum_sizeratiovisible)
renderablerD   rC   r`   ra   rb   r3   c                C   sR   |p
t | | _|| _|| _|| _|| _|| _| jd  | _g | _	i | _
t | _d S )Nr^   )r/   _renderablerC   r`   ra   rD   rb   	splitterssplitter	_children_render_mapr   _lock)r5   rc   rD   rC   r`   ra   rb   r)   r)   r*   r6      s    
zLayout.__init__rJ   c                 c   s<   d| j d fV  d| jd fV  d| jdfV  d| jdfV  d S )NrD   rC   r`   r   ra   )rD   rC   r`   ra   rK   r)   r)   r*   __rich_repr__   s    zLayout.__rich_repr__c                 C   s   | j r
| S | jS )zLayout renderable.)rg   rd   rK   r)   r)   r*   rc      s    zLayout.renderablec                 C   s   dd | j D S )zGets (visible) layout children.c                 S   s   g | ]}|j r|qS r)   )rb   ).0rZ   r)   r)   r*   
<listcomp>   s      z#Layout.children.<locals>.<listcomp>rg   rK   r)   r)   r*   rN      s    zLayout.childrenc                 C   s   | j S )zGet a map of the last render.)rh   rK   r)   r)   r*   map   s    z
Layout.map)rD   r3   c                 C   s8   | j |kr| S | jD ]}||}|dk	r|  S qdS )zGet a named layout, or None if it doesn't exist.

        Args:
            name (str): Name of layout.

        Returns:
            Optional[Layout]: Layout instance or None if no layout was found.
        N)rD   rg   get)r5   rD   rZ   Znamed_layoutr)   r)   r*   ro      s    	



z
Layout.getc                 C   s$   |  |}|d kr td||S )NzNo layout with name )ro   KeyError)r5   rD   r1   r)   r)   r*   __getitem__   s    
zLayout.__getitem__r    c                    s   ddl m  ddlm ddlm} dd fdd| }||d	|jj d
d}ddddfdd||  |S )z/Get a tree renderable to show layout structure.r   )Styled)Tabler   r+   )r1   r3   c                    sF   | j  }jdd}| jr$t| n t| d}||| |}|S )N)r   r   r   r   )paddingdim)rf   rL   gridrb   r   add_row)r1   icontabletextZ_summary)rr   rs   r)   r*   summary   s    
zLayout.tree.<locals>.summarylayout.tree.T)guide_style	highlightr    N)treer1   r3   c                    s2   |j D ]&} | j|d|jj d| qd S )Nr|   )r}   )rg   addrf   rD   )r   r1   rZ   )recurser{   r)   r*   r      s    
zLayout.tree.<locals>.recurse)Zpip._vendor.rich.styledrr   pip._vendor.rich.tablers   pip._vendor.rich.treer    rf   rD   )r5   r    r1   r   r)   )rr   rs   r   r{   r*   r      s    

zLayout.treer^   )rf   )layoutsrf   r3   c                G   sd   dd |D }z t |tr|n
| j|  | _W n" tk
rP   td|Y nX || jdd< dS )zSplit the layout in to multiple sub-layouts.

        Args:
            *layouts (Layout): Positional arguments should be (sub) Layout instances.
            splitter (Union[Splitter, str]): Splitter instance or name of splitter.
        c                 S   s"   g | ]}t |tr|nt|qS r)   
isinstancer+   rk   r1   r)   r)   r*   rl     s   z Layout.split.<locals>.<listcomp>zNo splitter called N)r   rI   re   rf   rp   r.   rg   )r5   rf   r   _layoutsr)   r)   r*   split  s    
zLayout.split)r   r3   c                 G   s   dd |D }| j | dS )zAdd a new layout(s) to existing split.

        Args:
            *layouts (Union[Layout, RenderableType]): Positional arguments should be renderables or (sub) Layout instances.

        c                 s   s$   | ]}t |tr|nt|V  qd S r4   r   r   r)   r)   r*   	<genexpr>&  s   z#Layout.add_split.<locals>.<genexpr>N)rg   extend)r5   r   r   r)   r)   r*   	add_split  s    zLayout.add_splitc                 G   s   | j |ddi dS )zSplit the layout in to a row (layouts side by side).

        Args:
            *layouts (Layout): Positional arguments should be (sub) Layout instances.
        rf   rR   Nr   r5   r   r)   r)   r*   	split_row,  s    zLayout.split_rowc                 G   s   | j |ddi dS )zSplit the layout in to a column (layouts stacked on top of each other).

        Args:
            *layouts (Layout): Positional arguments should be (sub) Layout instances.
        rf   r^   Nr   r   r)   r)   r*   split_column4  s    zLayout.split_columnc                 C   s   | j dd= dS )zReset splits to initial state.Nrm   rK   r)   r)   r*   unsplit<  s    zLayout.unsplit)rc   r3   c              	   C   s   | j  || _W 5 Q R X dS )zjUpdate renderable.

        Args:
            renderable (RenderableType): New renderable object.
        N)ri   rd   )r5   rc   r)   r)   r*   update@  s    zLayout.updater   )r8   layout_namer3   c              	   C   sl   | j \ | | }| j| \}}|\}}}}	|||j||	}
t||
| j|< ||
|| W 5 Q R X dS )zRefresh a sub-layout.

        Args:
            console (Console): Console instance where Layout is to be rendered.
            layout_name (str): Name of layout.
        N)ri   rh   render_linesr9   update_dimensionsr!   update_screen_lines)r5   r8   r   r1   r"   _linesrV   rW   rG   rA   linesr)   r)   r*   refresh_screenI  s     zLayout.refresh_screen)rG   rA   r3   c                 C   s   | t dd||fg}|j}|j}g }|j}|rl||  |d \}}	|j}
|
r*|j|
|	D ]}|| q\q*dd t|tddD }|S )z,Create a dict that maps layout on to Region.r   c                 S   s   i | ]\}}||qS r)   r)   rk   r1   r"   r)   r)   r*   
<dictcomp>i  s    z+Layout._make_region_map.<locals>.<dictcomp>r   )key)r   appendpoprN   rf   rO   sortedr   )r5   rG   rA   stackpushr   layout_regionsZappend_layout_regionr1   r"   rN   Zchild_and_region
region_mapr)   r)   r*   _make_region_mapZ  s     
zLayout._make_region_mapr7   c                 C   sv   |j }|jp|j}| ||}dd | D }i }|j}|j}	|D ],\}
}||
j|	|j|j}t||||
< qD|S )zRender the sub_layouts.

        Args:
            console (Console): Console instance.
            options (ConsoleOptions): Console options.

        Returns:
            RenderMap: A dict that maps Layout on to a tuple of Region, lines
        c                 S   s   g | ]\}}|j s||fqS r)   )rN   r   r)   r)   r*   rl   |  s   z!Layout.render.<locals>.<listcomp>)	rB   rA   r   itemsr   r   rc   rG   r!   )r5   r8   r9   render_widthrender_heightr   r   
render_mapr   r   r1   r"   r   r)   r)   r*   r#   o  s     
 zLayout.renderc              	   c   s   | j  |jp|j}|jp|j}| ||||}|| _dd t|D }t}|	 D ]>\}}	|\}
}}}t
||||| |	D ]\}}|| qqXt }|D ]}|E d H  |V  qW 5 Q R X d S )Nc                 S   s   g | ]}g qS r)   r)   )rk   _r)   r)   r*   rl     s     z+Layout.__rich_console__.<locals>.<listcomp>)ri   rB   rG   rA   r#   r   rh   ranger   valuesrU   r   r   line)r5   r8   r9   rG   rA   r   Zlayout_lines_islicer"   r   Z_xrW   Z_layout_widthZlayout_heightrR   r   new_lineZ
layout_rowr)   r)   r*   rH     s$     
zLayout.__rich_console__)N)(r$   r%   r&   r'   rQ   r]   re   r   r   rP   intboolr6   r   rj   propertyrc   r
   rN   	RenderMaprn   ro   rq   r   r   rI   r   r   r   r   r   r   r   	RegionMapr   r   r   r#   r   rH   r)   r)   r)   r*   r+      s^   
 *

	 __main__)r   header   )rD   rC   main)ra   rD   
   footer)rC   rD   Zside)rD   body   )rD   ra   contents2topr<   bottomZleft1Zleft2ZfooN)@abcr   r   	itertoolsr   operatorr   	threadingr   typingr   r   r	   r
   r   r   r   r   r   _ratior   alignr   r8   r   r   r   r   rF   r   panelr   prettyr   r"   r   reprr   r   segmentr   r2   r   r   r    r!   r   r   	Exceptionr,   r.   r/   rI   rQ   r]   r+   r$   pip._vendor.rich.consoler1   r   r   r   r   printr)   r)   r)   r*   <module>   s`   ,  



   