o
    Û­jd ã                   @  sæ  U d 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 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 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( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZA dd	lBmC  mDZE ddlFmGZGmHZHmIZImJZJ ddlKmLZL ddlMmNZN ddlOmPZP ddlQmRZRmSZS ddlTmUZU e�rddlVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb ddlcmdZdmeZe dZfd egd!< d"Zhd#Zid egd$< G d%d&„ d&ƒZjd¦d)d*„Zkd¦d+d,„ZlG d-d.„ d.ƒZmG d/d0„ d0ƒZn				d§d¨d7d8„Zoe			d©dªd:d;„ƒZp			<					=	>	?				d«d¬dRdS„ZqG dTdU„ dUƒZrG dVdW„ dWerƒZsG dXdY„ dYerƒZtG dZd[„ d[erƒZuG d\d]„ d]erƒZvd­d`da„Zwd®ddde„Zxd¯d°djdk„Zy	f		d±d²dmdn„Zz		d±d³drds„Z{G dtdu„ dueuƒZ|G dvdw„ dwerƒZ}	f	xd´dµd|d}„Z~	=				d¶d·d‚dƒ„Zd¸d¹d…d†„Z€dºdˆd‰„Z�	>d¸d»dŒd�„Z‚d¼d�d‘„ZƒG d’d“„ d“ƒZ„d½d¾d˜d™„Z…	šd¿dÀd d¡„Z†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)Ú	GeneratorÚHashableÚMappingÚSequence)Úcontextmanager)Ú
QUOTE_NONE)ÚDecimal)Úpartial)ÚStringION)Úget_terminal_size)ÚTYPE_CHECKINGÚAnyÚCallableÚFinalÚcast)Ú
get_optionÚ
set_option)Úlib)ÚNA)ÚNaTÚ	TimedeltaÚ	Timestamp)ÚNaTType)Úis_complex_dtypeÚis_floatÚ
is_integerÚis_list_likeÚis_numeric_dtypeÚ	is_scalar)ÚCategoricalDtypeÚDatetimeTZDtypeÚExtensionDtype)ÚisnaÚnotna)ÚCategoricalÚDatetimeArrayÚExtensionArrayÚTimedeltaArray)ÚStringDtype)ÚPandasObject)ÚIndexÚ
MultiIndexÚPeriodIndexÚensure_index)ÚDatetimeIndex)ÚTimedeltaIndex)Úconcat)Úcheck_parent_directoryÚstringify_path)Úprinting)Ú	ArrayLikeÚAxesÚColspaceArgTypeÚColspaceTypeÚCompressionOptionsÚFilePathÚFloatFormatTypeÚFormattersTypeÚ
IndexLabelÚSequenceNotStrÚStorageOptionsÚWriteBuffer)Ú	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 : array-like, 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``.
        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.
    r   Úcommon_docstring)ÚleftÚrightÚcenterÚjustifyz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.
    Úreturn_docstringc                
   @  sX   e Zd ZdZddddddddddœ	d$dd„Zd%dd„Zd&dd„Zd'd d!„Zd&d"d#„ZdS )(ÚSeriesFormatterz\
    Implement the main logic of Series.to_string, which underlies
    Series.__repr__.
    TÚNaNFN)	ÚlengthÚheaderÚindexÚna_repÚnameÚfloat_formatÚdtypeÚmax_rowsÚmin_rowsÚseriesrB   rP   ú
bool | strrQ   ÚboolrR   rS   ÚstrrT   rU   ú
str | NonerV   rW   ú
int | NonerX   ÚreturnÚNonec       	         C  sj   || _ tƒ | _|| _|| _|| _|| _|| _|	| _|
| _	|d u r$t
dƒ}|| _|| _t ¡ | _|  ¡  d S )Núdisplay.float_format)rY   r   ÚbufrT   rS   rQ   rP   rR   rW   rX   r   rU   rV   r4   Úget_adjustmentÚadjÚ_chk_truncate)ÚselfrY   rP   rQ   rR   rS   rT   rU   rV   rW   rX   © rg   úU/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/io/formats/format.pyÚ__init__Ã   s   
zSeriesFormatter.__init__c                 C  s¨   |  | j }| j}|ot| jƒ|k}| j}|rItt|ƒ}|r"t||ƒ}|dkr0|}|jd |… }n|d }t|jd |… |j| d … fƒ}|| _	nd | _	|| _
|| _d S )Né   é   )rX   rW   ÚlenrY   r   ÚintÚminÚilocr1   Ú
tr_row_numÚ	tr_seriesÚis_truncated_vertically)rf   rX   rW   rr   rY   Úrow_numrg   rg   rh   re   ã   s$   

"
zSeriesFormatter._chk_truncatec                 C  s0  | j j}d}| j j}t|tttfƒr|jd ur|d|j› �7 }| jdur<|d ur<|r.|d7 }t	j
|dd�}|d|› �7 }| jdu sI| jd	krY| jrY|rO|d7 }|d
t| j ƒ› �7 }| jdur}| jd ur}t| jjdd ƒ}|r}|rs|d7 }|dt	 
|¡› �7 }t| jjtƒr”| jj ¡ }|r�|d7 }||7 }t|ƒS )NÚ zFreq: Fz, ©ú	úÚ
)Úescape_charszName: TÚtruncatezLength: rT   zdtype: rx   )rY   rT   rR   Ú
isinstancer/   r-   r0   ÚfreqÚfreqstrr4   Úpprint_thingrP   rr   rl   rV   Úgetattrrq   r    Ú_valuesÚ_get_repr_footerr\   )rf   rT   ÚfooterrR   Úseries_nameÚ
dtype_nameÚ
level_inforg   rg   rh   Ú_get_footerþ   s:   ÿ

zSeriesFormatter._get_footerú	list[str]c                 C  s   t | jjd | j| j| jd�S )N)rU   rS   Úleading_space)Úformat_arrayrq   r€   rU   rS   rR   ©rf   rg   rg   rh   Ú_get_formatted_values(  s   ûz%SeriesFormatter._get_formatted_valuesc                 C  st  | j }|  ¡ }t|ƒdkrt| jƒj› d|› d�S |j}t|ƒ}t|t	ƒr=|j
dd d�}t ¡ }|jdg|¢R Ž  d¡}n|jdd�}|  ¡ }| jrƒd}| j}	tt|	ƒ}	| j ||	d	  ¡}
|
d
kred}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([], ú)T)Úinclude_namesÚsparsifyrk   rx   ©Úinclude_namerj   é   ú...z..rF   ©Úmodert   )rq   r†   rl   ÚtyperY   Ú__name__rR   Ú
_has_namesr{   r,   Ú_format_multir4   rc   ÚadjoinÚsplitÚ_format_flatr‹   rr   rp   r   rm   rd   rG   ÚinsertrQ   r\   Újoin)rf   rY   r‚   rR   Úhave_headerÚ	fmt_indexrd   Ú
fmt_valuesÚn_header_rowsrs   ÚwidthÚdot_strÚresultrg   rg   rh   Ú	to_string1  s>   

"
zSeriesFormatter.to_string)rY   rB   rP   rZ   rQ   r[   rR   r[   rS   r\   rT   r[   rU   r]   rV   r[   rW   r^   rX   r^   r_   r`   ©r_   r`   ©r_   r\   ©r_   r‡   )	r–   Ú
__module__Ú__qualname__Ú__doc__ri   re   r†   r‹   r¥   rg   rg   rg   rh   rN   ½   s     	ô
 

*	rN   r_   ú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)rW   rX   Úmax_colsÚmax_colwidthÚshow_dimensionsÚ
line_width)Úpandas.io.formatsr­   r   Úget_console_size)r­   rµ   Ú_rg   rg   rh   Úget_dataframe_repr_params_  s   úr¹   c                  C  sJ   t ƒ \} }tdƒ}|dkr|n|}|dkr|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±   )rT   rV   rX   rW   rP   )r   r   )r¢   ÚheightÚmax_rows_optrW   rX   rg   rg   rh   Úget_series_repr_params€  s   
ûr¼   c                   @  s¾  e Zd ZdZer
endZeee 7 Z																	dtdud(d)„Zdvd+d,„Zedwd-d.„ƒZ	edwd/d0„ƒZ
edwd1d2„ƒZedwd3d4„ƒZedxd5d6„ƒZedwd7d8„ƒZedwd9d:„ƒZedwd;d<„ƒZedwd=d>„ƒZedyd@dA„ƒZdzdBdC„Zd{dEdF„Zd|dGdH„Zd}dJdK„Zd~dMdN„ZddOdP„ZddQdR„Zd€dSdT„ZdwdUdV„ZdwdWdX„ZdwdYdZ„Zdyd[d\„Zd�d]d^„Zd�d_d`„Z d�dadb„Z!dvdcdd„Z"d‚dgdh„Z#dƒdkdl„Z$d„dmdn„Z%d…dodp„Z&d†drds„Z'dS )‡ÚDataFrameFormatterz‡
    Class for processing dataframe formatting options and data.

    Used by DataFrame.to_string, which backs DataFrame.__repr__.
    rt   NTrO   FÚ.ÚframerA   ÚcolumnsúAxes | NoneÚ	col_spaceúColspaceArgType | NonerQ   úbool | SequenceNotStr[str]rR   r[   rS   r\   Ú
formattersúFormattersType | NonerG   r]   rU   úFloatFormatType | NonerŽ   úbool | NoneÚindex_namesrW   r^   rX   r²   r´   rZ   ÚdecimalÚ	bold_rowsÚescaper_   r`   c                 C  s¼   || _ |  |¡| _|  |¡| _|| _|| _|| _|  |¡| _	|  
|¡| _|	| _|  |
¡| _|| _|| _|| _|| _|| _|| _|| _|| _|  ¡ | _|  ¡ | _| j | _|  ¡  t ¡ | _d S ©N) r¿   Ú_initialize_columnsrÀ   Ú_initialize_colspacerÂ   rQ   rR   rS   Ú_initialize_formattersrÅ   Ú_initialize_justifyrG   rU   Ú_initialize_sparsifyrŽ   Úshow_index_namesrÊ   rË   rÌ   rW   rX   r²   r´   Ú_calc_max_cols_fittedÚmax_cols_fittedÚ_calc_max_rows_fittedÚmax_rows_fittedÚtr_framerz   r4   rc   rd   )rf   r¿   rÀ   rÂ   rQ   rR   rS   rÅ   rG   rU   rŽ   rÉ   rW   rX   r²   r´   rÊ   rË   rÌ   rg   rg   rh   ri   ©  s.   

zDataFrameFormatter.__init__úlist[list[str]]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_indexrR   Ú_get_formatted_indexrØ   rœ   )rf   ÚstrcolsÚ	str_indexrg   rg   rh   Úget_strcolsØ  s
   zDataFrameFormatter.get_strcolsc                 C  s   | j du p| j dko| jS )NTrz   )r´   Úis_truncatedrŠ   rg   rg   rh   Úshould_show_dimensionsä  s   
ÿz)DataFrameFormatter.should_show_dimensionsc                 C  s   t | jp| jƒS rÍ   )r[   Úis_truncated_horizontallyrr   rŠ   rg   rg   rh   rß   ê  s   zDataFrameFormatter.is_truncatedc                 C  ó   t | jot| jƒ| jkƒS rÍ   )r[   rÕ   rl   rÀ   rŠ   rg   rg   rh   rá   î  ó   z,DataFrameFormatter.is_truncated_horizontallyc                 C  râ   rÍ   )r[   r×   rl   r¿   rŠ   rg   rg   rh   rr   ò  rã   z*DataFrameFormatter.is_truncated_verticallyc                 C  s    dt | jƒ› dt | jjƒ› d�S )Nz

[z rows x z	 columns])rl   r¿   rÀ   rŠ   rg   rg   rh   Údimensions_infoö  s    z"DataFrameFormatter.dimensions_infoc                 C  ó   t | jjƒS rÍ   )r—   r¿   rR   rŠ   rg   rg   rh   Úhas_index_namesú  ó   z"DataFrameFormatter.has_index_namesc                 C  rå   rÍ   )r—   r¿   rÀ   rŠ   rg   rg   rh   Úhas_column_namesþ  rç   z#DataFrameFormatter.has_column_namesc                 C  ó   t | j| j| jfƒS rÍ   )Úallræ   rR   rÓ   rŠ   rg   rg   rh   Úshow_row_idx_names  ó   z%DataFrameFormatter.show_row_idx_namesc                 C  ré   rÍ   )rê   rè   rÓ   rQ   rŠ   rg   rg   rh   Úshow_col_idx_names  rì   z%DataFrameFormatter.show_col_idx_namesrm   c                 C  s   t | jpt| jƒt| jƒƒS rÍ   )rn   rW   rl   r¿   rŠ   rg   rg   rh   Úmax_rows_displayed
  s   z%DataFrameFormatter.max_rows_displayedc                 C  ó   |d u rt dƒS |S )Nzdisplay.multi_sparse©r   )rf   rŽ   rg   rg   rh   rÒ     s   z'DataFrameFormatter._initialize_sparsifyr<   c                 C  sP   |d u ri S t | jjƒt |ƒkst|tƒr|S tdt |ƒ› dt | jjƒ› d�ƒ‚)NzFormatters length(ú+) should match DataFrame number of columns(rŒ   )rl   r¿   rÀ   r{   ÚdictÚ
ValueError)rf   rÅ   rg   rg   rh   rÐ     s   
ÿÿz)DataFrameFormatter._initialize_formattersc                 C  rï   )Nzdisplay.colheader_justifyrð   )rf   rG   rg   rg   rh   rÑ      s   z&DataFrameFormatter._initialize_justifyr+   c                 C  s(   |d urt |ƒ}| j| | _|S | jjS rÍ   )r.   r¿   rÀ   )rf   rÀ   Úcolsrg   rg   rh   rÎ   &  s
   z&DataFrameFormatter._initialize_columnsr8   c                   sÔ   ˆ d u ri }|S t ˆ ttfƒr#dˆ i}| ‡ fdd„| jjD ƒ¡ |S t ˆ tƒrDˆ  ¡ D ]}|| jjvr?|dkr?td|› �ƒ‚q,ˆ }|S t	| jjƒt	ˆ ƒkr_tdt	ˆ ƒ› dt	| jjƒ› d�ƒ‚t
t| jjˆ ƒƒ}|S )Nrt   c                   s   i | ]}|ˆ “qS rg   rg   )Ú.0Úcolumn©rÂ   rg   rh   Ú
<dictcomp>5  ó    z;DataFrameFormatter._initialize_colspace.<locals>.<dictcomp>z,Col_space is defined for an unknown column: zCol_space length(rñ   rŒ   )r{   rm   r\   Úupdater¿   rÀ   r   Úkeysró   rl   rò   Úzip)rf   rÂ   r¤   rö   rg   r÷   rh   rÏ   .  s0   ï
òÿ€ú
ÿÿz'DataFrameFormatter._initialize_colspacec                 C  s,   |   ¡ s| jS tƒ \}}|  |¡r|S | jS )z%Number of columns fitting the screen.)Ú_is_in_terminalr²   r   Ú_is_screen_narrow)rf   r¢   r¸   rg   rg   rh   rÔ   F  s   

z(DataFrameFormatter._calc_max_cols_fittedc                 C  sP   |   ¡ r tƒ \}}| jdkr||  ¡  S |  |¡r|}n| j}n| j}|  |¡S )z,Number of rows with data fitting the screen.r   )rý   r   rW   Ú_get_number_of_auxiliary_rowsÚ_is_screen_shortÚ_adjust_max_rows)rf   r¸   rº   rW   rg   rg   rh   rÖ   Q  s   



z(DataFrameFormatter._calc_max_rows_fittedc                 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
        )rl   r¿   rX   rn   )rf   rW   rg   rg   rh   r  d  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   )r[   r²   rW   rŠ   rg   rg   rh   rý   r  s   z"DataFrameFormatter._is_in_terminalc                 C  s   t | jdkot| jjƒ|kƒS ©Nr   )r[   r²   rl   r¿   rÀ   )rf   Ú	max_widthrg   rg   rh   rþ   v  s   z$DataFrameFormatter._is_screen_narrowc                 C  s   t | jdkot| jƒ|kƒS r  )r[   rW   rl   r¿   )rf   Ú
max_heightrg   rg   rh   r   y  s   z#DataFrameFormatter._is_screen_shortc                 C  s:   d}d}|| }| j r|t| j ¡ ƒ7 }| jr|d7 }|S )z?Get number of rows occupied by prompt, dots and dimension info.rj   )r´   rl   rä   Ú
splitlinesrQ   )rf   Údot_rowÚ
prompt_rowÚnum_rowsrg   rg   rh   rÿ   |  s   z0DataFrameFormatter._get_number_of_auxiliary_rowsc                 C  s$   | j r|  ¡  | jr|  ¡  dS dS )zY
        Check whether the frame should be truncated. If so, slice the frame up.
        N)rá   Ú_truncate_horizontallyrr   Ú_truncate_verticallyrŠ   rg   rg   rh   rz   Š  s
   ÿzDataFrameFormatter.truncatec                 C  sÊ   | j dusJ ‚| j d }|dkrM| jjdd…d|…f }| jjdd…| d…f }t||fdd�| _t| jttfƒrLg | 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
        Nrk   rj   ©Úaxis)rÕ   rØ   ro   r1   r{   rÅ   ÚlistÚtupler   rm   r²   Ú
tr_col_num)rf   Úcol_numrD   rE   rg   rg   rh   r	  ”  s    
ÿþ€
z)DataFrameFormatter._truncate_horizontallyc                 C  sŠ   | j dusJ ‚| j d }|dkr-t| jƒ}t t |¡t || |¡g¡}| jj| | _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
        Nrk   rj   )r×   rl   rØ   ÚnpÚhstackÚarangero   r   rm   rW   rp   )rf   rs   Ú_lenÚ_slicerg   rg   rh   r
  ®  s   

 
z'DataFrameFormatter._truncate_verticallyc           
   	     s˜  g }t ˆ jƒs1ˆ js1tˆ jƒD ]\}}ˆ  |¡}t|ˆ jtˆ j 	|d¡ƒˆ j
d�}| |¡ q|S t ˆ jƒrcttt ˆ jƒˆ _tˆ jƒtˆ jƒkrZtdtˆ jƒ› dtˆ jƒ› d�ƒ‚dd„ ˆ jD ƒ}nˆ  ˆ j¡}ˆ jrv|D ]}| d¡ qntˆ jƒD ]N\}}|| }ttˆ j 	|d¡ƒg‡ fd	d
„|D ƒ¢R Ž }ˆ  |¡}t|ˆ j|ˆ j
d�}tg ‡ fdd
„|D ƒ¢|‘R Ž }	ˆ j
j||	ˆ jd�}| || ¡ q{|S )Nr   )ÚstringsrG   Úminimumrd   zWriting z cols but got z aliasesc                 S  s   g | ]}|g‘qS rg   rg   )rõ   Úlabelrg   rg   rh   Ú
<listcomp>×  rù   zADataFrameFormatter._get_strcols_without_index.<locals>.<listcomp>rt   c                 3  ó   � | ]	}ˆ j  |¡V  qd S rÍ   ©rd   rl   ©rõ   ÚxrŠ   rg   rh   Ú	<genexpr>â  ó   € z@DataFrameFormatter._get_strcols_without_index.<locals>.<genexpr>)r  rd   c                 3  r  rÍ   r  r  rŠ   rg   rh   r  é  r  r“   )r   rQ   Ú	enumeraterØ   Ú
format_colÚ_make_fixed_widthrG   rm   rÂ   Úgetrd   Úappendr   r  r\   rl   rÀ   ró   Ú_get_formatted_column_labelsrë   Úmax)
rf   rÜ   ÚiÚcr    Ústr_columnsr  ÚcheaderÚheader_colwidthÚmax_lenrg   rŠ   rh   rÚ   À  sP   
ü
ÿÿÿÿ
ÿ z-DataFrameFormatter._get_strcols_without_indexr'  r‡   c              	   C  sL   | j }|  |¡}t|jd d …|f j|| j| j| j |j	| ¡| j
| jd�S )N)rU   rS   ÚspacerÊ   rˆ   )rØ   Ú_get_formatterr‰   ro   r€   rU   rS   rÂ   r#  rÀ   rÊ   rR   )rf   r'  r¿   Ú	formatterrg   rg   rh   r!  ï  s   
ùzDataFrameFormatter.format_colú	str | intúCallable | Nonec                 C  sZ   t | jttfƒrt|ƒrtt|ƒ}| j| S d S t|ƒr&|| jvr&| j| }| j |d ¡S rÍ   )	r{   rÅ   r  r  r   r   rm   rÀ   r#  )rf   r'  rg   rg   rh   r.  ü  s   


z!DataFrameFormatter._get_formatterc                   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rTt|ƒrT||ƒ}d
d„ t|Ž D ƒ}|S |jdd�}ˆjj	}tt|tt|ƒƒƒ‰ ‡ ‡fdd„t|ƒD ƒ}|S )Nr   )Úsparsify_labelsF)rŽ   r�   c                 s  s   � | ]}|j V  qd S rÍ   )Úis_floating)rõ   Úlevelrg   rg   rh   r    s   € zBDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>c                   s"   |ˆj vrˆ |  rˆsd| S |S )Nú )rÅ   )r  Úy)Úneed_leadspÚrestrict_formattingrf   rg   rh   Ú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 rg   rg   )rõ   r6  )r9  r  rg   rh   r     ó    zMDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>.<listcomp>Nrg   )rõ   )r9  ©r  rh   r     s   €" c                 S  ó   g | ]}t |ƒ‘qS rg   )r  r  rg   rg   rh   r  %  ó    zCDataFrameFormatter._get_formatted_column_labels.<locals>.<listcomp>r�   c                   s0   g | ]\}}ˆ  |¡sˆ | rd | n|g‘qS )r5  )r.  )rõ   r'  r  )r7  rf   rg   rh   r  *  s    ÿÿ)Úpandas.core.indexes.multir2  rÀ   r{   r,   r˜   r  rü   r¿   Údtypesr€   ÚanyÚlevelsrò   Úmapr   rŽ   rl   r›   r   )rf   r¿   r2  rÀ   Úfmt_columnsr?  Ústr_columns_tupler)  rg   )r7  r8  rf   r9  rh   r%    s.   

	ÿ
øþz/DataFrameFormatter._get_formatted_column_labelsc                   sÂ   dd„ ˆj  ¡ D ƒ‰ |j}|j}ˆ d¡}t|tƒr%|jˆjˆj	|d�}n	|j
ˆj	|d�g}‡ ‡fdd„|D ƒ}ˆjjdg|¢R Ž  d	¡}ˆjrRd
d„ ˆ ¡ D ƒ}ndg|j }ˆjr_|| S |S )Nc                 S  s   i | ]
\}}|t t|ƒ“qS rg   )r   rm   )rõ   ÚkÚvrg   rg   rh   rø   4  s    z;DataFrameFormatter._get_formatted_index.<locals>.<dictcomp>Ú	__index__)rŽ   r�   r/  )r�   r/  c              
     s.   g | ]}t tt|ƒd ˆ  dd¡ˆjd�ƒ‘qS )rD   rt   r   )rG   r  rd   )r  r"  r  r#  rd   r  ©rÂ   rf   rg   rh   r  D  s    ûÿÿÿz;DataFrameFormatter._get_formatted_index.<locals>.<listcomp>rj   rx   c                 S  r<  rg   ©r\   r  rg   rg   rh   r  Q  r=  rt   )rÂ   ÚitemsrR   rÀ   r.  r{   r,   r˜   rŽ   rë   r›   rd   r™   rš   rí   Ú_get_column_name_listÚnlevelsrQ   )rf   r¿   rR   rÀ   ÚfmtrŸ   ÚadjoinedÚ
col_headerrg   rH  rh   rÛ   1  s,   

ýÿú	z'DataFrameFormatter._get_formatted_indexúlist[Hashable]c                 C  sN   g }| j j}t|tƒr| dd„ |jD ƒ¡ |S | |jd u r!dn|j¡ |S )Nc                 s  s    � | ]}|d u r
dn|V  qd S )Nrt   rg   )rõ   rT   rg   rg   rh   r  ^  s   € z;DataFrameFormatter._get_column_name_list.<locals>.<genexpr>rt   )r¿   rÀ   r{   r,   ÚextendÚnamesr$  rT   )rf   rR  rÀ   rg   rg   rh   rK  Z  s   
ÿz(DataFrameFormatter._get_column_name_list)NNTTrO   NNNNTNNNFr¾   FT)&r¿   rA   rÀ   rÁ   rÂ   rÃ   rQ   rÄ   rR   r[   rS   r\   rÅ   rÆ   rG   r]   rU   rÇ   rŽ   rÈ   rÉ   r[   rW   r^   rX   r^   r²   r^   r´   rZ   rÊ   r\   rË   r[   rÌ   r[   r_   r`   )r_   rÙ   ©r_   r[   r§   )r_   rm   )rŽ   rÈ   r_   r[   )rÅ   rÆ   r_   r<   )rG   r]   r_   r\   )rÀ   rÁ   r_   r+   )rÂ   rÃ   r_   r8   )r_   r^   )rW   r^   r_   r^   r¦   )r'  rm   r_   r‡   )r'  r0  r_   r1  )r¿   rA   r_   rÙ   )r¿   rA   r_   r‡   )r_   rP  )(r–   r©   rª   r«   rC   rM   ri   rÞ   Úpropertyrà   rß   rá   rr   rä   ræ   rè   rë   rí   rî   rÒ   rÐ   rÑ   rÎ   rÏ   rÔ   rÖ   r  rý   rþ   r   rÿ   rz   r	  r
  rÚ   r!  r.  r%  rÛ   rK  rg   rg   rg   rh   r½   Ÿ  s€    í
/

















/


))r½   c                   @  sr   e Zd ZdZd9dd„Z									d:d;dd„Z			d<d=dd„Z													 		!	d>d?d7d8„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.
    rM  r½   r_   r`   c                 C  s
   || _ d S rÍ   )rM  )rf   rM  rg   rg   rh   ri   u  s   
zDataFrameRenderer.__init__NFrb   ú"FilePath | WriteBuffer[str] | NoneÚencodingr]   Úclassesústr | list | tuple | NoneÚnotebookr[   Úborderúint | bool | NoneÚtable_idÚrender_linksc                 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)rX  r[  r]  r^  ©rb   rW  )Úpandas.io.formats.htmlr_  r`  rM  r¥   Úsave_to_buffer)rf   rb   rW  rX  rZ  r[  r]  r^  r_  r`  ÚKlassÚhtml_formatterÚstringrg   rg   rh   Úto_htmlx  s   "ûzDataFrameRenderer.to_htmlrµ   r^   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µ   ra  )Úpandas.io.formats.stringrh  rM  r¥   rc  )rf   rb   rW  rµ   rh  Ústring_formatterrf  rg   rg   rh   r¥   «  s   zDataFrameRenderer.to_stringú,ÚwÚinferú"TÚstrictÚpath_or_bufú7FilePath | WriteBuffer[bytes] | WriteBuffer[str] | NoneÚsepr\   rÀ   úSequence[Hashable] | NoneÚindex_labelúIndexLabel | Noner”   Úcompressionr9   ÚquotingÚ	quotecharÚlineterminatorÚ	chunksizeÚdate_formatÚdoublequoteÚ
escapecharÚerrorsÚstorage_optionsúStorageOptions | Nonec                 C  sÈ   ddl m} |du rd}tƒ }nd}|di d|“d|
“d|“d	|“d
|“d|“d|“d|“d|“d|“d|“d|	“d|“d|“d|“d|“d| j“Ž}| ¡  |rbt|tƒsXJ ‚| ¡ }| ¡  |S dS )z;
        Render dataframe as comma-separated file.
        r   )ÚCSVFormatterNTFrp  ry  rr  rW  r~  rv  rw  rô   rt  r”   rz  rx  r{  r|  r}  r  r/  rg   )Úpandas.io.formats.csvsr�  r   rM  Úsaver{   ÚgetvalueÚclose)rf   rp  rW  rr  rÀ   rt  r”   rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r�  Úcreated_bufferÚcsv_formatterÚcontentrg   rg   rh   Úto_csvÅ  s^   ÿþýüûúùø	÷
öõôóòñðïzDataFrameRenderer.to_csv)rM  r½   r_   r`   )NNNFNNF)rb   rV  rW  r]   rX  rY  rZ  r[   r[  r\  r]  r]   r^  r[   r_   r]   )NNN)rb   rV  rW  r]   rµ   r^   r_   r]   )NNrk  NNrl  rm  Nrn  NNNTNro  N)"rp  rq  rW  r]   rr  r\   rÀ   rs  rt  ru  r”   r\   rv  r9   rw  r^   rx  r\   ry  r]   rz  r^   r{  r]   r|  r[   r}  r]   r~  r\   r  r€  r_   r]   )r–   r©   rª   r«   ri   rg  r¥   r‰  rg   rg   rg   rh   rU  d  s@    
ø5üïrU  rf  r\   rb   rV  rW  r]   c                 C  s\   t ||d��}| | ¡ |du r| ¡ W  d  ƒ S 	 W d  ƒ dS 1 s'w   Y  dS )zQ
    Perform serialization. Write to buf or return as string if buf is None.
    )rW  N)Ú_get_bufferÚwriter„  )rf  rb   rW  Úfdrg   rg   rh   rc    s   
ü$ûrc  úIGenerator[WriteBuffer[str], None, None] | Generator[StringIO, None, None]c                 c  s¨   � | dur
t | ƒ} ntƒ } |du rd}n	t| tƒstdƒ‚t| dƒr'| V  dS t| tƒrPtt| ƒƒ t| d|dd��}|V  W d  ƒ dS 1 sIw   Y  dS tdƒ‚)	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‹  rl  rt   )rW  Únewlinez1buf is not a file name and it has no write method)	r3   r   r{   r\   ró   Úhasattrr2   ÚopenÚ	TypeError)rb   rW  Úfrg   rg   rh   rŠ    s    €




"ûrŠ  rO   rE   r¾   TÚvaluesr5   r/  r1  rU   rÇ   rS   Údigitsr^   r-  ústr | int | NonerG   rÊ   rˆ   rÈ   rw  Úfallback_formatterr‡   c                 C  sè   t  | jd¡rt}tt| ƒ} n<t| jtƒrt}tt| ƒ} n.t  | jd¡r,t	}tt
| ƒ} nt| jtƒr5t}nt  | jd¡r?t}nt  | jd¡rIt}nt}|du rQd}|du rYtdƒ}|du ratdƒ}|| |||||||||	|
d	�}| ¡ S )
a™  
    Format an array for printing.

    Parameters
    ----------
    values : np.ndarray or ExtensionArray
    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._get_values_for_csv), we don't want the
        leading space since it should be left-aligned.
    fallback_formatter

    Returns
    -------
    List[str]
    ÚMÚmÚfcÚiuNé   ra   údisplay.precision)
r”  rS   rU   r/  r-  rG   rÊ   rˆ   rw  r–  )r   Úis_np_dtyperV   Ú_Datetime64Formatterr   r&   r{   r!   Ú_Datetime64TZFormatterÚ_Timedelta64Formatterr(   r"   Ú_ExtensionArrayFormatterÚFloatArrayFormatterÚ_IntArrayFormatterÚ_GenericArrayFormatterr   Ú
get_result)r“  r/  rU   rS   r”  r-  rG   rÊ   rˆ   rw  r–  Ú	fmt_klassÚfmt_objrg   rg   rh   r‰   7  sH   )õr‰   c                   @  sB   e Zd Z											d&d'dd „Zd(d"d#„Zd(d$d%„ZdS ))r¤  é   NrO   r›  rE   r¾   Tr“  r5   r”  rm   r/  r1  rS   r\   r-  r0  rU   rÇ   rG   rÊ   rw  r^   Úfixed_widthr[   rˆ   rÈ   r–  r_   r`   c                 C  sL   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
|| _d S rÍ   )r“  r”  rS   r-  r/  rU   rG   rÊ   rw  r©  rˆ   r–  )rf   r“  r”  r/  rS   r-  rU   rG   rÊ   rw  r©  rˆ   r–  rg   rg   rh   ri   �  s   
z_GenericArrayFormatter.__init__r‡   c                 C  s   |   ¡ }t|| jƒS rÍ   )Ú_format_stringsr"  rG   )rf   r    rg   rg   rh   r¥  ©  s   z!_GenericArrayFormatter.get_resultc                   st  ˆj d u rtdƒ}|d u rtdƒ‰‡fdd„}nˆj }ˆjd ur$ˆj‰ nˆjd ur-ˆj‰ nˆjd uo6ˆjtk}ttjd|d�‰ ‡ ‡fdd„}ˆj	}t
|tjƒsStd	ƒ‚t |t¡}|tjt|ƒttd
t|jƒƒƒd�@ }ˆj}|d u rw| ¡ }g }t|ƒD ]:\}	}
||	 rŠˆjd ur—|r—| d||
ƒ› �¡ q}||	 r£| ||
ƒ¡ q}|du rªd}nd}| |j||
ƒd�¡ q}|S )Nra   rœ  c                   s   t | dˆ d›d�›ƒS )Nz .Údr’  )Ú_trim_zeros_single_floatr;  )Ú	precisionrg   rh   Ú<lambda>²  s    ÿz8_GenericArrayFormatter._format_strings.<locals>.<lambda>ru   )ry   Úquote_stringsc                   s°   ˆj d ur;t| ƒr;t| ƒr;| d u rdS | tu rttƒS t | ¡r)t | ¡r)t| ƒS | t	u s6t
| tjtjfƒr8dS ˆj S t
| tƒrDt| ƒS t
| tƒrR| jtu rRt| ƒS tˆ | ƒƒS )Nr`   r   )rS   r   r#   r   r\   r   r   r  Úisinfr   r{   Ú
datetime64Útimedelta64r*   r)   Úna_valueÚreprr;  )r/  rf   rg   rh   Ú_formatÄ  s   
z7_GenericArrayFormatter._format_strings.<locals>._formatz=ExtensionArray formatting should use _ExtensionArrayFormatterrj   r  r5  Fz{v}z {v}©rF  )rU   r   r/  r–  rw  r   r
   r4   r~   r“  r{   r  Úndarrayr‘  r   Ú	map_inferr   rê   r$   r  Úrangerl   Úshaperˆ   r@  r   r$  Úformat)rf   rU   r¯  rµ  ÚvalsÚinferredÚis_float_typerˆ   r    r'  rF  Útplrg   )r/  r­  rf   rh   rª  ­  sT   
€

ýÿ þÿz&_GenericArrayFormatter._format_strings)r¨  NrO   r›  NrE   r¾   NTTN)r“  r5   r”  rm   r/  r1  rS   r\   r-  r0  rU   rÇ   rG   r\   rÊ   r\   rw  r^   r©  r[   rˆ   rÈ   r–  r1  r_   r`   r¨   )r–   r©   rª   ri   r¥  rª  rg   rg   rg   rh   r¤  Œ  s    ó
r¤  c                      sB   e Zd Zd‡ fdd„Z		dddd„Zddd„Zddd„Z‡  ZS )r¢  r_   r`   c                   sT   t ƒ j|i |¤Ž | jd ur$| jd u r&d| _t| jƒr(| j| _d | _d S d S d S d S ©NF)Úsuperri   rU   r/  r©  Úcallable)rf   ÚargsÚkwargs©Ú	__class__rg   rh   ri   û  s   

ûzFloatArrayFormatter.__init__NrU   rÇ   Ú	thresholdúfloat | Noner   c                   sl   ˆdu rˆj ‰ˆr‡‡fdd„‰ n‡fdd„‰ ˆjdkr$‡ ‡fdd„‰nˆ ‰ˆdu r,ˆ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)r$   rS   r¶  )rU   rf   rg   rh   Úbase_formatter  s   
ÿÿýz<FloatArrayFormatter._value_formatter.<locals>.base_formatterc                   s   t | ƒrt| ƒS ˆ jS rÍ   )r$   r\   rS   r¶  rŠ   rg   rh   rË  &  s   r¾   c                   s   ˆ | ƒ  dˆjd¡S )Nr¾   rj   )ÚreplacerÊ   r¶  )rË  rf   rg   rh   Údecimal_formatter+  s   z?FloatArrayFormatter._value_formatter.<locals>.decimal_formatterc                   s*   t | ƒrt| ƒˆkrˆ | ƒS ˆ dƒS ˆjS )Ng        )r$   ÚabsrS   rÉ  )rÍ  rf   rÇ  rg   rh   r/  4  s
   z7FloatArrayFormatter._value_formatter.<locals>.formatter)rU   rÊ   )rf   rU   rÇ  r/  rg   )rË  rÍ  rU   rf   rÇ  rh   Ú_value_formatter  s   
	z$FloatArrayFormatter._value_formatterú
np.ndarrayc           
        sT  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 rJˆjrFˆjdu r;d}nd}t|jˆj	d�}n
ˆj}n‡fdd„}||ƒ}ˆjsY|S t
|ƒdkrptdd„ |D ƒƒ}|ˆj	d k}nd}t ˆj¡}|dk ¡ }|dˆj	  k |dk@  ¡ }	|	s’|r¨|r¨ˆjdu ršd}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“  r5   r/  r   rS   r\   c                   s<   t | ƒ}t ‡ ‡fdd„t|  ¡ | ¡ ƒD ƒ¡ | j¡}|S )Nc                   s    g | ]\}}|sˆ |ƒnˆ‘qS rg   rg   )rõ   Úvalr˜  ©r/  rS   rg   rh   r  H  s    ÿÿzWFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_rep.<locals>.<listcomp>)r#   r  Úarrayrü   ÚravelÚreshaperº  )r“  r/  rS   ÚmaskÚ	formattedrg   rÒ  rh   Úformat_with_na_repE  s   þÿûzCFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_repc                 S  sþ   t  | ¡ ¡ }t  | ¡ ¡ }t|ƒt|ƒ}}g }t|  ¡ ||||ƒD ]R\}}	}
}}|s6|s6| ||ƒ¡ q#|sF| ||	ƒ› d|› d�¡ q#|sj||
ƒ ¡ }| d¡r^| |› |› d�¡ q#| |› d|› d�¡ q#| |› d|› d�¡ q#t  	|¡ 
| j¡S )Nú+Újú-)r  ÚrealrÔ  Úimagr#   rü   r$  ÚstripÚ
startswithrÓ  rÕ  rº  )r“  r/  rS   Úreal_valuesÚimag_valuesÚ	real_maskÚ	imag_maskÚformatted_lstrÑ  Úreal_valÚimag_valÚre_isnaÚim_isnaÚimag_formattedrg   rg   rh   Úformat_complex_with_na_repO  s,   û
zKFloatArrayFormatter.get_result_as_array.<locals>.format_complex_with_na_repNzdisplay.chop_thresholdc                   sˆ   ˆ  | ˆ¡}ˆjdkrdˆj nˆj}ˆj}t|ƒ}|r#ˆ |||ƒ}nˆ|||ƒ}ˆjrB|r5t|ˆjƒ}nt|ˆjƒ}t	j
|dd�S |S )NrD   r5  Úobject©rV   )rÏ  rG   rS   r“  r   r©  Ú_trim_zeros_complexrÊ   Ú_trim_zeros_floatr  Úasarray)rU   r/  rS   r“  Ú
is_complexr¤   ©rê  rØ  rf   rÇ  rg   rh   Úformat_values_withu  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Í   )rU   rÉ  rŠ   rg   rh   r®  �  s   
 z9FloatArrayFormatter.get_result_as_array.<locals>.<lambda>r   c                 s  ó   � | ]}t |ƒV  qd S rÍ   ©rl   r  rg   rg   rh   r  ©  ó   € z:FloatArrayFormatter.get_result_as_array.<locals>.<genexpr>é   Fg    €„.Aé
   z{value: .{digits:d}e}z{value:.{digits:d}e})r“  r5   r/  r   rS   r\   )r/  r“  rS   r©  r   rU   rˆ   r
   r»  r”  rl   r&  r  rÎ  r@  )
rf   rò  Úfmt_strrU   Úformatted_valuesÚmaxlenÚtoo_longÚabs_valsÚhas_large_valuesÚhas_small_valuesrg   rñ  rh   Úget_result_as_array?  sB   







z'FloatArrayFormatter.get_result_as_arrayr‡   c                 C  s   t |  ¡ ƒS rÍ   )r  rÿ  rŠ   rg   rg   rh   rª  ¿  s   z#FloatArrayFormatter._format_stringsr¦   ©NN)rU   rÇ   rÇ  rÈ  r_   r   )r_   rÐ  r¨   )r–   r©   rª   ri   rÏ  rÿ  rª  Ú__classcell__rg   rg   rÅ  rh   r¢  ú  s    ý
8 r¢  c                   @  s   e Zd Zddd„ZdS )r£  r_   r‡   c                   s>   | j du r
dd„ }ndd„ }| jp|‰ ‡ fdd„| jD ƒ}|S )NFc                 S  ó   | d›j | d�S )Nr«  r;  ©r»  r;  rg   rg   rh   r®  Æ  ó    z4_IntArrayFormatter._format_strings.<locals>.<lambda>c                 S  r  )Nz dr;  r  r;  rg   rg   rh   r®  È  r  c                   ó   g | ]}ˆ |ƒ‘qS rg   rg   r  ©r/  rg   rh   r  Ê  r=  z6_IntArrayFormatter._format_strings.<locals>.<listcomp>)rˆ   r/  r“  )rf   Úformatter_strr    rg   r  rh   rª  Ä  s   


z"_IntArrayFormatter._format_stringsNr¨   )r–   r©   rª   rª  rg   rg   rg   rh   r£  Ã  s    r£  c                      s8   e Zd ZU ded< 		dd‡ fd
d„Zddd„Z‡  ZS )rž  r&   r“  r   NÚnat_repr\   r{  r`   r_   c                   s$   t ƒ j|fi |¤Ž || _|| _d S rÍ   )rÁ  ri   r  r{  )rf   r“  r  r{  rÄ  rÅ  rg   rh   ri   Ñ  s   
z_Datetime64Formatter.__init__r‡   c                   s<   ˆ j }ˆ jdur‡ fdd„|D ƒS |jˆ jˆ jd�}| ¡ S )z&we by definition have DO NOT have a TZNc                   s   g | ]}ˆ   |¡‘qS rg   r  r  rŠ   rg   rh   r  á  r:  z8_Datetime64Formatter._format_strings.<locals>.<listcomp>)rS   r{  )r“  r/  Ú_format_native_typesr  r{  Útolist)rf   r“  r    rg   rŠ   rh   rª  Ü  s   
ÿz$_Datetime64Formatter._format_strings©r   N)r“  r&   r  r\   r{  r`   r_   r`   r¨   ©r–   r©   rª   Ú__annotations__ri   rª  r  rg   rg   rÅ  rh   rž  Î  s   
 ürž  c                   @  ó    e Zd ZU ded< ddd„ZdS )	r¡  r'   r“  r_   r‡   c                 C  sx   | j }| j}d }|d u r|jdd�}t|tƒr| ¡ }ntj|td�}t	||| j
| j| j| j| j| j| j| j|d�}|S )NT)Úboxedrì  )	rU   rS   r”  r-  rG   rÊ   rˆ   rw  r–  )r“  r/  Ú
_formatterr{   r%   Ú_internal_get_valuesr  rï  rë  r‰   rU   rS   r”  r-  rG   rÊ   rˆ   rw  )rf   r“  r/  r–  rÓ  r    rg   rg   rh   rª  ì  s,   

õz(_ExtensionArrayFormatter._format_stringsNr¨   ©r–   r©   rª   r  rª  rg   rg   rg   rh   r¡  é  ó   
 r¡  Úpercentilesúnp.ndarray | Sequence[float]c                 C  sê   t  | ¡} t| ƒrt  | dk¡rt  | dk¡stdƒ‚d|  } t| ƒ}|  |¡ t¡}t  	|| ¡}t  |¡rB| t
¡}dd„ |D ƒS t  | ¡}t|ƒ}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   rj   z/percentiles should all be in the interval [0,1]éd   c                 S  ó   g | ]}|d  ‘qS ©ú%rg   ©rõ   r'  rg   rg   rh   r  >  r=  z&format_percentiles.<locals>.<listcomp>rì  c                 S  r  r  rg   r  rg   rg   rh   r  F  r=  )r  rï  r   rê   ró   Úget_precisionÚroundÚastyperm   Úiscloser\   ÚuniqueÚ
empty_likerë  )r  ÚprecÚpercentiles_round_typeÚint_idxÚoutÚunique_pctsrg   rg   rh   Úformat_percentiles
  s*   
"ÿþý


r&  rÓ  rm   c                 C  sx   | d dkr
| d nd }| d dk rd| d  nd }t j| ||d�}t|ƒ}t  t  t  |¡¡¡ t¡ }td|ƒ}|S )Nr   éÿÿÿÿr  )Úto_beginÚto_endrj   )	r  Úediff1drÎ  ÚfloorÚlog10rn   r  rm   r&  )rÓ  r(  r)  Údiffr!  rg   rg   rh   r  I  s   
r  r   r  úNaTType | Timestampr  c                 C  s   | t u r|S t| ƒS rÍ   )r   r\   )r  r  rg   rg   rh   Ú_format_datetime64S  s   r/  r{  c                 C  s"   t | tƒr|S |r|  |¡S | jS rÍ   )r{   r   ÚstrftimeÚ
_date_repr)r  r  r{  rg   rg   rh   Ú_format_datetime64_dateonly\  s
   

r2  Úis_dates_onlyr[   r   c                   s   | r	‡ ‡fdd„S ‡fdd„S )z]Return a formatter callable taking a datetime64 as input and providing
    a string as outputc                   s   t | ˆˆ d�S )N)r  r{  )r2  r;  ©r{  r  rg   rh   r®  r  s    ÿz'get_format_datetime64.<locals>.<lambda>c                   s   t | ˆ d�S )N©r  )r/  r;  r5  rg   rh   r®  v  s    rg   )r3  r  r{  rg   r4  rh   Úget_format_datetime64k  s   r6  c                   @  r  )	rŸ  r&   r“  r_   r‡   c                   s>   | j j}| j  t¡}| jpt|| jd�‰ ‡ fdd„|D ƒ}|S )zwe by definition have a TZ)r{  c                   r  rg   rg   r  r  rg   rh   r  ƒ  r=  z:_Datetime64TZFormatter._format_strings.<locals>.<listcomp>)r“  Ú_is_dates_onlyr  rë  r/  r6  r{  )rf   Úidor“  r    rg   r  rh   rª  |  s   ÿz&_Datetime64TZFormatter._format_stringsNr¨   r  rg   rg   rg   rh   rŸ  y  r  rŸ  c                      s6   e Zd ZU ded< 	dd‡ fdd	„Zddd„Z‡  ZS )r   r(   r“  r   r  r\   r_   r`   c                   s   t ƒ j|fi |¤Ž || _d S rÍ   )rÁ  ri   r  )rf   r“  r  rÄ  rÅ  rg   rh   ri   ‹  s   
z_Timedelta64Formatter.__init__r‡   c                   s,   | j pt| j| jdd�‰ ‡ fdd„| jD ƒS )NF)r  Úboxc                   r  rg   rg   r  r  rg   rh   r  ™  r=  z9_Timedelta64Formatter._format_strings.<locals>.<listcomp>)r/  Úget_format_timedelta64r“  r  rŠ   rg   r  rh   rª  •  s   
ÿz%_Timedelta64Formatter._format_strings©r   )r“  r(   r  r\   r_   r`   r¨   r  rg   rg   rÅ  rh   r   ˆ  s
   
 ý
r   Fr(   ústr | floatr9  c                   s(   | j }|rd‰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
    NÚlongc                   sN   | d u st | ƒrt| ƒrˆS t| tƒst| ƒ} | jˆd�}ˆ r%d|› d�}|S )Nr  ú')r   r#   r{   r   Ú
_repr_base)r  r¤   ©r9  r»  r  rg   rh   r  ®  s   
z*get_format_timedelta64.<locals>._formatter)r7  )r“  r  r9  Ú	even_daysr  rg   r@  rh   r:  œ  s   r:  r  r  rd   úprinting._TextAdjustment | Nonec                   sª   t | ƒdks
|dkr| S |d u rt ¡ ‰ n|‰ t‡ fdd„| D ƒƒ‰|d ur+t|ˆƒ‰tdƒ‰ˆd ur9ˆˆkr9ˆ‰d‡ ‡‡fd	d
„‰‡fdd„| D ƒ} ˆ j| ˆ|d�}|S )Nr   rê   c                 3  s   � | ]}ˆ   |¡V  qd S rÍ   rô  r  )Ú
adjustmentrg   rh   r  Ì  ó   € z$_make_fixed_width.<locals>.<genexpr>r°   r  r\   r_   c                   s6   ˆd urˆdkˆ   | ¡ˆk@ r| d ˆd … d } | S )Nr‘   r’   rô  r;  )rC  Úconf_maxr,  rg   rh   ÚjustÕ  s   z_make_fixed_width.<locals>.justc                   r  rg   rg   r  )rF  rg   rh   r  Û  r=  z%_make_fixed_width.<locals>.<listcomp>r“   )r  r\   r_   r\   )rl   r4   rc   r&  r   rG   )r  rG   r  rd   r¤   rg   )rC  rE  rF  r,  rh   r"  ¾  s   

r"  Ústr_complexesc           	        s¸   g g }}| D ] }t  d|¡}| d |dd… ¡¡ | d |dd… ¡¡ qt| ƒ}t|| |ƒ}t|ƒdkr;g S tdd„ |D ƒƒd	 ‰ ‡ fd
d„t|d|… ||d… ƒD ƒ}|S )z‰
    Separates the real and imaginary parts from the complex number, and
    executes the _trim_zeros_float method on each of those.
    z([j+-])rt   Néüÿÿÿéþÿÿÿr   c                 s  ró  rÍ   rô  )rõ   Úpartrg   rg   rh   r  ö  rõ  z&_trim_zeros_complex.<locals>.<genexpr>rj   c                   s6   g | ]\}}||d   |dd… dˆ › �› d ‘qS )r   rj   Nú>rÚ  rg   )rõ   Úreal_ptÚimag_pt©Úpadded_lengthrg   rh   r  ÷  s    üÿþýÿz'_trim_zeros_complex.<locals>.<listcomp>)Úrerš   r$  r�   rl   rî  r&  rü   )	rG  rÊ   Ú	real_partÚ	imag_partr  ÚtrimmedÚnÚpadded_partsÚpaddedrg   rN  rh   rí  à  s   

ûrí  Ú	str_floatc                 C  s    |   d¡} |  d¡r| d7 } | S )zX
    Trims trailing zeros after a decimal point,
    leaving just one if necessary.
    Ú0r¾   )ÚrstripÚendswith)rW  rg   rg   rh   r¬    s   

r¬  Ú
str_floatsúArrayLike | list[str]c                   sl   | }t  dˆ › d�¡‰d‡fdd„‰d‡fd	d
„}||ƒr*‡fdd„|D ƒ}||ƒs‡ ‡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]*$r_   r[   c                   s   t  ˆ | ¡d uS rÍ   )rP  Úmatchr;  )Únumber_regexrg   rh   Úis_number_with_decimal  s   z1_trim_zeros_float.<locals>.is_number_with_decimalr“  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 rg   rg   r  ©r_  rg   rh   r  #  s    z:_trim_zeros_float.<locals>.should_trim.<locals>.<listcomp>r   c                 s  s   � | ]}|  d ¡V  qdS )rX  N©rZ  r  rg   rg   rh   r  $  rD  z9_trim_zeros_float.<locals>.should_trim.<locals>.<genexpr>)rl   rê   )r“  Únumbersr`  rg   rh   Úshould_trim  s   z&_trim_zeros_float.<locals>.should_trimc                   s$   g | ]}ˆ |ƒr|d d… n|‘qS )Nr'  rg   r  r`  rg   rh   r  '  s   $ z%_trim_zeros_float.<locals>.<listcomp>c                   s*   g | ]}ˆ|ƒr|  ˆ ¡r|d  n|‘qS )rX  ra  r  )rÊ   r_  rg   rh   r  *  s    ÿÿNrS  )r“  r\  r_   r[   )rP  Úcompile)r[  rÊ   rS  rc  r¤   rg   )rÊ   r_  r^  rh   rî    s   ÿþrî  rR   r+   c                 C  s    t | tƒrtj| jŽ S | jd uS rÍ   )r{   r,   ÚcomÚany_not_nonerR  rT   )rR   rg   rg   rh   r—   1  s   

r—   c                   @  s’   e Zd ZdZi dd“dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“Z	%d3d4d,d-„Zd5d1d2„Zd$S )6ÚEngFormatterzl
    Formats float values according to engineering format.

    Based on matplotlib.ticker.EngFormatter
    ièÿÿÿr6  iëÿÿÿÚziîÿÿÿÚaiñÿÿÿr’  iôÿÿÿÚpi÷ÿÿÿrT  iúÿÿÿÚuéýÿÿÿr˜  r   rt   r‘   rE  rö  r—  é	   ÚGr›  ÚTé   ÚPé   ÚEé   ÚZé   ÚYNFÚaccuracyr^   Úuse_eng_prefixr[   r_   r`   c                 C  s   || _ || _d S rÍ   ©rx  ry  )rf   rx  ry  rg   rg   rh   ri   T  s   
zEngFormatter.__init__ÚnumÚfloatr\   c           
      C  s  t t|ƒƒ}t  |¡rdS t  |¡rdS d}|dk rd}| }|dkr3t tt | ¡ d ¡d ƒƒ}nt dƒ}| t	| j
 ¡ ƒ¡}| 	t| j
 ¡ ƒ¡}t|ƒ}| jrX| j
| }n|dk rdd| d›�}nd	|d›�}|| d
|  }| jdu rzd}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
        rO   Úinfrj   r   r'  r‘   zE-Ú02dzE+r÷  Nz{mant: g}{prefix}z{mant: .r«  z
f}{prefix})ÚmantÚprefix)r	   r\   Úis_nanÚis_infiniterm   Úmathr+  r,  rn   r&  ÚENG_PREFIXESrû   ry  rx  r»  )
rf   r{  ÚdnumÚsignÚpow10Ú	int_pow10r€  r  Ú
format_strr×  rg   rg   rh   Ú__call__Z  s4   

 
zEngFormatter.__call__rÀ  )rx  r^   ry  r[   r_   r`   )r{  r|  r_   r\   )r–   r©   rª   r«   r„  ri   rŠ  rg   rg   rg   rh   rg  8  sP    ÿþýüûúùø	÷
öõôóòñðïÿrg  r‘   rx  ry  r`   c                 C  s   t dt| |ƒƒ dS )a  
    Format float representation in DataFrame with SI notation.

    Parameters
    ----------
    accuracy : int, default 3
        Number of decimal digits after the floating point.
    use_eng_prefix : bool, default False
        Whether to represent a value with SI prefixes.

    Returns
    -------
    None

    Examples
    --------
    >>> df = pd.DataFrame([1e-9, 1e-3, 1, 1e3, 1e6])
    >>> df
                  0
    0  1.000000e-09
    1  1.000000e-03
    2  1.000000e+00
    3  1.000000e+03
    4  1.000000e+06

    >>> pd.set_eng_float_format(accuracy=1)
    >>> df
             0
    0  1.0E-09
    1  1.0E-03
    2  1.0E+00
    3  1.0E+03
    4  1.0E+06

    >>> pd.set_eng_float_format(use_eng_prefix=True)
    >>> df
            0
    0  1.000n
    1  1.000m
    2   1.000
    3  1.000k
    4  1.000M

    >>> pd.set_eng_float_format(accuracy=1, use_eng_prefix=True)
    >>> df
          0
    0  1.0n
    1  1.0m
    2   1.0
    3  1.0k
    4  1.0M

    >>> pd.set_option("display.float_format", None)  # unset option
    ra   N)r   rg  rz  rg   rg   rh   Úset_eng_float_format˜  s   7r‹  rt   rA  r   Úsentinelúbool | object | strúlist[dict[int, int]]c           	      C  s’   t | ƒdkrg S dgt | d ƒ }g }| D ]1}d}i }t|ƒD ]\}}|| r,||kr,q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)rl   r   r$  )	rA  rŒ  Úcontrolr¤   r4  Ú
last_indexÚlengthsr'  Úkeyrg   rg   rh   Úget_level_lengthsÒ  s    r“  úWriteBuffer[str]Úlinesc                 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{   r\   r  rg   rg   rh   r    rD  z#buffer_put_lines.<locals>.<genexpr>c                 S  r<  rg   rI  r  rg   rg   rh   r  	  r=  z$buffer_put_lines.<locals>.<listcomp>rx   N)r@  r‹  r�   )rb   r•  rg   rg   rh   Úbuffer_put_linesý  s   r–  )r_   r¬   r   )rf  r\   rb   rV  rW  r]   r_   r]   rÍ   )rb   rV  rW  r]   r_   r�  )	NrO   NNrE   r¾   TNN)r“  r5   r/  r1  rU   rÇ   rS   r\   r”  r^   r-  r•  rG   r\   rÊ   r\   rˆ   rÈ   rw  r^   r–  r1  r_   r‡   )r  r  r_   r‡   )rÓ  r  r_   rm   r;  )r  r.  r  r\   r_   r\   r  )r  r.  r  r\   r{  r]   r_   r\   )r3  r[   r  r\   r{  r]   r_   r   )r   F)r“  r(   r  r<  r9  r[   r_   r   )rE   NN)
r  r‡   rG   r\   r  r^   rd   rB  r_   r‡   )r¾   )rG  r5   rÊ   r\   r_   r‡   )rW  r\   r_   r\   )r[  r\  rÊ   r\   r_   r‡   )rR   r+   r_   r[   )r‘   F)rx  rm   ry  r[   r_   r`   )rt   )rA  r   rŒ  r�  r_   rŽ  )rb   r”  r•  r‡   r_   r`   )ˆr«   Ú
__future__r   Úcollections.abcr   r   r   r   Ú
contextlibr   Úcsvr   rÊ   r	   Ú	functoolsr
   Úior   rƒ  rP  Úshutilr   Útypingr   r   r   r   r   Únumpyr  Úpandas._config.configr   r   Úpandas._libsr   Úpandas._libs.missingr   Úpandas._libs.tslibsr   r   r   Úpandas._libs.tslibs.nattyper   Úpandas.core.dtypes.commonr   r   r   r   r   r   Úpandas.core.dtypes.dtypesr    r!   r"   Úpandas.core.dtypes.missingr#   r$   Úpandas.core.arraysr%   r&   r'   r(   Úpandas.core.arrays.string_r)   Úpandas.core.baser*   Úpandas.core.commonÚcoreÚcommonre  Úpandas.core.indexes.apir+   r,   r-   r.   Úpandas.core.indexes.datetimesr/   Úpandas.core.indexes.timedeltasr0   Úpandas.core.reshape.concatr1   Úpandas.io.commonr2   r3   r¶   r4   Úpandas._typingr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   ÚpandasrA   rB   rC   r  ÚVALID_JUSTIFY_PARAMETERSrM   rN   r¹   r¼   r½   rU  rc  rŠ  r‰   r¤  r¢  r£  rž  r¡  r&  r  r/  r2  r6  rŸ  r   r:  r"  rí  r¬  rî  r—   rg  r‹  r“  r–  rg   rg   rg   rh   Ú<module>   sÀ     88	 
#
!   H  ýÿ(õUn J
!
?
ýÿý$ü"
!ÿ
$`;ÿ+