ó
    Ñ]jF ã                  óú  • % S r SSKJr  SSKJrJrJrJrJr  SSK	J
r
  SSKJr  SSKJr  SSKJr  SSKJr  SS	KrSS	KrSS
KJr  SSKJrJrJrJr  SS	KrSSKJrJ r   SSK!J"r"  SSK#J$r$  SSK%J&r&J'r'J(r(  SSK)J*r*  SSK+J,r,  SSK-J.r.J/r/J0r0J1r1J2r2J3r3  SSK4J5r5J6r6J7r7  SSK8J9r9J:r:  SSK;J<r<J=r=J>r>J?r?  SSK@JArA  SS	KBJCs  JDrE  SSKFJGrGJHrHJIrIJJrJ  SSKKJLrL  SSKMJNrN  SSKOJPrPJQrQ  SSKRJSrS  \(       a$  SSKTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[J\r\J]r]J^r^J_r_J`r`  SSKaJbrbJcrc  SrdS\eS '   S!rfS"rgS\eS#'    " S$ S%5      rhSNS& jriSNS' jrj " S( S)5      rk " S* S+5      rl  SO       SPS, jjrm\
 SQ     SRS- jj5       rn         SS                       STS. jjro " S/ S05      rp " S1 S2\p5      rq " S3 S4\p5      rr " S5 S6\p5      rs " S7 S8\p5      rt    SUS9 jruSVS: jrvSWSXS; jjrw  SY       SZS< jjrx SY       S[S= jjry " S> S?\s5      rz " S@ SA\p5      r{  S\       S]SB jjr|   S^         S_SC jjr}S`SaSD jjr~SbSE jr S`     ScSF jjr€SdSG jr� " SH SI5      r‚\," SJ5      SeSfSK jj5       rƒ Sg     ShSL jjr„SiSM jr…g	)jz€
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ÚFinalÚcast)Ú
get_optionÚ
set_option)Úlib)ÚNA)ÚNaTÚ	TimedeltaÚ	Timestamp)ÚNaTType)Ú
set_module)Ú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Ú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            
      óŒ   • \ rS rSrSrSSSSSSSSSS.	                     SS jjrSS	 jrSS
 jrSS jrSS jr	Sr
g)ÚSeriesFormatteré½   zP
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       	        ó
  • Xl         [        5       U l        X`l        XPl        X0l        X l        X@l        X�l        X l	        Uc  [        S5      nXpl        X€l        [        R                  " 5       U l        U R!                  5         g )Núdisplay.float_format)Úseriesr   ÚbufrV   rU   rS   rR   rT   rY   rZ   r   rW   rX   r4   Úget_adjustmentÚadjÚ_chk_truncate)Úselfr]   rR   rS   rT   rU   rV   rW   rX   rY   rZ   s              ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pandas/io/formats/format.pyÚ__init__ÚSeriesFormatter.__init__Ã   sm   € ð ŒÜ“:ˆŒØŒ	ØŒØŒØŒØŒ
Ø ŒØ ŒàÑÜ%Ð&<Ó=ˆLØ(ÔØŒ
Ü×*Ò*Ó,ˆŒà×ÑÕó    c                ó  • U   U R                   nU R                  nU=(       a    [        U R                  5      U:„  nU R                  nU(       a£  [	        [
        U5      nU(       a  [        X5      nUS:X  a  UnUR                  S U nObUS-  n[        U5      n[        R                  " [        R                  " U5      [        R                  " Xe-
  U5      /5      nUR                  U   nXPl        OS U l        X@l        X0l        g )Né   é   )rZ   rY   Úlenr]   r   ÚintÚminÚilocÚnpÚhstackÚarangeÚ
tr_row_numÚ	tr_seriesÚis_truncated_vertically)rb   rZ   rY   rs   r]   Úrow_numÚ_lenÚ_slices           rc   ra   ÚSeriesFormatter._chk_truncateã   sÚ   € Ùà—=‘=ˆØ—=‘=ˆð #+×"L´°D·K±KÓ0@À8Ñ0KÐØ—‘ˆÞ"ÜœC Ó*ˆHÞô ˜xÓ2�Ø˜1‹}Ø"�ØŸ™ Y hÐ/‘à" a™-�Ü˜6“{�ÜŸšÜ—Y’Y˜wÓ'¬¯ª°4±>À4Ó)HÐIó�ð  Ÿ™ VÑ,�Ø%�Oà"ˆDŒOØŒØ'>Õ$rf   c                ó¨  • U R                   R                  nSnU R                   R                  n[        U[        [
        [        45      (       a  UR                  b  USUR                   3-  nU R                  SLa,  Ub)  U(       a  US-  n[        R                  " USS9nUSU 3-  nU R                  SL d!  U R                  S	:X  a8  U R                  (       a'  U(       a  US-  nUS
[        U R                   5       3-  nU R                  SLa]  U R                  bP  [        U R                   R                  SS 5      nU(       a(  U(       a  US-  nUS[        R                  " U5       3-  n[        U R                   R                  ["        5      (       a4  U R                   R$                  R'                  5       nU(       a  US-  nX&-  n[)        U5      $ )NÚ zFreq: Fz, ©Ú	ÚÚ
)Úescape_charszName: TÚtruncatezLength: rV   zdtype: r}   )r]   rV   rT   Ú
isinstancer0   r.   r1   ÚfreqÚfreqstrr4   Úpprint_thingrR   rs   rj   rX   Úgetattrrr   r"   Ú_valuesÚ_get_repr_footerÚstr)rb   rV   ÚfooterrT   Úseries_nameÚ
dtype_nameÚ
level_infos          rc   Ú_get_footerÚSeriesFormatter._get_footer  s‰  € Ø�{‰{×ÑˆØˆà—‘×!Ñ!ˆä�uœ}¬k¼>ÐJ×KÑKØ—
‘
Ñ&à˜˜uŸ}™}˜oÐ.Ñ.ˆFà�9‰9˜EÒ! dÑ&6ÞØ˜$‘�ä"×/Ò/°ÐCUÑVˆKØ˜˜{˜mÐ,Ñ,ˆ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ÞØ˜$‘�ØÑ ˆFä�6‹{Ðrf   c                ó€   • [        U R                  R                  S U R                  U R                  U R
                  S9$ )N)rW   rU   Úleading_space)Úformat_arrayrr   r…   rW   rU   rT   ©rb   s    rc   Ú_get_formatted_valuesÚ%SeriesFormatter._get_formatted_values,  s6   € ÜØ�N‰N×"Ñ"ØØ×*Ñ*Ø—;‘;ØŸ*™*ñ
ð 	
rf   c                óD  • U R                   nU R                  5       n[        U5      S:X  a%  [        U R                  5      R
                   SU S3$ UR                  n[        U5      n[        U[        5      (       aH  UR                  SS S9n[        R                  " 5       nUR                  " S/UQ76 R                  S5      nOUR                  SS9nU R!                  5       nU R"                  (       a‘  SnU R$                  n	['        [(        U	5      n	U R*                  R                  XyS	-
     5      n
U
S
:”  a  SnOSnU R*                  R-                  U/U
SS9S   nUR/                  X˜-   U5        UR/                  U	S	-   S5        U R                  (       a#  U R*                  R                  " S
/US	S  U/Q76 nOU R*                  R                  S
U5      nU R0                  (       a  U(       a  US   S-   U-   nU(       a  USU-   -  n[3        SR5                  U5      5      $ )Nr   z([], Ú)T)Úinclude_namesÚsparsifyri   r}   ©Úinclude_namerh   é   ú...z..rF   ©Úmodery   )rr   rŒ   rj   Útyper]   Ú__name__rT   Ú
_has_namesr€   r-   Ú_format_multir4   r_   ÚadjoinÚsplitÚ_format_flatr’   rs   rq   r   rk   r`   rG   ÚinsertrS   r‡   Újoin)rb   r]   rˆ   rT   Úhave_headerÚ	fmt_indexr`   Ú
fmt_valuesÚn_header_rowsrt   ÚwidthÚdot_strÚresults                rc   Ú	to_stringÚSeriesFormatter.to_string5  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Üœ3 Ó(ˆGØ—H‘H—L‘L °a©KÑ!8Ó9ˆEØ�q‹yØ‘à�ð —h‘h×&Ñ&¨ y°%¸hÐ&ÐGÈÑJˆGØ×Ñ˜gÑ5°wÔ?Ø×Ñ˜W q™[¨"Ô-à�:�:Ø—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“?Ó#Ð#rf   )r`   r^   rX   rW   rS   rT   rs   rR   rY   rZ   rU   rV   r]   rq   rr   )r]   rB   rR   ú
bool | strrS   ÚboolrT   r±   rU   r‡   rV   r±   rW   ú
str | NonerX   r±   rY   ú
int | NonerZ   r³   ÚreturnÚNone©r´   rµ   ©r´   r‡   ©r´   ú	list[str])rŸ   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rd   ra   rŒ   r’   r®   Ú__static_attributes__© rf   rc   rO   rO   ½   s«   † ñð "ØØØØØ#'ØØ#Ø#ñàðð ð	ð
 ðð ðð ðð ðð !ðð ðð ðð ðð 
õô@?ô>(ôT
÷+$rf   rO   c                 óÄ   • SSK Jn   [        S5      (       a  U R                  5       u  pOSn[        S5      [        S5      [        S5      [        S5      [        S	5      U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   )Úconsolezdisplay.expand_frame_reprNúdisplay.max_rowsúdisplay.min_rowszdisplay.max_columnsúdisplay.max_colwidthúdisplay.show_dimensions)rY   rZ   Úmax_colsÚmax_colwidthÚshow_dimensionsÚ
line_width)Úpandas.io.formatsrÁ   r   Úget_console_size)rÁ   rÉ   Ú_s      rc   Úget_dataframe_repr_paramsrÍ   c  sd   € õ *äÐ-×.Ñ.Ø×0Ñ0Ó2‰ˆ
�Aàˆ
äÐ1Ó2ÜÐ1Ó2ÜÐ4Ó5Ü"Ð#9Ó:Ü%Ð&?Ó@Ø ñð rf   c                 óŒ   • [        5       u  p[        S5      nUS:X  a  UOUnUS:X  a  UO
[        S5      nSSUU[        S5      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Â   r   rÃ   TrÅ   )rV   rX   rZ   rY   rR   )r   r   )r«   ÚheightÚmax_rows_optrY   rZ   s        rc   Úget_series_repr_paramsrÑ   ‚  s\   € ô &Ó'�M€EÜÐ0Ó1€LØ%¨Ó*‰v°€HØ%¨Ó*‰v´
Ð;MÓ0N€Hð ØØØÜÐ6Ó7ñð rf   c                  óv  • \ rS rSrSr\(       a  \OSr\\\-   -  r                 S(                                     S)S jjrS*S jr\	S+S j5       r
\	S+S j5       r\	S+S	 j5       r\	S+S
 j5       r\	S,S j5       r\	S+S j5       r\	S+S j5       r\	S+S j5       r\	S+S j5       r\	S-S j5       rS.S jr    S/S jrS0S jrS1S jrS2S jrS3S jrS3S jrS4S jrS+S jrS+S jrS+S jrS-S jrS5S jr S5S jr!S5S jr"S*S  jr#S6S! jr$S7S" jr%S8S# jr&S9S$ jr'S:S% jr(    S;S& jr)S'r*g)<ÚDataFrameFormatteriŸ  z{
Class for processing dataframe formatting options and data.

Used by DataFrame.to_string, which backs DataFrame.__repr__.
ry   Nc                ól  • Xl         U R                  U5      U l        U R                  U5      U l        X@l        XPl        X`l        U R                  U5      U l	        U R                  U5      U l        U R                  U	5      U l        U R                  U
5      U l        X°l        UU l        UU l        UU l        XÀl        XÐl        Xàl        Xðl        U R1                  5       U l        U R5                  5       U l        U R                   U l        U R;                  5         [<        R>                  " 5       U l         g ©N)!ÚframeÚ_initialize_columnsÚcolumnsÚ_initialize_colspaceÚ	col_spacerS   rT   rU   Ú_initialize_formattersÚ
formattersÚ_initialize_justifyrG   Ú_validate_float_formatrW   Ú_initialize_sparsifyr—   Úshow_index_namesÚdecimalÚ	bold_rowsÚescaperY   rZ   rÆ   rÈ   Ú_calc_max_cols_fittedÚmax_cols_fittedÚ_calc_max_rows_fittedÚmax_rows_fittedÚtr_framer   r4   r_   r`   )rb   rÖ   rØ   rÚ   rS   rT   rU   rÜ   rG   rW   r—   Úindex_namesrY   rZ   rÆ   rÈ   rá   râ   rã   s                      rc   rd   ÚDataFrameFormatter.__init__©  sû   € ð* Œ
Ø×/Ñ/°Ó8ˆŒØ×2Ñ2°9Ó=ˆŒØŒØŒ
ØŒØ×5Ñ5°jÓAˆŒØ×/Ñ/°Ó8ˆŒØ ×7Ñ7¸ÓEˆÔØ×1Ñ1°(Ó;ˆŒØ +ÔØˆŒØ"ˆŒØˆŒØ ŒØ ŒØ ŒØ.Ôà#×9Ñ9Ó;ˆÔØ#×9Ñ9Ó;ˆÔàŸ
™
ˆŒØ�‰ŒÜ×*Ò*Ó,ˆ�rf   c                ó¢   • U R                  5       nU R                  (       a-  U R                  U R                  5      nUR	                  SU5        U$ )z@
Render a DataFrame to a list of columns (as lists of strings).
r   )Ú_get_strcols_without_indexrT   Ú_get_formatted_indexrè   r¥   )rb   ÚstrcolsÚ	str_indexs      rc   Úget_strcolsÚDataFrameFormatter.get_strcolsØ  s@   € ð ×1Ñ1Ó3ˆà�:�:Ø×1Ñ1°$·-±-Ó@ˆIØ�N‰N˜1˜iÔ(àˆrf   c                óp   • U R                   SL =(       d"    U R                   S:H  =(       a    U R                  $ )NTr   )rÈ   Úis_truncatedr‘   s    rc   Úshould_show_dimensionsÚ)DataFrameFormatter.should_show_dimensionsä  s3   € à×#Ñ# tÐ+÷ 
Ø× Ñ  JÑ.×D°4×3DÑ3Dð	
rf   c                óR   • [        U R                  =(       d    U R                  5      $ rÕ   )r±   Úis_truncated_horizontallyrs   r‘   s    rc   ró   ÚDataFrameFormatter.is_truncatedê  s   € ä�D×2Ñ2×R°d×6RÑ6RÓSÐSrf   c                ó~   • [        U R                  =(       a"    [        U R                  5      U R                  :„  5      $ rÕ   )r±   rå   rj   rØ   r‘   s    rc   r÷   Ú,DataFrameFormatter.is_truncated_horizontallyî  s,   € ä�D×(Ñ(×W¬c°$·,±,Ó.?À$×BVÑBVÑ.VÓXÐXrf   c                ó~   • [        U R                  =(       a"    [        U R                  5      U R                  :„  5      $ rÕ   )r±   rç   rj   rÖ   r‘   s    rc   rs   Ú*DataFrameFormatter.is_truncated_verticallyò  s+   € ä�D×(Ñ(×U¬c°$·*±*«oÀ×@TÑ@TÑ.TÓVÐVrf   c                ót   • S[        U R                  5       S[        U R                  R                  5       S3$ )Nz

[z rows x z	 columns])rj   rÖ   rØ   r‘   s    rc   Údimensions_infoÚ"DataFrameFormatter.dimensions_infoö  s0   € à”s˜4Ÿ:™:“Ð' x´°D·J±J×4FÑ4FÓ0GÐ/HÈ	ÐRÐRrf   c                ó@   • [        U R                  R                  5      $ rÕ   )r    rÖ   rT   r‘   s    rc   Úhas_index_namesÚ"DataFrameFormatter.has_index_namesú  s   € ä˜$Ÿ*™*×*Ñ*Ó+Ð+rf   c                ó@   • [        U R                  R                  5      $ rÕ   )r    rÖ   rØ   r‘   s    rc   Úhas_column_namesÚ#DataFrameFormatter.has_column_namesþ  s   € ä˜$Ÿ*™*×,Ñ,Ó-Ð-rf   c                óZ   • [        U R                  U R                  U R                  45      $ rÕ   )Úallr  rT   rà   r‘   s    rc   Úshow_row_idx_namesÚ%DataFrameFormatter.show_row_idx_names  s$   € ä�D×(Ñ(¨$¯*©*°d×6KÑ6KÐLÓMÐMrf   c                óZ   • [        U R                  U R                  U R                  45      $ rÕ   )r  r  rà   rS   r‘   s    rc   Úshow_col_idx_namesÚ%DataFrameFormatter.show_col_idx_names  s$   € ä�D×)Ñ)¨4×+@Ñ+@À$Ç+Á+ÐNÓOÐOrf   c                óŒ   • [        U R                  =(       d    [        U R                  5      [        U R                  5      5      $ rÕ   )rl   rY   rj   rÖ   r‘   s    rc   Úmax_rows_displayedÚ%DataFrameFormatter.max_rows_displayed
  s(   € ä�4—=‘=×3¤C¨¯
©
£O´S¸¿¹³_ÓEÐErf   c                ó"   • Uc  [        S5      $ U$ )Nzdisplay.multi_sparse©r   )rb   r—   s     rc   rß   Ú'DataFrameFormatter._initialize_sparsify  s   € ØÑÜÐ4Ó5Ð5Øˆrf   c                ó  • Uc  0 $ [        U R                  R                  5      [        U5      :X  d  [        U[        5      (       a  U$ [        S[        U5       S[        U R                  R                  5       S35      e)NzFormatters length(ú+) should match DataFrame number of columns(r•   )rj   rÖ   rØ   r€   ÚdictÚ
ValueError)rb   rÜ   s     rc   rÛ   Ú)DataFrameFormatter._initialize_formatters  sx   € ð ÑØˆIÜ�—‘×#Ñ#Ó$¬¨J«Ó7¼:ÀjÔRV×;WÑ;WØÐäØ$¤S¨£_Ð$5ð 6/Ü/2°4·:±:×3EÑ3EÓ/FÐ.GÀqðJóð rf   c                ó"   • Uc  [        S5      $ U$ )Nzdisplay.colheader_justifyr  )rb   rG   s     rc   rÝ   Ú&DataFrameFormatter._initialize_justify   s   € Ø‰?ÜÐ9Ó:Ð:àˆNrf   c                óv   • Ub!  [        U5      nU R                  U   U l        U$ U R                  R                  $ rÕ   )r/   rÖ   rØ   )rb   rØ   Úcolss      rc   r×   Ú&DataFrameFormatter._initialize_columns&  s7   € ØÑÜ Ó(ˆDØŸ™ DÑ)ˆDŒJØˆKà—:‘:×%Ñ%Ð%rf   c                óž  • Uc  0 nU$ [        U[        [        45      (       a?  SU0nUR                  [        R                  U R                  R                  U5      5        U$ [        U[        5      (       aJ  UR                  5        H2  nX0R                  R                  ;  d  M  US:w  d  M&  [        SU 35      e   UnU$ [        U R                  R                  5      [        U5      :w  a8  [        S[        U5       S[        U R                  R                  5       S35      e[	        [        U R                  R                  USS95      nU$ )Nry   z,Col_space is defined for an unknown column: zCol_space length(r  r•   T©Ústrict)r€   rk   r‡   Úupdater  ÚfromkeysrÖ   rØ   r   Úkeysr  rj   Úzip)rb   rÚ   r­   Úcolumns       rc   rÙ   Ú'DataFrameFormatter._initialize_colspace.  s1  € ð ÑØˆ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Øˆrf   c                ó¤   • U R                  5       (       d  U R                  $ [        5       u  pU R                  U5      (       a  U$ U R                  $ )z%Number of columns fitting the screen.)Ú_is_in_terminalrÆ   r   Ú_is_screen_narrow)rb   r«   rÌ   s      rc   rä   Ú(DataFrameFormatter._calc_max_cols_fittedF  sE   € à×#Ñ#×%Ñ%Ø—=‘=Ð ä$Ó&‰ˆØ×!Ñ! %×(Ñ(ØˆLà—=‘=Ð rf   c                ó  • U R                  5       (       aT  [        5       u  pU R                  S:X  a  X R                  5       -
  $ U R	                  U5      (       a  UnOU R                  nOU R                  nU R                  U5      $ )z,Number of rows with data fitting the screen.r   )r'  r   rY   Ú_get_number_of_auxiliary_rowsÚ_is_screen_shortÚ_adjust_max_rows)rb   rÌ   rÏ   rY   s       rc   ræ   Ú(DataFrameFormatter._calc_max_rows_fittedQ  st   € ð ×Ñ×!Ñ!Ü)Ó+‰IˆAØ�}‰} Ó!à× BÑ BÓ DÑDÐDà×$Ñ$ V×,Ñ,Ø!‘àŸ=™=‘à—}‘}ˆHà×$Ñ$ XÓ.Ð.rf   c                ó”   • U(       a@  [        U R                  5      U:”  a'  U R                  (       a  [        U R                  U5      nU$ )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
)rj   rÖ   rZ   rl   )rb   rY   s     rc   r-  Ú#DataFrameFormatter._adjust_max_rowsd  s2   € ö Ü�D—J‘J“ (Ó*°··ä˜tŸ}™}¨hÓ7�Øˆrf   c                ó^   • [        U R                  S:H  =(       d    U R                  S:H  5      $ )z/Check if the output is to be shown in terminal.r   )r±   rÆ   rY   r‘   s    rc   r'  Ú"DataFrameFormatter._is_in_terminalr  s$   € ä�D—M‘M QÑ&×<¨$¯-©-¸1Ñ*<Ó=Ð=rf   c                ó„   • [        U R                  S:H  =(       a"    [        U R                  R                  5      U:„  5      $ ©Nr   )r±   rÆ   rj   rÖ   rØ   )rb   Ú	max_widths     rc   r(  Ú$DataFrameFormatter._is_screen_narrowv  s/   € Ü�D—M‘M QÑ&×N¬3¨t¯z©z×/AÑ/AÓ+BÀYÑ+NÓOÐOrf   c                óp   • [        U R                  S:H  =(       a    [        U R                  5      U:„  5      $ r4  )r±   rY   rj   rÖ   )rb   Ú
max_heights     rc   r,  Ú#DataFrameFormatter._is_screen_shorty  s(   € Ü�D—M‘M QÑ&×G¬3¨t¯z©z«?¸ZÑ+GÓHÐHrf   c                ó°   • SnSnX-   nU R                   (       a&  U[        U R                  R                  5       5      -  nU R                  (       a  US-  nU$ )z?Get number of rows occupied by prompt, dots and dimension info.rh   )rÈ   rj   rþ   Ú
splitlinesrS   )rb   Údot_rowÚ
prompt_rowÚnum_rowss       rc   r+  Ú0DataFrameFormatter._get_number_of_auxiliary_rows|  sP   € àˆØˆ
ØÑ'ˆà××Øœ˜D×0Ñ0×;Ñ;Ó=Ó>Ñ>ˆHà�;�;Ø˜‰MˆHàˆrf   c                óŠ   • U R                   (       a  U R                  5         U R                  (       a  U R                  5         gg)zI
Check whether the frame should be truncated. If so, slice the frame up.
N)r÷   Ú_truncate_horizontallyrs   Ú_truncate_verticallyr‘   s    rc   r   ÚDataFrameFormatter.truncateŠ  s3   € ð ×)×)Ø×'Ñ'Ô)à×'×'Ø×%Ñ%Õ'ð (rf   c                ót  • U R                   c   eU R                   S-  nUS:¼  aÐ  [        U R                  R                  5      n[        R
                  " [        R                  " U5      [        R                  " X!-
  U5      /5      nU R                  R                  SS2U4   U l        [        U R                  [        [        45      (       a&  / U R                  SU QU R                  U* S QU l	        O>[        [        U R                  5      nU R                  R                  SS2SU24   U l        Xl        g)zŒRemove columns, which are not to be displayed and adjust formatters.

Attributes affected:
    - tr_frame
    - formatters
    - tr_col_num
Nri   rh   )rå   rj   rè   rØ   rn   ro   rp   rm   r€   rÜ   ÚlistÚtupler   rk   rÆ   Ú
tr_col_num)rb   Úcol_numru   rv   s       rc   rA  Ú)DataFrameFormatter._truncate_horizontally”  s  € ð ×#Ñ#Ñ/Ð/Ð/Ø×&Ñ&¨!Ñ+ˆØ�a‹<Ü�t—}‘}×,Ñ,Ó-ˆDÜ—Y’Y¤§	¢	¨'Ó 2´B·I²I¸d¹nÈdÓ4SÐTÓUˆFØ ŸM™M×.Ñ.ªq°&¨yÑ9ˆDŒMô ˜$Ÿ/™/¬D´%¨=×9Ñ9ð#Ø—_‘_ X gÐ.ð#à—_‘_ g X YÐ/ð#�”øô
 œ3 §¡Ó.ˆGØ ŸM™M×.Ñ.ªq°(°7°(¨{Ñ;ˆDŒMØ&�rf   c                óÂ  • U R                   c   eU R                   S-  nUS:¼  aw  [        U R                  5      n[        R                  " [        R
                  " U5      [        R
                  " X!-
  U5      /5      nU R                  R                  U   U l        O>[        [        U R                  5      nU R                  R                  SU2SS24   U l        Xl
        g)zbRemove rows, which are not to be displayed.

Attributes affected:
    - tr_frame
    - tr_row_num
Nri   rh   )rç   rj   rè   rn   ro   rp   rm   r   rk   rY   rq   )rb   rt   ru   rv   s       rc   rB  Ú'DataFrameFormatter._truncate_vertically®  s­   € ð ×#Ñ#Ñ/Ð/Ð/Ø×&Ñ&¨!Ñ+ˆØ�a‹<Ü�t—}‘}Ó%ˆDÜ—Y’Y¤§	¢	¨'Ó 2´B·I²I¸d¹nÈdÓ4SÐTÓUˆFØ ŸM™M×.Ñ.¨vÑ6ˆD�Mäœ3 §¡Ó.ˆGØ ŸM™M×.Ñ.¨x°¨xº¨{Ñ;ˆDŒMØ!�rf   c                ó8  ^ • / n[        T R                  5      (       d–  T R                  (       d…  [        T R                  5       Hj  u  p#T R	                  U5      n[        UT R                  [        T R                  R                  US5      5      T R                  S9nUR                  U5        Ml     U$ [        T R                  5      (       a§  [        [        [           T R                  5      T l        [        T R                  5      [        T R                   5      :w  a8  [#        S[        T R                   5       S[        T R                  5       S35      eT R                   Vs/ s H  oU/PM     nnOT R%                  T R                  5      nT R&                  (       a  U H  nUR                  S5        M     [        T R                  5       HÁ  u  p#Xb   n[)        [        T R                  R                  US5      5      /U 4S jU 5       Q76 n	T R	                  U5      n[        UT R                  U	T R                  S9n[)        / U 4S	 jU 5       QU	P76 n
T R                  R                  XŠT R                  S
9nUR                  X„-   5        MÃ     U$ s  snf )Nr   )ÚstringsrG   Úminimumr`   zWriting z cols but got z aliasesry   c              3  óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7frÕ   ©r`   rj   ©Ú.0Úxrb   s     €rc   Ú	<genexpr>Ú@DataFrameFormatter._get_strcols_without_index.<locals>.<genexpr>â  s   øé € Ð0RÊ'ÀQ°·±·±¸a·°Ê'ùó   ƒ(+)rN  r`   c              3  óZ   >#   • U  H   nTR                   R                  U5      v •  M"     g 7frÕ   rP  rQ  s     €rc   rT  rU  é  s   øé € Ð@²Z°˜DŸH™HŸL™L¨ŸO˜O²ZùrV  rœ   )r   rS   Ú	enumeraterè   Ú
format_colÚ_make_fixed_widthrG   rk   rÚ   Úgetr`   Úappendr   rE  r‡   rj   rØ   r  Ú_get_formatted_column_labelsr  Úmax)rb   rî   ÚiÚcr©   ÚlabelÚstr_columnsrS  ÚcheaderÚheader_colwidthÚmax_lens   `          rc   rì   Ú-DataFrameFormatter._get_strcols_without_indexÀ  s  ø€ Ø#%ˆä˜DŸK™K×(Ñ(°··Ü! $§-¡-Ö0‘�Ø!Ÿ_™_¨QÓ/�
Ü.Ø&Ø ŸL™LÜ §¡× 2Ñ 2°1°aÓ 8Ó9ØŸ™ñ	�
ð —‘˜zÖ*ñ 1ð ˆNä˜Ÿ™×$Ñ$äœt¤C™y¨$¯+©+Ó6ˆDŒKÜ�4—;‘;Ó¤3 t§|¡|Ó#4Ó4Ü Øœs 4§<¡<Ó0Ð1ð 2Ü" 4§;¡;Ó/Ð0°ð:óð ð 15·²Ó<² u›7±ˆKÐ<ˆKà×;Ñ;¸D¿M¹MÓJˆKà×"×"Û �Ø—‘˜–ñ !ô ˜dŸm™mÖ,‰DˆAØ!‘nˆGÜ!Ü�D—N‘N×&Ñ& q¨!Ó,Ó-ðÜ0RÉ'Ó0RòˆOð Ÿ™¨Ó+ˆJÜ*Ø˜DŸL™L°/ÀtÇxÁxñˆJô ÐRÔ@±ZÓ@ÐRÀ/ÒRˆGØ—h‘h×&Ñ& w¸d¿l¹lÐ&ÐKˆGØ�N‰N˜7Ñ/Ö0ñ -ð ˆùò- =s   Å&Jc           
     ó,  • U R                   nU R                  U5      n[        UR                  S S 2U4   R                  UU R
                  U R                  U R                  R                  UR                  U   5      U R                  U R                  S9$ )N)rW   rU   Úspacerá   r�   )rè   Ú_get_formatterr�   rm   r…   rW   rU   rÚ   r[  rØ   rá   rT   )rb   r_  rÖ   Ú	formatters       rc   rY  ÚDataFrameFormatter.format_colï  sz   € Ø—‘ˆØ×'Ñ'¨Ó*ˆ	ÜØ�J‰J’q˜!�tÑ×$Ñ$ØØ×*Ñ*Ø—;‘;Ø—.‘.×$Ñ$ U§]¡]°1Ñ%5Ó6Ø—L‘LØŸ*™*ñ
ð 	
rf   c                ó@  • [        U R                  [        [        45      (       a0  [	        U5      (       a  [        [        U5      nU R                  U   $ g [	        U5      (       a  XR                  ;  a  U R                  U   nU R                  R                  US 5      $ rÕ   )	r€   rÜ   rE  rF  r   r   rk   rØ   r[  )rb   r_  s     rc   ri  Ú!DataFrameFormatter._get_formatterü  ss   € Ü�d—o‘o¬¬e }×5Ñ5Ü˜!�}‰}Üœ˜a“L�Ø—‘ qÑ)Ð)àä˜!�}‰} ¯,©,Ó!6Ø—L‘L ‘O�Ø—?‘?×&Ñ& q¨$Ó/Ð/rf   c                ó   • SSK Jn  UR                  n[        U[        5      (       a_  UR                  SSS9nU R                  (       a  [        U5      (       a  U" U5      n[        USS06 Vs/ s H  n[        U5      PM     nnU$ UR                  SS9n[        [        X@R                  R                  SS95       VVVs/ s H6  u  nu  pXU R                  U5      (       d  [        U5      (       a  S	U-   OU/PM8     nnnnU$ s  snf s  snnnf )
Nr   )Úsparsify_labelsF)r—   r–   r  Tr˜   r  Ú )Úpandas.core.indexes.multiro  rØ   r€   r-   r¡   r—   rj   r#  rE  r¤   rX  rÖ   Údtypesri  r    )	rb   rÖ   ro  rØ   Úfmt_columnsrS  rb  r_  rX   s	            rc   r]  Ú/DataFrameFormatter._get_formatted_column_labels  s  € Ý=à—-‘-ˆä�gœz×*Ñ*Ø!×/Ñ/¸ÈeÐ/ÐTˆKØ�}�}¤ [×!1Ñ!1Ù-¨kÓ:�ä,/°Ð,JÀTÒ,JÓKÒ,J qœ4 ž7Ñ,JˆKÐKð Ðð "×.Ñ.¸EÐ.ÐBˆKô &/Ü˜§Z¡Z×%6Ñ%6¸uÑEô&õ	ò&‘M�A‘z˜ð  ×.Ñ.¨q×1Ñ1Ô6FÀu×6MÑ6Mð ˜!’Gàóñ
&ð ò 	ð Ðùò Lùô	s   Á.DÃ=D	c                óF  • U R                   R                  5        VVs0 s H  u  p#U[        [        U5      _M     nnnUR                  nUR
                  nU R                  S5      n[        U[        5      (       a&  UR                  U R                  U R                  US9nOUR                  U R                  US9/nU V	s/ s H;  n	[        [        [        U	5      SUR!                  SS5      U R"                  S95      PM=     nn	U R"                  R$                  " S/UQ76 R'                  S	5      n
U R(                  (       a*  U R+                  5        V	s/ s H  n	[-        U	5      PM     nn	OS/UR.                  -  nU R0                  (       a  Xº-   $ U
$ s  snnf s  sn	f s  sn	f )
NÚ	__index__)r—   r–   rj  )r™   rj  rD   ry   r   )rG   rN  r`   rh   r}   )rÚ   Úitemsr   rk   rT   rØ   ri  r€   r-   r¡   r—   r  r¤   rF  rZ  rE  r[  r`   r¢   r£   r  Ú_get_column_name_listr‡   ÚnlevelsrS   )rb   rÖ   ÚkÚvrÚ   rT   rØ   Úfmtr¨   rS  ÚadjoinedÚ
col_headers               rc   rí   Ú'DataFrameFormatter._get_formatted_index!  s‡  € ð 26·±×1EÑ1EÔ1GÔHÒ1G©¨�QœœS !›’_Ñ1Gˆ	ÑHØ—‘ˆØ—-‘-ˆØ×!Ñ! +Ó.ˆä�eœZ×(Ñ(Ø×+Ñ+ØŸ™Ø"×5Ñ5Øð ,ð ‰Ið ×"Ñ"°×0GÑ0GÐSVÐ"ÐWðˆIñ ó
ò �ô Ü!Ü˜“G V°Y·]±]À2ÀqÓ5IÈtÏxÉxñöñ
 ð 	ð 
ð —8‘8—?’? 1Ð1 yÒ1×7Ñ7¸Ó=ˆð ×"×"Ø*.×*DÑ*DÔ*FÓGÒ*F Qœ#˜až&Ñ*FˆJÐGˆJà˜ §¡Ñ/ˆJà�;�;ØÑ(Ð(àˆOùóI Iùò 
ùò Hs   žFÃAFÅFc                óü   • / nU R                   R                  n[        U[        5      (       a$  UR	                  S UR
                   5       5        U$ UR                  UR                  c  SOUR                  5        U$ )Nc              3  ó.   #   • U  H  oc  SOUv •  M     g 7f)Nry   r¿   )rR  rV   s     rc   rT  Ú;DataFrameFormatter._get_column_name_list.<locals>.<genexpr>N  s   é € ÐPÂ-¸$™|™°Ô5Â-ùs   ‚ry   )rÖ   rØ   r€   r-   ÚextendÚnamesr\  rV   )rb   r„  rØ   s      rc   rx  Ú(DataFrameFormatter._get_column_name_listJ  sb   € Ø "ˆØ—*‘*×$Ñ$ˆÜ�gœz×*Ñ*Ø�L‰LÑPÀ'Ç-Â-ÓPÔPð ˆð �L‰L˜wŸ|™|Ñ3™¸¿¹ÔFØˆrf   c                ó  • Ub  [        U5      (       a  U$ [        U[        5      (       a&  SU;   a  U$  UR                  S5      nUR                  $ [	        S5      e! [        [
        [        4 a  n[	        SU< 35      UeSnAff = f)zd
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)rb   r|  rÌ   Úes       rc   rÞ   Ú)DataFrameFormatter._validate_float_formatS  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 ÁBÁ1BÂB)r`   râ   rÚ   rØ   rá   rã   rW   rÜ   rÖ   rS   rT   rG   rÆ   rå   rY   rç   rZ   rU   rÈ   rà   r—   rG  rè   rq   )NNTTrQ   NNNNTNNNFÚ.FT)&rÖ   rA   rØ   úAxes | NonerÚ   úColspaceArgType | NonerS   zbool | SequenceNotStr[str]rT   r±   rU   r‡   rÜ   úFormattersType | NonerG   r²   rW   úFloatFormatType | Noner—   úbool | Noneré   r±   rY   r³   rZ   r³   rÆ   r³   rÈ   r°   rá   r‡   râ   r±   rã   r±   r´   rµ   )r´   úlist[list[str]]©r´   r±   r·   )r´   rk   )r—   r“  r´   r±   )rÜ   r‘  r´   r<   )rG   r²   r´   r‡   )rØ   r�  r´   r,   )rÚ   r�  r´   r8   )r´   r³   )rY   r³   r´   r³   r¶   )r_  rk   r´   r¹   )r_  ú	str | intr´   úCallable | None)rÖ   rA   r´   r”  )rÖ   rA   r´   r¹   )r´   zlist[Hashable])r|  r’  r´   r’  )+rŸ   rº   r»   r¼   r½   rC   rM   rd   rð   Úpropertyrô   ró   r÷   rs   rþ   r  r  r  r  r  rß   rÛ   rÝ   r×   rÙ   rä   ræ   r-  r'  r(  r,  r+  r   rA  rB  rì   rY  ri  r]  rí   rx  rÞ   r¾   r¿   rf   rc   rÓ   rÓ   Ÿ  sŠ  † ñö !‰g b€GØÐÐ"2Ñ2Ñ2€Gð
  $Ø,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rf   rÓ   c                  óî   • \ rS rSrSrS	S jr       S
               SS jjr   S       SS jjr                S                                 SS jjrSr	g)ÚDataFrameRendererik  a  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                ó   • Xl         g rÕ   ©r|  )rb   r|  s     rc   rd   ÚDataFrameRenderer.__init__|  s   € Ø�rf   Nc                ó„   • SSK JnJn	  U(       a  U	OUn
U
" U R                  UUUUS9nUR	                  5       n[        XÁUS9$ )us  
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.htmlrŸ  r   r|  r®   Úsave_to_buffer)rb   r^   r¦  r¡  Únotebookr¢  r£  r¤  rŸ  r   ÚKlassÚhtml_formatterÚstrings                rc   Úto_htmlÚDataFrameRenderer.to_html  sN   € ÷L	
ö
 &.Ñ!°=ˆáØ�H‰HØØØØ%ñ
ˆð  ×)Ñ)Ó+ˆÜ˜f¸ÑAÐArf   c                ód   • SSK Jn  U" U R                  US9nUR                  5       n[	        XaUS9$ )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É   r¥  )Úpandas.io.formats.stringr°  r|  r®   r¨  )rb   r^   r¦  rÉ   r°  Ústring_formatterr¬  s          rc   r®   ÚDataFrameRenderer.to_string¶  s3   € õ( 	=á*¨4¯8©8À
ÑKÐØ!×+Ñ+Ó-ˆÜ˜f¸ÑAÐArf   c                óZ  • SSK Jn  Uc  Sn[        5       nOSnU" S0 SU_SU
_SU_S	U_S
U_SU_SU_SU_SU_SU_SU_SU	_SU_SU_SU_SU_SU R                  _6nUR	                  5         U(       a9  [        U[        5      (       d   eUR                  5       nUR                  5         U$ g)z+
Render dataframe as comma-separated file.
r   )ÚCSVFormatterNTFÚpath_or_bufÚlineterminatorÚsepr¦  ÚerrorsÚcompressionÚquotingr  Úindex_labelr�   Ú	chunksizeÚ	quotecharÚdate_formatÚdoublequoteÚ
escapecharÚstorage_optionsrj  r¿   )Úpandas.io.formats.csvsrµ  r   r|  Úsaver€   ÚgetvalueÚclose)rb   r¶  r¦  r¸  rØ   r¼  r�   rº  r»  r¾  r·  r½  r¿  rÀ  rÁ  r¹  rÂ  rµ  Úcreated_bufferÚcsv_formatterÚcontents                        rc   Úto_csvÚDataFrameRenderer.to_csvÐ  s  € õ, 	8àÑØ!ˆNÜ"›*‰Kà"ˆNá$ò 
Ù#ð
á)ð
ñ ð
ñ ð	
ñ
 ð
ñ $ð
ñ ð
ñ ð
ñ $ð
ñ ð
ñ  ð
ñ  ð
ñ $ð
ñ $ð
ñ "ð
ñ  ,ð!
ð" —h’hð#
ˆð& 	×ÑÔæÜ˜k¬8×4Ñ4Ð4Ð4Ø!×*Ñ*Ó,ˆGØ×ÑÔØˆNàrf   rœ  )r|  rÓ   r´   rµ   )NNNFNNF)r^   ú"FilePath | WriteBuffer[str] | Noner¦  r²   r¡  zstr | list | tuple | Noner©  r±   r¢  zint | bool | Noner£  r²   r¤  r±   r´   r²   )NNN)r^   rÌ  r¦  r²   rÉ   r³   r´   r²   )NNÚ,NNÚwÚinferNÚ"NNNTNr  N)"r¶  z7FilePath | WriteBuffer[bytes] | WriteBuffer[str] | Noner¦  r²   r¸  r‡   rØ   zSequence[Hashable] | Noner¼  zIndexLabel | Noner�   r‡   rº  r9   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¼   r½   rd   r­  r®   rÊ  r¾   r¿   rf   rc   rš  rš  k  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ð 9rf   rš  c                ó¦   • [        XS9 nUR                  U 5        Uc  UR                  5       sSSS5        $  SSS5        g! , (       d  f       g= f)zI
Perform serialization. Write to buf or return as string if buf is None.
)r¦  N)Ú_get_bufferÚwriterÅ  )r¬  r^   r¦  Úfds       rc   r¨  r¨    sA   € ô 
�SÒ	,°Ø
�‰�ÔØ‰;à—;‘;“=÷	 
-Ñ	,ð
 ÷ 
-×	,Ö	,ús   Š$A¸AÁ
Ac              #  ór  #   • U b  [        U 5      n O
[        5       n Uc  SnO [        U [        5      (       d  [	        S5      e[        U S5      (       a  U v •  g[        U [        5      (       a.  [        [        U 5      5        [        U SUSS9 nUv •  SSS5        g[        S5      e! , (       d  f       g= f7f)	zt
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   )r¦  Únewlinez1buf is not a file name and it has no write method)	r3   r   r€   r‡   r  Úhasattrr2   ÚopenÚ	TypeError)r^   r¦  Úfs      rc   rÒ  rÒ    s£   é € ð �Ü˜SÓ!‰ä‹jˆàÑØ‰Ü˜œS×!Ñ!ÜÐLÓMÐMäˆs�G×Ñð ‹	Ü	�Cœ×	Ñ	Üœs 3›xÔ(Ü�#�s X°rÒ:¸að
 ŠG÷ ;Ð:ô ÐKÓLÐL÷ ;Õ:üs   ‚BB7ÂB&ÂB7Â&
B4Â0B7c                óð  • [         R                  " U R                  S5      (       a  [        n[	        [
        U 5      n Où[        U R                  [        5      (       a  [        n[	        [
        U 5      n OÃ[         R                  " U R                  S5      (       a  [        n[	        [        U 5      n O†[        U R                  [        5      (       a  [        nO`[         R                  " U R                  S5      (       a  [        nO3[         R                  " U R                  S5      (       a  [        nO[        nUc  SnUc  [!        S5      nUc  [!        S5      nU" U UUUUUUUUU	U
S9nUR#                  5       $ )	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Úiué   r\   údisplay.precision)
ÚdigitsrU   rW   rj  rh  rG   rá   r�   r»  Úfallback_formatter)r   Úis_np_dtyperX   Ú_Datetime64Formatterr   r(   r€   r#   Ú_Datetime64TZFormatterÚ_Timedelta64Formatterr*   r$   Ú_ExtensionArrayFormatterÚFloatArrayFormatterÚ_IntArrayFormatterÚ_GenericArrayFormatterr   Ú
get_result)Úvaluesrj  rW   rU   râ  rh  rG   rá   r�   r»  rã  Ú	fmt_klassÚfmt_objs                rc   r�   r�   B  s)  € ôR ‡‚�v—|‘| S×)Ñ)Ü(ˆ	Ü”m VÓ,‰Ü	�F—L‘L¤/×	2Ñ	2Ü*ˆ	Ü”m VÓ,‰Ü	�Š˜Ÿ™ s×	+Ñ	+Ü)ˆ	Ü”n fÓ-‰Ü	�F—L‘L¤.×	1Ñ	1Ü,‰	Ü	�Š˜Ÿ™ t×	,Ñ	,Ü'‰	Ü	�Š˜Ÿ™ t×	,Ñ	,Ü&‰	ä*ˆ	à�}ØˆàÑÜ!Ð"8Ó9ˆà�~ÜÐ/Ó0ˆáØØØØ!ØØØØØ#ØØ-ñ€Gð ×ÑÓÐrf   c                  ó~   • \ rS rSr           S                         SS jjrS	S jrS	S jrSrg)
rë  i—  Nc                ó”   • Xl         X l        X@l        XPl        X0l        X`l        Xpl        X€l        X�l        X l	        X°l
        XÀl        g rÕ   )rí  râ  rU   rh  rj  rW   rG   rá   r»  Úfixed_widthr�   rã  )rb   rí  râ  rj  rU   rh  rW   rG   rá   r»  rò  r�   rã  s                rc   rd   Ú_GenericArrayFormatter.__init__˜  sD   € ð ŒØŒØŒØŒ
Ø"ŒØ(ÔØŒØŒØŒØ&ÔØ*ÔØ"4Õrf   c                óL   • U R                  5       n[        XR                  5      $ rÕ   )Ú_format_stringsrZ  rG   )rb   r©   s     rc   rì  Ú!_GenericArrayFormatter.get_result´  s   € Ø×)Ñ)Ó+ˆ
Ü  ¯\©\Ó:Ð:rf   c                ó"  ^ ^^• T R                   c   [        S5      nUc  [        S5      mU4S jnOT R                   nT R                  b  T R                  mO[T R                  b  T R                  mOAT R                  S L=(       a    T R                  [
        :g  n[        [        R                  SUS9mUU 4S jnT R                  n[        U[        R                  5      (       d  [        S5      e[        R                  " U[         5      nU[        R"                  " [%        U5      ['        [)        S[+        UR,                  5      5      5      S	9-  nT R.                  nUc  UR1                  5       n/ n[3        U5       HŽ  u  pšXi   (       a  T R                  b#  U(       a  UR5                  S
U" U
5       35        M>  Xi   (       a  UR5                  U" U
5      5        M`  USL a  SnOSnUR5                  UR7                  U" U
5      S95        M�     U$ )Nr\   rá  c                ó(   >• [        U STS S3 5      $ )Nz .ÚdrÚ  )Ú_trim_zeros_single_float)rS  Ú	precisions    €rc   Ú<lambda>Ú8_GenericArrayFormatter._format_strings.<locals>.<lambda>½  s   ø€ Ô)AØ˜˜I a˜=¨Ð)Ð*ô*rf   rz   )r~   Úquote_stringsc                ó‚  >• TR                   b�  [        U 5      (       aq  [        U 5      (       aa  U c  gU [        L a  [	        [        5      $ U [
        L d/  [        U [        R                  [        R                  45      (       a  gTR                   $ [        U [        5      (       a  [	        U 5      $ [	        T" U 5      5      $ )Nrµ   r   )rU   r!   r%   r   r‡   r   r€   rn   Ú
datetime64Útimedelta64r+   )rS  rj  rb   s    €€rc   Ú_formatÚ7_GenericArrayFormatter._format_strings.<locals>._formatÏ  s‰   ø€ Ø�{‰{Ñ&¬9°Q¯<©<¼DÀ¿G¹GØ‘9Ø!Øœ"’WÜœr›7�NØœ#’X¤¨A´·±¼r¿~¹~Ð/N×!OÑ!OØ Ø—{‘{Ð"Ü˜Aœ|×,Ñ,Ü˜1“v�ô ™9 Q›<Ó(Ð(rf   z=ExtensionArray formatting should use _ExtensionArrayFormatterrh   )Úaxisrp  Fz{v}z {v})r{  )rW   r   rj  rã  r»  r
   r   r4   rƒ   rí  r€   rn   ÚndarrayrÙ  r   Ú	map_inferr   r  r&   rF  Úrangerj   Úshaper�   ÚanyrX  r\  r‰  )rb   rW   rþ  r  ÚvalsÚinferredÚis_float_typer�   r©   r_  r{  Útplrj  rû  s   `           @@rc   rõ  Ú&_GenericArrayFormatter._format_strings¸  sÇ  ú€ Ø×ÑÑ$Ü%Ð&<Ó=ˆLØÑ#Ü&Ð':Ó;�	ô �øð  ×,Ñ,ˆ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Ø!×$¨¯©Ñ(BÎØ×!Ñ! A¡g¨a£j \Ð"2Ö3Ø×!Ø×!Ñ!¡,¨q£/Ö2à  EÒ)ð  ‘Cà �CØ×!Ñ! #§*¡*©w°q«z *Ð":Ö;ñ $ð Ðrf   )rá   râ  rã  rò  rW   rj  rG   r�   rU   r»  rh  rí  )é   NrQ   rà  NrE   rŽ  NTTN)rí  r5   râ  rk   rj  r—  rU   r‡   rh  r–  rW   r’  rG   r‡   rá   r‡   r»  r³   rò  r±   r�   r“  rã  r—  r´   rµ   r¸   )rŸ   rº   r»   r¼   rd   rì  rõ  r¾   r¿   rf   rc   rë  rë  —  sµ   † ð Ø%)ØØØ/3ØØØ"Ø Ø%)Ø.2ð5àð5ð ð5ð #ð	5ð
 ð5ð ð5ð -ð5ð ð5ð ð5ð ð5ð ð5ð #ð5ð ,ð5ð 
õ5ô8;÷Drf   rë  c                  ó\   ^ • \ rS rSrSU 4S jjr  S     S	S jjrS
S jrSS jrSrU =r	$ )ré  iÿ  c                óÒ   >• [         TU ]  " U0 UD6  U R                  bI  U R                  c;  SU l        [        U R                  5      (       a  U R                  U l        S U l        g g g g ©NF)Úsuperrd   rW   rj  rò  rˆ  )rb   ÚargsÚkwargsÚ	__class__s      €rc   rd   ÚFloatArrayFormatter.__init__   sh   ø€ Ü‰Ò˜$Ð) &Ò)ð ×ÑÑ(¨T¯^©^Ñ-Cà$ˆDÔÜ˜×)Ñ)×*Ñ*Ø!%×!2Ñ!2�”Ø$(�Õ!ð +ð .DÐ(rf   c                ó¦   ^ ^^^^• Tc  T R                   mT(       a  UU 4S jmOU 4S jmT R                  S:w  a  UU 4S jmOTmTc  T$ UU U4S jnU$ )z;Returns a function to be applied on each value to format itc                óR   >• Tc   e[        U 5      (       a  T" U S9$ TR                  $ )N)Úvalue)r&   rU   )r{  rW   rb   s    €€rc   Úbase_formatterÚ<FloatArrayFormatter._value_formatter.<locals>.base_formatter  s7   ø€ Ø#Ñ/Ð/Ð/ô ˜Q—x‘xñ ! qÑ)ðð Ÿ™ðrf   c                óR   >• [        U 5      (       a  [        U 5      $ TR                  $ rÕ   )r&   r‡   rU   )r{  rb   s    €rc   r  r  +  s   ø€ Ü!& q§¡”s˜1“vÐ:¨t¯{©{Ð:rf   rŽ  c                óJ   >• T" U 5      R                  STR                  S5      $ )NrŽ  rh   )Úreplacerá   )r{  r  rb   s    €€rc   Údecimal_formatterÚ?FloatArrayFormatter._value_formatter.<locals>.decimal_formatter0  s!   ø€ Ù% aÓ(×0Ñ0°°d·l±lÀAÓFÐFrf   c                óz   >• [        U 5      (       a  [        U 5      T:”  a  T" U 5      $ T" S5      $ TR                  $ )Ng        )r&   ÚabsrU   )r  r   rb   Ú	thresholds    €€€rc   rj  Ú7FloatArrayFormatter._value_formatter.<locals>.formatter9  s8   ø€ Ü�U�|‰|Ü�u“: 	Ó)Ù,¨UÓ3Ð3á,¨SÓ1Ð1à—{‘{Ð"rf   )rW   rá   )rb   rW   r$  rj  r  r   s   ``` @@rc   Ú_value_formatterÚ$FloatArrayFormatter._value_formatter  sZ   ü€ ð ÑØ×,Ñ,ˆLö ÷	õ;ð �<‰<˜3Ó÷Gð !/ÐàÑØ$Ð$÷	#ð Ðrf   c                ó¸  ^ ^
^^•         SS jm        SS jm
T R                   b(  T" T R                  T R                   T R                  5      $ T R                  (       a  [	        S5      mOSmU
UU U4S jnT R
                  cQ  T R                  (       a3  T R                  SL a  SnOSn[        UR                  T R                  S	9nOT R
                  nOU 4S
 jnU" U5      nT R                  (       d  U$ [        U5      S:”  a%  [        S U 5       5      nUT R                  S-   :„  nOSn[        R                  " T R                  5      nUS:„  R                  5       nUST R                  * -  :  US:„  -  R                  5       n	U	(       d  U(       aA  U(       a:  T R                  SL a  SnOSn[        UR                  T R                  S	9nU" U5      nU$ )zp
Returns the float values converted into strings using
the parameters given at initialisation, as a numpy array
c           	     ó  • [        U 5      n[        R                  " [        U R	                  5       UR	                  5       SS9 VVs/ s H  u  pEU(       d  U" U5      OUPM     snn5      R                  U R                  5      nU$ s  snnf )NTr  )r%   rn   Úarrayr#  ÚravelÚreshaper  )rí  rj  rU   ÚmaskÚvalrÝ  Ú	formatteds          rc   Úformat_with_na_repÚCFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_repJ  sz   € ô ˜“<ˆDÜŸšô #& f§l¡l£n°d·j±j³lÈ4Ò"Pôâ"P™˜ö +,‘I˜c”N°Ò7Ù"Pòó÷
 ‰g�f—l‘lÓ#ð ð Ðùós   ÁB
c           	     óü  • [         R                  " U 5      R                  5       n[         R                  " U 5      R                  5       n[	        U5      [	        U5      pe/ n[        U R                  5       UUUUSS9 HÏ  u  p‰p«nU(       d   U(       d  UR                  U" U5      5        M.  U(       d  UR                  U" U	5       SU S35        MT  U(       d]  U" U
5      R                  5       nUR                  S5      (       a  UR                  U U S35        MŸ  UR                  U SU S35        M¸  UR                  U SU S35        MÑ     [         R                  " U5      R                  U R                  5      $ )NTr  Ú+ÚjÚ-)rn   Úrealr+  Úimagr%   r#  r\  ÚstripÚ
startswithr*  r,  r  )rí  rj  rU   Úreal_valuesÚimag_valuesÚ	real_maskÚ	imag_maskÚformatted_lstr.  Úreal_valÚimag_valÚre_isnaÚim_isnaÚimag_formatteds                 rc   Úformat_complex_with_na_repÚKFloatArrayFormatter.get_result_as_array.<locals>.format_complex_with_na_repV  sI  € ô Ÿ'š' &›/×/Ñ/Ó1ˆKÜŸ'š' &›/×/Ñ/Ó1ˆKÜ#'¨Ó#4´d¸;Ó6G�yØˆMÜ=@Ø—‘“ØØØØØô>Ñ9�˜x°'ö ¦wØ!×(Ñ(©°3«Ö8Þ Ø!×(Ñ(©I°hÓ,?Ð+@ÀÀ&ÀÈÐ)KÖLÞ á%.¨xÓ%8×%>Ñ%>Ó%@�NØ%×0Ñ0°×5Ñ5Ø%×,Ñ,°¨x¸Ð7GÀqÐ-IÖJà%×,Ñ,°¨x°q¸Ð8HÈÐ-JÖKà!×(Ñ(¨F¨8°1°V°H¸AÐ)>Ö?ñ)>ô* —8’8˜MÓ*×2Ñ2°6·<±<Ó@Ð@rf   Nzdisplay.chop_thresholdc                ó˜  >• TR                  U T	5      nTR                  S:X  a  STR                  -   OTR                  nTR                  n[	        U5      nU(       a
  T" X1U5      nO	T" X1U5      nTR
                  (       aI  U(       a  [        UTR                  5      nO[        UTR                  5      n[        R                  " USS9$ U$ )NrD   rp  Úobject©rX   )r&  rG   rU   rí  r   rò  Ú_trim_zeros_complexrá   Ú_trim_zeros_floatrn   Úasarray)
rW   rj  rU   rí  Ú
is_complexr­   rD  r0  rb   r$  s
         €€€€rc   Úformat_values_withÚCFloatArrayFormatter.get_result_as_array.<locals>.format_values_with}  sª   ø€ Ø×-Ñ-¨l¸IÓFˆIð +/¯,©,¸&Ó*@�S˜4Ÿ;™;Ò&ÀdÇkÁkˆFð —[‘[ˆFÜ)¨&Ó1ˆJö Ù3°FÀvÓN‘á+¨F¸vÓF�à××ÞÜ0°¸¿¹ÓF‘Fä.¨v°t·|±|ÓD�FÜ—z’z &°Ñ9Ð9àˆMrf   Tz{value: .{digits:d}f}z{value:.{digits:d}f})râ  c                ó"   >• TR                   U -  $ rÕ   )rW   )r  rb   s    €rc   rü  Ú9FloatArrayFormatter.get_result_as_array.<locals>.<lambda>¥  s   ø€ ¨×):Ñ):¸UÒ)Brf   r   c              3  ó8   #   • U  H  n[        U5      v •  M     g 7frÕ   ©rj   ©rR  rS  s     rc   rT  Ú:FloatArrayFormatter.get_result_as_array.<locals>.<genexpr>±  s   é € Ð:Ò)9 Aœ˜QŸ˜Ò)9ùó   ‚é   Fg    €„.Aé
   z{value: .{digits:d}e}z{value:.{digits:d}e})rí  r5   rj  r   rU   r‡   r´   ú
np.ndarray)rj  rí  rU   rò  r   rW   r�   r   r‰  râ  rj   r^  rn   r#  r	  )rb   rM  Úfmt_strrW   Úformatted_valuesÚmaxlenÚtoo_longÚabs_valsÚhas_large_valuesÚhas_small_valuesrD  r0  r$  s   `         @@@rc   Úget_result_as_arrayÚ'FloatArrayFormatter.get_result_as_arrayD  sÕ  û€ ð
	Øð
	Ø*2ð
	Ø<?ð
	àô
	ð	AØð	AØ*2ð	AØ<?ð	Aàô	Að< �>‰>Ñ%Ù% d§k¡k°4·>±>À4Ç;Á;ÓOÐOà××Ü"Ð#;Ó<‰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°,Ó?ÐàÐrf   c                ó4   • [        U R                  5       5      $ rÕ   )rE  r`  r‘   s    rc   rõ  Ú#FloatArrayFormatter._format_stringsÇ  s   € Ü�D×,Ñ,Ó.Ó/Ð/rf   )rò  rW   rj  r¶   ©NN)rW   r’  r$  zfloat | Noner´   r   )r´   rX  r¸   )
rŸ   rº   r»   r¼   rd   r&  r`  rõ  r¾   Ú__classcell__©r  s   @rc   ré  ré  ÿ  sC   ø† ÷
)ð 04Ø"&ð6à,ð6ð  ð6ð 
õ	6ôpA ÷F0ò 0rf   ré  c                  ó   • \ rS rSrSS jrSrg)rê  iË  c                ó¨   • U R                   SL a  S nOS nU R                  =(       d    UnU R                   Vs/ s H
  o2" U5      PM     nnU$ s  snf )NFc                ó$   • U S R                  U S9$ )Nrù  ©rS  ©r‰  rj  s    rc   rü  Ú4_IntArrayFormatter._format_strings.<locals>.<lambda>Î  s   € ¨¨1¨§o¡o¸ oÑ&:rf   c                ó$   • U S R                  U S9$ )Nz drj  rk  rj  s    rc   rü  rl  Ð  s   € ¨¨2¨×&6Ñ&6¸Ð&6Ñ&;rf   )r�   rj  rí  )rb   Úformatter_strrj  rS  r©   s        rc   rõ  Ú"_IntArrayFormatter._format_stringsÌ  sO   € Ø×Ñ Ò&Ù:‰Má;ˆMØ—N‘N×3 mˆ	Ø,0¯KªKÓ8ªK q�i –l©Kˆ
Ð8ØÐùò 9s   ºAr¿   Nr¸   )rŸ   rº   r»   r¼   rõ  r¾   r¿   rf   rc   rê  rê  Ë  s   † ÷rf   rê  c                  óX   ^ • \ rS rSr% S\S'     S       SU 4S jjjrS	S jrSrU =r$ )
rå  iÖ  r(   rí  c                ó@   >• [         TU ]  " U40 UD6  X l        X0l        g rÕ   )r  rd   Únat_repr¿  )rb   rí  rr  r¿  r  r  s        €rc   rd   Ú_Datetime64Formatter.__init__Ù  s"   ø€ ô 	‰Ò˜Ñ* 6Ò*ØŒØ&Õrf   c                óè   • U R                   nU R                  b!  U Vs/ s H  o R                  U5      PM     sn$ UR                  U R                  U R                  S9nUR                  5       $ s  snf )z&we by definition have DO NOT have a TZ)rU   r¿  )rí  rj  Ú_format_native_typesrr  r¿  Útolist)rb   rí  rS  r©   s       rc   rõ  Ú$_Datetime64Formatter._format_stringsä  sk   € à—‘ˆà�>‰>Ñ%Ù/5Ó6ªv¨!—N‘N 1Ö%©vÑ6Ð6à×0Ñ0Ø—<‘<¨T×-=Ñ-=ð 1ð 
ˆ
ð × Ñ Ó"Ð"ùò 7s   žA/)r¿  rr  ©r   N)rí  r(   rr  r‡   r¿  rµ   r´   rµ   r¸   ©	rŸ   rº   r»   r¼   Ú__annotations__rd   rõ  r¾   re  rf  s   @rc   rå  rå  Ö  sK   ø‡ ØÓð
 Ø ð		'àð	'ð ð	'ð ð		'ð 
÷	'ð 	'÷
#ò 
#rf   rå  c                  ó*   • \ rS rSr% S\S'   SS jrSrg)rè  iñ  r)   rí  c                ó¢  • U R                   nU R                  nS nUc  UR                  SS9n[        U[        5      (       a  UR                  5       nO[        R                  " U[        S9n[        UUU R                  U R                  U R                  U R                  U R                  U R                  U R                   U R"                  US9nU$ )NT)ÚboxedrH  )	rW   rU   râ  rh  rG   rá   r�   r»  rã  )rí  rj  Ú
_formatterr€   r'   Ú_internal_get_valuesrn   rK  rG  r�   rW   rU   râ  rh  rG   rá   r�   r»  )rb   rí  rj  rã  r*  r©   s         rc   rõ  Ú(_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ñ
ˆ
ð Ðrf   r¿   Nr¸   ©rŸ   rº   r»   r¼   rz  rõ  r¾   r¿   rf   rc   rè  rè  ñ  s   ‡ ØÓ÷rf   rè  c                ó–  • [        U 5      S:X  a  / $ [        R                  " U 5      n [        U 5      (       a<  [        R                  " U S:¬  5      (       a  [        R                  " U S:*  5      (       d  [        S5      eSU -  n [        U 5      nU R                  U5      R                  [        5      n[        R                  " X 5      n[        R                  " U5      (       a*  UR                  [        5      nU Vs/ s H  oUS-   PM	     sn$ [        R                  " U 5      n[        U5      n[        R                  " U [        S9nX   R                  5       R                  [        5      R                  [        5      XC'   X)    R                  U5      R                  [        5      XC) '   U Vs/ s H  oUS-   PM	     sn$ s  snf s  snf )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   rh   z/percentiles should all be in the interval [0,1]éd   r‡  rH  )rj   rn   rK  r    r  r  Úget_precisionÚroundÚastyperk   Úiscloser‡   ÚuniqueÚ
empty_likerG  )ÚpercentilesÚprecÚpercentiles_round_typeÚint_idxÚoutr_  Úunique_pctss          rc   Úformat_percentilesr�    so  € ô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ØÑ'×-Ñ-Ó/×6Ñ6´sÓ;×BÑBÄ3ÓG€C�Là Ñ)×/Ñ/°Ó5×<Ñ<¼SÓA€Cˆ�MÙ Ó!šS˜�ŒG™SÑ!Ð!ùò &ùò "s   Ã=GÆ0Gc                óH  • U S   S:”  a  U S   OS nU S   S:  a  SU S   -
  OS n[         R                  " XUS9n[        U5      n[         R                  " [         R                  " [         R
                  " U5      5      5      R                  [        5      * n[        SU5      nU$ )Nr   éÿÿÿÿrƒ  )Úto_beginÚto_endrh   )	rn   Úediff1dr#  ÚfloorÚlog10rl   r†  rk   r^  )r*  r“  r”  Údiffr‹  s        rc   r„  r„  T  s†   € Ø  ™8 a›<ˆu�QŠx¨T€HØ % b¡	¨C£ˆS�5˜‘9Š_°T€FÜ�:Š:�e°vÑ>€DÜˆt‹9€DÜ�HŠH”R—X’XœbŸfšf T›lÓ+Ó,×3Ñ3´CÓ8Ð8€DÜˆq�$‹<€DØ€Krf   c                ó.   • U [         L a  U$ [        U 5      $ rÕ   )r   r‡   ©rS  rr  s     rc   Ú_format_datetime64r›  ^  s   € ØŒC‚xØˆô ˆq‹6€Mrf   c                óx   • [        U [        5      (       a  U$ U(       a  U R                  U5      $ U R                  $ rÕ   )r€   r   ÚstrftimeÚ
_date_repr)rS  rr  r¿  s      rc   Ú_format_datetime64_dateonlyrŸ  g  s4   € ô
 �!”W×ÑØˆæØ�z‰z˜+Ó&Ð&ð �|‰|Ðrf   c                ó.   ^^• U (       a  UU4S j$ U4S j$ )zYReturn a formatter callable taking a datetime64 as input and providing
a string as outputc                ó   >• [        U TTS9$ )N)rr  r¿  )rŸ  )rS  r¿  rr  s    €€rc   rü  Ú'get_format_datetime64.<locals>.<lambda>}  s   ø€ Ô4Ø�w¨Kò
rf   c                ó   >• [        U TS9$ )N©rr  )r›  rš  s    €rc   rü  r¢  �  s   ø€ Ô+¨A°wÒ?rf   r¿   )Úis_dates_onlyrr  r¿  s    ``rc   Úget_format_datetime64r¦  v  s   ù€ ö õ
ð 	
ô @Ð?rf   c                  ó*   • \ rS rSr% S\S'   SS jrSrg)ræ  i„  r(   rí  c                óô   • U R                   R                  nU R                   R                  [        5      nU R                  =(       d    [        XR                  S9nU Vs/ s H
  oC" U5      PM     nnU$ s  snf )zwe by definition have a TZ)r¿  )rí  Ú_is_dates_onlyr†  rG  rj  r¦  r¿  )rb   Úidorí  rj  rS  r©   s         rc   rõ  Ú&_Datetime64TZFormatter._format_strings‡  si   € à�k‰k×(Ñ(ˆØ—‘×#Ñ#¤FÓ+ˆØ—N‘N÷ 
Ô&;Ø×-Ñ-ñ'
ˆ	ñ -3Ó3ªF q�i –l©Fˆ
Ð3àÐùò 4s   Á A5r¿   Nr¸   r�  r¿   rf   rc   ræ  ræ  „  s   ‡ ØÓ÷	rf   ræ  c                  óR   ^ • \ rS rSr% S\S'    S     SU 4S jjjrS	S jrSrU =r$ )
rç  i“  r*   rí  c                ó4   >• [         TU ]  " U40 UD6  X l        g rÕ   )r  rd   rr  )rb   rí  rr  r  r  s       €rc   rd   Ú_Timedelta64Formatter.__init__–  s   ø€ ô 	‰Ò˜Ñ* 6Ò*Ø�rf   c                ó´   • U R                   =(       d    [        U R                  U R                  SS9nU R                   Vs/ s H
  o!" U5      PM     sn$ s  snf )NF)rr  Úbox)rj  Úget_format_timedelta64rí  rr  )rb   rj  rS  s      rc   rõ  Ú%_Timedelta64Formatter._format_strings   sI   € Ø—N‘N÷ 
Ô&<Ø�K‰K §¡°5ñ'
ˆ	ð '+§k¢kÓ2¢k �	˜!–¡kÑ2Ð2ùÒ2s   ÁAr¤  ©r   )rí  r*   rr  r‡   r´   rµ   r¸   ry  rf  s   @rc   rç  rç  “  s>   ø‡ ØÓð
 ðàðð ðð
 
÷ð ÷3ò 3rf   rç  c                óL   ^^^• U R                   nU(       a  SmOSmUUU4S jnU$ )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                óÊ   >• U b   [        U 5      (       a  [        U 5      (       a  T$ [        U [        5      (       d  [        U 5      n U R	                  TS9nT(       a  SU S3nU$ )Nrk  Ú')r!   r%   r€   r   Ú
_repr_base)rS  r­   r°  r‰  rr  s     €€€rc   r~  Ú*get_format_timedelta64.<locals>._formatter¹  sZ   ø€ Ø‰9œ 1Ÿ™¬$¨q¯'©'ØˆNä˜!œY×'Ñ'Ü˜!“ˆAð —‘ V�Ð,ˆÞØ˜˜ �]ˆFØˆrf   )r©  )rí  rr  r°  Ú	even_daysr~  r‰  s    ``  @rc   r±  r±  §  s*   ú€ ð ×%Ñ%€IæØ‰àˆ÷ð Ðrf   c                óR  ^^^	• [        U 5      S:X  d  US:X  a  U $ Uc  [        R                  " 5       mOUm[        U4S jU  5       5      m	Ub  [        UT	5      m	[	        S5      mTb  T	T:”  a  Tm	SUUU	4S jjnU  Vs/ s H
  oT" U5      PM     n nTR                  U T	US9nU$ s  snf )Nr   r  c              3  óF   >#   • U  H  nTR                  U5      v •  M     g 7frÕ   rR  )rR  rS  Ú
adjustments     €rc   rT  Ú$_make_fixed_width.<locals>.<genexpr>×  s   øé € Ð5ªW¨�*—.‘. ×#Ð#ªWùs   ƒ!rÄ   c                ób   >• Tb*  TS:„  TR                  U 5      T:„  -  (       a  U S TS-
   S-   n U $ )Nrš   r›   rR  )rS  r½  Úconf_maxre  s    €€€rc   ÚjustÚ_make_fixed_width.<locals>.justà  s=   ø€ ØÑØ˜1‘ §¡°Ó!2°WÑ!<×=Ø�m˜ !™Ð$ uÑ,�Øˆrf   rœ   )rS  r‡   r´   r‡   )rj   r4   r_   r^  r   rG   )
rM  rG   rN  r`   rÁ  rS  r­   r½  rÀ  re  s
          @@@rc   rZ  rZ  É  s¹   ú€ ô ˆ7ƒ|�qÓ˜G uÓ,Øˆà
�{Ü×,Ò,Ó.‰
àˆ
äÔ5©WÓ5Ó5€GàÑÜ�g˜wÓ'ˆäÐ0Ó1€HØÑ ¨(Ó 2Øˆ÷ñ ñ !(Ó(¢˜1ˆt�AŽw¡€GÐ(Ø×Ñ ¨°wÐÐ?€FØ€Mùò )s   Á>B$c                óÒ  • / / p2U  H`  n[         R                  " SU5      nUR                  SR                  USS 5      5        UR                  SR                  USS 5      5        Mb     [	        U 5      n[        X#-   U5      n[	        U5      S:X  a  / $ [        S U 5       5      S-
  n[        USU XvS S	S
9 V	V
s/ s H  u  pšU	U
S   -   U
SS SU 3 -   S-   PM     nn	n
U$ s  sn
n	f )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  ó8   #   • U  H  n[        U5      v •  M     g 7frÕ   rR  )rR  Úparts     rc   rT  Ú&_trim_zeros_complex.<locals>.<genexpr>  s   é € Ð;ªl dœ˜DŸ	˜	ªlùrU  rh   Tr  Ú>r4  )Úrer£   r\  r¦   rj   rJ  r^  r#  )Ústr_complexesrá   Ú	real_partÚ	imag_partrS  ÚtrimmedÚnÚpadded_partsÚpadded_lengthÚreal_ptÚimag_ptÚpaddeds               rc   rI  rI  ë  s   € ð
 ˜rˆyÛˆô
 —(’(Ð+¨QÓ/ˆØ×Ñ˜Ÿ™ ¨¨" Ó.Ô/Ø×Ñ˜Ÿ™ ¨¨B Ó0Ö1ñ ô 	ˆMÓ€AÜ$ YÑ%:¸GÓD€LÜ
ˆ<Ó˜AÓØˆ	ÜÑ;©lÓ;Ó;¸aÑ?€Mô !$ L°°!Ð$4°lÀ2Ð6FÈtÒ Tôò
 !UÑˆGð	 	Ø
�!‰*ñ	à�Q�Rˆ[˜˜=˜/Ð)Ð*ñ	,ð ô	ñ !Uð ñ ð €Mùós   Â<"C#c                ó^   • U R                  S5      n U R                  S5      (       a  U S-  n U $ )zL
Trims trailing zeros after a decimal point,
leaving just one if necessary.
Ú0rŽ  )ÚrstripÚendswith)Ú	str_floats    rc   rú  rú    s5   € ð
 × Ñ  Ó%€IØ×Ñ˜#×ÑØ�SÑˆ	àÐrf   c                ój  ^^• U n[         R                  " SU S35      mSU4S jjmS	U4S jjnU" U5      (       a3  U Vs/ s H  nT" U5      (       a  USS OUPM     nnU" U5      (       a  M3  U Vs/ s H-  nT" U5      (       a  UR                  U5      (       a  US-   OUPM/     nnU$ s  snf s  snf )
zy
Trims the maximum number of trailing zeros equally from
all numbers containing decimals, leaving just one if
necessary.
z^\s*[\+-]?[0-9]+\z[0-9]*$c                ó6   >• [         R                  " TU 5      S L$ rÕ   )rÊ  Úmatch)rS  Únumber_regexs    €rc   Úis_number_with_decimalÚ1_trim_zeros_float.<locals>.is_number_with_decimal#  s   ø€ Ü�xŠx˜ aÓ(°Ð4Ð4rf   c                óž   >• U  Vs/ s H  nT" U5      (       d  M  UPM     nn[        U5      S:„  =(       a    [        S U 5       5      $ s  snf )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.
r   c              3  óB   #   • U  H  oR                  S 5      v •  M     g7f)rÖ  N)rØ  rS  s     rc   rT  Ú9_trim_zeros_float.<locals>.should_trim.<locals>.<genexpr>/  s   é € Ð'IÂ¸A¯
©
°3¯¨Âùó   ‚)rj   r  )rí  rS  ÚnumbersrÞ  s      €rc   Úshould_trimÚ&_trim_zeros_float.<locals>.should_trim&  sF   ø€ ñ %ÓBšf˜Ñ(>¸q×(A—1™fˆÐBÜ�7‹|˜aÑ×I¤CÑ'IÁÓ'IÓ$IÐIùò Cs
   †A
›A
Nr’  rÖ  r•  )rí  úArrayLike | list[str]r´   r±   )rÊ  ÚcompilerØ  )Ú
str_floatsrá   rÎ  rå  rS  r­   rÞ  rÝ  s         @@rc   rJ  rJ    sÆ   ù€ ð €GÜ—:’:Ð!2°7°)¸7ÐCÓD€L÷5÷	Jñ �g×
Ñ
ÙGNÓOÂwÀ!Ñ3°A×6Ñ6�1�S�b‘6¸AÒ=ÁwˆÐOñ �g×
Ó
ñ óâˆAñ *¨!×,Ñ,°·±¸G×1DÑ1DˆˆCŠÈ!ÒKÙð ð ð €Mùò Pùòs   Á B+Á34B0c                ó‚   • [        U [        5      (       a  [        R                  " U R                  6 $ U R
                  S L$ rÕ   )r€   r-   ÚcomÚany_not_noner„  rV   )rT   s    rc   r    r    <  s3   € Ü�%œ×$Ñ$Ü×Ò §¡Ð-Ð-à�z‰z Ð%Ð%rf   c                  ó¦   • \ rS rSrSr0 SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_r S)     S*S& jjrS+S' jrS(rg%),ÚEngFormatteriC  z`
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š   rz  rV  rÜ  é	   ÚGrà  ÚTé   ÚPé   ÚEé   ÚZé   ÚYNc                ó   • Xl         X l        g rÕ   ©ÚaccuracyÚuse_eng_prefix)rb   r  r  s      rc   rd   ÚEngFormatter.__init___  s   € ð !ŒØ,Õrf   c                ó  • [        [        U5      5      n[         R                  " U5      (       a  g[         R                  " U5      (       a  gSnUS:  a  SnU* nUS:w  a=  [        [	        [
        R                  " UR                  5       S-  5      S-  5      5      nO[        S5      nUR                  [        U R                  R                  5       5      5      nUR                  [        U R                  R                  5       5      5      n[	        U5      nU R                  (       a  U R                  U   nOUS:  a  SU* S 3nOS	US 3nX2-  S
U-  -  nU R                  c  SnOSU R                  S S3nUR                  XvS9n	U	$ )aq  
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
rQ   Úinfrh   r   r’  rš   zE-Ú02dzE+rW  z{mant: g}{prefix}z{mant: .rù  z
f}{prefix})ÚmantÚprefix)r   r‡   Úis_nanÚis_infiniterk   Úmathr–  r—  rl   r^  ÚENG_PREFIXESr"  r  r  r‰  )
rb   ÚnumÚdnumÚsignÚpow10Ú	int_pow10r	  r  Ú
format_strr/  s
             rc   Ú__call__ÚEngFormatter.__call__e  sa  € ô( ”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à‰{˜b %™iÑ(ˆà�=‰=Ñ Ø,‰Jà$ T§]¡]°1Ð$5°]ÐCˆJà×%Ñ%¨4Ð%Ð?ˆ	àÐrf   r  r  )r  r³   r  r±   r´   rµ   )r  Úfloatr´   r‡   )	rŸ   rº   r»   r¼   r½   r  rd   r  r¾   r¿   rf   rc   rî  rî  C  sÿ   † ñðØˆSðàˆSðð 	ˆSðð 	ˆSð	ð
 	ˆSðð 	ˆCðð 	ˆCðð 	ˆCðð 	
ˆ2ðð 	
ˆ3ðð 	
ˆ3ðð 	
ˆ3ðð 	ˆCðð 	ˆCðð 	ˆCðð  	ˆCð!ð" 	ˆCð#€Lð* CHð-Ø"ð-Ø;?ð-à	õ-÷;rf   rî  Úpandasc                ó.   • [        S[        X5      5        g)aü  
Format float representation in DataFrame with SI notation.

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
--------
>>> 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
r\   N)r   rî  r  s     rc   Úset_eng_float_formatr  £  s   € ôD Ð%¤|°HÓ'MÕNrf   c                ó  • [        U 5      S:X  a  / $ S/[        U S   5      -  n/ nU  HX  nSn0 n[        U5       H!  u  pxX'   (       a  X�:X  a  M  SX''   Xu-
  Xe'   UnM#     [        U5      U-
  Xe'   UR                  U5        MZ     U$ )am  
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)rj   rX  r\  )	ÚlevelsÚsentinelÚcontrolr­   ÚlevelÚ
last_indexÚlengthsr_  Úkeys	            rc   Úget_level_lengthsr"  è  s›   € ô$ ˆ6ƒ{�aÓØˆ	àˆf”s˜6 !™9“~Ñ%€Gà€FÛˆØˆ
àˆÜ Ö&‰FˆAØ�z˜c›oÙà"�‘
Ø&'¡n�Ñ#Ø’
ñ 'ô " %›j¨:Ñ5ˆÑà�‰�gÖñ ð  €Mrf   c                ó²   • [        S U 5       5      (       a  U Vs/ s H  n[        U5      PM     nnU R                  SR                  U5      5        gs  snf )zq
Appends lines to a buffer.

Parameters
----------
buf
    The buffer to write to
lines
    The lines to append.
c              3  óB   #   • U  H  n[        U[        5      v •  M     g 7frÕ   )r€   r‡   rS  s     rc   rT  Ú#buffer_put_lines.<locals>.<genexpr>  s   é € Ð
-¢u !Œ:�aœ×Ð¢uùrã  r}   N)r	  r‡   rÓ  r¦   )r^   ÚlinesrS  s      rc   Úbuffer_put_linesr'    sG   € ô Ñ
-¡uÓ
-×-Ñ-Ù!&Ó'¢˜A”�Q–¡ˆÐ'Ø‡I�Iˆd�i‰i˜ÓÕùò (s   œA)r´   zdict[str, Any]rd  )r¬  r‡   r^   rÌ  r¦  r²   r´   r²   rÕ   )r^   rÌ  r¦  r²   r´   z1Generator[WriteBuffer[str]] | Generator[StringIO])	NrQ   NNrE   rŽ  TNN)rí  r5   rj  r—  rW   r’  rU   r‡   râ  r³   rh  zstr | int | NonerG   r‡   rá   r‡   r�   r“  r»  r³   rã  r—  r´   r¹   )rŠ  únp.ndarray | Sequence[float]r´   r¹   )r*  r(  r´   rk   r³  )rS  úNaTType | Timestamprr  r‡   r´   r‡   rx  )rS  r)  rr  r‡   r¿  r²   r´   r‡   )r¥  r±   rr  r‡   r¿  r²   r´   r   )r   F)rí  r*   rr  zstr | floatr°  r±   r´   r   )rE   NN)
rM  r¹   rG   r‡   rN  r³   r`   zprinting._TextAdjustment | Noner´   r¹   )rŽ  )rË  r5   rá   r‡   r´   r¹   )rÙ  r‡   r´   r‡   )ré  rç  rá   r‡   r´   r¹   )rT   r,   r´   r±   )rš   F)r  rk   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   Únumpyrn   Úpandas._config.configr   r   Úpandas._libsr   Úpandas._libs.missingr   Úpandas._libs.tslibsr   r   r   Úpandas._libs.tslibs.nattyper   Úpandas.util._decoratorsr   Ú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.apir,   r-   r.   r/   Úpandas.core.indexes.datetimesr0   Úpandas.core.indexes.timedeltasr1   Úpandas.io.commonr2   r3   rÊ   r4   Úpandas._typingr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r  rA   rB   rC   rz  ÚVALID_JUSTIFY_PARAMETERSrM   rO   rÍ   rÑ   rÓ   rš  r¨  rÒ  r�   rë  ré  rê  rå  rè  r�  r„  r›  rŸ  r¦  ræ  rç  r±  rZ  rI  rú  rJ  r    rî  r  r"  r'  r¿   rf   rc   Ú<module>rG     s  ðòõ
 #÷õ õ &Ý Ý Ý Ý Û Û 	Ý $÷ó ó ÷õ
 Ý #÷ñ õ
 0Ý .÷÷ ÷ñ ÷
÷
ó õ *ß  Ð  ÷ó õ 8Ý 9÷õ 'æ÷÷ ÷ ó ÷ð6Ð �%ó 6ðpÐ ðÐ �%ó ÷c$ñ c$ôLô>÷:IFñ IF÷X^ñ ^ðF /3ØðØðà	+ðð ðð õ	ð  àDHðMØ	+ðMØ7AðMà6ôMó ðMðP ,0ØØØ"ØØØ!%ØØ*.ðR ØðR àðR ð )ðR ð ð	R ð
 ðR ð ðR ð ðR ð ðR ð ðR ð ðR ð (ðR ð õR ÷jeñ eôPI0Ð0ô I0ôXÐ/ô ô#Ð1ô #ô6Ð5ô ðB?"Ø-ð?"àô?"ôDöð Ø"ðØðàðð ðð 	õ	ð  JNð@Øð@Ø"%ð@Ø<Fð@àõ@ôÐ1ô ô3Ð2ô 3ð, !ØðØðàðð 
ðð õ	ðH ØØ+/ð	Øðàðð ðð 
)ð	ð
 õöDôB	ð 7:ð!Ø%ð!Ø03ð!àõ!ôH&÷]ñ ]ñ@ ˆHÓõAOó ðAOðJ 24ð(Øð(Ø.ð(àõ(õV rf   