a
    oÝEb” ã                   @  s¦  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
 ddlmZ ddlZddl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mZ dd
lmZ ddlZddl 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF ddlGmHZHmIZI ddlJmKZKmLZLmMZM ddlNmOZO ddlPmQ  mRZS ddlTmUZU ddlVmWZWmXZXmYZYmZZZ ddl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZbmcZc ddldmeZemfZfmgZg e�r(ddlhmiZimjZj dZkdZldZmG d d!„ d!ƒZnG d"d#„ d#ƒZoG d$d%„ d%ƒZpG d&d'„ d'epƒZqd%d(œd)d*„Zrd+d(œd,d-„Zsd+d(œd.d/„ZtG d0d1„ d1ƒZuG d2d3„ d3ƒZvdœd4d5d6d6d7œd8d9„Zwed�d5d6d:œd;d<„ƒZxdždAdBdCd4dDdEd4d4dFdDdGdHœdIdJ„ZyG dKdL„ dLƒZzG dMdN„ dNezƒZ{G dOdP„ dPezƒZ|G dQdR„ dRezƒZ}G dSdT„ dTezƒZ~dUdGdVœdWdX„ZdYdZd[œd\d]„Z€dŸd_d4d4d`œdadb„Z�d d_d4d6d4dcœddde„Z‚d¡dZd4d6dfdgœdhdi„Zƒdjd6d6dkœdldm„Z„G dndo„ doe}ƒZ…G dpdq„ dqezƒZ†d¢dsd4dZdfdtœdudv„Z‡d£dGd4dDdwdGdxœdydz„Zˆd¤d{d4dGd|œd}d~„Z‰d4d4dœd€d�„ZŠd¥d‚d4dGdƒœd„d…„Z‹d†dZd‡œdˆd‰„ZŒG dŠd‹„ d‹ƒZ�d¦d�dZdŽd�œd�d‘„ZŽd§dAd“d”d•œd–d—„Z�d˜dGdŽd™œdšd›„Z�dS )¨z€
Internal module for formatting output data in csv, html, xml,
and latex files. This module also applies to display formatting.
é    )Úannotations)Úcontextmanager)Ú
QUOTE_NONEÚQUOTE_NONNUMERICN)Úpartial)ÚStringIO)Úget_terminal_size)
ÚIOÚTYPE_CHECKINGÚAnyÚCallableÚHashableÚIterableÚListÚMappingÚSequenceÚcast)Úeast_asian_width)Ú
get_optionÚ
set_option)Úlib)ÚNA)ÚNaTÚ	TimedeltaÚ	TimestampÚiNaT)ÚNaTType)
Ú	ArrayLikeÚColspaceArgTypeÚColspaceTypeÚCompressionOptionsÚFilePathÚFloatFormatTypeÚFormattersTypeÚ
IndexLabelÚStorageOptionsÚWriteBuffer)Úis_categorical_dtypeÚis_complex_dtypeÚis_datetime64_dtypeÚis_datetime64tz_dtypeÚis_extension_array_dtypeÚis_floatÚis_float_dtypeÚ
is_integerÚis_integer_dtypeÚis_list_likeÚis_numeric_dtypeÚ	is_scalarÚis_timedelta64_dtype)ÚisnaÚnotna)ÚCategoricalÚDatetimeArrayÚTimedeltaArray)ÚPandasObject)Úextract_array)ÚIndexÚ
MultiIndexÚPeriodIndexÚensure_index)ÚDatetimeIndex)ÚTimedeltaIndex)Úconcat)Úcheck_parent_directoryÚstringify_path)ÚadjoinÚjustifyÚpprint_thing)Ú	DataFrameÚSeriesa´	  
        Parameters
        ----------
        buf : str, Path or StringIO-like, optional, default None
            Buffer to write to. If None, the output is returned as a string.
        columns : sequence, optional, default None
            The subset of columns to write. Writes all columns by default.
        col_space : %(col_space_type)s, optional
            %(col_space)s.
        header : %(header_type)s, optional
            %(header)s.
        index : bool, optional, default True
            Whether to print index (row) labels.
        na_rep : str, optional, default 'NaN'
            String representation of ``NaN`` to use.
        formatters : list, tuple or dict of one-param. functions, optional
            Formatter functions to apply to columns' elements by position or
            name.
            The result of each function must be a unicode string.
            List/tuple must be of length equal to the number of columns.
        float_format : one-parameter function, optional, default None
            Formatter function to apply to columns' elements if they are
            floats. This function must return a unicode string and will be
            applied only to the non-``NaN`` elements, with ``NaN`` being
            handled by ``na_rep``.

            .. versionchanged:: 1.2.0

        sparsify : bool, optional, default True
            Set to False for a DataFrame with a hierarchical index to print
            every multiindex key at each row.
        index_names : bool, optional, default True
            Prints the names of the indexes.
        justify : str, default None
            How to justify the column labels. If None uses the option from
            the print configuration (controlled by set_option), 'right' out
            of the box. Valid values are

            * left
            * right
            * center
            * justify
            * justify-all
            * start
            * end
            * inherit
            * match-parent
            * initial
            * unset.
        max_rows : int, optional
            Maximum number of rows to display in the console.
        max_cols : int, optional
            Maximum number of columns to display in the console.
        show_dimensions : bool, default False
            Display DataFrame dimensions (number of rows by number of columns).
        decimal : str, default '.'
            Character recognized as decimal separator, e.g. ',' in Europe.
    )ÚleftÚrightÚcenterrE   zjustify-allÚstartÚendÚinheritzmatch-parentÚinitialÚunsetz™
        Returns
        -------
        str or None
            If buf is None, returns the result as a string. Otherwise returns
            None.
    c                   @  sN   e Zd Zdddddddœd	d
„Zddœdd„Zddœdd„Zddœdd„ZdS )ÚCategoricalFormatterNTÚNaNr6   úIO[str] | NoneÚboolÚstr)ÚcategoricalÚbufÚlengthÚna_repÚfooterc                 C  s8   || _ |d ur|ntdƒ| _|| _|| _|| _t| _d S ©NÚ )rV   r   rW   rY   rX   rZ   r   Úquoting)ÚselfrV   rW   rX   rY   rZ   © r_   úX/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/io/formats/format.pyÚ__init__Ç   s    zCategoricalFormatter.__init__©Úreturnc                 C  sP   d}| j r*|r|d7 }|dt| jƒ› �7 }| j ¡ }|r@|d7 }||7 }t|ƒS )Nr\   ú, úLength: Ú
)rX   ÚlenrV   Ú_repr_categories_inforU   )r^   rZ   Ú
level_infor_   r_   r`   Ú_get_footerÖ   s    
z CategoricalFormatter._get_footerú	list[str]c                 C  s   t | j ¡ d d | j| jd�S )N)Úfloat_formatrY   r]   )Úformat_arrayrV   Ú_internal_get_valuesrY   r]   ©r^   r_   r_   r`   Ú_get_formatted_valuesç   s    ûz*CategoricalFormatter._get_formatted_valuesc                 C  s|   | j }t|ƒdkr$| jr |  ¡ S dS |  ¡ }dd„ |D ƒ}d |¡}d| d g}| jrn|  ¡ }|rn| |¡ td |¡ƒS )	Nr   r\   c                 S  s   g | ]}|  ¡ ‘qS r_   )Ústrip©Ú.0Úir_   r_   r`   Ú
<listcomp>û   ó    z2CategoricalFormatter.to_string.<locals>.<listcomp>rd   ú[ú]rf   )rV   rg   rZ   rj   rp   ÚjoinÚappendrU   )r^   rV   Ú
fmt_valuesÚvaluesÚresultrZ   r_   r_   r`   Ú	to_stringð   s    

zCategoricalFormatter.to_string)NTrR   T)Ú__name__Ú
__module__Ú__qualname__ra   rj   rp   r~   r_   r_   r_   r`   rQ   Æ   s       ú	rQ   c                   @  sv   e Zd Zddddddd	dd
ddddœdd„Zddœdd„Zd	dœdd„Zddœdd„Zddœdd„Zd	dœdd„ZdS )ÚSeriesFormatterNTrR   FrH   rS   ú
bool | strrT   rU   ú
str | Noneú
int | None)ÚseriesrW   rX   ÚheaderÚindexrY   Únamerl   ÚdtypeÚmax_rowsÚmin_rowsc                 C  st   || _ |d ur|ntƒ | _|| _|| _|| _|| _|| _|
| _|| _	|d u rTt
dƒ}|| _|	| _tƒ | _|  ¡  d S )Núdisplay.float_format)r†   r   rW   r‰   rY   r‡   rX   rˆ   r‹   rŒ   r   rl   rŠ   Úget_adjustmentÚadjÚ_chk_truncate)r^   r†   rW   rX   r‡   rˆ   rY   r‰   rl   rŠ   r‹   rŒ   r_   r_   r`   ra     s    zSeriesFormatter.__init__ÚNonerb   c                 C  s¨   |  | j }| j}|o t| jƒ|k}| j}|r’tt|ƒ}|rDt||ƒ}|dkr`|}|jd |… }n*|d }t|jd |… |j| d … fƒ}|| _	nd | _	|| _
|| _d S )Né   é   )rŒ   r‹   rg   r†   r   ÚintÚminÚilocrA   Ú
tr_row_numÚ	tr_seriesÚis_truncated_vertically)r^   rŒ   r‹   r™   r†   Úrow_numr_   r_   r`   r�   '  s$    

"zSeriesFormatter._chk_truncatec                 C  sB  | j j}d}t| j jdd ƒd urLt| j jtttfƒs8J ‚|d| j jj› �7 }| jdur„|d ur„|rj|d7 }t	|dd�}|d|› �7 }| j
d	u sž| j
d
kr¾| jr¾|rª|d7 }|dt| j ƒ› �7 }| jdu�r
| jd u�r
t| jjdd ƒ}|�r
|rø|d7 }|dt	|ƒ› �7 }t| jjƒ�r:| jj ¡ }|�r2|d7 }||7 }t|ƒS )Nr\   ÚfreqzFreq: Frd   ©ú	úrf   )Úescape_charszName: TÚtruncatere   r‰   zdtype: rf   )r†   r‰   Úgetattrrˆ   Ú
isinstancer?   r=   r@   ZfreqstrrF   rX   r™   rg   rŠ   r˜   r'   Ú_valuesrh   rU   )r^   r‰   rZ   Zseries_nameZ
dtype_nameri   r_   r_   r`   rj   B  s@    ÿ
ÿÿzSeriesFormatter._get_footerztuple[list[str], bool]c                 C  sR   | j j}t|tƒr4tdd„ |jD ƒƒ}|jdd�}n|jd u}|jdd�}||fS )Nc                 s  s   | ]
}|V  qd S ©Nr_   ©rs   r‰   r_   r_   r`   Ú	<genexpr>o  rv   z7SeriesFormatter._get_formatted_index.<locals>.<genexpr>T)Únames)r‰   )r˜   rˆ   r¢   r<   Úanyr§   Úformatr‰   )r^   rˆ   Úhave_headerÚ	fmt_indexr_   r_   r`   Ú_get_formatted_indexk  s    

z$SeriesFormatter._get_formatted_indexrk   c                 C  s   t | jjd | j| j| jd�S )N)rl   rY   Úleading_space)rm   r˜   r£   rl   rY   rˆ   ro   r_   r_   r`   rp   v  s    ûz%SeriesFormatter._get_formatted_valuesc                 C  s2  | j }|  ¡ }t|ƒdkr2t| jƒj› d|› d�S |  ¡ \}}|  ¡ }| jr¾d}| j	}t
t|ƒ}| j ||d  ¡}|dkr‚d}	nd}	| jj|	g|dd	�d }	| || |	¡ | |d d
¡ | jræ| jjdg|dd … |g¢R Ž }
n| j d|¡}
| j�r|�r|d d |
 }
|�r$|
d| 7 }
td
 |
¡ƒS )Nr   z([], ú)r’   é   ú...z..rK   ©Úmoder\   rf   )r˜   rj   rg   Útyper†   r   r¬   rp   r™   r—   r   r”   r�   rE   Úinsertrˆ   rD   r‡   rU   ry   )r^   r†   rZ   r«   rª   r{   Zn_header_rowsrš   ÚwidthZdot_strr}   r_   r_   r`   r~     s2    
"zSeriesFormatter.to_string)
NTTTrR   FNTNN)	r   r€   r�   ra   r�   rj   r¬   rp   r~   r_   r_   r_   r`   r‚     s              ô$ )	r‚   c                   @  sJ   e Zd Zdd„ Zdddœdd„Zdd	ddd
dœdd„Zdddœdd„ZdS )ÚTextAdjustmentc                 C  s   t dƒ| _d S )Nzdisplay.encoding)r   Úencodingro   r_   r_   r`   ra   §  s    zTextAdjustment.__init__rU   r”   ©Útextrc   c                 C  s   t |ƒS r¤   ©rg   ©r^   r¹   r_   r_   r`   rg   ª  s    zTextAdjustment.lenrJ   r   rk   ©ÚtextsÚmax_lenr²   rc   c                 C  s   t |||d�S )Nr±   )rE   ©r^   r½   r¾   r²   r_   r_   r`   rE   ­  s    zTextAdjustment.justify)Úspacerc   c                 O  s    t |g|¢R | j| jdœ|¤ŽS )N)ZstrlenZjustfunc)rD   rg   rE   )r^   rÀ   ÚlistsÚkwargsr_   r_   r`   rD   °  s    zTextAdjustment.adjoinN)rJ   )r   r€   r�   ra   rg   rE   rD   r_   r_   r_   r`   r¶   ¦  s   r¶   c                      sB   e Zd Z‡ fdd„Zdddœdd„Zdd	ddd
dœdd„Z‡  ZS )ÚEastAsianTextAdjustmentc                   s6   t ƒ  ¡  tdƒrd| _nd| _ddddddœ| _d S )Nz!display.unicode.ambiguous_as_wider“   r’   )ZNaÚNÚWÚFÚH)Úsuperra   r   Úambiguous_widthÚ_EAW_MAPro   ©Ú	__class__r_   r`   ra   µ  s
    
z EastAsianTextAdjustment.__init__rU   r”   r¸   c                   s(   t |tƒst|ƒS t‡ fdd„|D ƒƒS )zN
        Calculate display width considering unicode East Asian Width
        c                 3  s"   | ]}ˆ j  t|ƒˆ j¡V  qd S r¤   )rÊ   Úgetr   rÉ   )rs   Úcro   r_   r`   r¦   È  s   z.EastAsianTextAdjustment.len.<locals>.<genexpr>)r¢   rU   rg   Úsumr»   r_   ro   r`   rg   Á  s
    
ÿzEastAsianTextAdjustment.lenrJ   zIterable[str]rk   r¼   c                   sX   ‡‡fdd„‰ |dkr(‡ fdd„|D ƒS |dkrB‡ fdd„|D ƒS ‡ fdd„|D ƒS d S )	Nc                   s   ˆ ˆ  | ¡ t | ƒ S r¤   rº   )Út)r¾   r^   r_   r`   Ú_get_padÐ  s    z1EastAsianTextAdjustment.justify.<locals>._get_padrI   c                   s   g | ]}|  ˆ |ƒ¡‘qS r_   )Úljust©rs   Úx©rÑ   r_   r`   ru   Ô  rv   z3EastAsianTextAdjustment.justify.<locals>.<listcomp>rK   c                   s   g | ]}|  ˆ |ƒ¡‘qS r_   )rK   rÓ   rÕ   r_   r`   ru   Ö  rv   c                   s   g | ]}|  ˆ |ƒ¡‘qS r_   )ÚrjustrÓ   rÕ   r_   r`   ru   Ø  rv   r_   r¿   r_   )rÑ   r¾   r^   r`   rE   Ì  s    zEastAsianTextAdjustment.justify)rJ   )r   r€   r�   ra   rg   rE   Ú__classcell__r_   r_   rË   r`   rÃ   ´  s    ÿrÃ   rb   c                  C  s   t dƒ} | rtƒ S tƒ S d S )Nz display.unicode.east_asian_width)r   rÃ   r¶   )Zuse_east_asian_widthr_   r_   r`   rŽ   Û  s    rŽ   zdict[str, Any]c                  C  sL   ddl m}  tdƒr"|  ¡ \}}nd}tdƒtdƒtdƒtdƒtd	ƒ|d
œS )aõ  Get the parameters used to repr(dataFrame) calls using DataFrame.to_string.

    Supplying these parameters to DataFrame.to_string is equivalent to calling
    ``repr(DataFrame)``. This is useful if you want to adjust the repr output.

    .. versionadded:: 1.4.0

    Example
    -------
    >>> import pandas as pd
    >>>
    >>> df = pd.DataFrame([[1, 2], [3, 4]])
    >>> repr_params = pd.io.formats.format.get_dataframe_repr_params()
    >>> repr(df) == df.to_string(**repr_params)
    True
    r   )Úconsolezdisplay.expand_frame_reprNúdisplay.max_rowsúdisplay.min_rowszdisplay.max_columnsúdisplay.max_colwidthúdisplay.show_dimensions)r‹   rŒ   Úmax_colsZmax_colwidthÚshow_dimensionsÚ
line_width)Zpandas.io.formatsrØ   r   Zget_console_size)rØ   rß   Ú_r_   r_   r`   Úget_dataframe_repr_paramsã  s    úrá   c                  C  sN   t ƒ \} }tdƒdkr|ntdƒ}tdƒdkr2|ntdƒ}dd||tdƒdœS )aé  Get the parameters used to repr(Series) calls using Series.to_string.

    Supplying these parameters to Series.to_string is equivalent to calling
    ``repr(series)``. This is useful if you want to adjust the series repr output.

    .. versionadded:: 1.4.0

    Example
    -------
    >>> import pandas as pd
    >>>
    >>> ser = pd.Series([1, 2, 3, 4])
    >>> repr_params = pd.io.formats.format.get_series_repr_params()
    >>> repr(ser) == ser.to_string(**repr_params)
    True
    rÙ   r   rÚ   TrÜ   )r‰   rŠ   rŒ   r‹   rX   )r   r   )rµ   Úheightr‹   rŒ   r_   r_   r`   Úget_series_repr_params  s    

ÿý
ÿýûrã   c                   @  sV  e Zd ZdZerendZeee 7 Zdidd	d
ddddddddddddddddœdd„Zddœdd„Zeddœdd„ƒZ	eddœdd„ƒZ
eddœdd „ƒZeddœd!d"„ƒZeddœd#d$„ƒZeddœd%d&„ƒZeddœd'd(„ƒZeddœd)d*„ƒZeddœd+d,„ƒZed-dœd.d/„ƒZddd0œd1d2„Zdd3d4œd5d6„Zddd7œd8d9„Zd	d:d;œd<d=„Zd
d>d?œd@dA„ZddœdBdC„ZddœdDdE„ZdddFœdGdH„ZddœdIdJ„ZddœdKdL„ZddœdMdN„Zd-dœdOdP„ZdQdœdRdS„ZdQdœdTdU„Z dQdœdVdW„Z!ddœdXdY„Z"d-dZd[œd\d]„Z#d^d_d[œd`da„Z$dddbœdcdd„Z%ddZdbœdedf„Z&dZdœdgdh„Z'dS )jÚDataFrameFormatterz;Class for processing dataframe formatting options and data.r\   NTrR   FÚ.rG   zSequence[str] | NonezColspaceArgType | Nonezbool | Sequence[str]rT   rU   zFormattersType | Noner„   úFloatFormatType | Noneúbool | Noner…   rƒ   )ÚframeÚcolumnsÚ	col_spacer‡   rˆ   rY   Ú
formattersrE   rl   ÚsparsifyÚindex_namesr‹   rŒ   rÝ   rÞ   ÚdecimalÚ	bold_rowsÚescapec                 C  sº   || _ |  |¡| _|  |¡| _|| _|| _|| _|  |¡| _	|  
|¡| _|	| _|  |
¡| _|| _|| _|| _|| _|| _|| _|| _|| _|  ¡ | _|  ¡ | _| j | _|  ¡  tƒ | _d S r¤   )rè   Ú_initialize_columnsré   Ú_initialize_colspacerê   r‡   rˆ   rY   Ú_initialize_formattersrë   Ú_initialize_justifyrE   rl   Ú_initialize_sparsifyrì   Úshow_index_namesrî   rï   rð   r‹   rŒ   rÝ   rÞ   Ú_calc_max_cols_fittedÚmax_cols_fittedÚ_calc_max_rows_fittedÚmax_rows_fittedÚtr_framer    rŽ   r�   )r^   rè   ré   rê   r‡   rˆ   rY   rë   rE   rl   rì   rí   r‹   rŒ   rÝ   rÞ   rî   rï   rð   r_   r_   r`   ra   0  s.    

zDataFrameFormatter.__init__zlist[list[str]]rb   c                 C  s*   |   ¡ }| jr&|  | j¡}| d|¡ |S )zP
        Render a DataFrame to a list of columns (as lists of strings).
        r   )Ú_get_strcols_without_indexrˆ   r¬   rû   r´   )r^   ÚstrcolsZ	str_indexr_   r_   r`   Úget_strcols_  s
    zDataFrameFormatter.get_strcolsc                 C  s   | j du p| j dko| jS )NTr    )rÞ   Úis_truncatedro   r_   r_   r`   Úshould_show_dimensionsk  s    
ÿz)DataFrameFormatter.should_show_dimensionsc                 C  s   t | jp| jƒS r¤   )rT   Úis_truncated_horizontallyr™   ro   r_   r_   r`   rÿ   q  s    zDataFrameFormatter.is_truncatedc                 C  s   t | jot| jƒ| jkƒS r¤   )rT   rø   rg   ré   ro   r_   r_   r`   r  u  s    z,DataFrameFormatter.is_truncated_horizontallyc                 C  s   t | jot| jƒ| jkƒS r¤   )rT   rú   rg   rè   ro   r_   r_   r`   r™   y  s    z*DataFrameFormatter.is_truncated_verticallyc                 C  s    dt | jƒ› dt | jjƒ› d�S )Nz

[z rows x z	 columns])rg   rè   ré   ro   r_   r_   r`   Údimensions_info}  s    z"DataFrameFormatter.dimensions_infoc                 C  s   t | jjƒS r¤   )Ú
_has_namesrè   rˆ   ro   r_   r_   r`   Úhas_index_names�  s    z"DataFrameFormatter.has_index_namesc                 C  s   t | jjƒS r¤   )r  rè   ré   ro   r_   r_   r`   Úhas_column_names…  s    z#DataFrameFormatter.has_column_namesc                 C  s   t | j| j| jfƒS r¤   )Úallr  rˆ   rö   ro   r_   r_   r`   Úshow_row_idx_names‰  s    z%DataFrameFormatter.show_row_idx_namesc                 C  s   t | j| j| jfƒS r¤   )r  r  rö   r‡   ro   r_   r_   r`   Úshow_col_idx_names�  s    z%DataFrameFormatter.show_col_idx_namesr”   c                 C  s   t | jpt| jƒt| jƒƒS r¤   )r•   r‹   rg   rè   ro   r_   r_   r`   Úmax_rows_displayed‘  s    z%DataFrameFormatter.max_rows_displayed)rì   rc   c                 C  s   |d u rt dƒS |S )Nzdisplay.multi_sparse©r   )r^   rì   r_   r_   r`   rõ   •  s    z'DataFrameFormatter._initialize_sparsifyr#   )rë   rc   c                 C  sT   |d u ri S t | jjƒt |ƒks*t|tƒr.|S tdt |ƒ› dt | jjƒ› d�ƒ‚d S )NzFormatters length(ú+) should match DataFrame number of columns(r®   )rg   rè   ré   r¢   ÚdictÚ
ValueError)r^   rë   r_   r_   r`   ró   š  s    
ÿÿz)DataFrameFormatter._initialize_formatters)rE   rc   c                 C  s   |d u rt dƒS |S d S )Nzdisplay.colheader_justifyr
  )r^   rE   r_   r_   r`   rô   §  s    z&DataFrameFormatter._initialize_justifyr;   )ré   rc   c                 C  s,   |d ur t |ƒ}| j| | _|S | jjS d S r¤   )r>   rè   ré   )r^   ré   Úcolsr_   r_   r`   rñ   ­  s
    z&DataFrameFormatter._initialize_columnsr   )rê   rc   c                   sÎ   ˆ d u ri }n¼t ˆ ttfƒrBdˆ i}| ‡ fdd„| jjD ƒ¡ nˆt ˆ tƒr‚ˆ  ¡ D ]&}|| jjvrT|dkrTtd|› �ƒ‚qTˆ }nHt	| jjƒt	ˆ ƒkr¸tdt	ˆ ƒ› dt	| jjƒ› d�ƒ‚t
t| jjˆ ƒƒ}|S )Nr\   c                   s   i | ]
}|ˆ “qS r_   r_   )rs   Úcolumn©rê   r_   r`   Ú
<dictcomp>¼  rv   z;DataFrameFormatter._initialize_colspace.<locals>.<dictcomp>z,Col_space is defined for an unknown column: zCol_space length(r  r®   )r¢   r”   rU   Úupdaterè   ré   r   Úkeysr  rg   r  Úzip)r^   rê   r}   r  r_   r  r`   rò   µ  s(    
ÿ
ÿÿz'DataFrameFormatter._initialize_colspacec                 C  s0   |   ¡ s| jS tƒ \}}|  |¡r&|S | jS dS )z%Number of columns fitting the screen.N)Ú_is_in_terminalrÝ   r   Ú_is_screen_narrow)r^   rµ   rà   r_   r_   r`   r÷   Í  s    

z(DataFrameFormatter._calc_max_cols_fittedc                 C  sP   |   ¡ r@tƒ \}}| jdkr(||  ¡  S |  |¡r8|}qF| j}n| j}|  |¡S )z,Number of rows with data fitting the screen.r   )r  r   r‹   Ú_get_number_of_auxillary_rowsÚ_is_screen_shortÚ_adjust_max_rows)r^   rà   râ   r‹   r_   r_   r`   rù   Ø  s    


z(DataFrameFormatter._calc_max_rows_fitted)r‹   rc   c                 C  s(   |r$t | jƒ|kr$| jr$t| j|ƒ}|S )zºAdjust max_rows using display logic.

        See description here:
        https://pandas.pydata.org/docs/dev/user_guide/options.html#frequently-used-options

        GH #37359
        )rg   rè   rŒ   r•   )r^   r‹   r_   r_   r`   r  ë  s    z#DataFrameFormatter._adjust_max_rowsc                 C  s   t | jdkp| jdkƒS )z/Check if the output is to be shown in terminal.r   )rT   rÝ   r‹   ro   r_   r_   r`   r  ù  s    z"DataFrameFormatter._is_in_terminalc                 C  s   t | jdkot| jjƒ|kƒS ©Nr   )rT   rÝ   rg   rè   ré   )r^   Ú	max_widthr_   r_   r`   r  ý  s    z$DataFrameFormatter._is_screen_narrowc                 C  s   t | jdkot| jƒ|kƒS r  )rT   r‹   rg   rè   )r^   Ú
max_heightr_   r_   r`   r     s    z#DataFrameFormatter._is_screen_shortc                 C  s:   d}d}|| }| j r(|t| j ¡ ƒ7 }| jr6|d7 }|S )z?Get number of rows occupied by prompt, dots and dimension info.r’   )rÞ   rg   r  Ú
splitlinesr‡   )r^   Zdot_rowZ
prompt_rowZnum_rowsr_   r_   r`   r    s    z0DataFrameFormatter._get_number_of_auxillary_rowsr‘   c                 C  s    | j r|  ¡  | jr|  ¡  dS )zY
        Check whether the frame should be truncated. If so, slice the frame up.
        N)r  Ú_truncate_horizontallyr™   Ú_truncate_verticallyro   r_   r_   r`   r      s    zDataFrameFormatter.truncatec                 C  sÊ   | j dusJ ‚| j d }|dkrš| jjdd…d|…f }| jjdd…| d…f }t||fdd�| _t| jttfƒrÀg | jd|… ¢| j| d… ¢| _n&tt	| j
ƒ}| jjdd…d|…f | _|| _dS )z´Remove columns, which are not to be displayed and adjust formatters.

        Attributes affected:
            - tr_frame
            - formatters
            - tr_col_num
        Nr“   r’   ©Zaxis)rø   rû   r–   rA   r¢   rë   ÚlistÚtupler   r”   rÝ   Z
tr_col_num)r^   Zcol_numrI   rJ   r_   r_   r`   r    s    
ÿþz)DataFrameFormatter._truncate_horizontallyc                 C  s’   | j dusJ ‚| j d }|dkrb| jjd|…dd…f }| jj| d…dd…f }t||fƒ| _n&tt| jƒ}| jjd|…dd…f | _|| _dS )z‚Remove rows, which are not to be displayed.

        Attributes affected:
            - tr_frame
            - tr_row_num
        Nr“   r’   )rú   rû   r–   rA   r   r”   r‹   r—   )r^   rš   ÚheadÚtailr_   r_   r`   r  5  s    
z'DataFrameFormatter._truncate_verticallyc           
   	     s”  g }t ˆ jƒsbˆ jsbtˆ jƒD ]>\}}ˆ  |¡}t|ˆ jtˆ j 	|d¡ƒˆ j
d�}| |¡ q|S t ˆ jƒrÆttt ˆ jƒˆ _tˆ jƒtˆ jƒkr´tdtˆ jƒ› dtˆ jƒ› d�ƒ‚dd„ ˆ jD ƒ}nˆ  ˆ j¡}ˆ jrì|D ]}| d¡ qÜtˆ jƒD ]˜\}}|| }ttˆ j 	|d¡ƒg‡ fd	d
„|D ƒ¢R Ž }ˆ  |¡}t|ˆ j|ˆ j
d�}tt‡ fdd
„|D ƒƒ|ƒ}	ˆ j
j||	ˆ jd�}| || ¡ qö|S )Nr   )ÚstringsrE   Úminimumr�   zWriting z cols but got z aliasesc                 S  s   g | ]
}|g‘qS r_   r_   )rs   Úlabelr_   r_   r`   ru   ^  rv   zADataFrameFormatter._get_strcols_without_index.<locals>.<listcomp>r\   c                 3  s   | ]}ˆ j  |¡V  qd S r¤   ©r�   rg   rÓ   ro   r_   r`   r¦   i  rv   z@DataFrameFormatter._get_strcols_without_index.<locals>.<genexpr>)r&  r�   c                 3  s   | ]}ˆ j  |¡V  qd S r¤   r(  rÓ   ro   r_   r`   r¦   p  rv   r±   )r0   r‡   Ú	enumeraterû   Ú
format_colÚ_make_fixed_widthrE   r”   rê   rÍ   r�   rz   r   r   rU   rg   ré   r  Ú_get_formatted_column_labelsr  Úmax)
r^   rý   rt   rÎ   r{   Ústr_columnsrÔ   ZcheaderZheader_colwidthr¾   r_   ro   r`   rü   G  sP    
ü
ÿÿÿÿ
ÿz-DataFrameFormatter._get_strcols_without_indexrk   )rt   rc   c              	   C  sL   | j }|  |¡}t|jd d …|f j|| j| j| j |j	| ¡| j
| jd�S )N)rl   rY   rÀ   rî   r­   )rû   Ú_get_formatterrm   r–   r£   rl   rY   rê   rÍ   ré   rî   rˆ   )r^   rt   rè   Ú	formatterr_   r_   r`   r*  v  s    
ùzDataFrameFormatter.format_colú	str | intúCallable | Nonec                 C  s`   t | jttfƒr2t|ƒr,tt|ƒ}| j| S d S n*t|ƒrN|| jvrN| j| }| j |d ¡S d S r¤   )	r¢   rë   r!  r"  r.   r   r”   ré   rÍ   )r^   rt   r_   r_   r`   r/  ƒ  s    


z!DataFrameFormatter._get_formatter)rè   rc   c                   sü   ddl m} |j}t|tƒr¼|jddd�}tt|Ž ƒ}ˆjj	j
}tdd„ |jD ƒƒ‰tt|tt|ƒƒƒ‰ ‡ ‡‡fdd„‰tt‡fd	d„|D ƒŽ ƒ}ˆjr¨t|ƒr¨||ƒ}d
d„ t|Ž D ƒ}n<| ¡ }ˆjj	}tt|tt|ƒƒƒ‰ ‡ ‡fdd„t|ƒD ƒ}|S )Nr   )Úsparsify_labelsF)rì   rD   c                 s  s   | ]}|j V  qd S r¤   )Zis_floating)rs   Úlevelr_   r_   r`   r¦   š  rv   zBDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>c                   s"   |ˆj vrˆ |  rˆsd| S |S )Nú )rë   )rÔ   Úy)Úneed_leadspÚrestrict_formattingr^   r_   r`   Úspace_format�  s    ÿþýzEDataFrameFormatter._get_formatted_column_labels.<locals>.space_formatc                 3  s"   | ]‰ ‡‡ fd d„ˆ D ƒV  qdS )c                   s   g | ]}ˆ ˆ|ƒ‘qS r_   r_   )rs   r6  )r9  rÔ   r_   r`   ru   §  rv   zMDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>.<listcomp>Nr_   )rs   )r9  ©rÔ   r`   r¦   §  rv   c                 S  s   g | ]}t |ƒ‘qS r_   )r!  rÓ   r_   r_   r`   ru   ¬  rv   zCDataFrameFormatter._get_formatted_column_labels.<locals>.<listcomp>c                   s0   g | ](\}}ˆ  |¡s&ˆ | r&d | n|g‘qS )r5  )r/  )rs   rt   rÔ   )r7  r^   r_   r`   ru   ±  s   ÿ)Zpandas.core.indexes.multir3  ré   r¢   r<   r©   r!  r  rè   Údtypesr£   r¨   Úlevelsr  Úmapr1   rì   rg   r)  )r^   rè   r3  ré   Zfmt_columnsr;  r.  r_   )r7  r8  r^   r9  r`   r,  �  s,    

	ÿþz/DataFrameFormatter._get_formatted_column_labelsc                   sÈ   dd„ ˆj  ¡ D ƒ‰ |j}|j}ˆ d¡}t|tƒrL|jˆjdˆj	|d�}n|jˆj	|d�g}‡ ‡fdd„|D ƒ}ˆj
jd	g|¢R Ž  d
¡}ˆjr¦dd„ ˆ ¡ D ƒ}ndg|j }ˆjrÀ|| S |S d S )Nc                 S  s   i | ]\}}|t t|ƒ“qS r_   )r   r”   )rs   ÚkÚvr_   r_   r`   r  »  rv   z;DataFrameFormatter._get_formatted_index.<locals>.<dictcomp>Ú	__index__F)rì   rD   r§   r0  )r‰   r0  c              
     s.   g | ]&}t tt|ƒd ˆ  dd¡ˆjd�ƒ‘qS )rI   r\   r   )rE   r&  r�   )r"  r+  r!  rÍ   r�   rÓ   ©rê   r^   r_   r`   ru   Ê  s   ûÿÿz;DataFrameFormatter._get_formatted_index.<locals>.<listcomp>r’   rf   c                 S  s   g | ]}t |ƒ‘qS r_   ©rU   rÓ   r_   r_   r`   ru   ×  rv   r\   )rê   Úitemsrˆ   ré   r/  r¢   r<   r©   rì   r  r�   rD   Úsplitr  Ú_get_column_name_listZnlevelsr‡   )r^   rè   rˆ   ré   Úfmtr«   ZadjoinedZ
col_headerr_   rA  r`   r¬   ¸  s,    

üú	z'DataFrameFormatter._get_formatted_indexc                 C  sL   g }| j j}t|tƒr.| dd„ |jD ƒ¡ n| |jd u r@dn|j¡ |S )Nc                 s  s   | ]}|d u rdn|V  qd S r[   r_   r¥   r_   r_   r`   r¦   ä  rv   z;DataFrameFormatter._get_column_name_list.<locals>.<genexpr>r\   )rè   ré   r¢   r<   Úextendr§   rz   r‰   )r^   r§   ré   r_   r_   r`   rE  à  s    
z(DataFrameFormatter._get_column_name_list)NNTTrR   NNNNTNNNFrå   FT)(r   r€   r�   Ú__doc__Úcommon_docstringÚreturn_docstringra   rþ   Úpropertyr   rÿ   r  r™   r  r  r  r  r  r	  rõ   ró   rô   rñ   rò   r÷   rù   r  r  r  r  r  r    r  r  rü   r*  r/  r,  r¬   rE  r_   r_   r_   r`   rä   *  s~                    í2/
/)(rä   c                   @  s¦   e Zd ZdZddœdd„Zd%dd	d
d	d
d	d
d	d	d	d	dœdd„Zd&dd	dd
dd	d
d	dœdd„Zd'dd	dd	dœdd„Zd(dd	ddddd ddd	dd	d
d	dd!d	d"œd#d$„ZdS ))ÚDataFrameRendereraJ  Class for creating dataframe output in multiple formats.

    Called in pandas.core.generic.NDFrame:
        - to_csv
        - to_latex

    Called in pandas.core.frame.DataFrame:
        - to_html
        - to_string

    Parameters
    ----------
    fmt : DataFrameFormatter
        Formatter with the formatting options.
    rä   ©rF  c                 C  s
   || _ d S r¤   rM  )r^   rF  r_   r_   r`   ra   û  s    zDataFrameRenderer.__init__NFú"FilePath | WriteBuffer[str] | Noner„   rT   )rW   Úcolumn_formatÚ	longtabler·   ÚmulticolumnÚmulticolumn_formatÚmultirowÚcaptionr'  Úpositionrc   c                 C  s>   ddl m} || j|||||||	|
d�	}| ¡ }t|||d�S )zU
        Render a DataFrame to a LaTeX tabular/longtable environment output.
        r   )ÚLatexFormatter)rP  rO  rQ  rR  rS  rT  r'  rU  ©rW   r·   )Zpandas.io.formats.latexrV  rF  r~   Úsave_to_buffer)r^   rW   rO  rP  r·   rQ  rR  rS  rT  r'  rU  rV  Zlatex_formatterÚstringr_   r_   r`   Úto_latexþ  s    ÷zDataFrameRenderer.to_latexzstr | list | tuple | Noner…   )rW   r·   ÚclassesÚnotebookÚborderÚtable_idÚrender_linksrc   c                 C  sF   ddl m}m}	 |r|	n|}
|
| j||||d�}| ¡ }t|||d�S )uJ  
        Render a DataFrame to a html table.

        Parameters
        ----------
        buf : str, path object, file-like object, or None, default None
            String, path object (implementing ``os.PathLike[str]``), or file-like
            object implementing a string ``write()`` function. If None, the result is
            returned as a string.
        encoding : str, default â€œutf-8â€�
            Set character encoding.
        classes : str or list-like
            classes to include in the `class` attribute of the opening
            ``<table>`` tag, in addition to the default "dataframe".
        notebook : {True, False}, optional, default False
            Whether the generated HTML is for IPython Notebook.
        border : int
            A ``border=border`` attribute is included in the opening
            ``<table>`` tag. Default ``pd.options.display.html.border``.
        table_id : str, optional
            A css id is included in the opening `<table>` tag if specified.
        render_links : bool, default False
            Convert URLs to HTML links.
        r   )ÚHTMLFormatterÚNotebookFormatter)r[  r]  r^  r_  rW  )Zpandas.io.formats.htmlr`  ra  rF  r~   rX  )r^   rW   r·   r[  r\  r]  r^  r_  r`  ra  ZKlassZhtml_formatterrY  r_   r_   r`   Úto_html  s    "ûzDataFrameRenderer.to_html)rW   r·   rß   rc   c                 C  s0   ddl m} || j|d�}| ¡ }t|||d�S )u%  
        Render a DataFrame to a console-friendly tabular output.

        Parameters
        ----------
        buf : str, path object, file-like object, or None, default None
            String, path object (implementing ``os.PathLike[str]``), or file-like
            object implementing a string ``write()`` function. If None, the result is
            returned as a string.
        encoding: str, default â€œutf-8â€�
            Set character encoding.
        line_width : int, optional
            Width to wrap a line in characters.
        r   )ÚStringFormatter)rß   rW  )Zpandas.io.formats.stringrc  rF  r~   rX  )r^   rW   r·   rß   rc  Zstring_formatterrY  r_   r_   r`   r~   Q  s    zDataFrameRenderer.to_stringú,ÚwÚinferú"TÚstrictz7FilePath | WriteBuffer[bytes] | WriteBuffer[str] | NonerU   zSequence[Hashable] | NonezIndexLabel | Noner    r%   )Úpath_or_bufr·   Úsepré   Úindex_labelr²   Úcompressionr]   Ú	quotecharÚline_terminatorÚ	chunksizeÚdate_formatÚdoublequoteÚ
escapecharÚerrorsÚstorage_optionsrc   c                 C  s‚   ddl m} |du r d}tƒ }nd}|||
||||||||||	||||| jd�}| ¡  |r~t|tƒsjJ ‚| ¡ }| ¡  |S dS )z;
        Render dataframe as comma-separated file.
        r   )ÚCSVFormatterNTF)ri  rn  rj  r·   rs  rl  r]   r  rk  r²   ro  rm  rp  rq  rr  rt  r0  )Zpandas.io.formats.csvsru  r   rF  Úsaver¢   ÚgetvalueÚclose)r^   ri  r·   rj  ré   rk  r²   rl  r]   rm  rn  ro  rp  rq  rr  rs  rt  ru  Zcreated_bufferZcsv_formatterÚcontentr_   r_   r`   Úto_csvk  s>    ïzDataFrameRenderer.to_csv)
NNFNFNFNNN)NNNFNNF)NNN)NNrd  NNre  rf  Nrg  NNNTNrh  N)	r   r€   r�   rH  ra   rZ  rb  r~   rz  r_   r_   r_   r`   rL  ê  sT             õ$"       ø5   ü                ïrL  rU   rN  r„   )rY  rW   r·   rc   c                 C  sZ   t ||d��:}| | ¡ |du r6| ¡ W  d  ƒ S W d  ƒ dS 1 sL0    Y  dS )zQ
    Perform serialization. Write to buf or return as string if buf is None.
    )r·   N)Ú
get_bufferÚwriterw  )rY  rW   r·   Úfr_   r_   r`   rX  §  s
    
rX  rW  c                 c  s¤   | durt | ƒ} ntƒ } |du r&d}nt| tƒs8tdƒ‚t| dƒrJ| V  nVt| tƒr˜tt| ƒƒ t| d|dd��}|V  W d  ƒ q 1 sŒ0    Y  ntdƒ‚dS )	z€
    Context manager to open, yield and close buffer for filenames or Path-like
    objects, otherwise yield buf unchanged.
    Nzutf-8z1buf is not a file name and encoding is specified.r|  re  r\   )r·   Únewlinez1buf is not a file name and it has no write method)	rC   r   r¢   rU   r  ÚhasattrrB   ÚopenÚ	TypeError)rW   r·   r}  r_   r_   r`   r{  ¶  s    



&r{  rR   rJ   rå   Tr   r2  ræ   r…   zstr | int | Nonerç   rk   )r|   r0  rl   rY   ÚdigitsrÀ   rE   rî   r­   r]   rc   c
                 C  sÂ   t | jƒrt}
n^t| jƒr t}
nNt| jƒr0t}
n>t| jƒr@t}
n.t	| jƒsTt
| jƒrZt}
nt| jƒrjt}
nt}
|du r~tdƒ}|du rŽtdƒ}|du ržtdƒ}|
| |||||||||	d�
}| ¡ S )ad  
    Format an array for printing.

    Parameters
    ----------
    values
    formatter
    float_format
    na_rep
    digits
    space
    justify
    decimal
    leading_space : bool, optional, default True
        Whether the array should be formatted with a leading space.
        When an array as a column of a Series or DataFrame, we do want
        the leading space to pad between columns.

        When formatting an Index subclass
        (e.g. IntervalIndex._format_native_types), we don't want the
        leading space since it should be left-aligned.

    Returns
    -------
    List[str]
    Núdisplay.column_spacer�   údisplay.precision)	r‚  rY   rl   r0  rÀ   rE   rî   r­   r]   )r)   rŠ   ÚDatetime64Formatterr*   ÚDatetime64TZFormatterr3   ÚTimedelta64Formatterr+   ÚExtensionArrayFormatterr-   r(   ÚFloatArrayFormatterr/   ÚIntArrayFormatterÚGenericArrayFormatterr   Ú
get_result)r|   r0  rl   rY   r‚  rÀ   rE   rî   r­   r]   Z	fmt_klassZfmt_objr_   r_   r`   rm   Ø  s@    '




örm   c                   @  sL   e Zd Zddd	d
dddddddddœdd„Zddœdd„Zddœdd„ZdS )r‹  é   NrR   é   rJ   rå   Tr   r”   r2  rU   r1  ræ   r…   rT   rç   )r|   r‚  r0  rY   rÀ   rl   rE   rî   r]   Úfixed_widthr­   c                 C  sF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S r¤   )r|   r‚  rY   rÀ   r0  rl   rE   rî   r]   r�  r­   )r^   r|   r‚  r0  rY   rÀ   rl   rE   rî   r]   r�  r­   r_   r_   r`   ra   (  s    zGenericArrayFormatter.__init__rk   rb   c                 C  s   |   ¡ }t|| jƒS r¤   )Ú_format_stringsr+  rE   )r^   r{   r_   r_   r`   rŒ  B  s    z GenericArrayFormatter.get_resultc                   sf  ˆj d u r0tdƒ}|d u r6tdƒ‰‡fdd„}nˆj }ˆjd urHˆj‰ n"ˆjd uoZˆjtk}ttd|d�‰ ‡ ‡fdd„}tˆjd	d
�}t	|t
jƒsštdƒ‚t |t¡}|t
jt|ƒttdt|jƒƒƒd�@ }ˆj}|d u râ| ¡ }g }t|ƒD ]r\}	}
||	 �s|�r| d||
ƒ› �¡ qî||	 �r6| ||
ƒ¡ qî|du �rFd}nd}| |j||
ƒd�¡ qî|S )Nr�   r„  c                   s   t | dˆ d›d�›ƒS )Nz .Údr}  )Ú_trim_zeros_single_floatr:  )Ú	precisionr_   r`   Ú<lambda>K  s   ÿz7GenericArrayFormatter._format_strings.<locals>.<lambda>rœ   )rŸ   Úquote_stringsc              	     s–   ˆj d urtt| ƒrtt| ƒrtz<| d u r*W dS | tu r<ttƒW S | tu sNt | ¡rTW dS W n tt	fyl   Y n0 ˆj S t
| tƒr†t| ƒS tˆ | ƒƒS d S )Nr‘   r   )rY   r2   r4   r   rU   r   ÚnpZisnatr�  r  r¢   r9   r:  )r0  r^   r_   r`   Ú_format[  s    


z6GenericArrayFormatter._format_strings.<locals>._formatT©Zextract_numpyz<ExtensionArray formatting should use ExtensionArrayFormatterr’   r   r5  Fz{v}z {v}©r?  )rl   r   r0  r]   r   r   rF   r:   r|   r¢   r–  Úndarrayr�  r   Z	map_inferr,   r  r5   r"  Úrangerg   Úshaper­   r¨   r)  rz   r©   )r^   rl   r•  r—  ÚvalsÚinferredZis_float_typer­   r{   rt   r?  Ztplr_   )r0  r“  r^   r`   r�  F  sN    

ýÿ þÿ

z%GenericArrayFormatter._format_strings)
r�  NrR   rŽ  NrJ   rå   NTT)r   r€   r�   ra   rŒ  r�  r_   r_   r_   r`   r‹  '  s             ô$r‹  c                      sL   e Zd Z‡ fdd„Zdddddœdd	„Zd
dœdd„Zddœdd„Z‡  ZS )r‰  c                   sH   t ƒ j|i |¤Ž | jd urD| jd u rDd| _t| jƒrD| j| _d | _d S )NF)rÈ   ra   rl   r0  r�  Úcallable)r^   ÚargsrÂ   rË   r_   r`   ra   ’  s    
zFloatArrayFormatter.__init__Nræ   zfloat | int | Noner   )rl   Ú	thresholdrc   c                   sl   ˆdu rˆj ‰ˆr"‡‡fdd„‰ n‡fdd„‰ ˆjdkrH‡ ‡fdd„‰nˆ ‰ˆdu rXˆS ‡‡‡fdd	„}|S )
z;Returns a function to be applied on each value to format itNc                   s$   ˆ d usJ ‚t | ƒrˆ | d�S ˆjS )N©Úvalue)r5   rY   r™  )rl   r^   r_   r`   Úbase_formatter°  s
    ÿýz<FloatArrayFormatter._value_formatter.<locals>.base_formatterc                   s   t | ƒrt| ƒS ˆ jS r¤   )r5   rU   rY   r™  ro   r_   r`   r¤  ½  s    rå   c                   s   ˆ | ƒ  dˆjd¡S )Nrå   r’   )Úreplacerî   r™  )r¤  r^   r_   r`   Údecimal_formatterÂ  s    z?FloatArrayFormatter._value_formatter.<locals>.decimal_formatterc                   s0   t | ƒr&t| ƒˆkrˆ | ƒS ˆ dƒS nˆjS d S )Ng        )r5   ÚabsrY   r¢  )r¦  r^   r¡  r_   r`   r0  Ë  s
    
z7FloatArrayFormatter._value_formatter.<locals>.formatter)rl   rî   )r^   rl   r¡  r0  r_   )r¤  r¦  rl   r^   r¡  r`   Ú_value_formatterž  s    
	z$FloatArrayFormatter._value_formatterú
np.ndarrayrb   c           
        s†  ddddœdd„‰ ˆj dur.ˆ ˆjˆj ˆjƒS ˆjr>tdƒ‰nd‰‡ ‡‡fd	d
„}ˆjdu r�ˆjrˆˆjdu rrd}nd}t|jˆj	d�}qœˆj}n‡fdd„}||ƒ}ˆjs®|S t
|ƒdkrÜtdd„ |D ƒƒ}|ˆj	d k}nd}tjdd��D t ˆj¡}|dk ¡ }|dˆj	  k |dk@  ¡ }	W d  ƒ n1 �s80    Y  |	�sT|�r‚|�r‚ˆjdu �rfd}nd}t|jˆj	d�}||ƒ}|S )zˆ
        Returns the float values converted into strings using
        the parameters given at initialisation, as a numpy array
        r   r   rU   )r|   r0  rY   c                   s<   t | ƒ}t ‡ ‡fdd„t|  ¡ | ¡ ƒD ƒ¡ | j¡}|S )Nc                   s    g | ]\}}|sˆ |ƒnˆ‘qS r_   r_   )rs   ÚvalÚm©r0  rY   r_   r`   ru   ß  s   ÿzWFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_rep.<locals>.<listcomp>)r4   r–  Úarrayr  ÚravelZreshaperœ  )r|   r0  rY   ÚmaskÚ	formattedr_   r¬  r`   Úformat_with_na_repÜ  s    þÿûzCFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_repNzdisplay.chop_thresholdc                   sx   ˆ  | ˆ¡}ˆjdkr"dˆj }nˆj}ˆj}t|ƒ}ˆ |||ƒ}ˆjrt|rZt|ˆjƒ}nt|ˆjƒ}t	j
|dd�S |S )NrI   r5  Úobject©rŠ   )r¨  rE   rY   r|   r(   r�  Ú_trim_zeros_complexrî   Ú_trim_zeros_floatr–  Úasarray)rl   r0  rY   r|   Z
is_complexr}   ©r±  r^   r¡  r_   r`   Úformat_values_withï  s    
zCFloatArrayFormatter.get_result_as_array.<locals>.format_values_withTz{value: .{digits:d}f}z{value:.{digits:d}f})r‚  c                   s
   ˆ j |  S r¤   )rl   r¢  ro   r_   r`   r”    rv   z9FloatArrayFormatter.get_result_as_array.<locals>.<lambda>r   c                 s  s   | ]}t |ƒV  qd S r¤   rº   rÓ   r_   r_   r`   r¦      rv   z:FloatArrayFormatter.get_result_as_array.<locals>.<genexpr>é   FÚignore©Úinvalidg    €„.Aé
   z{value: .{digits:d}e}z{value:.{digits:d}e})r0  r|   rY   r�  r   rl   r­   r   r©   r‚  rg   r-  r–  Úerrstater§  r¨   )
r^   r¸  Zfmt_strrl   Zformatted_valuesÚmaxlenZtoo_longZabs_valsZhas_large_valuesZhas_small_valuesr_   r·  r`   Úget_result_as_arrayÖ  sD    




ÿ&z'FloatArrayFormatter.get_result_as_arrayrk   c                 C  s   t |  ¡ ƒS r¤   )r!  rÀ  ro   r_   r_   r`   r�  9  s    z#FloatArrayFormatter._format_strings)NN)r   r€   r�   ra   r¨  rÀ  r�  r×   r_   r_   rË   r`   r‰  ‘  s     ý8cr‰  c                   @  s   e Zd Zddœdd„ZdS )rŠ  rk   rb   c                   s>   | j du rdd„ }ndd„ }| jp$|‰ ‡ fdd„| jD ƒ}|S )NFc                 S  s   | d›j | d�S )Nr‘  r:  ©r©   r:  r_   r_   r`   r”  @  rv   z3IntArrayFormatter._format_strings.<locals>.<lambda>c                 S  s   | d›j | d�S )Nz dr:  rÁ  r:  r_   r_   r`   r”  B  rv   c                   s   g | ]}ˆ |ƒ‘qS r_   r_   rÓ   ©r0  r_   r`   ru   D  rv   z5IntArrayFormatter._format_strings.<locals>.<listcomp>)r­   r0  r|   )r^   Zformatter_strr{   r_   rÂ  r`   r�  >  s    


z!IntArrayFormatter._format_stringsN©r   r€   r�   r�  r_   r_   r_   r`   rŠ  =  s   rŠ  c                      s6   e Zd Zdddddœ‡ fdd„Zd	d
œdd„Z‡  ZS )r…  r   Nz3np.ndarray | Series | DatetimeIndex | DatetimeArrayrU   r‘   )r|   Únat_reprp  c                   s$   t ƒ j|fi |¤Ž || _|| _d S r¤   )rÈ   ra   rÄ  rp  )r^   r|   rÄ  rp  rÂ   rË   r_   r`   ra   I  s    zDatetime64Formatter.__init__rk   rb   c                   sZ   ˆ j }t|tƒst|ƒ}ˆ jdur>tˆ jƒr>‡ fdd„|D ƒS |jjˆ jˆ jd�}| 	¡ S )z&we by definition have DO NOT have a TZNc                   s   g | ]}ˆ   |¡‘qS r_   rÂ  rÓ   ro   r_   r`   ru   \  rv   z7Datetime64Formatter._format_strings.<locals>.<listcomp>)rY   rp  )
r|   r¢   r?   r0  rŸ  Ú_dataZ_format_native_typesrÄ  rp  Útolist)r^   r|   r{   r_   ro   r`   r�  T  s    
ÿz#Datetime64Formatter._format_strings)r   N©r   r€   r�   ra   r�  r×   r_   r_   rË   r`   r…  H  s     ür…  c                   @  s   e Zd Zddœdd„ZdS )rˆ  rk   rb   c                 C  sv   t | jdd�}| j}|d u r(|jdd�}t|tƒr<| ¡ }n
t |¡}t	||| j
| j| j| j| j| j| j| jd�
}|S )NTr˜  )Zboxed)rl   rY   r‚  rÀ   rE   rî   r­   r]   )r:   r|   r0  Ú
_formatterr¢   r6   rn   r–  r¶  rm   rl   rY   r‚  rÀ   rE   rî   r­   r]   )r^   r|   r0  r­  r{   r_   r_   r`   r�  e  s(    


öz'ExtensionArrayFormatter._format_stringsNrÃ  r_   r_   r_   r`   rˆ  d  s   rˆ  z@np.ndarray | list[int | float] | list[float] | list[str | float])Úpercentilesrc   c                 C  sf  t  | ¡} t jdd��< t| ƒr<t  | dk¡r<t  | dk¡sDtdƒ‚W d  ƒ n1 sX0    Y  d|  } t  |  t¡| ¡}t  |¡r¤|  t¡ t	¡}dd	„ |D ƒS t  
| ¡}|d dkrÂ|d nd}|d
 dk rÞd|d
  nd}t  t  t  t j|||d�¡¡¡ t¡ }td|ƒ}t j| td�}| |  t¡ t	¡||< | |   |¡ t	¡|| < dd	„ |D ƒS )a  
    Outputs rounded and formatted percentiles.

    Parameters
    ----------
    percentiles : list-like, containing floats from interval [0,1]

    Returns
    -------
    formatted : list of strings

    Notes
    -----
    Rounding precision is chosen so that: (1) if any two elements of
    ``percentiles`` differ, they remain different after rounding
    (2) no entry is *rounded* to 0% or 100%.
    Any non-integer is always rounded to at least 1 decimal place.

    Examples
    --------
    Keeps all entries different after rounding:

    >>> format_percentiles([0.01999, 0.02001, 0.5, 0.666666, 0.9999])
    ['1.999%', '2.001%', '50%', '66.667%', '99.99%']

    No element is rounded to 0% or 100% (unless already equal to it).
    Duplicates are allowed:

    >>> format_percentiles([0, 0.5, 0.02001, 0.5, 0.666666, 0.9999])
    ['0%', '50%', '2.0%', '50%', '66.67%', '99.99%']
    rº  r»  r   r’   z/percentiles should all be in the interval [0,1]Néd   c                 S  s   g | ]}|d  ‘qS ©ú%r_   rr   r_   r_   r`   ru   ¶  rv   z&format_percentiles.<locals>.<listcomp>éÿÿÿÿ)Úto_beginÚto_endr³  c                 S  s   g | ]}|d  ‘qS rË  r_   rr   r_   r_   r`   ru   Å  rv   )r–  r¶  r¾  r1   r  r  ÚiscloseÚastyper”   rU   ÚuniqueÚfloorÚlog10r•   Zediff1dr-  Z
empty_liker²  Úround)rÉ  Zint_idxÚoutZunique_pctsrÎ  rÏ  Úprecr_   r_   r`   Úformat_percentilesƒ  s6    "
ÿþý&

ÿþ
rØ  z2np.ndarray | DatetimeArray | Index | DatetimeIndexrT   ©r|   rc   c                 C  sf   t | tƒs|  ¡ } t| ƒ} | jd ur(dS | j}|tk}d}t ||t	|ƒ dk¡ 
¡ dk}|rbdS dS )NFì     ž"R: r   T)r¢   r;   r®  r?   ÚtzZasi8r   r–  Úlogical_andr”   rÏ   )r|   Ú
values_intÚconsider_valuesÚone_day_nanosÚ	even_daysr_   r_   r`   Úis_dates_onlyÈ  s    

ÿrá  r   zNaTType | Timestamp)rÔ   rÄ  rc   c                 C  s   | t u r|S t| ƒS r¤   )r   rU   )rÔ   rÄ  r_   r_   r`   Ú_format_datetime64Ü  s    râ  )rÔ   rÄ  rp  rc   c                 C  s$   | t u r|S |r|  |¡S | jS d S r¤   )r   ÚstrftimeZ
_date_repr)rÔ   rÄ  rp  r_   r_   r`   Ú_format_datetime64_dateonlyã  s
    
rä  r   )rá  rÄ  rp  rc   c                   s"   | r‡ ‡fdd„S ‡fdd„S d S )Nc                   s   t | ˆˆ d�S )N)rÄ  rp  )rä  r:  ©rp  rÄ  r_   r`   r”  ù  s   ÿz'get_format_datetime64.<locals>.<lambda>c                   s   t | ˆ d�S )N©rÄ  )râ  r:  ræ  r_   r`   r”  ý  rv   r_   )rá  rÄ  rp  r_   rå  r`   Úget_format_datetime64ô  s    rç  z*np.ndarray | DatetimeArray | DatetimeIndex)r|   rp  rc   c                 C  s6   t | tjƒr| jdkr|  ¡ } t| ƒ}|r2|p0dS |S )z6given values and a date_format, return a string formatr’   z%Y-%m-%d)r¢   r–  rš  Úndimr®  rá  )r|   rp  Úidor_   r_   r`   Ú!get_format_datetime64_from_values   s    rê  c                   @  s   e Zd Zddœdd„ZdS )r†  rk   rb   c                   s>   | j  t¡}t|ƒ}| jp&t|| jd�‰ ‡ fdd„|D ƒ}|S )zwe by definition have a TZ)rp  c                   s   g | ]}ˆ |ƒ‘qS r_   r_   rÓ   rÂ  r_   r`   ru     rv   z9Datetime64TZFormatter._format_strings.<locals>.<listcomp>)r|   rÑ  r²  rá  r0  rç  rp  )r^   r|   ré  r{   r_   rÂ  r`   r�    s    ÿz%Datetime64TZFormatter._format_stringsNrÃ  r_   r_   r_   r`   r†    s   r†  c                      s6   e Zd Zdddddœ‡ fdd„Zd	d
œdd„Z‡  ZS )r‡  r   Fznp.ndarray | TimedeltaIndexrU   rT   )r|   rÄ  Úboxc                   s$   t ƒ j|fi |¤Ž || _|| _d S r¤   )rÈ   ra   rÄ  rë  )r^   r|   rÄ  rë  rÂ   rË   r_   r`   ra     s    zTimedelta64Formatter.__init__rk   rb   c                   s.   | j pt| j| j| jd�‰ ‡ fdd„| jD ƒS )N)rÄ  rë  c                   s   g | ]}ˆ |ƒ‘qS r_   r_   rÓ   rÂ  r_   r`   ru   ,  rv   z8Timedelta64Formatter._format_strings.<locals>.<listcomp>)r0  Úget_format_timedelta64r|   rÄ  rë  ro   r_   rÂ  r`   r�  (  s    ÿz$Timedelta64Formatter._format_strings)r   FrÇ  r_   r_   rË   r`   r‡    s     ür‡  Fz,np.ndarray | TimedeltaIndex | TimedeltaArray)r|   rÄ  rë  rc   c           
        s^   |   tj¡}|tk}d}|| dk}t ||¡}| ¡ dk}|rFd‰nd‰‡ ‡‡fdd„}	|	S )z�
    Return a formatter function for a range of timedeltas.
    These will all have the same format argument

    If box, then show the return in quotes
    rÚ  r   NÚlongc                   sN   | d u st | ƒrt| ƒrˆS t| tƒs.t| ƒ} | jˆd�}ˆ rJd|› d�}|S )NrÁ  ú')r2   r4   r¢   r   Z
_repr_base)rÔ   r}   ©rë  r©   rÄ  r_   r`   rÈ  N  s    
z*get_format_timedelta64.<locals>._formatter)Úviewr–  Zint64r   rÜ  rÏ   )
r|   rÄ  rë  rÝ  rÞ  rß  Znot_midnightZbothrà  rÈ  r_   rï  r`   rì  /  s    rì  zTextAdjustment | None)r%  rE   r&  r�   rc   c                   s®   t | ƒdks|dkr| S |d u r(tƒ ‰ n|‰ t‡ fdd„| D ƒƒ‰|d urTt|ˆƒ‰tdƒ‰ˆd urpˆˆkrpˆ‰dddœ‡ ‡‡fdd	„‰‡fd
d„| D ƒ} ˆ j| ˆ|d�}|S )Nr   r  c                 3  s   | ]}ˆ   |¡V  qd S r¤   rº   rÓ   )Ú
adjustmentr_   r`   r¦   k  rv   z$_make_fixed_width.<locals>.<genexpr>rÛ   rU   )rÔ   rc   c                   s6   ˆd ur2ˆdkˆ   | ¡ˆk@ r2| d ˆd … d } | S )Nr¯   r°   rº   r:  )rñ  Úconf_maxr¾   r_   r`   Újustt  s    z_make_fixed_width.<locals>.justc                   s   g | ]}ˆ |ƒ‘qS r_   r_   rÓ   )ró  r_   r`   ru   z  rv   z%_make_fixed_width.<locals>.<listcomp>r±   )rg   rŽ   r-  r   rE   )r%  rE   r&  r�   r}   r_   )rñ  rò  ró  r¾   r`   r+  \  s    
r+  r©  )Ústr_complexesrî   rc   c                   sD   ‡ fdd„| D ƒ}dd„ |D ƒ}t |ƒ‰‡fdd„t||ƒD ƒ}|S )z‰
    Separates the real and imaginary parts from the complex number, and
    executes the _trim_zeros_float method on each of those.
    c              	     s$   g | ]}d   tt d|¡ˆ ƒ¡‘qS )r\   z([j+-]))ry   rµ  ÚrerD  rÓ   )rî   r_   r`   ru   „  s   ÿz'_trim_zeros_complex.<locals>.<listcomp>c                 S  s   g | ]}t |ƒ‘qS r_   rº   )rs   Úsr_   r_   r`   ru   Š  rv   c                   sŒ   g | ]„\}}|d |d d d  … ˆ | d d  ||d d d  |d d  …  ||d d  d…  ˆ | d d  |d  ‘qS )Nr’   r“   Ú0rÍ  r_   )rs   rö  r>  )Ú
max_lengthr_   r`   ru   Œ  s   úÿ"þýüû)r-  r  )rô  rî   ÚtrimmedÚlengthsÚpaddedr_   )rî   rø  r`   r´    s    
þ
ù	r´  )Ú	str_floatrc   c                 C  s    |   d¡} |  d¡r| d7 } | S )zX
    Trims trailing zeros after a decimal point,
    leaving just one if necessary.
    r÷  rå   )ÚrstripÚendswith)rü  r_   r_   r`   r’  ˜  s    

r’  únp.ndarray | list[str])Ú
str_floatsrî   rc   c                   sj   | }t  dˆ › d�¡‰‡fdd„‰dddœ‡fdd	„}||ƒrR‡fd
d„|D ƒ}q6‡ ‡fdd„|D ƒ}|S )z‰
    Trims the maximum number of trailing zeros equally from
    all numbers containing decimals, leaving just one if
    necessary.
    z^\s*[\+-]?[0-9]+\z[0-9]*$c                   s   t  ˆ | ¡d uS r¤   )rõ  Úmatchr:  )Únumber_regexr_   r`   Úis_number_with_decimal¯  s    z1_trim_zeros_float.<locals>.is_number_with_decimalrÿ  rT   rÙ  c                   s0   ‡ fdd„| D ƒ}t |ƒdko.tdd„ |D ƒƒS )zñ
        Determine if an array of strings should be trimmed.

        Returns True if all numbers containing decimals (defined by the
        above regular expression) within the array end in a zero, otherwise
        returns False.
        c                   s   g | ]}ˆ |ƒr|‘qS r_   r_   rÓ   ©r  r_   r`   ru   º  rv   z:_trim_zeros_float.<locals>.should_trim.<locals>.<listcomp>r   c                 s  s   | ]}|  d ¡V  qdS )r÷  N©rþ  rÓ   r_   r_   r`   r¦   »  rv   z9_trim_zeros_float.<locals>.should_trim.<locals>.<genexpr>)rg   r  )r|   Únumbersr  r_   r`   Úshould_trim²  s    z&_trim_zeros_float.<locals>.should_trimc                   s$   g | ]}ˆ |ƒr|d d… n|‘qS )NrÍ  r_   rÓ   r  r_   r`   ru   ¾  rv   z%_trim_zeros_float.<locals>.<listcomp>c                   s*   g | ]"}ˆ|ƒr"|  ˆ ¡r"|d  n|‘qS )r÷  r  rÓ   )rî   r  r_   r`   ru   Á  s   ÿ)rõ  Úcompile)r   rî   rù  r  r}   r_   )rî   r  r  r`   rµ  ¤  s    þrµ  r;   )rˆ   rc   c                 C  s$   t | tƒrtj| jŽ S | jd uS d S r¤   )r¢   r<   ÚcomZany_not_noner§   r‰   )rˆ   r_   r_   r`   r  È  s    
r  c                   @  sZ   e Zd ZdZdddddddd	d
dddddddddœZd dddœdd„Zdddœdd„ZdS )!ÚEngFormatterzl
    Formats float values according to engineering format.

    Based on matplotlib.ticker.EngFormatter
    r6  ÚzÚar}  ÚpÚnÚur«  r\   r>  ÚMÚGÚTÚPÚEÚZÚY)ièÿÿÿiëÿÿÿiîÿÿÿiñÿÿÿiôÿÿÿi÷ÿÿÿiúÿÿÿéýÿÿÿr   r¯   r¹  é	   rŽ  é   é   é   é   NFr…   rT   ©ÚaccuracyÚuse_eng_prefixc                 C  s   || _ || _d S r¤   r  )r^   r  r  r_   r_   r`   ra   ë  s    zEngFormatter.__init__zint | floatrU   )Únumrc   c           
      C  s   t  t|ƒ¡}t j |¡rdS t j |¡r.dS d}|dk rDd}| }|dkrnt  tt | ¡ d ¡d ƒ¡}n
t  d¡}| 	t
| j ¡ ƒ¡}| 
t	| j ¡ ƒ¡}t|ƒ}| jrº| j| }n$|dk rÒd| d›�}nd	|d›�}|| d
|  }| jdu rþd}nd| jd›d�}|j||d�}	|	S )añ  
        Formats a number in engineering notation, appending a letter
        representing the power of 1000 of the original number. Some examples:
        >>> format_eng = EngFormatter(accuracy=0, use_eng_prefix=True)
        >>> format_eng(0)
        ' 0'
        >>> format_eng = EngFormatter(accuracy=1, use_eng_prefix=True)
        >>> format_eng(1_000_000)
        ' 1.0M'
        >>> format_eng = EngFormatter(accuracy=2, use_eng_prefix=False)
        >>> format_eng("-1e-6")
        '-1.00E-06'

        @param num: the value to represent
        @type num: either a numeric value or a string that can be converted to
                   a numeric value (as per decimal.Decimal constructor)

        @return: engineering formatted string
        rR   Úinfr’   r   rÍ  r¯   zE-Z02dzE+r½  Nz{mant: g}{prefix}z{mant: .r‘  z
f}{prefix})ÚmantÚprefix)rî   ÚDecimalrU   Úis_nanÚis_infiniter”   ÚmathrÓ  rÔ  r•   r-  ÚENG_PREFIXESr  r  r  r©   )
r^   r   ZdnumÚsignZpow10Z	int_pow10r#  r"  Ú
format_strr°  r_   r_   r`   Ú__call__ï  s4    "

zEngFormatter.__call__)NF)r   r€   r�   rH  r(  ra   r+  r_   r_   r_   r`   r
  Ï  s*   ïr
  r¯   r”   r‘   )r  r  rc   c                 C  s(   t dt| |ƒƒ t dtd| d ƒƒ dS )zÜ
    Alter default behavior on how float is formatted in DataFrame.
    Format float in engineering format. By accuracy, we mean the number of
    decimal digits after the floating point.

    See also EngFormatter.
    r�   rƒ  rŽ  r  N)r   r
  r-  r  r_   r_   r`   Úset_eng_float_format.  s    r,  r\   zbool | object | strzlist[dict[int, int]])r<  Úsentinelrc   c           	      C  s’   t | ƒdkrg S dgt | d ƒ }g }| D ]b}d}i }t|ƒD ]2\}}|| rX||krXq>d||< || ||< |}q>t |ƒ| ||< | |¡ q*|S )a�  
    For each index in each level the function returns lengths of indexes.

    Parameters
    ----------
    levels : list of lists
        List of values on for level.
    sentinel : string, optional
        Value which states that no new index starts on there.

    Returns
    -------
    Returns list of maps. For each level returns map of indexes (key is index
    in row and value is length of index).
    r   TF)rg   r)  rz   )	r<  r-  Úcontrolr}   r4  Ú
last_indexrú  rt   Úkeyr_   r_   r`   Úget_level_lengths:  s     r1  zWriteBuffer[str])rW   Úlinesrc   c                 C  s4   t dd„ |D ƒƒr dd„ |D ƒ}|  d |¡¡ dS )z‘
    Appends lines to a buffer.

    Parameters
    ----------
    buf
        The buffer to write to
    lines
        The lines to append.
    c                 s  s   | ]}t |tƒV  qd S r¤   )r¢   rU   rÓ   r_   r_   r`   r¦   p  rv   z#buffer_put_lines.<locals>.<genexpr>c                 S  s   g | ]}t |ƒ‘qS r_   rB  rÓ   r_   r_   r`   ru   q  rv   z$buffer_put_lines.<locals>.<listcomp>rf   N)r¨   r|  ry   )rW   r2  r_   r_   r`   Úbuffer_put_linese  s    r3  )NN)N)NrR   NNrJ   rå   TN)r   )r   N)r   N)r   F)rJ   NN)rå   )rå   )r¯   F)r\   )‘rH  Ú
__future__r   Ú
contextlibr   Úcsvr   r   rî   Ú	functoolsr   Úior   r'  rõ  Úshutilr   Útypingr	   r
   r   r   r   r   r   r   r   r   Úunicodedatar   Únumpyr–  Zpandas._config.configr   r   Zpandas._libsr   Zpandas._libs.missingr   Zpandas._libs.tslibsr   r   r   r   Zpandas._libs.tslibs.nattyper   Zpandas._typingr   r   r   r    r!   r"   r#   r$   r%   r&   Zpandas.core.dtypes.commonr'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   Zpandas.core.dtypes.missingr4   r5   Zpandas.core.arraysr6   r7   r8   Zpandas.core.baser9   Zpandas.core.commonÚcoreÚcommonr	  Zpandas.core.constructionr:   Zpandas.core.indexes.apir;   r<   r=   r>   Zpandas.core.indexes.datetimesr?   Zpandas.core.indexes.timedeltasr@   Zpandas.core.reshape.concatrA   Zpandas.io.commonrB   rC   Zpandas.io.formats.printingrD   rE   rF   ZpandasrG   rH   rI  Z_VALID_JUSTIFY_PARAMETERSrJ  rQ   r‚   r¶   rÃ   rŽ   rá   rã   rä   rL  rX  r{  rm   r‹  r‰  rŠ  r…  rˆ  rØ  rá  râ  rä  rç  rê  r†  r‡  rì  r+  r´  r’  rµ  r  r
  r,  r1  r3  r_   r_   r_   r`   Ú<module>   sÂ   00<;	@ !'!&   C @  ý$        ö$Oj -E	  ý ÿ  ý/   ü# ÿ$_ ÿ+