Ë
    u™ãjé ã                  óÜ  — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ 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 dd	l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,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@ ddlAmBZBmCZC ddlDmEZEmFZFmGZGmHZH ddlImJZJ dd	lKmLc mMZN ddlOmPZPmQZQmRZRmSZS ddlTmUZU ddlVmWZW ddlXmYZYmZZZ ddl[m\Z\ er$ddl]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZi dd ljmkZkmlZl d!Zm G d"„ d#«      ZndLd$„ZodLd%„Zp G d&„ d'«      Zq G d(„ d)«      Zr	 	 dM	 	 	 	 	 	 	 dNd*„Zse
	 dO	 	 	 	 	 dPd+„«       ZtdQd,„Zu	 	 	 	 	 	 	 	 	 dR	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd-„Zv G d.„ d/«      Zw G d0„ d1ew«      Zx G d2„ d3ew«      Zy G d4„ d5ew«      Zz G d6„ d7ew«      Z{	 	 	 	 dTd8„Z|dUd9„Z}dVdWd:„Z~	 	 dX	 	 	 	 	 	 	 dYd;„Z	 dX	 	 	 	 	 	 	 dZd<„Z€ G d=„ d>ew«      Z�	 	 d[	 	 	 	 	 	 	 d\d?„Z‚	 	 	 d]	 	 	 	 	 	 	 	 	 d^d@„Zƒd_d`dA„Z„dadB„Z… e�j                  dC«      Z‡	 d_	 	 	 	 	 dbdD„ZˆdcdE„Z‰ G dF„ dG«      ZŠ e3dH«      dddedI„«       Z‹	 df	 	 	 	 	 dgdJ„ZŒdhdK„Z�y	)iz€
Internal module for formatting output data in csv, html, xml,
and latex files. This module also applies to display formatting.
é    )Úannotations)ÚCallableÚ	GeneratorÚHashableÚMappingÚSequence)Úcontextmanager)Ú
QUOTE_NONE)ÚDecimal)Úpartial)ÚStringION)Úget_terminal_size)ÚTYPE_CHECKINGÚAnyÚcast)Ú_global_configÚ
set_option)Úlib)ÚNA)ÚNaTÚ	TimedeltaÚ	TimestampÚiNaT)ÚNpyDatetimeUnitÚperiods_per_second)ÚNaTType)ÚPandas4Warning)Ú
set_module)Úfind_stack_level)Úis_complex_dtypeÚis_floatÚ
is_integerÚis_list_likeÚis_numeric_dtypeÚ	is_scalar)ÚCategoricalDtypeÚDatetimeTZDtypeÚExtensionDtype)ÚisnaÚnotna)ÚCategoricalÚDatetimeArrayÚExtensionArrayÚTimedeltaArray)ÚPandasObject)ÚIndexÚ
MultiIndexÚPeriodIndexÚensure_index)ÚDatetimeIndex)ÚTimedeltaIndex)Úcheck_parent_directoryÚstringify_path)Úprinting)Ú	ArrayLikeÚAxesÚColspaceArgTypeÚColspaceTypeÚCompressionOptionsÚFilePathÚFloatFormatTypeÚFormattersTypeÚ
IndexLabelÚSequenceNotStrÚStorageOptionsÚWriteBuffer)Ú	DataFrameÚSeries)ÚleftÚrightÚcenterÚjustifyzjustify-allÚstartÚendÚinheritzmatch-parentÚinitialÚunsetc            
      óx   — e Zd ZdZddddddddddœ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd	„Zdd
„Zdd„Zy)Ú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_rowsc       	        ó  — || _         t        «       | _        || _        || _        || _        || _        || _        |	| _        |
| _	        |€t        d   d   }|| _        || _        t        j                  «       | _        | j!                  «        y )NÚdisplayrX   )Úseriesr   ÚbufrW   rV   rT   rS   rU   rZ   r[   ÚconfigrX   rY   r8   Úget_adjustmentÚadjÚ_chk_truncate)Úselfr^   rS   rT   rU   rV   rW   rX   rY   rZ   r[   s              úc/var/www/html/python-recuperauto-other/env/lib/python3.12/site-packages/pandas/io/formats/format.pyÚ__init__zSeriesFormatter.__init__Š   s…   € ð ˆŒÜ“:ˆŒØˆŒ	ØˆŒØˆŒØˆŒØˆŒ
Ø ˆŒØ ˆŒàÐÜ! )Ñ,¨^Ñ<ˆLØ(ˆÔØˆŒ
Ü×*Ñ*Ó,ˆŒà×ÑÕó    c                óè  — |  | j                   }| j                  }|xr t        | j                  «      |kD  }| j                  }|r™t	        d|«      }|rt        ||«      }|dk(  r|}|j                  d | }n`|dz  }t        |«      }t        j                  t        j                  |«      t        j                  ||z
  |«      g«      }|j                  |   }|| _
        nd | _
        || _        || _        y )NÚinté   é   )r[   rZ   Úlenr^   r   ÚminÚilocÚnpÚhstackÚarangeÚ
tr_row_numÚ	tr_seriesÚis_truncated_vertically)rd   r[   rZ   rt   r^   Úrow_numÚ_lenÚ_slices           re   rc   zSeriesFormatter._chk_truncateª   sä   € Ùà—=‘=ˆØ—=‘=ˆð #+Ò"L´°D·K±KÓ0@À8Ñ0KÐØ—‘ˆÙ"Ü˜E 8Ó,ˆHÙô ˜x¨Ó2�Ø˜1Š}Ø"�ØŸ™ Y hÐ/‘à" a™-�Ü˜6“{�ÜŸ™Ü—Y‘Y˜wÓ'¬¯©°4¸'±>À4Ó)HÐIó�ð  Ÿ™ VÑ,�Ø%ˆD�Oà"ˆDŒOØˆŒØ'>ˆÕ$rg   c                ó2  — | j                   j                  }d}| j                   j                  }t        |t        t
        t        f«      r|j                  �|d|j                  › �z  }| j                  dur|�|r|dz  }|dt        |«      › �z  }| j                  du s| j                  dk(  r.| j                  r"|r|dz  }|dt        | j                   «      › �z  }| j                  durQ| j                  �Et        | j                  j                  d	d «      }|r"|r|dz  }|d
t!        j"                  |«      › �z  }t        | j                  j                  t$        «      r0| j                  j&                  j)                  «       }|r|dz  }||z  }t+        |«      S )NÚ zFreq: Fz, zName: TÚtruncatezLength: rW   zdtype: ú
)r^   rW   rU   Ú
isinstancer4   r2   r5   ÚfreqÚfreqstrÚformat_namerS   rt   rl   rY   Úgetattrrs   r8   Úpprint_thingr&   Ú_valuesÚ_get_repr_footerÚstr)rd   rW   ÚfooterrU   Ú
dtype_nameÚ
level_infos         re   Ú_get_footerzSeriesFormatter._get_footerÉ   sx  € Ø�{‰{×ÑˆØˆà—‘×!Ñ!ˆä�uœ}¬k¼>ÐJÔKØ—
‘
Ð&à˜˜uŸ}™}˜oÐ.Ñ.ˆFà�9‰9˜EÑ! dÐ&6ÙØ˜$‘�à˜œ{¨4Ó0Ð1Ð2Ñ2ˆFà�;‰;˜$ÑØ�K‰K˜:Ò%¨$×*FÒ*FáØ˜$‘�Ø˜¤ T§[¡[Ó!1Ð 2Ð3Ñ3ˆFà�:‰:˜UÑ" t§z¡zÐ'=Ü  §¡×!5Ñ!5°v¸tÓDˆJÙÙØ˜d‘N�FØ˜G¤H×$9Ñ$9¸*Ó$EÐ#FÐGÑG�ô �d—n‘n×*Ñ*Ô,<Ô=ØŸ™×/Ñ/×@Ñ@ÓBˆJÙØ˜$‘�Ø�jÑ ˆFä�6‹{Ðrg   c                ó†   — t        | j                  j                  d | j                  | j                  | j
                  ¬«      S )N)rX   rV   Úleading_space)Úformat_arrayrs   r‚   rX   rV   rU   ©rd   s    re   Ú_get_formatted_valuesz%SeriesFormatter._get_formatted_valuesò   s6   € ÜØ�N‰N×"Ñ"ØØ×*Ñ*Ø—;‘;ØŸ*™*ô
ð 	
rg   c                ó  — | j                   }| j                  «       }t        |«      dk(  r%t        | j                  «      j
                  › d|› d�S |j                  }t        |«      }t        |t        «      rJ|j                  dd ¬«      }t        j                  «       } |j                  dg|¢­Ž j                  d«      }n|j                  d¬«      }| j!                  «       }| j"                  r‘d}| j$                  }	t'        d	|	«      }	| j(                  j                  ||	d
z
     «      }
|
dkD  rd}nd}| j(                  j+                  |g|
d¬«      d   }|j-                  |	|z   |«       |j-                  |	d
z   d«       | j                  r# | j(                  j                  dg|d
d  |g¢­Ž }n| j(                  j                  d|«      }| j.                  r|r|d   dz   |z   }|r|d|z   z  }t1        dj3                  |«      «      S )Nr   z([], ú)T)Úinclude_namesÚsparsifyrk   r{   ©Úinclude_nameri   rj   é   ú...z..rI   ©Úmodery   )rs   rˆ   rl   Útyper^   Ú__name__rU   Ú
_has_namesr|   r1   Ú_format_multir8   ra   ÚadjoinÚsplitÚ_format_flatr�   rt   rr   r   rb   rJ   ÚinsertrT   r„   Újoin)rd   r^   r…   rU   Úhave_headerÚ	fmt_indexrb   Ú
fmt_valuesÚn_header_rowsru   ÚwidthÚdot_strÚresults                re   Ú	to_stringzSeriesFormatter.to_stringû   sä  € Ø—‘ˆØ×!Ñ!Ó#ˆäˆv‹;˜!ÒÜ˜4Ÿ;™;Ó'×0Ñ0Ð1°°v°h¸aÐ@Ð@à—‘ˆÜ  Ó'ˆÜ�eœZÔ(Ø×+Ñ+¸$ÈÐ+ÓNˆIÜ×)Ñ)Ó+ˆCØ"˜Ÿ
™
 1Ð1 yÒ1×7Ñ7¸Ó=‰Ià×*Ñ*¸Ð*Ó=ˆIØ×/Ñ/Ó1ˆ
à×'Ò'ØˆMØ—o‘oˆGÜ˜5 'Ó*ˆGØ—H‘H—L‘L ¨G°a©KÑ!8Ó9ˆEØ�qŠyØ‘à�ð —h‘h×&Ñ&¨ y°%¸hÐ&ÓGÈÑJˆGØ×Ñ˜g¨Ñ5°wÔ?Ø×Ñ˜W q™[¨"Ô-à�:Š:Ø$�T—X‘X—_‘_ QÐE¨)°A°B¨-¸Ð)DÒE‰Fà—X‘X—_‘_ Q¨
Ó3ˆFà�;Š;™;Ø˜q‘\ DÑ(¨6Ñ1ˆFáØ�d˜V‘mÑ#ˆFä�2—7‘7˜6“?Ó#Ð#rg   )r^   rF   rS   ú
bool | strrT   ÚboolrU   rª   rV   r„   rW   rª   rX   ú
str | NonerY   rª   rZ   ú
int | Noner[   r¬   ÚreturnÚNone©r­   r®   ©r­   r„   ©r­   ú	list[str])	r™   Ú
__module__Ú__qualname__Ú__doc__rf   rc   rˆ   r�   r¨   © rg   re   rQ   rQ   „   s«   „ ñð "ØØØØØ#'ØØ#Ø#ñàðð ð	ð
 ðð ðð ðð ðð !ðð ðð ðð ðð 
óó@?ó>'óR
ô+$rg   rQ   c                 óÈ   — ddl m}  t        d   d   r| j                  «       \  }}nd}t        d   d   t        d   d   t        d   d   t        d   d	   t        d   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.

    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   )Úconsoler]   Úexpand_frame_reprNrZ   r[   Úmax_columnsÚmax_colwidthÚshow_dimensions)rZ   r[   Úmax_colsr»   r¼   Ú
line_width)Úpandas.io.formatsr¸   r`   Úget_console_size)r¸   r¾   Ú_s      re   Úget_dataframe_repr_paramsrÂ   )  s{   € õ *äˆiÑÐ,Ò-Ø×0Ñ0Ó2‰ˆ
‘Aàˆ
ä˜9Ñ% jÑ1Ü˜9Ñ% jÑ1Ü˜9Ñ% mÑ4Ü˜yÑ)¨.Ñ9Ü! )Ñ,Ð->Ñ?Ø ñð rg   c                 ó�   — t        «       \  } }t        d   d   }|dk(  r|n|}|dk(  r|nt        d   d   }dd||t        d   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.

    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]   rZ   r   r[   Tr¼   )rW   rY   r[   rZ   rS   )r   r`   )r¥   ÚheightÚmax_rows_optrZ   r[   s        re   Úget_series_repr_paramsrÆ   H  sk   € ô &Ó'�M€Eˆ6Ü˜)Ñ$ ZÑ0€LØ%¨Ò*‰v°€HØ%¨Ò*‰v´°yÑ0AÀ*Ñ0M€Hð ØØØÜ˜Ñ#Ð$5Ñ6ñð rg   c                  ó  — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d&d„Zd'd„Zed(d„«       Zed(d„«       Zed(d„«       Z	ed(d„«       Z
ed)d	„«       Zed(d
„«       Zed(d„«       Zed(d„«       Zed(d„«       Zed*d„«       Zd+d„Z	 	 	 	 d,d„Zd-d„Zd.d„Zd/d„Zd0d„Zd0d„Zd1d„Zd(d„Zd(d„Zd(d„Zd*d„Zd2d„Zd2d„Zd2d„Zd'd„Z d3d„Z!d4d „Z"d5d!„Z#d6d"„Z$d7d#„Z%	 	 	 	 d8d$„Z&y)9ÚDataFrameFormattera  
    Class for processing dataframe formatting options and data.

    Used by DataFrame.to_string, which backs DataFrame.__repr__.

    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 : int, list or dict of int, optional
        The minimum width of each column. If a list of ints is given
        every integers corresponds with one column. If a dict is given,
        the key references the column, while the value defines the space
        to use.
    header : bool or list of str, optional
        Write out the column names. If a list of columns is given,
        it is assumed to be aliases for the column names.
    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.

    Returns
    -------
    str or None
        If buf is None, returns the result as a string. Otherwise returns
        None.
    Nc                ó|  — || _         | j                  |«      | _        | j                  |«      | _        || _        || _        || _        | j                  |«      | _	        | j                  |«      | _        | j                  |	«      | _        | j                  |
«      | _        || _        || _        || _        || _        || _        || _        || _        || _        | j1                  «       | _        | j5                  «       | _        | j                   | _        | j;                  «        t=        j>                  «       | _         y ©N)!ÚframeÚ_initialize_columnsÚcolumnsÚ_initialize_colspaceÚ	col_spacerT   rU   rV   Ú_initialize_formattersÚ
formattersÚ_initialize_justifyrJ   Ú_validate_float_formatrX   Ú_initialize_sparsifyr‘   Úshow_index_namesÚdecimalÚ	bold_rowsÚescaperZ   r[   r½   r¼   Ú_calc_max_cols_fittedÚmax_cols_fittedÚ_calc_max_rows_fittedÚmax_rows_fittedÚtr_framerz   r8   ra   rb   )rd   rË   rÍ   rÏ   rT   rU   rV   rÑ   rJ   rX   r‘   Úindex_namesrZ   r[   r½   r¼   rÖ   r×   rØ   s                      re   rf   zDataFrameFormatter.__init__¬  s  € ð* ˆŒ
Ø×/Ñ/°Ó8ˆŒØ×2Ñ2°9Ó=ˆŒØˆŒØˆŒ
ØˆŒØ×5Ñ5°jÓAˆŒØ×/Ñ/°Ó8ˆŒØ ×7Ñ7¸ÓEˆÔØ×1Ñ1°(Ó;ˆŒØ +ˆÔØˆŒØ"ˆŒØˆŒØ ˆŒØ ˆŒØ ˆŒØ.ˆÔà#×9Ñ9Ó;ˆÔØ#×9Ñ9Ó;ˆÔàŸ
™
ˆŒØ�‰ŒÜ×*Ñ*Ó,ˆ�rg   c                ó˜   — | j                  «       }| j                  r-| j                  | j                  «      }|j	                  d|«       |S )zP
        Render a DataFrame to a list of columns (as lists of strings).
        r   )Ú_get_strcols_without_indexrU   Ú_get_formatted_indexrÝ   rŸ   )rd   ÚstrcolsÚ	str_indexs      re   Úget_strcolszDataFrameFormatter.get_strcolsÛ  s@   € ð ×1Ñ1Ó3ˆà�:Š:Ø×1Ñ1°$·-±-Ó@ˆIØ�N‰N˜1˜iÔ(àˆrg   c                ó\   — | j                   du xs | j                   dk(  xr | j                  S )NTrz   )r¼   Úis_truncatedrŒ   s    re   Úshould_show_dimensionsz)DataFrameFormatter.should_show_dimensionsç  s3   € à×#Ñ# tÐ+ò 
Ø× Ñ  JÑ.ÒD°4×3DÑ3Dð	
rg   c                óH   — t        | j                  xs | j                  «      S rÊ   )rª   Úis_truncated_horizontallyrt   rŒ   s    re   ræ   zDataFrameFormatter.is_truncatedí  s   € ä�D×2Ñ2ÒR°d×6RÑ6RÓSÐSrg   c                ót   — t        | j                  xr" t        | j                  «      | j                  kD  «      S rÊ   )rª   rÚ   rl   rÍ   rŒ   s    re   ré   z,DataFrameFormatter.is_truncated_horizontallyñ  s,   € ä�D×(Ñ(ÒW¬c°$·,±,Ó.?À$×BVÑBVÑ.VÓXÐXrg   c                ót   — t        | j                  xr" t        | j                  «      | j                  kD  «      S rÊ   )rª   rÜ   rl   rË   rŒ   s    re   rt   z*DataFrameFormatter.is_truncated_verticallyõ  s+   € ä�D×(Ñ(ÒU¬c°$·*±*«oÀ×@TÑ@TÑ.TÓVÐVrg   c                ót   — dt        | j                  «      › dt        | j                  j                  «      › d�S )Nz

[z rows x z	 columns])rl   rË   rÍ   rŒ   s    re   Údimensions_infoz"DataFrameFormatter.dimensions_infoù  s0   € à”s˜4Ÿ:™:“Ð' x´°D·J±J×4FÑ4FÓ0GÐ/HÈ	ÐRÐRrg   c                ó@   — t        | j                  j                  «      S rÊ   )rš   rË   rU   rŒ   s    re   Úhas_index_namesz"DataFrameFormatter.has_index_namesý  s   € ä˜$Ÿ*™*×*Ñ*Ó+Ð+rg   c                ó@   — t        | j                  j                  «      S rÊ   )rš   rË   rÍ   rŒ   s    re   Úhas_column_namesz#DataFrameFormatter.has_column_names  s   € ä˜$Ÿ*™*×,Ñ,Ó-Ð-rg   c                óZ   — t        | j                  | j                  | j                  f«      S rÊ   )Úallrï   rU   rÕ   rŒ   s    re   Úshow_row_idx_namesz%DataFrameFormatter.show_row_idx_names  s$   € ä�D×(Ñ(¨$¯*©*°d×6KÑ6KÐLÓMÐMrg   c                óZ   — t        | j                  | j                  | j                  f«      S rÊ   )ró   rñ   rÕ   rT   rŒ   s    re   Úshow_col_idx_namesz%DataFrameFormatter.show_col_idx_names	  s$   € ä�D×)Ñ)¨4×+@Ñ+@À$Ç+Á+ÐNÓOÐOrg   c                ó‚   — t        | j                  xs t        | j                  «      t        | j                  «      «      S rÊ   )rm   rZ   rl   rË   rŒ   s    re   Úmax_rows_displayedz%DataFrameFormatter.max_rows_displayed  s(   € ä�4—=‘=Ò3¤C¨¯
©
£O´S¸¿¹³_ÓEÐErg   c                ó"   — |€t         d   d   S |S )Nr]   Úmulti_sparse©r`   )rd   r‘   s     re   rÔ   z'DataFrameFormatter._initialize_sparsify  s   € ØÐÜ˜)Ñ$ ^Ñ4Ð4Øˆrg   c                óô   — |€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)rd   rÑ   s     re   rÐ   z)DataFrameFormatter._initialize_formatters  su   € ð ÐØˆIÜ�—‘×#Ñ#Ó$¬¨J«Ò7¼:ÀjÔRVÔ;WØÐäØ$¤S¨£_Ð$5ð 6/Ü/2°4·:±:×3EÑ3EÓ/FÐ.GÀqðJóð rg   c                ó"   — |€t         d   d   S |S )Nr]   Úcolheader_justifyrû   )rd   rJ   s     re   rÒ   z&DataFrameFormatter._initialize_justify#  s   € Øˆ?Ü˜)Ñ$Ð%8Ñ9Ð9àˆNrg   c                ót   — |�!t        |«      }| j                  |   | _        |S | j                  j                  S rÊ   )r3   rË   rÍ   )rd   rÍ   Úcolss      re   rÌ   z&DataFrameFormatter._initialize_columns)  s7   € ØÐÜ Ó(ˆDØŸ™ DÑ)ˆDŒJØˆKà—:‘:×%Ñ%Ð%rg   c                ó‚  — |€i }|S t        |t        t        f«      r?d|i}|j                  t        j                  | j                  j                  |«      «       |S t        |t        «      rE|j                  «       D ].  }|| j                  j                  vsŒ|dk7  sŒ"t        d|› �«      ‚ |}|S t        | j                  j                  «      t        |«      k7  r8t        dt        |«      › dt        | j                  j                  «      › d�«      ‚t	        t        | j                  j                  |d¬«      «      }|S )Nry   z,Col_space is defined for an unknown column: zCol_space length(rý   r�   T©Ústrict)r|   ri   r„   Úupdaterþ   ÚfromkeysrË   rÍ   r   Úkeysrÿ   rl   Úzip)rd   rÏ   r§   Úcolumns       re   rÎ   z'DataFrameFormatter._initialize_colspace1  s2  € ð ÐØˆFð$ ˆô# ˜	¤C¬ :Ô.Ø˜)�_ˆFØ�M‰Mœ$Ÿ-™-¨¯
©
×(:Ñ(:¸IÓFÔGð ˆô ˜	¤7Ô+Ø#Ÿ.™.Ó*ò �Ø §¡×!3Ñ!3Ò3¸À"»Ü$ØFÀvÀhÐOóð ðð
 ˆFð ˆô �4—:‘:×%Ñ%Ó&¬#¨i«.Ò8Ü Ø'¬¨I«Ð'7ð 83Ü36°t·z±z×7IÑ7IÓ3JÐ2KÈ1ðNóð ô œ#˜dŸj™j×0Ñ0°)ÀDÔIÓJˆFØˆrg   c                ó’   — | j                  «       s| j                  S t        «       \  }}| j                  |«      r|S | j                  S )z%Number of columns fitting the screen.)Ú_is_in_terminalr½   r   Ú_is_screen_narrow)rd   r¥   rÁ   s      re   rÙ   z(DataFrameFormatter._calc_max_cols_fittedI  sA   € à×#Ñ#Ô%Ø—=‘=Ð ä$Ó&‰ˆˆqØ×!Ñ! %Ô(ØˆLà—=‘=Ð rg   c                óü   — | j                  «       rPt        «       \  }}| j                  dk(  r|| j                  «       z
  S | j	                  |«      r|}n| j                  }n| j                  }| j                  |«      S )z,Number of rows with data fitting the screen.r   )r  r   rZ   Ú_get_number_of_auxiliary_rowsÚ_is_screen_shortÚ_adjust_max_rows)rd   rÁ   rÄ   rZ   s       re   rÛ   z(DataFrameFormatter._calc_max_rows_fittedT  sr   € ð ×ÑÔ!Ü)Ó+‰IˆAˆvØ�}‰} Ò!à × BÑ BÓ DÑDÐDà×$Ñ$ VÔ,Ø!‘àŸ=™=‘à—}‘}ˆHà×$Ñ$ XÓ.Ð.rg   c                ó~   — |r:t        | j                  «      |kD  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Ë   r[   rm   )rd   rZ   s     re   r  z#DataFrameFormatter._adjust_max_rowsg  s2   € ñ Ü�D—J‘J“ (Ò*°·²ä˜tŸ}™}¨hÓ7�Øˆrg   c                óT   — t        | j                  dk(  xs | j                  dk(  «      S )z/Check if the output is to be shown in terminal.r   )rª   r½   rZ   rŒ   s    re   r  z"DataFrameFormatter._is_in_terminalu  s$   € ä�D—M‘M QÑ&Ò<¨$¯-©-¸1Ñ*<Ó=Ð=rg   c                óz   — t        | j                  dk(  xr" t        | j                  j                  «      |kD  «      S ©Nr   )rª   r½   rl   rË   rÍ   )rd   Ú	max_widths     re   r  z$DataFrameFormatter._is_screen_narrowy  s/   € Ü�D—M‘M QÑ&ÒN¬3¨t¯z©z×/AÑ/AÓ+BÀYÑ+NÓOÐOrg   c                óf   — t        | j                  dk(  xr t        | j                  «      |kD  «      S r  )rª   rZ   rl   rË   )rd   Ú
max_heights     re   r  z#DataFrameFormatter._is_screen_short|  s(   € Ü�D—M‘M QÑ&ÒG¬3¨t¯z©z«?¸ZÑ+GÓHÐHrg   c                óž   — d}d}||z   }| j                   r&|t        | j                  j                  «       «      z  }| j                  r|dz  }|S )z?Get number of rows occupied by prompt, dots and dimension info.rj   )r¼   rl   rí   Ú
splitlinesrT   )rd   Údot_rowÚ
prompt_rowÚnum_rowss       re   r  z0DataFrameFormatter._get_number_of_auxiliary_rows  sR   € àˆØˆ
Ø˜ZÑ'ˆà×ÒØœ˜D×0Ñ0×;Ñ;Ó=Ó>Ñ>ˆHà�;Š;Ø˜‰MˆHàˆrg   c                óv   — | j                   r| j                  «        | j                  r| j                  «        yy)zY
        Check whether the frame should be truncated. If so, slice the frame up.
        N)ré   Ú_truncate_horizontallyrt   Ú_truncate_verticallyrŒ   s    re   rz   zDataFrameFormatter.truncate�  s3   € ð ×)Ò)Ø×'Ñ'Ô)à×'Ò'Ø×%Ñ%Õ'ð (rg   c                ój  — | j                   €J ‚| j                   dz  }|dk\  rÐt        | j                  j                  «      }t	        j
                  t	        j                  |«      t	        j                  ||z
  |«      g«      }| j                  j                  dd…|f   | _        t        | j                  t        t        f«      rhg | j                  d| ¢| j                  | d ¢| _	        || _        yt        d| j                  «      }| j                  j                  dd…d|…f   | _        || _        y)z´Remove columns, which are not to be displayed and adjust formatters.

        Attributes affected:
            - tr_frame
            - formatters
            - tr_col_num
        Nrk   rj   ri   )rÚ   rl   rÝ   rÍ   ro   rp   rq   rn   r|   rÑ   ÚlistÚtupler   r½   Ú
tr_col_num)rd   Úcol_numrv   rw   s       re   r   z)DataFrameFormatter._truncate_horizontally—  s  € ð ×#Ñ#Ð/Ð/Ð/Ø×&Ñ&¨!Ñ+ˆØ�aŠ<Ü�t—}‘}×,Ñ,Ó-ˆDÜ—Y‘Y¤§	¡	¨'Ó 2´B·I±I¸dÀW¹nÈdÓ4SÐTÓUˆFØ ŸM™M×.Ñ.ªq°&¨yÑ9ˆDŒMô ˜$Ÿ/™/¬D´%¨=Ô9ð#Ø—_‘_ X gÐ.ð#à—_‘_ g X YÐ/ð#�”ð  'ˆ�ô ˜5 $§-¡-Ó0ˆGØ ŸM™M×.Ñ.ªq°(°7°(¨{Ñ;ˆDŒMØ&ˆ�rg   c                óÂ  — | j                   €J ‚| j                   dz  }|dk\  r|t        | j                  «      }t        j                  t        j
                  |«      t        j
                  ||z
  |«      g«      }| j                  j                  |   | _        || _	        yt        d| j                  «      }| j                  j                  d|…dd…f   | _        || _	        y)z‚Remove rows, which are not to be displayed.

        Attributes affected:
            - tr_frame
            - tr_row_num
        Nrk   rj   ri   )
rÜ   rl   rÝ   ro   rp   rq   rn   r   rZ   rr   )rd   ru   rv   rw   s       re   r!  z'DataFrameFormatter._truncate_vertically±  s¼   € ð ×#Ñ#Ð/Ð/Ð/Ø×&Ñ&¨!Ñ+ˆØ�aŠ<Ü�t—}‘}Ó%ˆDÜ—Y‘Y¤§	¡	¨'Ó 2´B·I±I¸dÀW¹nÈdÓ4SÐTÓUˆFØ ŸM™M×.Ñ.¨vÑ6ˆDŒMð "ˆ�ô ˜5 $§-¡-Ó0ˆGØ ŸM™M×.Ñ.¨x°¨xº¨{Ñ;ˆDŒMØ!ˆ�rg   c                óø  ‡ — g }t        ‰ j                  «      s–‰ j                  sŠt        ‰ j                  «      D ]p  \  }}‰ j	                  |«      }t        |‰ j                  t        ‰ j                  j                  |d«      «      ‰ j                  ¬«      \  }}|j                  |«       Œr |S t        ‰ j                  «      r™t        d‰ j                  «      ‰ _        t        ‰ j                  «      t        ‰ j                  «      k7  r8t        dt        ‰ j                  «      › dt        ‰ j                  «      › d�«      ‚‰ j                  D �cg c]  }|g‘Œ }}n‰ j!                  ‰ j                  «      }‰ j"                  r|D ]  }|j                  d«       Œ t        ‰ j                  «      D ]Á  \  }}||   }	t%        t        ‰ j                  j                  |d«      «      gˆ fd„|	D «       ¢­Ž }
‰ j	                  |«      }t        |‰ j                  |
‰ j                  ¬	«      \  }}t%        ||
«      }‰ j                  j                  |	|‰ j                  ¬
«      }	|j                  |	|z   «       ŒÃ |S c c}w )Nr   )ÚstringsrJ   Úminimumrb   r²   zWriting z cols but got z aliasesry   c              3  óT   •K  — | ]  }‰j                   j                  |«      –— Œ! y ­wrÊ   )rb   rl   )Ú.0Úxrd   s     €re   ú	<genexpr>z@DataFrameFormatter._get_strcols_without_index.<locals>.<genexpr>å  s   øè ø€ Ò0RÀQ°·±·±¸a·Ñ0Rùs   ƒ%()r*  rb   r–   )r#   rT   Ú	enumeraterÝ   Ú
format_colÚ_make_fixed_widthrJ   ri   rÏ   Úgetrb   Úappendr   rl   rÍ   rÿ   Ú_get_formatted_column_labelsrô   Úmax)rd   râ   ÚiÚcr£   rÁ   ÚlabelÚstr_columnsr-  ÚcheaderÚheader_colwidthÚmax_lens   `           re   rà   z-DataFrameFormatter._get_strcols_without_indexÃ  s%  ø€ Ø#%ˆä˜DŸK™KÔ(°·²Ü! $§-¡-Ó0ò +‘��1Ø!Ÿ_™_¨QÓ/�
Ü 1Ø&Ø ŸL™LÜ §¡× 2Ñ 2°1°aÓ 8Ó9ØŸ™ô	!‘�
˜Að —‘˜zÕ*ð+ð ˆNä˜Ÿ™Ô$ä˜{¨D¯K©KÓ8ˆDŒKÜ�4—;‘;Ó¤3 t§|¡|Ó#4Ò4Ü Øœs 4§<¡<Ó0Ð1ð 2Ü" 4§;¡;Ó/Ð0°ð:óð ð 15·±Ö< u˜Eš7Ð<ˆKÑ<à×;Ñ;¸D¿M¹MÓJˆKà×"Ò"Ø ò �Ø—‘˜•ðô ˜dŸm™mÓ,ò 	1‰DˆAˆqØ! !‘nˆGÜ!Ü�D—N‘N×&Ñ& q¨!Ó,Ó-ðÛ0RÈ'Ô0RòˆOð Ÿ™¨Ó+ˆJÜ"3Ø˜DŸL™L°/ÀtÇxÁxô#ÑˆJ˜ô ˜' ?Ó3ˆGØ—h‘h×&Ñ& w°¸d¿l¹lÐ&ÓKˆGØ�N‰N˜7 ZÑ/Õ0ð	1ð ˆùò+ =s   Å
I7c           
     ó  — | j                   }| j                  |«      }t        |j                  |«      || j                  | j
                  | j                  j                  |j                  |   «      | j                  | j                  ¬«      S )N)rX   rV   ÚspacerÖ   rŠ   )rÝ   Ú_get_formatterr‹   Ú_get_column_arrayrX   rV   rÏ   r2  rÍ   rÖ   rU   )rd   r6  rË   Ú	formatters       re   r0  zDataFrameFormatter.format_colñ  sr   € Ø—‘ˆØ×'Ñ'¨Ó*ˆ	ÜØ×#Ñ# AÓ&ØØ×*Ñ*Ø—;‘;Ø—.‘.×$Ñ$ U§]¡]°1Ñ%5Ó6Ø—L‘LØŸ*™*ô
ð 	
rg   c                ó  — t        | j                  t        t        f«      r't	        |«      rt        d|«      }| j                  |   S y t	        |«      r| j                  j                  |   }| j                  j                  |d «      S )Nri   )	r|   rÑ   r#  r$  r"   r   rÝ   rÍ   r2  )rd   r6  s     re   r?  z!DataFrameFormatter._get_formatterþ  sj   € Ü�d—o‘o¬¬e }Ô5Ü˜!Œ}Ü˜ “N�Ø—‘ qÑ)Ð)àä˜!Œ}Ø—M‘M×)Ñ)¨!Ñ,�Ø—?‘?×&Ñ& q¨$Ó/Ð/rg   c                óø  — ddl m} |j                  }t        |t        «      rU|j                  dd¬«      }| j                  rt        |«      r ||«      }t        |ddiŽD �cg c]  }t        |«      ‘Œ }}|S |j                  d¬«      }t        t        || j                  j                  d¬«      «      D ���cg c],  \  }\  }}| j                  |«      st        |«      rd	|z   n|g‘Œ. }}}}|S c c}w c c}}}w )
Nr   )Úsparsify_labelsF)r‘   r�   r  Tr’   r  ú )Úpandas.core.indexes.multirD  rÍ   r|   r1   r›   r‘   rl   r
  r#  rž   r/  rË   Údtypesr?  r$   )	rd   rË   rD  rÍ   Úfmt_columnsr-  r9  r6  rY   s	            re   r4  z/DataFrameFormatter._get_formatted_column_labels
  s  € Ý=à—-‘-ˆä�gœzÔ*Ø!×/Ñ/¸ÈeÐ/ÓTˆKØ�}Š}¤ [Ô!1Ù-¨kÓ:�ä,/°Ð,JÀTÑ,JÖK qœ4 �7ÐKˆKÐKð Ðð "×.Ñ.¸EÐ.ÓBˆKô &/Ü˜ T§Z¡Z×%6Ñ%6¸uÔEó&÷	ð 	ñ "�A‘z˜˜5ð  ×.Ñ.¨qÔ1Ô6FÀuÔ6Mð ˜!’Gàòð	ˆKò 	ð Ðùò Lùô	s   Á"C0Â91C5c                ó*  — | j                   j                  «       D ��ci c]  \  }}|t        d|«      “Œ }}}|j                  }|j                  }| j                  d«      }t        |t        «      r)|j                  | j                  | j                  |¬«      }n|j                  | j                  |¬«      g}|D �	cg c]@  }	t        t        t        |	«      d|j                  dd«      | j                   ¬«      d   «      ‘ŒB }}	 | j                   j"                  d	g|¢­Ž j%                  d
«      }
| j&                  r'| j)                  «       D �	cg c]  }	t+        |	«      ‘Œ }}	ndg|j,                  z  }| j.                  r||
z   S |
S c c}}w c c}	w c c}	w )Nri   Ú	__index__)r‘   r�   rA  )r“   rA  rG   ry   r   )rJ   r*  rb   rj   r{   )rÏ   Úitemsr   rU   rÍ   r?  r|   r1   r›   r‘   rô   rž   r$  r1  r#  r2  rb   rœ   r�   rö   Ú_get_column_name_listr   ÚnlevelsrT   )rd   rË   ÚkÚvrÏ   rU   rÍ   Úfmtr¢   r-  ÚadjoinedÚ
col_headers               re   rá   z'DataFrameFormatter._get_formatted_index#  s†  € ð 48·>±>×3GÑ3GÓ3I×J©4¨1¨a�Qœ˜U A›Ñ&ÐJˆ	ÑJØ—‘ˆØ—-‘-ˆØ×!Ñ! +Ó.ˆä�eœZÔ(Ø×+Ñ+ØŸ™Ø"×5Ñ5Øð ,ó ‰Ið ×"Ñ"°×0GÑ0GÐSVÐ"ÓWðˆIð ö
ð ô Ü!Ü˜“G V°Y·]±]À2ÀqÓ5IÈtÏxÉxôàñõð
ˆ	ð 
ð #�4—8‘8—?‘? 1Ð1 yÒ1×7Ñ7¸Ó=ˆð ×"Ò"Ø26×2LÑ2LÓ2NÖO¨Qœ+ a�.ÐOˆJÑOà˜ §¡Ñ/ˆJà�;Š;Ø Ñ(Ð(àˆOùóI Kùò 
ùò Ps   žFÂ<AFÅFc                óÆ   — g }| j                   j                  }t        |t        «      r|j	                  |j
                  «       |S |j                  |j                  «       |S rÊ   )rË   rÍ   r|   r1   ÚextendÚnamesr3  rW   )rd   rU  rÍ   s      re   rL  z(DataFrameFormatter._get_column_name_listL  sN   € Ø "ˆØ—*‘*×$Ñ$ˆÜ�gœzÔ*Ø�L‰L˜Ÿ™Ô'ð ˆð �L‰L˜Ÿ™Ô&Øˆrg   c                óô   — |�t        |«      r|S t        |t        «      r$d|v r|S 	 |j                  d«      }|j                  S t	        d«      ‚# t        t
        t        f$ r}t	        d|›�«      |‚d}~ww xY w)z|
        Validates and processes the float_format argument.
        Converts new-style format strings to callables.
        Nú%g      ð?z Invalid new-style format string z)float_format must be a string or callable)Úcallabler|   r„   Úformatrÿ   ÚKeyErrorÚ
IndexError)rd   rP  rÁ   Úes       re   rÓ   z)DataFrameFormatter._validate_float_formatU  s†   € ð ˆ;œ( 3œ-ØˆJä�cœ3ÔØ�c‰zà�
ðXØŸ
™
 3›�AØŸ:™:Ð%ô ÐDÓEÐEøô #¤H¬jÐ9ò XÜ$Ð'GÈÀwÐ%OÓPÐVWÐWûðXús   §A ÁA7Á#A2Á2A7)NNTTrR   NNNNTNNNFú.FT)&rË   rE   rÍ   úAxes | NonerÏ   úColspaceArgType | NonerT   zbool | SequenceNotStr[str]rU   rª   rV   r„   rÑ   úFormattersType | NonerJ   r«   rX   úFloatFormatType | Noner‘   úbool | NonerÞ   rª   rZ   r¬   r[   r¬   r½   r¬   r¼   r©   rÖ   r„   r×   rª   rØ   rª   r­   r®   )r­   úlist[list[str]])r­   rª   r°   )r­   ri   )r‘   rb  r­   rª   )rÑ   r`  r­   r@   )rJ   r«   r­   r„   )rÍ   r^  r­   r0   )rÏ   r_  r­   r<   )r­   r¬   )rZ   r¬   r­   r¬   r¯   )r6  ri   r­   r²   )r6  ú	str | intr­   úCallable | None)rË   rE   r­   rc  )rË   rE   r­   r²   )r­   zlist[Hashable])rP  ra  r­   ra  )'r™   r³   r´   rµ   rf   rä   Úpropertyrç   ræ   ré   rt   rí   rï   rñ   rô   rö   rø   rÔ   rÐ   rÒ   rÌ   rÎ   rÙ   rÛ   r  r  r  r  r  rz   r   r!  rà   r0  r?  r4  rá   rL  rÓ   r¶   rg   re   rÈ   rÈ   e  sp  „ ñDðR  $Ø,0Ø-1ØØØ,0Ø"Ø/3Ø $Ø Ø#Ø#Ø#Ø&+ØØØð'--àð--ð ð--ð *ð	--ð
 +ð--ð ð--ð ð--ð *ð--ð ð--ð -ð--ð ð--ð ð--ð ð--ð ð--ð ð--ð  $ð!--ð" ð#--ð$ ð%--ð& ð'--ð( 
ó)--ó^
ð ò
ó ð
ð
 òTó ðTð òYó ðYð òWó ðWð òSó ðSð ò,ó ð,ð ò.ó ð.ð òNó ðNð òPó ðPð òFó ðFóð
Ø/ðà	óóó&óó0	!ó/ó&ó>óPóIóó(ó'ó4"ó$,ó\
ó
0óó2'óRðFØ)ðFà	ôFrg   rÈ   c                  óØ   — e Zd ZdZdd„Z	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„Z	 	 	 d
	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)ÚDataFrameRenderera?  Class for creating dataframe output in multiple formats.

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

    Called in pandas.DataFrame:
        - to_html
        - to_string

    Parameters
    ----------
    fmt : DataFrameFormatter
        Formatter with the formatting options.
    c                ó   — || _         y rÊ   )rP  )rd   rP  s     re   rf   zDataFrameRenderer.__init__~  s	   € Øˆ�rg   Nc                óˆ   — ddl m}m}	 |r|	n|}
 |
| j                  ||||¬«      }|j	                  «       }t        |||¬«      S )uC  
        Render a DataFrame to an 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 or bool
            When an integer value is provided, it sets the border attribute in
            the opening tag, specifying the thickness of the border.
            If ``False`` or ``0`` is passed, the border attribute will not
            be present in the ``<table>`` tag.
            The default value for this parameter is governed by
            ``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)ÚclassesÚborderÚtable_idÚrender_links©r_   Úencoding)Úpandas.io.formats.htmlrk  rl  rP  r¨   Úsave_to_buffer)rd   r_   rr  rm  Únotebookrn  ro  rp  rk  rl  ÚKlassÚhtml_formatterÚstrings                re   Úto_htmlzDataFrameRenderer.to_html�  sP   € ÷L	
ñ
 &.Ñ!°=ˆáØ�H‰HØØØØ%ô
ˆð  ×)Ñ)Ó+ˆÜ˜f¨#¸ÔAÐArg   c                ór   — ddl m}  || j                  |¬«      }|j                  «       }t	        |||¬«      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¾   rq  )Úpandas.io.formats.stringr{  rP  r¨   rt  )rd   r_   rr  r¾   r{  Ústring_formatterrx  s          re   r¨   zDataFrameRenderer.to_string¸  s5   € õ( 	=á*¨4¯8©8À
ÔKÐØ!×+Ñ+Ó-ˆÜ˜f¨#¸ÔAÐArg   c                óD  — ddl m} |€d}t        «       }nd} |di d|“d|
“d|“d	|“d
|“d|“d|“d|“d|“d|“d|“d|	“d|“d|“d|“d|“d| j                  “Ž}|j	                  «        |r4t        |t        «      sJ ‚|j                  «       }|j                  «        |S y)z;
        Render dataframe as comma-separated file.
        r   )ÚCSVFormatterNTFÚpath_or_bufÚlineterminatorÚseprr  ÚerrorsÚcompressionÚquotingr  Úindex_labelr—   Ú	chunksizeÚ	quotecharÚdate_formatÚdoublequoteÚ
escapecharÚstorage_optionsrA  r¶   )Úpandas.io.formats.csvsr  r   rP  Úsaver|   ÚgetvalueÚclose)rd   r€  rr  r‚  rÍ   r†  r—   r„  r…  rˆ  r�  r‡  r‰  rŠ  r‹  rƒ  rŒ  r  Úcreated_bufferÚcsv_formatterÚcontents                        re   Úto_csvzDataFrameRenderer.to_csvÒ  s  € õ, 	8àÐØ!ˆNÜ"›*‰Kà"ˆNá$ò 
Ù#ð
á)ð
ñ ð
ñ ð	
ñ
 ð
ñ $ð
ñ ð
ñ ð
ñ $ð
ñ ð
ñ  ð
ñ  ð
ñ $ð
ñ $ð
ñ "ð
ñ  ,ð!
ð" —h’hð#
ˆð& 	×ÑÔáÜ˜k¬8Ô4Ð4Ð4Ø!×*Ñ*Ó,ˆGØ×ÑÔØˆNàrg   )rP  rÈ   r­   r®   )NNNFNNF)r_   ú"FilePath | WriteBuffer[str] | Nonerr  r«   rm  zstr | list | tuple | Noneru  rª   rn  zint | bool | Nonero  r«   rp  rª   r­   r«   )NNN)r_   r•  rr  r«   r¾   r¬   r­   r«   )NNú,NNÚwÚinferNú"NNNTNr  N)"r€  z7FilePath | WriteBuffer[bytes] | WriteBuffer[str] | Nonerr  r«   r‚  r„   rÍ   zSequence[Hashable] | Noner†  zIndexLabel | Noner—   r„   r„  r=   r…  r¬   rˆ  r„   r�  r«   r‡  r¬   r‰  r«   rŠ  rª   r‹  r«   rƒ  r„   rŒ  zStorageOptions | Noner­   r«   )r™   r³   r´   rµ   rf   ry  r¨   r”  r¶   rg   re   rh  rh  m  sœ  „ ñó ð
 37Ø#Ø-1ØØ$(Ø#Ø"ð5Bà/ð5Bð ð5Bð +ð	5Bð
 ð5Bð "ð5Bð ð5Bð ð5Bð 
ó5Bðr 37Ø#Ø!%ð	Bà/ðBð ðBð ð	Bð
 
óBð8 PTØ#ØØ-1Ø)-ØØ*1Ø"ØØ%)Ø $Ø"&Ø Ø!%ØØ15ð#9àLð9ð ð9ð ð	9ð
 +ð9ð 'ð9ð ð9ð (ð9ð ð9ð ð9ð #ð9ð ð9ð  ð9ð ð9ð ð9ð  ð!9ð" /ð#9ð$ 
ô%9rg   rh  c                ó¢   — t        ||¬«      5 }|j                  | «       |€|j                  «       cddd«       S 	 ddd«       y# 1 sw Y   yxY w)zQ
    Perform serialization. Write to buf or return as string if buf is None.
    )rr  N)Ú_get_bufferÚwriter�  )rx  r_   rr  Úfds       re   rt  rt    sN   € ô 
�S 8Ô	,ð °Ø
�‰�ÔØˆ;à—;‘;“=÷	ñ ð
 ÷÷ ñ ús   Ž#A»AÁAc              #  óL  K  — | �t        | «      } n
t        «       } |€d}nt        | t        «      st	        d«      ‚t        | d«      r| –— yt        | t        «      r1t        t        | «      «       t        | d|d¬«      5 }|–— ddd«       yt        d«      ‚# 1 sw Y   yxY w­w)	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œ  r—  ry   )rr  Únewlinez1buf is not a file name and it has no write method)	r7   r   r|   r„   rÿ   Úhasattrr6   ÚopenÚ	TypeError)r_   rr  Úfs      re   r›  r›    s¤   è ø€ ð €Ü˜SÓ!‰ä‹jˆàÐØ‰Ü˜œSÔ!ÜÐLÓMÐMäˆs�GÔð ‹	Ü	�CœÔ	Üœs 3›xÔ(Ü�#�s X°rÔ:ð 	¸að
 ŠG÷	ð 	ô ÐKÓLÐL÷	ð 	üs   ‚A=B$Á?BÂB$ÂB!ÂB$c                óÀ   — | €yt        j                  | «      r0t        | «      s%t        t	        j
                  | g«      dd¬«      d   S t        j                  | d¬«      S )z„
    Render an Index or Series name for display.

    Float names follow ``display.precision`` like float values do (GH#25917).
    Nry   F)rŠ   r   ©ú	úr{   )Úescape_chars)r   r!   r)   r‹   ro   Úarrayr8   r�   )rW   s    re   r   r   D  sQ   € ð €|ØÜ
‡|�|�DÔ¤$ t¤*ÜœBŸH™H d VÓ,¨dÀ%ÔHÈÑKÐKÜ× Ñ  Ð4FÔGÐGrg   c                óŽ  — t        j                  | j                  d«      st        | j                  t        «      rt
        }t        d| «      } |dk(  r²d}n¯t        j                  | j                  d«      rt        }t        d| «      } |dk(  rxd}nut        | j                  t        «      rt        }nTt        j                  | j                  d«      rt        }n-t        j                  | j                  d«      rt        }nt        }|€d	}|€t        d
   d   }|€t        d
   d   } || |||||||||	|
¬«      }|j                  «       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]
    ÚMr,   rR   r   Úmr.   ÚfcÚiué   r]   rX   Ú	precision)
ÚdigitsrV   rX   rA  r>  rJ   rÖ   rŠ   r…  Úfallback_formatter)r   Úis_np_dtyperY   r|   r'   Ú_Datetime64Formatterr   Ú_Timedelta64Formatterr(   Ú_ExtensionArrayFormatterÚFloatArrayFormatterÚ_IntArrayFormatterÚ_GenericArrayFormatterr`   Ú
get_result)ÚvaluesrA  rX   rV   r±  r>  rJ   rÖ   rŠ   r…  r²  Ú	fmt_klassÚfmt_objs                re   r‹   r‹   Q  s&  € ôR ‡��v—|‘| SÔ)¬Z¸¿¹ÄoÔ-VÜ(ˆ	Ü�o vÓ.ˆØ�UŠ?Ø‰FÜ	�‰˜Ÿ™ sÔ	+Ü)ˆ	ÜÐ&¨Ó/ˆØ�UŠ?Ø‰FÜ	�F—L‘L¤.Ô	1Ü,‰	Ü	�‰˜Ÿ™ tÔ	,Ü'‰	Ü	�‰˜Ÿ™ tÔ	,Ü&‰	ä*ˆ	à€}ØˆàÐÜ˜iÑ(¨Ñ8ˆà€~Ü˜	Ñ" ;Ñ/ˆáØØØØ!ØØØØØ#ØØ-ô€Gð ×ÑÓÐrg   c                  ón   — e Zd Z	 	 	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zy)r¹  Nc                ó¬   — || _         || _        || _        || _        || _        || _        || _        || _        |	| _        |
| _	        || _
        || _        y rÊ   )r»  r±  rV   r>  rA  rX   rJ   rÖ   r…  Úfixed_widthrŠ   r²  )rd   r»  r±  rA  rV   r>  rX   rJ   rÖ   r…  rÀ  rŠ   r²  s                re   rf   z_GenericArrayFormatter.__init__¨  s\   € ð ˆŒØˆŒØˆŒØˆŒ
Ø"ˆŒØ(ˆÔØˆŒØˆŒØˆŒØ&ˆÔØ*ˆÔØ"4ˆÕrg   c                óX   — | j                  «       }t        || j                  «      \  }}|S rÊ   )Ú_format_stringsr1  rJ   )rd   r£   r§   rÁ   s       re   rº  z!_GenericArrayFormatter.get_resultÄ  s)   € Ø×)Ñ)Ó+ˆ
Ü% j°$·,±,Ó?‰	ˆ�Øˆrg   c                ó  ‡ ‡‡— ‰ j                   € t        d   d   }|€t        d   d   Šˆfd„}n‰ j                   }‰ j                  �‰ j                  ŠnX‰ j                  �‰ j                  Šn?‰ j                  d uxr ‰ j                  t
        k7  }t        t        j                  d|¬«      Šˆˆ fd„}‰ j                  }t        |t        j                  «      st        d«      ‚t        j                  |t         «      }|t        j"                  t%        |«      t'        t)        d	t+        |j,                  «      «      «      ¬
«      z  }‰ j.                  }|€|j1                  «       }g }t3        |«      D ]˜  \  }	}
‰ j                  �|j5                   ||
«      «       Œ*||	   s|r|j5                  d ||
«      › �«       ŒL||	   r|j5                   ||
«      «       Œi|du rd}nd}|j5                  |j7                   ||
«      ¬«      «       Œš |S )Nr]   rX   r°  c                ó(   •— t        | d‰d›d�›«      S )Nz .Údr£  )Ú_trim_zeros_single_float)r-  r°  s    €re   ú<lambda>z8_GenericArrayFormatter._format_strings.<locals>.<lambda>Î  s    ø€ Ô)AØ˜˜I a˜=¨Ð)Ð*ó*€ rg   r¥  )r¨  Úquote_stringsc                óR  •— ‰j                   �ot        | «      rdt        | «      rY| €y| t        u rt	        t        «      S | t
        u s*t        | t        j                  t        j                  f«      ry‰j                   S t        | t        «      rt	        | «      S t	         ‰| «      «      S )Nr®   r   )rV   r%   r)   r   r„   r   r|   ro   Ú
datetime64Útimedelta64r/   )r-  rA  rd   s    €€re   Ú_formatz7_GenericArrayFormatter._format_strings.<locals>._formatà  s   ø€ Ø�{‰{Ð&¬9°Q¬<¼DÀ¼GØ�9Ø!Øœ"‘WÜœr›7�NØœ#‘X¤¨A´·±¼r¿~¹~Ð/NÔ!OØ Ø—{‘{Ð"Ü˜Aœ|Ô,Ü˜1“v�ô ™9 Q›<Ó(Ð(rg   z=ExtensionArray formatting should use _ExtensionArrayFormatterrj   )ÚaxisrE  Fz{v}z {v})rO  )rX   r`   rA  r²  r…  r
   r   r8   r�   r»  r|   ro   Úndarrayr¢  r   Ú	map_inferr!   ró   r*   r$  Úrangerl   ÚshaperŠ   Úanyr/  r3  rY  )rd   rX   rÈ  rÌ  ÚvalsÚinferredÚis_float_typerŠ   r£   r6  rO  ÚtplrA  r°  s   `           @@re   rÂ  z&_GenericArrayFormatter._format_stringsÉ  sé  ú€ Ø×ÑÐ$Ü! )Ñ,¨^Ñ<ˆLØÐ#Ü" 9Ñ-¨kÑ:�	ó ‘ð  ×,Ñ,ˆLà�>‰>Ð%ØŸ™‰IØ×$Ñ$Ð0Ø×/Ñ/‰Ià ŸL™L°Ð4ÒS¸¿¹ÌÑ9SˆMÜÜ×%Ñ%Ø/Ø+ôˆIõ	)ð �{‰{ˆÜ˜$¤§
¡
Ô+ÜØOóð ô —=‘= ¤xÓ0ˆàä�f‰f”U˜4“[¤u¬U°1´c¸$¿*¹*³oÓ-FÓ'GÔHñIð 	ð
 ×*Ñ*ˆØÐ Ø)×-Ñ-Ó/ˆMàˆ
Ü˜d“Oò 	<‰DˆAˆqØ�~‰~Ð)à×!Ñ!¡'¨!£*Õ-Ø" 1Ò%©-Ø×!Ñ! A¡g¨a£j \Ð"2Õ3Ø˜qÒ!Ø×!Ñ!¡,¨q£/Õ2à  EÑ)ð  ‘Cà �CØ×!Ñ! #§*¡*©w°q«z *Ó":Õ;ð	<ð" Ðrg   )é   NrR   r¯  NrH   r]  NTTN)r»  r9   r±  ri   rA  re  rV   r„   r>  rd  rX   ra  rJ   r„   rÖ   r„   r…  r¬   rÀ  rª   rŠ   rb  r²  re  r­   r®   r±   )r™   r³   r´   rf   rº  rÂ  r¶   rg   re   r¹  r¹  §  sµ   „ ð Ø%)ØØØ/3ØØØ"Ø Ø%)Ø.2ð5àð5ð ð5ð #ð	5ð
 ð5ð ð5ð -ð5ð ð5ð ð5ð ð5ð ð5ð #ð5ð ,ð5ð 
ó5ó8ô
Grg   r¹  c                  óH   ‡ — e Zd Zdˆ fd„Z	 	 d	 	 	 	 	 dd„Zdd„Zd	d„Zˆ xZS )
r·  c                óÂ   •— t        ‰| �  |i |¤Ž | j                  �C| j                  €6d| _        t        | j                  «      r| j                  | _        d | _        y y y y ©NF)Úsuperrf   rX   rA  rÀ  rX  )rd   ÚargsÚkwargsÚ	__class__s      €re   rf   zFloatArrayFormatter.__init__  se   ø€ Ü‰Ñ˜$Ð) &Ò)ð ×ÑÐ(¨T¯^©^Ð-Cà$ˆDÔÜ˜×)Ñ)Ô*Ø!%×!2Ñ!2�”Ø$(�Õ!ð +ð .DÐ(rg   c                óŽ   ‡ ‡‡‡‡— ‰€‰ j                   Š‰rˆˆ fd„Šnˆ fd„Š‰ j                  dk7  rˆˆ fd„Šn‰Š‰€‰S ˆˆ ˆfd„}|S )z;Returns a function to be applied on each value to format itc                óL   •— ‰€J ‚t        | «      r	 ‰| ¬«      S ‰j                  S )N)Úvalue)r*   rV   )rO  rX   rd   s    €€re   Úbase_formatterz<FloatArrayFormatter._value_formatter.<locals>.base_formatter2  s5   ø€ Ø#Ð/Ð/Ð/ô ˜Q”xñ ! qÔ)ðð Ÿ™ðrg   c                óH   •— t        | «      rt        | «      S ‰j                  S rÊ   )r*   r„   rV   )rO  rd   s    €re   râ  z<FloatArrayFormatter._value_formatter.<locals>.base_formatter?  s   ø€ Ü!& q¤”s˜1“vÐ:¨t¯{©{Ð:rg   r]  c                óJ   •—  ‰| «      j                  d‰j                  d«      S )Nr]  rj   )ÚreplacerÖ   )rO  râ  rd   s    €€re   Údecimal_formatterz?FloatArrayFormatter._value_formatter.<locals>.decimal_formatterD  s!   ø€ Ù% aÓ(×0Ñ0°°d·l±lÀAÓFÐFrg   c                ón   •— t        | «      rt        | «      ‰kD  r ‰| «      S  ‰d«      S ‰j                  S )Ng        )r*   ÚabsrV   )rá  ræ  rd   Ú	thresholds    €€€re   rA  z7FloatArrayFormatter._value_formatter.<locals>.formatterM  s6   ø€ Ü�UŒ|Ü�u“: 	Ò)Ù,¨UÓ3Ð3á,¨SÓ1Ð1à—{‘{Ð"rg   )rX   rÖ   )rd   rX   ré  rA  râ  ræ  s   ``` @@re   Ú_value_formatterz$FloatArrayFormatter._value_formatter   sZ   ü€ ð ÐØ×,Ñ,ˆLñ ö	ô;ð �<‰<˜3ÒöGð !/ÐàÐØ$Ð$ö	#ð Ðrg   c                óv  ‡ ‡
‡‡— 	 	 	 	 	 	 	 	 dd„Š	 	 	 	 	 	 	 	 dd„Š
‰ j                   �( ‰‰ j                  ‰ j                   ‰ j                  «      S ‰ j                  rt        d   d   ŠndŠˆ
ˆˆ ˆfd„}‰ j
                  €N‰ j                  r5‰ j                  du rd}nd	}t        |j                  ‰ j                  ¬
«      }n‰ j
                  }nˆ fd„} ||«      }‰ j                  s|S t        |«      dkD  r%t        d„ |D «       «      }|‰ j                  dz   kD  }nd}t        j                  ‰ j                  «      }|dkD  j                  «       }|d‰ j                   z  k  |dkD  z  j                  «       }	|	s|r>|r<‰ j                  du rd}nd}t        |j                  ‰ j                  ¬
«      } ||«      }|S )zˆ
        Returns the float values converted into strings using
        the parameters given at initialisation, as a numpy array
        c           	     ó  — t        | «      }t        j                  t        | j	                  «       |j	                  «       d¬«      D ��cg c]  \  }}|s ||«      n|‘Œ c}}«      j                  | j                  «      }|S c c}}w )NTr  )r)   ro   r©  r
  ÚravelÚreshaperÑ  )r»  rA  rV   ÚmaskÚvalr¬  Ú	formatteds          re   Úformat_with_na_repzCFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_rep^  sw   € ô ˜“<ˆDÜŸ™ô #& f§l¡l£n°d·j±j³lÈ4Ô"P÷á˜˜Qñ +,‘I˜c”N°Ñ7óó÷
 ‰g�f—l‘lÓ#ð ð Ðùós   ÁB
c                óÄ  — t        j                  | «      j                  «       }t        j                  | «      j                  «       }t	        |«      t	        |«      }}g }t        | j                  «       ||||d¬«      D ]³  \  }}	}
}}|s|s|j                   ||«      «       Œ%|s|j                   ||	«      › d|› d�«       ŒE|sV ||
«      j                  «       }|j                  d«      r|j                  |› |› d�«       Œ…|j                  |› d|› d�«       Œ�|j                  |› d|› d�«       Œµ t        j                  |«      j                  | j                  «      S )NTr  ú+Újú-)ro   Úrealrí  Úimagr)   r
  r3  ÚstripÚ
startswithr©  rî  rÑ  )r»  rA  rV   Úreal_valuesÚimag_valuesÚ	real_maskÚ	imag_maskÚformatted_lstrð  Úreal_valÚimag_valÚre_isnaÚim_isnaÚimag_formatteds                 re   Úformat_complex_with_na_repzKFloatArrayFormatter.get_result_as_array.<locals>.format_complex_with_na_repj  sS  € ô Ÿ'™' &›/×/Ñ/Ó1ˆKÜŸ'™' &›/×/Ñ/Ó1ˆKÜ#'¨Ó#4´d¸;Ó6G�yˆIØˆMÜ=@Ø—‘“ØØØØØô>ò @Ñ9��X˜x¨°'ñ ¡wØ!×(Ñ(©°3«Õ8Ù Ø!×(Ñ(©I°hÓ,?Ð+@ÀÀ&ÀÈÐ)KÕLÙ á%.¨xÓ%8×%>Ñ%>Ó%@�NØ%×0Ñ0°Ô5Ø%×,Ñ,°¨x¸Ð7GÀqÐ-IÕJà%×,Ñ,°¨x°q¸Ð8HÈÐ-JÕKà!×(Ñ(¨F¨8°1°V°H¸AÐ)>Õ?ð)@ô* —8‘8˜MÓ*×2Ñ2°6·<±<Ó@Ð@rg   Nr]   Úchop_thresholdc                ó€  •— ‰j                  | ‰	«      }‰j                  dk(  rd‰j                  z   n‰j                  }‰j                  }t	        |«      }|r ‰|||«      }n
 ‰|||«      }‰j
                  rF|rt        |‰j                  «      }nt        |‰j                  «      }t        j                  |d¬«      S |S )NrG   rE  Úobject©rY   )rê  rJ   rV   r»  r    rÀ  Ú_trim_zeros_complexrÖ   Ú_trim_zeros_floatro   Úasarray)
rX   rA  rV   r»  Ú
is_complexr§   r  rò  rd   ré  s
         €€€€re   Úformat_values_withzCFloatArrayFormatter.get_result_as_array.<locals>.format_values_with‘  s®   ø€ Ø×-Ñ-¨l¸IÓFˆIð +/¯,©,¸&Ò*@�S˜4Ÿ;™;Ò&ÀdÇkÁkˆFð —[‘[ˆFÜ)¨&Ó1ˆJñ Ù3°F¸IÀvÓN‘á+¨F°I¸vÓF�à×ÒÙÜ0°¸¿¹ÓF‘Fä.¨v°t·|±|ÓD�FÜ—z‘z &°Ô9Ð9àˆMrg   Tz{value: .{digits:d}f}z{value:.{digits:d}f})r±  c                ó"   •— ‰j                   | z  S rÊ   )rX   )rá  rd   s    €re   rÇ  z9FloatArrayFormatter.get_result_as_array.<locals>.<lambda>¹  s   ø€ ¨×):Ñ):¸UÑ)B€ rg   r   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrÊ   ©rl   ©r,  r-  s     re   r.  z:FloatArrayFormatter.get_result_as_array.<locals>.<genexpr>Å  s   è ø€ Ò: Aœ˜QŸÑ:ùó   ‚é   Fg    €„.Aé
   z{value: .{digits:d}e}z{value:.{digits:d}e})r»  r9   rA  r   rV   r„   r­   ú
np.ndarray)rA  r»  rV   rÀ  r`   rX   rŠ   r   rY  r±  rl   r5  ro   rè  rÒ  )rd   r  Úfmt_strrX   Úformatted_valuesÚmaxlenÚtoo_longÚabs_valsÚhas_large_valuesÚhas_small_valuesr  rò  ré  s   `         @@@re   Úget_result_as_arrayz'FloatArrayFormatter.get_result_as_arrayX  sÕ  û€ ð
	Øð
	Ø*2ð
	Ø<?ð
	àó
	ð	AØð	AØ*2ð	AØ<?ð	Aàó	Að< �>‰>Ð%Ù% d§k¡k°4·>±>À4Ç;Á;ÓOÐOà×ÒÜ˜yÑ)Ð*:Ñ;‰IàˆI÷	ð< ×ÑÐ$Ø×ÒØ×%Ñ%¨Ñ-Ø5‘Gà4�GÜ& w§~¡~¸d¿k¹kÔJ‘à#×0Ñ0‘ãBˆLá-¨lÓ;Ðà×ÒØ#Ð#ô ÐÓ  1Ò$ÜÑ:Ð)9Ô:Ó:ˆFØ §¡¨a¡Ñ/‰HàˆHä—6‘6˜$Ÿ+™+Ó&ˆð % s™N×/Ñ/Ó1ÐØ%¨°·±¨|Ñ(<Ñ<ÀÈAÁÑN×SÑSÓUÐá¡Ñ-=Ø×!Ñ! TÑ)Ø1‘à0�Ü" 7§>¡>¸$¿+¹+ÔFˆLÙ1°,Ó?ÐàÐrg   c                ó4   — t        | j                  «       «      S rÊ   )r#  r  rŒ   s    re   rÂ  z#FloatArrayFormatter._format_stringsÛ  s   € Ü�D×,Ñ,Ó.Ó/Ð/rg   r¯   ©NN)rX   ra  ré  zfloat | Noner­   r   )r­   r  r±   )r™   r³   r´   rf   rê  r  rÂ  Ú__classcell__©rÞ  s   @re   r·  r·    s>   ø„ õ
)ð 04Ø"&ð6à,ð6ð  ð6ð 
ó	6ópA ÷F0rg   r·  c                  ó   — e Zd Zdd„Zy)r¸  c                ó˜   — | j                   du rd„ }nd„ }| j                  xs |}| j                  D �cg c]
  } ||«      ‘Œ }}|S c c}w )NFc                ó
   — | d›S )NrÅ  r¶   ©r-  s    re   rÇ  z4_IntArrayFormatter._format_strings.<locals>.<lambda>â  s
   € ¨¨1¨€ rg   c                ó
   — | d›S )Nz dr¶   r&  s    re   rÇ  z4_IntArrayFormatter._format_strings.<locals>.<lambda>ä  s
   € ¨¨2¨€ rg   )rŠ   rA  r»  )rd   Úformatter_strrA  r-  r£   s        re   rÂ  z"_IntArrayFormatter._format_stringsà  sN   € Ø×Ñ Ñ&Ù.‰Má/ˆMØ—N‘NÒ3 mˆ	Ø,0¯K©KÖ8 q‘i •lÐ8ˆ
Ð8ØÐùò 9s   ´ANr±   )r™   r³   r´   rÂ  r¶   rg   re   r¸  r¸  ß  s   „ ôrg   r¸  c                  óH   ‡ — e Zd ZU ded<   	 	 d	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )r´  r,   r»  c                ó8   •— t        ‰| �  |fd|i|¤Ž || _        y ©NrV   )rÛ  rf   r‰  )rd   r»  rV   r‰  rÝ  rÞ  s        €re   rf   z_Datetime64Formatter.__init__í  s$   ø€ ô 	‰Ñ˜Ñ9¨Ð9°&Ò9Ø&ˆÕrg   c                óè   — | j                   }| j                  �|D �cg c]  }| j                  |«      ‘Œ c}S |j                  | j                  | j                  ¬«      }|j                  «       S c c}w ©N)rV   r‰  )r»  rA  Ú_format_native_typesrV   r‰  Útolist)rd   r»  r-  r£   s       re   rÂ  z$_Datetime64Formatter._format_strings÷  si   € Ø—‘ˆà�>‰>Ð%Ø/5Ö6¨!�D—N‘N 1Õ%Ò6Ð6à×0Ñ0Ø—;‘;¨D×,<Ñ,<ð 1ó 
ˆ
ð × Ñ Ó"Ð"ùò 7s   �A/©r   N)r»  r,   rV   r„   r‰  r®   r­   r®   r±   ©r™   r³   r´   Ú__annotations__rf   rÂ  r!  r"  s   @re   r´  r´  ê  sA   ø… ØÓð
 Ø ð	'àð'ð ð'ð ð	'ð 
õ'÷	#rg   r´  c                  ó    — e Zd ZU ded<   dd„Zy)r¶  r-   r»  c                ó¦  — | j                   }| j                  }d }|€|j                  d¬«      }t        |t        «      r|j                  «       }nt        j                  |t        ¬«      }t        ||| j                  | j                  | j                  | j                  | j                  | j                  | j                   | j"                  |¬«      }|S )NT)Úboxedr	  )	rX   rV   r±  r>  rJ   rÖ   rŠ   r…  r²  )r»  rA  Ú
_formatterr|   r+   Ú_internal_get_valuesro   r  r  r‹   rX   rV   r±  r>  rJ   rÖ   rŠ   r…  )rd   r»  rA  r²  r©  r£   s         re   rÂ  z(_ExtensionArrayFormatter._format_strings  s³   € Ø—‘ˆà—N‘Nˆ	Ø!ÐØÐØ!'×!2Ñ!2¸Ð!2Ó!>Ðä�fœkÔ*à×/Ñ/Ó1‰Eä—J‘J˜v¬VÔ4ˆEä!ØØØ×*Ñ*Ø—;‘;Ø—;‘;Ø—*‘*Ø—L‘LØ—L‘LØ×,Ñ,Ø—L‘LØ1ô
ˆ
ð Ðrg   Nr±   )r™   r³   r´   r2  rÂ  r¶   rg   re   r¶  r¶    s   … ØÓôrg   r¶  c                óf  — t        | «      dk(  rg S t        j                  | «      } t        | «      r0t        j                  | dk\  «      rt        j                  | dk  «      st        d«      ‚d| z  } t        | «      }| j                  |«      j                  t        «      }t        j                  || «      }t        j                  |«      r(|j                  t        «      }|D �cg c]  }|dz   ‘Œ	 c}S t        j                  | «      }t        |«      }t        j                  | t        ¬«      }| |   j                  «       j                  t        «      j                  t        «      ||<   | |    j                  |«      j                  t        «      || <   |D �cg c]  }|dz   ‘Œ	 c}S c c}w c c}w )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   rW  r	  )rl   ro   r  r$   ró   rÿ   Úget_precisionÚroundÚastyperi   Úiscloser„   ÚuniqueÚ
empty_liker  )ÚpercentilesÚprecÚpercentiles_round_typeÚint_idxÚoutr6  Úunique_pctss          re   Úformat_percentilesrF  $  sj  € ôD ˆ;Ó˜1ÒØˆ	ä—*‘*˜[Ó)€Kô ˜[Ô)Ü�v‰v�k QÑ&Ô'Ü�v‰v�k QÑ&Ô'äÐJÓKÐKà˜Ñ#€KÜ˜Ó%€DØ(×.Ñ.¨tÓ4×;Ñ;¼CÓ@Ðä�j‰jÐ/°Ó=€Gä	‡v�vˆg„Ø$×+Ñ+¬CÓ0ˆØ!$Ö%˜A��C“Ò%Ð%ä—)‘)˜KÓ(€KÜ˜Ó%€DÜ
�-‰-˜¬6Ô
2€CØ˜wÑ'×-Ñ-Ó/×6Ñ6´sÓ;×BÑBÄ3ÓG€Cˆ�Là  Ñ)×/Ñ/°Ó5×<Ñ<¼SÓA€Cˆˆ�MØ Ö!˜ˆA�‹GÒ!Ð!ùò &ùò "s   Ã$F)ÆF.c                óD  — | d   dkD  r| d   nd }| d   dk  rd| d   z
  nd }t        j                  | ||¬«      }t        |«      }t        j                  t        j                  t        j
                  |«      «      «      j                  t        «       }t        d|«      }|S )Nr   éÿÿÿÿr9  )Úto_beginÚto_endrj   )	ro   Úediff1drè  ÚfloorÚlog10rm   r<  ri   r5  )r©  rI  rJ  ÚdiffrA  s        re   r:  r:  f  sˆ   € Ø  ™8 aš<ˆu�QŠx¨T€HØ % b¡	¨C¢ˆS�5˜‘9Š_°T€FÜ�:‰:�e h°vÔ>€DÜˆt‹9€DÜ�H‰H”R—X‘XœbŸf™f T›lÓ+Ó,×3Ñ3´CÓ8Ð8€DÜˆq�$‹<€DØ€Krg   c                ó,   — | t         u r|S t        | «      S rÊ   )r   r„   ©r-  rV   s     re   Ú_format_datetime64rQ  p  s   € ØŒC�xØˆô ˆq‹6€Mrg   c                ód   — t        | t        «      r|S |r| j                  |«      S | j                  S rÊ   )r|   r   ÚstrftimeÚ
_date_repr)r-  rV   r‰  s      re   Ú_format_datetime64_dateonlyrU  y  s1   € ô
 �!”WÔØˆáØ�z‰z˜+Ó&Ð&ð �|‰|Ðrg   c                ó    ‡‡— | rˆˆfd„S ˆfd„S )z]Return a formatter callable taking a datetime64 as input and providing
    a string as outputc                ó    •— t        | ‰‰¬«      S r-  )rU  )r-  r‰  rV   s    €€re   rÇ  z'get_format_datetime64.<locals>.<lambda>�  s   ø€ Ô4Ø�f¨+ô
€ rg   c                ó   •— t        | ‰¬«      S )N)rV   )rQ  rP  s    €re   rÇ  z'get_format_datetime64.<locals>.<lambda>“  s   ø€ Ô+¨A°fÔ=€ rg   r¶   )Úis_dates_onlyrV   r‰  s    ``re   Úget_format_datetime64rZ  ˆ  s   ù€ ñ ô
ð 	
ó >Ð=rg   c                  óB   ‡ — e Zd ZU ded<   	 d	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )rµ  r.   r»  c                ó*   •— t        ‰| �  |fd|i|¤Ž y r+  )rÛ  rf   )rd   r»  rV   rÝ  rÞ  s       €re   rf   z_Timedelta64Formatter.__init__™  s   ø€ ô 	‰Ñ˜Ñ9¨Ð9°&Ó9rg   c                ó¬   — | j                   xs" t        | j                  | j                  d¬«      }| j                  D �cg c]
  } ||«      ‘Œ c}S c c}w )NF)rV   Úbox)rA  Úget_format_timedelta64r»  rV   )rd   rA  r-  s      re   rÂ  z%_Timedelta64Formatter._format_strings¡  sE   € Ø—N‘Nò 
Ô&<Ø�K‰K §¡°ô'
ˆ	ð '+§k¡kÖ2 ‘	˜!•Ò2Ð2ùÒ2s   ¿A©r   )r»  r.   rV   r„   r­   r®   r±   r1  r"  s   @re   rµ  rµ  –  s4   ø… ØÓð
 ð:àð:ð ð:ð
 
õ:÷3rg   rµ  c                óV  ‡‡‡— | j                   rdŠn�| j                  }||t        k7     }|j                  dk(  s&|t	        | j
                  «      z  j                  «       sdŠn?t        j                  j                  | j
                  k(  r|dz  j                  «       rdŠndŠˆˆˆf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
    Nr   Úlongiè  ró   Úusc                ó¦   •— | �t        | «      rt        | «      r‰S t        | t        «      st        | «      } | j	                  ‰¬«      }‰rd|› d�}|S )N)rY  ú')r%   r)   r|   r   Ú
_repr_base)r-  r§   r^  rY  rV   s     €€€re   r6  z*get_format_timedelta64.<locals>._formatter¿  sS   ø€ Øˆ9œ 1œ¬$¨q¬'ØˆMä˜!œYÔ'Ü˜!“ˆAð —‘ V�Ó,ˆÙØ˜˜ �]ˆFØˆrg   )
Ú_is_dates_onlyÚasi8r   Úsizer   Ú_cresorÒ  r   Ú	NPY_FR_nsrá  )r»  rV   r^  Úi8rÓ  r6  rY  s    ``   @re   r_  r_  ¨  s‘   ú€ ð ×ÒØ‰à�[‰[ˆØ�"œ‘*‰~ˆØ�9‰9˜Š> $Ô);¸F¿M¹MÓ)JÑ"J×!OÑ!OÔ!QØ‰FÜ×&Ñ&×,Ñ,°·±Ò=À4È%Á<×BTÑBTÔBVØ‰FàˆFöð Ðrg   c                óÄ  ‡
— |€t        j                  «       Š
n|Š
t        | «      dk(  s|dk(  r| rt        ˆ
fd„| D «       «      nd}| |fS t        ˆ
fd„| D «       «      }|�t        ||«      }t        d   d   }|�||kD  r|}|�Bt        |dz
  d«      }dd ||z
   }| D �cg c]   }‰
j                  |«      |kD  r|d | |z   n|‘Œ" } }‰
j                  | ||¬	«      }	|	|fS c c}w )
Nr   ró   c              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrÊ   r  ©r,  r-  Ú
adjustments     €re   r.  z$_make_fixed_width.<locals>.<genexpr>Û  s   øè ø€ Ò9¨A�j—n‘n Q×'Ñ9ùó   ƒc              3  ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrÊ   r  ro  s     €re   r.  z$_make_fixed_width.<locals>.<genexpr>Þ  s   øè ø€ Ò5¨�*—.‘. ×#Ñ5ùrq  r]   r»   r”   r•   r–   )r8   ra   rl   r5  r`   rJ   )r)  rJ   r*  rb   r<  Úconf_maxÚkeepÚplaceholderr-  r§   rp  s             @re   r1  r1  Ï  s"  ø€ ð €{Ü×,Ñ,Ó.‰
àˆ
ä
ˆ7ƒ|�qÒ˜G uÒ,Ù=D”#Ó9°Ô9Ô9È!ˆØ˜ÐÐäÓ5¨WÔ5Ó5€GàÐÜ�g˜wÓ'ˆä�iÑ  Ñ0€HØÐ ¨(Ò 2ØˆàÐô �7˜Q‘; Ó"ˆØÐ,˜g¨™nÐ-ˆð ö
àð '1§n¡n°QÓ&7¸'Ò&AˆAˆeˆtˆH�{Ò"ÀqÑHð
ˆð 
ð
 ×Ñ ¨°wÐÓ?€FØ�7ˆ?Ðùò
s   Â%Cc           	     óÔ  — g g }}| D ]^  }t        j                  d|«      }|j                  dj                  |dd «      «       |j                  dj                  |dd «      «       Œ` t	        | «      }t        ||z   |«      }t	        |«      dk(  rg S t        d„ |D «       «      dz
  }t        |d| ||d d	¬
«      D �	�
cg c]  \  }	}
|	|
d   z   |
dd d|› d�›z   dz   ‘Œ }}	}
|S c c}
}	w )z‰
    Separates the real and imaginary parts from the complex number, and
    executes the _trim_zeros_float method on each of those.
    z(?<!e)([j+-])ry   Néüÿÿÿéþÿÿÿr   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrÊ   r  )r,  Úparts     re   r.  z&_trim_zeros_complex.<locals>.<genexpr>  s   è ø€ Ò; dœ˜DŸ	Ñ;ùr  rj   Tr  ú>rõ  )Úrer�   r3  r    rl   r  r5  r
  )Ústr_complexesrÖ   Ú	real_partÚ	imag_partr-  ÚtrimmedÚnÚpadded_partsÚpadded_lengthÚreal_ptÚimag_ptÚpaddeds               re   r
  r
  õ  s'  € ð
 ˜rˆy€IØò 2ˆô
 —(‘(Ð+¨QÓ/ˆØ×Ñ˜Ÿ™ ¨¨" Ó.Ô/Ø×Ñ˜Ÿ™ ¨¨B Ó0Õ1ð2ô 	ˆMÓ€AÜ$ Y°Ñ%:¸GÓD€LÜ
ˆ<Ó˜AÒØˆ	ÜÑ;¨lÔ;Ó;¸aÑ?€Mô !$ L°°!Ð$4°lÀ1À2Ð6FÈtÔ T÷ñ
 ˆG�Wð	 	Ø
�!‰*ñ	à�Q�Rˆ[˜˜=˜/¨Ð)Ð*ñ	,ð ó	ð€Fñ ð €Mùós   Â>!C$c                óT   — | j                  d«      } | j                  d«      r| dz  } | S )zX
    Trims trailing zeros after a decimal point,
    leaving just one if necessary.
    Ú0r]  )ÚrstripÚendswith)Ú	str_floats    re   rÆ  rÆ    s2   € ð
 × Ñ  Ó%€IØ×Ñ˜#ÔØ�SÑˆ	àÐrg   z^\s*[+-]?[0-9]+\.[0-9]*$c                óô  — |dk7  rt        j                  d|› d�«      }nt        }| D �cg c]  }|j                  |«      du‘Œ }}t	        |«      st        | «      S t        | «      }	 t        d„ t        ||d¬«      D «       «      sn(t        ||d¬«      D ��cg c]  \  }}|r|dd n|‘Œ }}}ŒGt        ||d¬«      D ��cg c]  \  }}|r|j                  |«      r|d	z   n|‘Œ! }}}|S c c}w c c}}w c c}}w )
z‰
    Trims the maximum number of trailing zeros equally from
    all numbers containing decimals, leaving just one if
    necessary.
    r]  z^\s*[+-]?[0-9]+\z[0-9]*$NTc              3  óH   K  — | ]  \  }}|r|j                  d «      –— Œ y­w)rˆ  N)rŠ  )r,  r-  Úis_nums      re   r.  z$_trim_zeros_float.<locals>.<genexpr>=  s'   è ø€ ò 
á��6Ùð �J‰J�s�Oñ
ùs   ‚ "r  rH  rˆ  )	r|  ÚcompileÚ_NUMBER_WITH_DECIMAL_REÚmatchrÒ  r#  ró   r
  rŠ  )Ú
str_floatsrÖ   Únumber_regexr-  Ú	is_numberr€  rŽ  r§   s           re   r  r  %  s)  € ð �#‚~Ü—z‘zÐ%5°g°Y¸gÐ"FÓG‰ä.ˆð =GÖG°q�×#Ñ# AÓ&¨dÒ2ÐG€IÐGäˆyŒ>Ü�JÓÐä�:Ó€Gð äñ 
ä  ¨)¸DÔAô
ô 
ð
 ô ! ¨)¸DÔA÷
á��6ñ ˆAˆcˆr‰F !Ñ#ð
ˆñ 
ð ô  ˜W i¸Ô=÷áˆAˆvñ ˜aŸj™j¨Ô1ˆˆCŠ°qÑ8ð€Fñ ð €Mùò5 Hùó 
ùós   ªC)ÂC.Ã $C4c                óv   — t        | t        «      rt        j                  | j                  Ž S | j
                  d uS rÊ   )r|   r1   ÚcomÚany_not_nonerU  rW   )rU   s    re   rš   rš   P  s0   € Ü�%œÔ$Ü×Ñ §¡Ð-Ð-à�z‰z Ð%Ð%rg   c                  ó˜   — 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	 d'	 	 	 	 	 d(d%„Zd)d&„Zy$)*ÚEngFormatterzl
    Formats float values according to engineering format.

    Based on matplotlib.ticker.EngFormatter
    ièÿÿÿÚyiëÿÿÿÚziîÿÿÿÚaiñÿÿÿr£  iôÿÿÿÚpi÷ÿÿÿr�  iúÿÿÿÚuéýÿÿÿr¬  r   ry   r”   rN  r  r«  é	   ÚGr¯  ÚTé   ÚPé   ÚEé   ÚZé   ÚYNc                ó    — || _         || _        y rÊ   ©ÚaccuracyÚuse_eng_prefix)rd   r­  r®  s      re   rf   zEngFormatter.__init__s  s   € ð !ˆŒØ,ˆÕrg   c                óî  — t        t        |«      «      }t        j                  |«      ryt        j                  |«      ryd}|dk  rd}| }|dk7  r<t        t	        t        j                  |j                  «       dz  «      dz  «      «      }nt        d«      }|j                  t        | j                  j                  «       «      «      }|j                  t        | j                  j                  «       «      «      }t	        |«      }| j                  r| j                  |   }n|dk  rd| d›�}nd	|d›�}||z  d
|z  z  }| j                  €d}nd| j                  d›d�}|j                  ||¬«      }	|	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   Úinfrj   r   rH  r”   zE-Ú02dzE+r  z{mant: g}{prefix}z{mant: .rÅ  z
f}{prefix})ÚmantÚprefix)r   r„   Úis_nanÚis_infiniteri   ÚmathrL  rM  rm   r5  ÚENG_PREFIXESr	  r®  r­  rY  )
rd   ÚnumÚdnumÚsignÚpow10Ú	int_pow10r³  r²  Ú
format_strrñ  s
             re   Ú__call__zEngFormatter.__call__y  s_  € ô( ”s˜3“xÓ ˆä�>‰>˜$ÔØä×Ñ˜tÔ$Øàˆà�!Š8ØˆDØ�5ˆDà�1Š9ÜœC¤§
¡
¨4¯:©:«<¸!Ñ+;Ó <¸qÑ @ÓAÓB‰Eä˜A“JˆEà—	‘	œ#˜d×/Ñ/×4Ñ4Ó6Ó7Ó8ˆØ—	‘	œ#˜d×/Ñ/×4Ñ4Ó6Ó7Ó8ˆÜ˜“Jˆ	à×ÒØ×&Ñ& yÑ1‰FØ˜Š]Ø˜9˜* SÐ)Ð*‰Fà˜) C˜Ð)ˆFà�d‰{˜b %™iÑ(ˆà�=‰=Ð Ø,‰Jà$ T§]¡]°1Ð$5°]ÐCˆJà×%Ñ%¨4¸Ð%Ó?ˆ	àÐrg   rÚ  )r­  r¬   r®  rª   r­   r®   )r¸  Úfloatr­   r„   )r™   r³   r´   rµ   r·  rf   r¾  r¶   rg   re   r™  r™  W  sÿ   „ ñðØˆSðàˆSðð 	ˆSðð 	ˆSð	ð
 	ˆSðð 	ˆCðð 	ˆCðð 	ˆCðð 	
ˆ2ðð 	
ˆ3ðð 	
ˆ3ðð 	
ˆ3ðð 	ˆCðð 	ˆCðð 	ˆCðð  	ˆCð!ð" 	ˆCð#€Lð* CHð-Ø"ð-Ø;?ð-à	ó-ô;rg   r™  Úpandasc                óx   — t        j                  dt        t        «       ¬«       t	        dt        | |«      «       y)a  
    Format float representation in DataFrame with SI notation.

    .. deprecated:: 3.1.0
        Use ``pd.set_option("display.precision", N)`` to control decimal
        precision, or pass a custom callable to
        ``pd.set_option("display.float_format", func)``.

    Sets the floating-point display format for ``DataFrame`` objects using engineering
    notation (SI units), allowing easier readability of values across wide ranges.

    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
        This method does not return a value. it updates the global display format
        for floats in DataFrames.

    See Also
    --------
    set_option : Set the value of the specified option or options.
    reset_option : Reset one or more options to their default value.

    Examples
    --------
    Use ``pd.set_option("display.precision", N)`` to control decimal
    precision instead:

    >>> with pd.option_context("display.precision", 3):
    ...     print(pd.DataFrame([1e-9, 1e-3, 1, 1e3, 1e6]))
               0
    0  1.000e-09
    1  1.000e-03
    2  1.000e+00
    3  1.000e+03
    4  1.000e+06
    zÝset_eng_float_format is deprecated and will be removed in a future version. Use pd.set_option('display.precision', N) to control decimal precision, or pass a custom callable to pd.set_option('display.float_format', func).)Ú
stacklevelzdisplay.float_formatN)ÚwarningsÚwarnr   r   r   r™  r¬  s     re   Úset_eng_float_formatrÅ  ·  s5   € ôZ ‡M�Mð	7ô 	Ü#Ó%õô Ð%¤|°H¸nÓ'MÕNrg   c                ó  — t        | «      dk(  rg S dgt        | d   «      z  }g }| D ]U  }d}i }t        |«      D ]  \  }}||   r||k(  rŒd||<   ||z
  ||<   |}Œ! t        |«      |z
  ||<   |j                  |«       ŒW |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/  r3  )	ÚlevelsÚsentinelÚcontrolr§   ÚlevelÚ
last_indexÚlengthsr6  Úkeys	            re   Úget_level_lengthsrÎ  ï  s³   € ô$ ˆ6ƒ{�aÒØˆ	àˆf”s˜6 !™9“~Ñ%€Gà€FØò ˆØˆ
àˆÜ Ó&ò 	‰FˆAˆsØ�qŠz˜c XšoØà"�˜‘
Ø&'¨*¡n�˜
Ñ#Ø‘
ð	ô " %›j¨:Ñ5ˆ�
Ñà�‰�gÕðð  €Mrg   c                ó¢   — t        d„ |D «       «      r|D �cg c]  }t        |«      ‘Œ }}| j                  dj                  |«      «       yc c}w )z‘
    Appends lines to a buffer.

    Parameters
    ----------
    buf
        The buffer to write to
    lines
        The lines to append.
    c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­wrÊ   )r|   r„   r  s     re   r.  z#buffer_put_lines.<locals>.<genexpr>%  s   è ø€ Ò
- !Œ:�aœ×Ñ
-ùs   ‚r{   N)rÒ  r„   rœ  r    )r_   Úlinesr-  s      re   Úbuffer_put_linesrÒ    sC   € ô Ñ
- uÔ
-Ô-Ø!&Ö'˜A”�Q•Ð'ˆÐ'Ø‡I�Iˆd�i‰i˜ÓÕùò (s   —A)r­   zdict[str, Any]r   )rx  r„   r_   r•  rr  r«   r­   r«   rÊ   )r_   r•  rr  r«   r­   z1Generator[WriteBuffer[str]] | Generator[StringIO])rW   r   r­   r„   )	NrR   NNrH   r]  TNN)r»  r9   rA  re  rX   ra  rV   r„   r±  r¬   r>  zstr | int | NonerJ   r„   rÖ   r„   rŠ   rb  r…  r¬   r²  re  r­   r²   )r@  únp.ndarray | Sequence[float]r­   r²   )r©  rÓ  r­   ri   r`  )r-  úNaTType | TimestamprV   r„   r­   r„   r0  )r-  rÔ  rV   r„   r‰  r«   r­   r„   )rY  rª   rV   r„   r‰  r«   r­   r   )r   F)r»  r.   rV   zstr | floatr^  rª   r­   r   )rH   NN)
r)  r²   rJ   r„   r*  r¬   rb   zprinting._TextAdjustment | Noner­   ztuple[list[str], int])r]  )r}  r9   rÖ   r„   r­   r²   )r‹  r„   r­   r„   )r’  zArrayLike | list[str]rÖ   r„   r­   r²   )rU   r0   r­   rª   )r”   F)r­  ri   r®  rª   r­   r®   )ry   )rÇ  r   rÈ  zbool | object | strr­   zlist[dict[int, int]])r_   zWriteBuffer[str]rÑ  r²   r­   r®   )Žrµ   Ú
__future__r   Úcollections.abcr   r   r   r   r   Ú
contextlibr	   Úcsvr
   rÖ   r   Ú	functoolsr   Úior   r¶  r|  Úshutilr   Útypingr   r   r   rÃ  Únumpyro   Úpandas._config.configr   r`   r   Úpandas._libsr   Úpandas._libs.missingr   Úpandas._libs.tslibsr   r   r   r   Úpandas._libs.tslibs.dtypesr   r   Úpandas._libs.tslibs.nattyper   Úpandas.errorsr   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Ú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.baser/   Úpandas.core.commonÚcoreÚcommonr–  Úpandas.core.indexes.apir0   r1   r2   r3   Úpandas.core.indexes.datetimesr4   Úpandas.core.indexes.timedeltasr5   Úpandas.io.commonr6   r7   r¿   r8   Úpandas._typingr9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rÀ  rE   rF   ÚVALID_JUSTIFY_PARAMETERSrQ   rÂ   rÆ   rÈ   rh  rt  r›  r   r‹   r¹  r·  r¸  r´  r¶  rF  r:  rQ  rU  rZ  rµ  r_  r1  r
  rÆ  r�  r�  r  rš   r™  rÅ  rÎ  rÒ  r¶   rg   re   ú<module>rõ     sø  ðñõ
 #÷õ õ &Ý Ý Ý Ý Û Û 	Ý $÷ñ ó
 ã ÷õ
 Ý #÷ó ÷õ 0Ý (Ý .Ý 4÷÷ ÷ñ ÷
÷
ó õ *ß  Ð  ÷ó õ 8Ý 9÷õ 'á÷÷ ÷ ó ÷ðÐ ÷b$ñ b$óJó>÷:EFñ EF÷P^ñ ^ðF /3ØðØðà	+ðð ðð ó	ð  àDHðMØ	+ðMØ7AðMà6òMó ðMóJ
Hð  ,0ØØØ"ØØØ!%ØØ*.ðS ØðS àðS ð )ðS ð ð	S ð
 ðS ð ðS ð ðS ð ðS ð ðS ð ðS ð (ðS ð óS ÷liñ iôXI0Ð0ô I0ôXÐ/ô ô#Ð1ô #ô2Ð5ô ðB?"Ø-ð?"àó?"óDôð Ø"ðØðàðð ðð 	ó	ð  IMð>Øð>Ø!$ð>Ø;Eð>àó>ô3Ð2ô 3ð(  Øð$Øð$àð$ð 
ð$ð ó	$ðR ØØ+/ð	#Øð#àð#ð ð#ð 
)ð	#ð
 ó#ôLóB	ð %˜"Ÿ*š*Ð%@ÓAÐ ð 7:ð(Ø%ð(Ø03ð(àó(óV&÷]ñ ]ñ@ ˆHÓó4Oó ð4Oðp 24ð(Øð(Ø.ð(àó(ôV rg   