o
    wi
                     @   sN   d dl mZ dd Zdd ZdddZd	d
 Zdd ZdddZdddZdS )    )defaultdictc                    s   dd | D  t  t | krtd	 tt}d}| D ]}||d |   }|r,d}|| q| D ]}t |dkrK|D ]
} |  d7  < q@q6|rOnq fdd	| D S )
a  
    Given an iterable names, return the shortest prefix for each element
    so that all prefixes are different. All elements in names must be unique.

    >>> get_short_names(['cat', 'castor', 'could', 'fire', 'first'])
    ['cat', 'cas', 'co', 'fire', 'firs']

    c                 S   s   i | ]}|d qS )    .0namer   r   K/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/treetable/text.py
<dictcomp>   s    z#get_short_names.<locals>.<dictcomp>z%names must only contain unique valuesTNFr   c                    s   g | ]
}|d  |  qS Nr   r   lengthsr   r   
<listcomp>   s    z#get_short_names.<locals>.<listcomp>)len
ValueErrorr   listappendvalues)namesbucketsvalidr   bucketr   r   r   get_short_names   s(   	r   c                 C   s   t dd | dD ddS )Nc                 s   s    | ]}t |V  qd S r
   r   r   liner   r   r   	<genexpr>"   s    ztext_width.<locals>.<genexpr>
r   )default)maxsplit)textr   r   r   
text_width!   s   r!      c                 c   sL    |  dd| } | sdV  d S tdt| |D ]}| |||  V  qd S )N	  r   )replaceranger   )r    widthtabwidthindexr   r   r   wrap%   s   r+   c                 C   sD   |dkr	|  |S |dkr| |S |dkr| |S td| )N=<>zInvalid value for align )centerljustrjustr   )r    r(   	alignmentr   r   r   align.   s   


r3   c                 C   s    d| d}d}d || |gS )Nz[mz[0mr%   )join)r    colorcoderestorer   r   r   colorize9   s   r9   Nr-   c                    sP   |  d}du rttt|nfdd|D }d fdd|D S )z
    Return value justified to the given width, either
    to the left if align is '<', to the right if it is '>' or centered
    if it is '='.
    r   Nc                    s    g | ]}t | D ]}|q	qS r   )r+   )r   r   sub_line)r(   r   r   r   G   s     zwrap_align.<locals>.<listcomp>c                 3   s    | ]
}t | d V  qdS ))r(   r2   N)r3   r   r2   r(   r   r   r   H   s    
zwrap_align.<locals>.<genexpr>)r   r   mapr   r5   )r    r(   r2   linesr   r;   r   
wrap_align?   s   
r>   r%   c                    s   dd | D }g }t |  D ]5}dd |D }ttt|  fddt ||D }g }t | D ]
}||| q/|d| q|S )Nc                 S   s$   g | ]}t |d  ddd  qS )r   r   r   )r   r   )r   columnr   r   r   r   M   s   $ zjoin.<locals>.<listcomp>c                 S   s   g | ]}| d qS )r   )r   )r   rowr   r   r   r   P   s    c                    s*   g | ]\}}|d | g t |   qS )r$   r   )r   	row_linesr(   heightr   r   r   R   s    r   )zipr   r<   r   r   r5   )columns	separatorwidthsjoinedrows
rows_lines
joined_rowr=   r   rB   r   r5   L   s   
r5   )r"   )Nr-   )r%   )	collectionsr   r   r!   r+   r3   r9   r>   r5   r   r   r   r   <module>   s    
	
