o
    d                     @  sl   d Z ddlmZ ddlmZ ddlmZmZ ddlZ	ddl
mZ er(ddlmZ G dd	 d	ZdddZdS )z;
Module for formatting output data in console (to string).
    )annotations)get_terminal_size)TYPE_CHECKINGIterableN)pprint_thing)DataFrameFormatterc                   @  s   e Zd ZdZd)d*d	d
Zd+ddZd,ddZd+ddZed+ddZ	ed-ddZ
d.ddZed/ddZd0dd Zd0d!d"Zd1d%d&Zd2d'd(ZdS )3StringFormatterz3Formatter for string representation of a dataframe.Nfmtr   
line_width
int | NonereturnNonec                 C  s    || _ |j| _|j| _|| _d S N)r	   adjframer
   )selfr	   r
    r   L/app/.heroku/python/lib/python3.10/site-packages/pandas/io/formats/string.py__init__   s   
zStringFormatter.__init__strc                 C  s&   |   }| jjrd|| jjg}|S )N )_get_string_representationr	   Zshould_show_dimensionsjoinZdimensions_info)r   textr   r   r   	to_string   s   zStringFormatter.to_stringlist[list[str]]c                 C  s    | j  }| j jr| |}|S r   )r	   Zget_strcolsZis_truncated_insert_dot_separatorsr   strcolsr   r   r   _get_strcols#   s   

zStringFormatter._get_strcolsc                 C  sP   | j jjr| jS |  }| jd u r| jjdg|R  S | jr#| 	|S | 
|S N   )r	   r   empty_empty_info_liner   r
   r   adjoin_need_to_wrap_around_join_multiline_fit_strcols_to_terminal_widthr   r   r   r   r   )   s   



z*StringFormatter._get_string_representationc                 C  s.   dt | jj dt| jj dt| jj S )NzEmpty z

Columns: z
Index: )typer   __name__r   columnsindexr   r   r   r   r#   8   s   

z StringFormatter._empty_info_lineboolc                 C  s   t | jjd u p| jjdkS )Nr   )r-   r	   Zmax_colsr,   r   r   r   r%   @      z$StringFormatter._need_to_wrap_aroundr   c                 C  sD   | j | j j}t|}| j jr| ||}| j jr | ||}|S r   )r	   Z_get_formatted_indextr_framelenis_truncated_horizontally _insert_dot_separator_horizontalis_truncated_vertically_insert_dot_separator_vertical)r   r   Z	str_indexindex_lengthr   r   r   r   D   s   z&StringFormatter._insert_dot_separatorsintc                 C  s   | j jr
| j jd S | j jS r    )r	   r+   Z
tr_col_numr,   r   r   r   _adjusted_tr_col_numP   r.   z$StringFormatter._adjusted_tr_col_numr5   c                 C  s   | | jdg|  |S )Nz ...)insertr7   )r   r   r5   r   r   r   r2   T   s   z0StringFormatter._insert_dot_separator_horizontalc                 C  s   |t | jj }| jj}t|D ]K\}}| j || }| jjr&|| jk}nd}|dks.|r1d}	nd}	|dkr>| jjr>d}
n	|rEd}d}
nd}
| jj	|	g||
d	d }|
|| | q|S )
NF   z...z..r   left   right)mode)r0   r	   r/   Z
tr_row_num	enumerater   r1   r7   r+   justifyr8   )r   r   r5   Zn_header_rowsZrow_numZixcolZcwidthZ
is_dot_coldotsZdot_modeZdot_strr   r   r   r4   Z   s&   z.StringFormatter._insert_dot_separator_verticalstrcols_inputIterable[list[str]]c                   sV   j }d}t|} jjr$|d}|t fdd|D  | 8 } fdd|D }|d us3J t||}t	|} jj
rO jjd usHJ  jjd }	nt	 j}	g }
d}t|D ]I\}}||| } jjrp|d| |dkr|t	|kr||d k r|dgdg|	d    n|dg|	  |
 jj|g|R   |}q\d	|
S )
Nr!   r   c                      g | ]} j |qS r   r   r0   .0xr,   r   r   
<listcomp>       z3StringFormatter._join_multiline.<locals>.<listcomp>c                   s8   g | ]}t |d krt fdd|D  nd qS )r   c                   rD   r   rE   rF   r,   r   r   rI      rJ   z>StringFormatter._join_multiline.<locals>.<listcomp>.<listcomp>)r0   nparraymax)rG   r@   r,   r   r   rI      s    *z \z   z

)r
   listr	   r+   poprK   rL   rM   _binifyr0   r3   Zmax_rows_fittedr   r>   r8   appendr   r$   r   )r   rB   Zlwidthadjoin_widthr   idxZ
col_widthsZcol_binsZnbinsZnrowsZstr_lststartiendrowr   r,   r   r&   x   s:   
$



zStringFormatter._join_multilinec                   s  ddl m  | jjdg|R  d} |j  }t \}}|| }|d }  fdd|D }t|}	d}
|dkrl|	dkrl|
d7 }
t	|	d }|j
| }|| }||d 8 }||}t|}	|dkrl|	dksB|	| jj
 }t|d}|| j_| j  |  }| jjdg|R  S )Nr   Seriesr!   
c                   s   g | ]} | t qS r   )applyr0   rM   )rG   ZelerY   r   r   rI      s    zBStringFormatter._fit_strcols_to_terminal_width.<locals>.<listcomp>   )ZpandasrZ   r   r$   splitr   r0   rM   r   roundr+   Zdropr	   max_cols_fittedtruncater   )r   r   linesmax_lenwidth_ZdifZadj_difZcol_lensZn_colscountermidZmid_ixZcol_lenr`   r   rY   r   r'      s0   




z.StringFormatter._fit_strcols_to_terminal_widthr   )r	   r   r
   r   r   r   )r   r   )r   r   )r   r-   )r   r   r   r   )r   r6   )r   r   r5   r6   r   r   )rB   rC   r   r   )r   r   r   r   )r)   
__module____qualname____doc__r   r   r   r   propertyr#   r%   r   r7   r2   r4   r&   r'   r   r   r   r   r      s"    






'r   cols	list[int]r
   r6   r   c           
      C  s   d}g }d}t | d }t| D ].\}}|| }||7 }||kr+|d |ko)|dk}	n
|d |ko4|dk}	|	r>|| |}q|t |  |S )Nr!   r   r]   )r0   r>   rR   )
rl   r
   rS   ZbinsZ
curr_widthZi_last_columnrV   wZ
w_adjoinedwrapr   r   r   rQ      s    
rQ   )rl   rm   r
   r6   r   rm   )rj   
__future__r   shutilr   typingr   r   numpyrK   Zpandas.io.formats.printingr   Zpandas.io.formats.formatr   r   rQ   r   r   r   r   <module>   s     0