1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
U
¬ý°düã@sàUdZddlmZddlmZddlmZmZddlm    Z    ddl
m Z ddl m Z ddlZddlZdd    lmZdd
lmZmZmZmZmZmZmZmZmZmZmZmZdd lm Z ddl!Z"dd l#m$Z$m%Z%dd l&m'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0ddl1m2Z2ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>ddl?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKddlLmMZMddlNmOZOmPZPddlQmRZRmSZSmTZTddlUmVZVddlWmXZXddlYmZm[Z\ddl]m^Z^ddl_m`Z`maZambZbmcZcddldmeZeddlfmgZgddlhmiZiddljmkZkmlZlddlmmnZnerNddlompZpmqZqd Zrd!esd"<d#Ztd$Zud!esd%<Gd&d'„d'ƒZvGd(d)„d)ƒZwGd*d+„d+ƒZxGd,d-„d-exƒZyd+d.œd/d0„Zzd1d.œd2d3„Z{d1d.œd4d5„Z|Gd6d7„d7ƒZ}Gd8d9„d9ƒZ~d¤d:d;d<d<d=œd>d?„Zed¥d;d<d@dAœdBdC„ƒZ€d¦dHdIdJd:dKdLd:d:dMdKdIdNdOœ dPdQ„ZGdRdS„dSƒZ‚GdTdU„dUe‚ƒZƒGdVdW„dWe‚ƒZ„GdXdY„dYe‚ƒZ…GdZd[„d[e‚ƒZ†d\dNd]œd^d_„Z‡d`dadbœdcdd„Zˆd§dfd:d:dgœdhdi„Z‰d¨dfd:d<d:djœdkdl„ZŠd©dad:d<dmdnœdodp„Z‹dqd<d<drœdsdt„ZŒGdudv„dve…ƒZGdwdx„dxe‚ƒZŽdªdzd{dadmd|œd}d~„Zd«dNd:dKddNd€œdd‚„Zd¬dƒd:dNd„œd…d†„Z‘d:d:d‡œdˆd‰„Z’d­dŠd:dNd‹œdŒd„Z“dŽdadœdd‘„Z”Gd’d“„d“ƒZ•d®d•dad–d—œd˜d™„Z–d¯dHd›dœdœdždŸ„Z—d dNd–d¡œd¢d£„Z˜dS)°z€
Internal module for formatting output data in csv, html, xml,
and latex files. This module also applies to display formatting.
é)Ú annotations)Úcontextmanager)Ú
QUOTE_NONEÚQUOTE_NONNUMERIC)ÚDecimal)Úpartial)ÚStringION)Úget_terminal_size) ÚIOÚ TYPE_CHECKINGÚAnyÚCallableÚFinalÚ    GeneratorÚHashableÚIterableÚListÚMappingÚSequenceÚcast)Úeast_asian_width)Ú
get_optionÚ
set_option)Úlib)ÚNA)ÚNaTÚ    TimedeltaÚ    TimestampÚget_unit_from_dtypeÚiNaTÚperiods_per_day)ÚNaTType) Ú    ArrayLikeÚAxesÚColspaceArgTypeÚ ColspaceTypeÚCompressionOptionsÚFilePathÚFloatFormatTypeÚFormattersTypeÚ
IndexLabelÚStorageOptionsÚ WriteBuffer) Úis_categorical_dtypeÚis_complex_dtypeÚis_datetime64_dtypeÚis_extension_array_dtypeÚis_floatÚis_float_dtypeÚ
is_integerÚis_integer_dtypeÚ is_list_likeÚis_numeric_dtypeÚ    is_scalarÚis_timedelta64_dtype)ÚDatetimeTZDtype)ÚisnaÚnotna)Ú CategoricalÚ DatetimeArrayÚTimedeltaArray)Ú StringDtype)Ú PandasObject)Ú extract_array)ÚIndexÚ
MultiIndexÚ PeriodIndexÚ ensure_index)Ú DatetimeIndex)ÚTimedeltaIndex)Úconcat)Úcheck_parent_directoryÚstringify_path)Úprinting)Ú    DataFrameÚSeriesa´    
        Parameters
        ----------
        buf : str, Path or StringIO-like, optional, default None
            Buffer to write to. If None, the output is returned as a string.
        columns : sequence, optional, default None
            The subset of columns to write. Writes all columns by default.
        col_space : %(col_space_type)s, optional
            %(col_space)s.
        header : %(header_type)s, optional
            %(header)s.
        index : bool, optional, default True
            Whether to print index (row) labels.
        na_rep : str, optional, default 'NaN'
            String representation of ``NaN`` to use.
        formatters : list, tuple or dict of one-param. functions, optional
            Formatter functions to apply to columns' elements by position or
            name.
            The result of each function must be a unicode string.
            List/tuple must be of length equal to the number of columns.
        float_format : one-parameter function, optional, default None
            Formatter function to apply to columns' elements if they are
            floats. This function must return a unicode string and will be
            applied only to the non-``NaN`` elements, with ``NaN`` being
            handled by ``na_rep``.
 
            .. versionchanged:: 1.2.0
 
        sparsify : bool, optional, default True
            Set to False for a DataFrame with a hierarchical index to print
            every multiindex key at each row.
        index_names : bool, optional, default True
            Prints the names of the indexes.
        justify : str, default None
            How to justify the column labels. If None uses the option from
            the print configuration (controlled by set_option), 'right' out
            of the box. Valid values are
 
            * left
            * right
            * center
            * justify
            * justify-all
            * start
            * end
            * inherit
            * match-parent
            * initial
            * unset.
        max_rows : int, optional
            Maximum number of rows to display in the console.
        max_cols : int, optional
            Maximum number of columns to display in the console.
        show_dimensions : bool, default False
            Display DataFrame dimensions (number of rows by number of columns).
        decimal : str, default '.'
            Character recognized as decimal separator, e.g. ',' in Europe.
    rÚcommon_docstring) ÚleftÚrightÚcenterÚjustifyz justify-allÚstartÚendZinheritz match-parentÚinitialZunsetz™
        Returns
        -------
        str or None
            If buf is None, returns the result as a string. Otherwise returns
            None.
    Úreturn_docstringc@sPeZdZdddddddd    œd
d „Zdd œd d„Zdd œdd„Zdd œdd„ZdS)ÚCategoricalFormatterNTÚNaNr<úIO[str] | NoneÚboolÚstrÚNone)Ú categoricalÚbufÚlengthÚna_repÚfooterÚreturncCs8||_|dk    r|ntdƒ|_||_||_||_t|_dS©NÚ)r]rr^r`r_rarÚquoting)Úselfr]r^r_r`ra©rgúOd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/io/formats/format.pyÚ__init__És zCategoricalFormatter.__init__©rbcCsPd}|jr*|r|d7}|dt|jƒ›7}|j ¡}|r@|d7}||7}t|ƒS)Nrdú, úLength: Ú
)r_Úlenr]Ú_repr_categories_infor[)rfraÚ
level_inforgrgrhÚ _get_footerØs
z CategoricalFormatter._get_footerú    list[str]cCst|j ¡dd|j|jdS)N)Ú float_formatr`re)Ú format_arrayr]Ú_internal_get_valuesr`re©rfrgrgrhÚ_get_formatted_valuesésûz*CategoricalFormatter._get_formatted_valuescCs||j}t|ƒdkr$|jr | ¡SdS| ¡}dd„|Dƒ}d |¡}d|dg}|jrn| ¡}|rn| |¡td |¡ƒS)    NrrdcSsg|] }| ¡‘qSrg)Ústrip©Ú.0ÚirgrgrhÚ
<listcomp>ýsz2CategoricalFormatter.to_string.<locals>.<listcomp>rkú[ú]rm)r]rnrarqrwÚjoinÚappendr[)rfr]Ú
fmt_valuesÚvaluesÚresultrargrgrhÚ    to_stringòs 
 
zCategoricalFormatter.to_string)NTrXT)Ú__name__Ú
__module__Ú __qualname__rirqrwr„rgrgrgrhrWÈsú    rWc@sxeZdZddddddd    dd
dd d d d œ dd„Zd dœdd„Zd    dœdd„Zddœdd„Zddœdd„Zd    dœdd„ZdS)ÚSeriesFormatterNTrXFrMrYú
bool | strrZr[ú
str | Noneú
int | Noner\) Úseriesr^r_ÚheaderÚindexr`ÚnamersÚdtypeÚmax_rowsÚmin_rowsrbc Cst||_|dk    r|ntƒ|_||_||_||_||_||_|
|_| |_    |dkrTt
dƒ}||_ |    |_ t ƒ|_| ¡dS)Núdisplay.float_format)rŒrr^rr`rr_rŽr‘r’rrsrÚget_adjustmentÚadjÚ _chk_truncate) rfrŒr^r_rrŽr`rrsrr‘r’rgrgrhri    szSeriesFormatter.__init__rjcCs¨||j}|j}|o t|jƒ|k}|j}|r’tt|ƒ}|rDt||ƒ}|dkr`|}|jd|…}n*|d}t|jd|…|j| d…fƒ}||_    nd|_    ||_
||_ dS)Néé) r’r‘rnrŒrÚintÚminÚilocrHÚ
tr_row_numÚ    tr_seriesÚis_truncated_vertically)rfr’r‘ržrŒÚrow_numrgrgrhr–)s$
 
"zSeriesFormatter._chk_truncatecCsF|jj}d}t|jjddƒdk    rLt|jjtttfƒs8t‚|d|jjj    ›7}|jdk    r†|dk    r†|rj|d7}t
j |dd}|d|›7}|j d    ks |j d
krÀ|j rÀ|r¬|d7}|d t|jƒ›7}|jdk    r|jdk    rt|jjd dƒ}|r|rú|d7}|d t
  |¡›7}t|jjƒr>|jj ¡}|r6|d7}||7}t|ƒS)NrdÚfreqzFreq: Frk©ú    ú rm)Ú escape_charszName: TÚtruncaterlrzdtype: rm)rŒrÚgetattrrŽÚ
isinstancerFrDrGÚAssertionErrorZfreqstrrKÚ pprint_thingr_ržrnrrr-Ú_valuesror[)rfrraZ series_nameZ
dtype_namerprgrgrhrqDsBÿ
ÿÿ zSeriesFormatter._get_footerztuple[list[str], bool]cCsR|jj}t|tƒr4tdd„|jDƒƒ}|jdd}n|jdk    }|jdd}||fS)Ncss|]
}|VqdS©Nrg©rzrrgrgrhÚ    <genexpr>qsz7SeriesFormatter._get_formatted_index.<locals>.<genexpr>T)Únames)r)rrŽr§rCÚanyr®Úformatr)rfrŽÚ have_headerÚ    fmt_indexrgrgrhÚ_get_formatted_indexms
 
 z$SeriesFormatter._get_formatted_indexrrcCst|jjd|j|j|jdS)N)rsr`Ú leading_space)rtrrªrsr`rŽrvrgrgrhrwxsûz%SeriesFormatter._get_formatted_valuesc Cs.|j}| ¡}t|ƒdkr2t|jƒj›d|›dS| ¡\}}| ¡}|jr¾d}|j    }t
t |ƒ}|j  ||d¡}|dkr‚d}    nd}    |j j |    g|dd    d}    | |||    ¡| |dd
¡|jrâ|j jd |dd…|gžŽ}
n|j  d|¡}
|jr|r|dd |
}
|r |
d |7}
td
 |
¡ƒS) Nrz([], ú)r—éú...z..rQ©Úmoderdrm)r¶)rrqrnÚtyperŒr…r³rwržrœrr™r•rRÚinsertrŽÚadjoinrr[r) rfrŒrar²r±rZ n_header_rowsrŸÚwidthZdot_strrƒrgrgrhr„s2  
 zSeriesFormatter.to_string)
NTTTrXFNTNN)    r…r†r‡rir–rqr³rwr„rgrgrgrhrˆs ô& )     rˆc@sPeZdZddœdd„Zdddœdd    „Zdd ddd d œdd„Zdddœdd„ZdS)ÚTextAdjustmentr\rjcCstdƒ|_dS)Nzdisplay.encoding)rÚencodingrvrgrgrhri©szTextAdjustment.__init__r[r™©ÚtextrbcCst|ƒSr«©rn©rfrÁrgrgrhrn¬szTextAdjustment.lenrPr rr©ÚtextsÚmax_lenr¹rbcCstj|||dS)Nr¸)rKrR©rfrÅrÆr¹rgrgrhrR¯szTextAdjustment.justify)ÚspacerbcOs tj|f|ž|j|jdœ|—ŽS)N)ZstrlenZjustfunc)rKr¼rnrR)rfrÈÚlistsÚkwargsrgrgrhr¼²sÿÿÿÿzTextAdjustment.adjoinN)rP)r…r†r‡rirnrRr¼rgrgrgrhr¾¨sr¾csHeZdZddœ‡fdd„ Zdddœdd    „Zdd ddd d œdd„Z‡ZS)ÚEastAsianTextAdjustmentr\rjcs6tƒ ¡tdƒrd|_nd|_ddddddœ|_dS)Nz!display.unicode.ambiguous_as_wider˜r—)ZNaÚNÚWÚFÚH)ÚsuperrirÚambiguous_widthÚ_EAW_MAPrv©Ú    __class__rgrhri¹s
 
z EastAsianTextAdjustment.__init__r[r™rÀcs(t|tƒst|ƒSt‡fdd„|DƒƒS)zN
        Calculate display width considering unicode East Asian Width
        c3s"|]}ˆj t|ƒˆj¡VqdSr«)rÒÚgetrrÑ)rzÚcrvrgrhr­Ìsz.EastAsianTextAdjustment.len.<locals>.<genexpr>)r§r[rnÚsumrÃrgrvrhrnÅs
 
 ÿzEastAsianTextAdjustment.lenrPz Iterable[str]rrrÄcsX‡‡fdd„‰|dkr(‡fdd„|DƒS|dkrB‡fdd„|DƒS‡fdd„|DƒSdS)    Ncsˆˆ |¡t|ƒSr«rÂ)Út)rÆrfrgrhÚ_get_padÔsz1EastAsianTextAdjustment.justify.<locals>._get_padrOcsg|]}| ˆ|ƒ¡‘qSrg)Úljust©rzÚx©rÙrgrhr|Øsz3EastAsianTextAdjustment.justify.<locals>.<listcomp>rQcsg|]}| ˆ|ƒ¡‘qSrg)rQrÛrÝrgrhr|Úscsg|]}| ˆ|ƒ¡‘qSrg)ÚrjustrÛrÝrgrhr|ÜsrgrÇrg)rÙrÆrfrhrRÐs zEastAsianTextAdjustment.justify)rP)r…r†r‡rirnrRÚ __classcell__rgrgrÓrhr˸s  ÿrËrjcCstdƒ}|rtƒStƒSdS)Nz display.unicode.east_asian_width)rrËr¾)Zuse_east_asian_widthrgrgrhr”ßsr”zdict[str, Any]cCsLddlm}tdƒr"| ¡\}}nd}tdƒtdƒtdƒtdƒtd    ƒ|d
œS) aõGet the parameters used to repr(dataFrame) calls using DataFrame.to_string.
 
    Supplying these parameters to DataFrame.to_string is equivalent to calling
    ``repr(DataFrame)``. This is useful if you want to adjust the repr output.
 
    .. versionadded:: 1.4.0
 
    Example
    -------
    >>> import pandas as pd
    >>>
    >>> df = pd.DataFrame([[1, 2], [3, 4]])
    >>> repr_params = pd.io.formats.format.get_dataframe_repr_params()
    >>> repr(df) == df.to_string(**repr_params)
    True
    r)Úconsolezdisplay.expand_frame_reprNúdisplay.max_rowsúdisplay.min_rowszdisplay.max_columnsúdisplay.max_colwidthúdisplay.show_dimensions)r‘r’Úmax_colsZ max_colwidthÚshow_dimensionsÚ
line_width)Úpandas.io.formatsràrZget_console_size)ràrçÚ_rgrgrhÚget_dataframe_repr_paramsçs úrêcCsNtƒ\}}tdƒdkr|ntdƒ}tdƒdkr2|ntdƒ}dd||tdƒdœS)aéGet the parameters used to repr(Series) calls using Series.to_string.
 
    Supplying these parameters to Series.to_string is equivalent to calling
    ``repr(series)``. This is useful if you want to adjust the series repr output.
 
    .. versionadded:: 1.4.0
 
    Example
    -------
    >>> import pandas as pd
    >>>
    >>> ser = pd.Series([1, 2, 3, 4])
    >>> repr_params = pd.io.formats.format.get_series_repr_params()
    >>> repr(ser) == ser.to_string(**repr_params)
    True
    rárrâTrä)rrr’r‘r_)r    r)r½Úheightr‘r’rgrgrhÚget_series_repr_paramss
 
ÿý
ÿýûrìc@sXeZdZdZerendZeee7Zdjdd    d
d d d ddddd ddddd d d ddœdd„Zddœdd„Zed dœdd„ƒZ    ed dœdd„ƒZ
ed dœd d!„ƒZ ed dœd"d#„ƒZ ed dœd$d%„ƒZ ed dœd&d'„ƒZed dœd(d)„ƒZed dœd*d+„ƒZed dœd,d-„ƒZed.dœd/d0„ƒZdd d1œd2d3„Zdd4d5œd6d7„Zdd d8œd9d:„Zd    d;d<œd=d>„Zd
d?d@œdAdB„ZddœdCdD„ZddœdEdF„ZdddGœdHdI„Zd dœdJdK„Zd dœdLdM„Zd dœdNdO„Zd.dœdPdQ„ZddœdRdS„ZddœdTdU„Z ddœdVdW„Z!ddœdXdY„Z"d.dZd[œd\d]„Z#d^d_d[œd`da„Z$dddbœdcdd„Z%ddZdbœdedf„Z&dgdœdhdi„Z'dS)kÚDataFrameFormatterz;Class for processing dataframe formatting options and data.rdNTrXFÚ.rLúSequence[Hashable] | NonezColspaceArgType | Nonezbool | Sequence[str]rZr[zFormattersType | NonerŠúFloatFormatType | Noneú bool | Noner‹r‰r\)ÚframeÚcolumnsÚ    col_spacerrŽr`Ú
formattersrRrsÚsparsifyÚ index_namesr‘r’råræÚdecimalÚ    bold_rowsÚescaperbcCsº||_| |¡|_| |¡|_||_||_||_| |¡|_    | 
|¡|_ |    |_ |  |
¡|_| |_||_||_||_| |_| |_||_||_| ¡|_| ¡|_|j|_| ¡tƒ|_dSr«)ròÚ_initialize_columnsróÚ_initialize_colspacerôrrŽr`Ú_initialize_formattersrõÚ_initialize_justifyrRrsÚ_initialize_sparsifyröÚshow_index_namesrørùrúr‘r’råræÚ_calc_max_cols_fittedÚmax_cols_fittedÚ_calc_max_rows_fittedÚmax_rows_fittedÚtr_framer¥r”r•)rfròrórôrrŽr`rõrRrsrör÷r‘r’rårærørùrúrgrgrhri4s.     
 
zDataFrameFormatter.__init__zlist[list[str]]rjcCs*| ¡}|jr&| |j¡}| d|¡|S)zP
        Render a DataFrame to a list of columns (as lists of strings).
        r)Ú_get_strcols_without_indexrŽr³rr»)rfÚstrcolsZ    str_indexrgrgrhÚ get_strcolscs
  zDataFrameFormatter.get_strcolscCs|jdkp|jdko|jS)NTr¥)ræÚ is_truncatedrvrgrgrhÚshould_show_dimensionsos
ÿz)DataFrameFormatter.should_show_dimensionscCst|jp |jƒSr«)rZÚis_truncated_horizontallyržrvrgrgrhr    uszDataFrameFormatter.is_truncatedcCst|jot|jƒ|jkƒSr«)rZrrnrórvrgrgrhr ysz,DataFrameFormatter.is_truncated_horizontallycCst|jot|jƒ|jkƒSr«)rZrrnròrvrgrgrhrž}sz*DataFrameFormatter.is_truncated_verticallycCs dt|jƒ›dt|jjƒ›dS)Nz
 
[z rows x z     columns])rnròrórvrgrgrhÚdimensions_infosz"DataFrameFormatter.dimensions_infocCs t|jjƒSr«)Ú
_has_namesròrŽrvrgrgrhÚhas_index_names…sz"DataFrameFormatter.has_index_namescCs t|jjƒSr«)r ròrórvrgrgrhÚhas_column_names‰sz#DataFrameFormatter.has_column_namescCst|j|j|jfƒSr«)ÚallrrŽrrvrgrgrhÚshow_row_idx_namessz%DataFrameFormatter.show_row_idx_namescCst|j|j|jfƒSr«)rrrrrvrgrgrhÚshow_col_idx_names‘sz%DataFrameFormatter.show_col_idx_namesr™cCst|jpt|jƒt|jƒƒSr«)ršr‘rnròrvrgrgrhÚmax_rows_displayed•sz%DataFrameFormatter.max_rows_displayed)rörbcCs|dkrtdƒS|S)Nzdisplay.multi_sparse©r)rfrörgrgrhrÿ™sz'DataFrameFormatter._initialize_sparsifyr))rõrbcCsT|dkr iSt|jjƒt|ƒks*t|tƒr.|Stdt|ƒ›dt|jjƒ›dƒ‚dS)NzFormatters length(ú+) should match DataFrame number of columns(rµ)rnròrór§ÚdictÚ
ValueError)rfrõrgrgrhrýžsÿz)DataFrameFormatter._initialize_formatters)rRrbcCs|dkrtdƒS|SdS)Nzdisplay.colheader_justifyr)rfrRrgrgrhrþ«sz&DataFrameFormatter._initialize_justifyrB)rórbcCs2|dk    r&ttt|ƒƒ}|j||_|S|jjSdSr«)rErr#ròró)rfróÚcolsrgrgrhrû±s
 z&DataFrameFormatter._initialize_columnsr%)rôrbcsΈdkri}n¼tˆttfƒrBdˆi}| ‡fdd„|jjDƒ¡nˆtˆtƒr‚ˆ ¡D]&}||jjkrT|dkrTtd|›ƒ‚qTˆ}nHt    |jjƒt    ˆƒkr¸tdt    ˆƒ›dt    |jjƒ›dƒ‚t
t |jjˆƒƒ}|S)Nrdcsi|]
}|ˆ“qSrgrg)rzÚcolumn©rôrgrhÚ
<dictcomp>Âsz;DataFrameFormatter._initialize_colspace.<locals>.<dictcomp>z,Col_space is defined for an unknown column: zCol_space length(rrµ) r§r™r[ÚupdateròrórÚkeysrrnrÚzip)rfrôrƒrrgrrhrü»s$
 ÿÿz'DataFrameFormatter._initialize_colspacecCs0| ¡s|jStƒ\}}| |¡r&|S|jSdS)z%Number of columns fitting the screen.N)Ú_is_in_terminalrår    Ú_is_screen_narrow)rfr½rérgrgrhrÓs 
 
z(DataFrameFormatter._calc_max_cols_fittedcCsP| ¡r@tƒ\}}|jdkr(|| ¡S| |¡r8|}qF|j}n|j}| |¡S)z,Number of rows with data fitting the screen.r)rr    r‘Ú_get_number_of_auxillary_rowsÚ_is_screen_shortÚ_adjust_max_rows)rfrérër‘rgrgrhrÞs
 
 
z(DataFrameFormatter._calc_max_rows_fitted)r‘rbcCs(|r$t|jƒ|kr$|jr$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
        )rnròr’rš)rfr‘rgrgrhr#ñs z#DataFrameFormatter._adjust_max_rowscCst|jdkp|jdkƒS)z/Check if the output is to be shown in terminal.r)rZrår‘rvrgrgrhrÿsz"DataFrameFormatter._is_in_terminalcCst|jdkot|jjƒ|kƒS©Nr)rZrårnròró)rfÚ    max_widthrgrgrhr sz$DataFrameFormatter._is_screen_narrowcCst|jdkot|jƒ|kƒSr$)rZr‘rnrò)rfZ
max_heightrgrgrhr"sz#DataFrameFormatter._is_screen_shortcCs:d}d}||}|jr(|t|j ¡ƒ7}|jr6|d7}|S)z?Get number of rows occupied by prompt, dots and dimension info.r—)rærnr Ú
splitlinesr)rfZdot_rowZ
prompt_rowZnum_rowsrgrgrhr!    sz0DataFrameFormatter._get_number_of_auxillary_rowscCs |jr| ¡|jr| ¡dS)zY
        Check whether the frame should be truncated. If so, slice the frame up.
        N)r Ú_truncate_horizontallyržÚ_truncate_verticallyrvrgrgrhr¥szDataFrameFormatter.truncatecCsÆ|jdk    st‚|jd}|dkr–|jjdd…d|…f}|jjdd…| d…f}t||fdd|_t|jttfƒr¼|jd|…|j| d…•|_n&t    t
|j ƒ}|jjdd…d|…f|_||_ dS)z´Remove columns, which are not to be displayed and adjust formatters.
 
        Attributes affected:
            - tr_frame
            - formatters
            - tr_col_num
        Nr˜r—©Zaxis) rr¨rr›rHr§rõÚlistÚtuplerr™råZ
tr_col_num)rfZcol_numrOrPrgrgrhr'!s
 þ z)DataFrameFormatter._truncate_horizontallycCs’|jdk    st‚|jd}|dkrb|jjd|…dd…f}|jj| d…dd…f}t||fƒ|_n&tt|jƒ}|jjd|…dd…f|_||_dS)z‚Remove rows, which are not to be displayed.
 
        Attributes affected:
            - tr_frame
            - tr_row_num
        Nr˜r—)    rr¨rr›rHrr™r‘rœ)rfrŸÚheadÚtailrgrgrhr(;s
 z'DataFrameFormatter._truncate_verticallyc
    s’g}tˆjƒsbˆjsbtˆjƒD]>\}}ˆ |¡}t|ˆjtˆj     |d¡ƒˆj
d}|  |¡q|StˆjƒrÆt t tˆjƒˆ_tˆjƒtˆjƒkr´tdtˆjƒ›dtˆjƒ›dƒ‚dd„ˆjDƒ}n ˆ ˆj¡}ˆjrì|D]}|  d¡qÜtˆjƒD]–\}}||}ttˆj     |d¡ƒf‡fd    d
„|DƒžŽ}ˆ |¡}t|ˆj|ˆj
d }tt‡fd d
„|Dƒƒ|ƒ}    ˆj
j||    ˆjd }|  ||¡qö|S)Nr)ÚstringsrRÚminimumr•zWriting z cols but got z aliasescSsg|]
}|g‘qSrgrg)rzÚlabelrgrgrhr|dszADataFrameFormatter._get_strcols_without_index.<locals>.<listcomp>rdc3s|]}ˆj |¡VqdSr«©r•rnrÛrvrgrhr­osz@DataFrameFormatter._get_strcols_without_index.<locals>.<genexpr>)r/r•c3s|]}ˆj |¡VqdSr«r1rÛrvrgrhr­vsr¸)r5rÚ    enumeraterÚ
format_colÚ_make_fixed_widthrRr™rôrÕr•r€rrr[rnrórÚ_get_formatted_column_labelsrÚmax)
rfrr{rÖrÚ str_columnsrÜZcheaderZheader_colwidthrÆrgrvrhrMsR
ü 
ÿ  ÿÿ
ÿz-DataFrameFormatter._get_strcols_without_indexrr)r{rbc    CsL|j}| |¡}t|jdd…|fj||j|j|j |j    |¡|j
|j dS)N)rsr`rÈrør´) rÚ_get_formatterrtr›rªrsr`rôrÕrórørŽ)rfr{ròÚ    formatterrgrgrhr3|s
ùzDataFrameFormatter.format_colú    str | intúCallable | NonecCs`t|jttfƒr2t|ƒr,tt|ƒ}|j|SdSn*t|ƒrN||jkrN|j|}|j |d¡SdSr«)    r§rõr*r+r3rr™rórÕ)rfr{rgrgrhr8‰s
 
 
z!DataFrameFormatter._get_formatter)ròrbcsüddlm}|j}t|tƒr¼|jddd}tt|Žƒ}ˆjj    j
}t dd„|j Dƒƒ‰t t|tt|ƒƒƒ‰‡‡‡fdd„‰tt‡fd    d„|DƒŽƒ}ˆjr¨t|ƒr¨||ƒ}d
d „t|ŽDƒ}n<| ¡}ˆjj    }t t|tt|ƒƒƒ‰‡‡fd d „t|ƒDƒ}|S) Nr)Úsparsify_labelsF)rör¼css|] }|jVqdSr«)Z is_floating)rzÚlevelrgrgrhr­ szBDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>cs"|ˆjkrˆ|rˆsd|S|S)Nú )rõ)rÜÚy)Ú need_leadspÚrestrict_formattingrfrgrhÚ space_format£sÿþýzEDataFrameFormatter._get_formatted_column_labels.<locals>.space_formatc3s"|]‰‡‡fdd„ˆDƒVqdS)csg|]}ˆˆ|ƒ‘qSrgrg)rzr?)rBrÜrgrhr|­szMDataFrameFormatter._get_formatted_column_labels.<locals>.<genexpr>.<listcomp>Nrg)rz)rB©rÜrhr­­scSsg|] }t|ƒ‘qSrg)r*rÛrgrgrhr|²szCDataFrameFormatter._get_formatted_column_labels.<locals>.<listcomp>cs0g|](\}}ˆ |¡s&ˆ|r&d|n|g‘qS)r>)r8)rzr{rÜ)r@rfrgrhr|·sÿ)Zpandas.core.indexes.multir<rór§rCr°r*rròÚdtypesrªr¯ÚlevelsrÚmapr6rörnr2)rfròr<róZ fmt_columnsrDr7rg)r@rArfrBrhr5•s, 
 
    ÿ þz/DataFrameFormatter._get_formatted_column_labelscsÄdd„ˆj ¡Dƒ‰|j}|j}ˆ d¡}t|tƒrL|jˆjdˆj    |d}n|jˆj    |dg}‡‡fdd„|Dƒ}ˆj
j d |žŽ  d
¡}ˆj r¢d d„ˆ ¡Dƒ}n d g|j}ˆjr¼||S|SdS)NcSsi|]\}}|tt|ƒ“qSrg)rr™)rzÚkÚvrgrgrhrÁsz;DataFrameFormatter._get_formatted_index.<locals>.<dictcomp>Ú    __index__F)rör¼r®r9)rr9c
s.g|]&}ttt|ƒdˆ dd¡ˆjdƒ‘qS)rOrdr)rRr/r•)r+r4r*rÕr•rÛ©rôrfrgrhr|Ðsû
ÿÿz;DataFrameFormatter._get_formatted_index.<locals>.<listcomp>r—rmcSsg|] }t|ƒ‘qSrg©r[rÛrgrgrhr|Ýsrd)r—)rôÚitemsrŽrór8r§rCr°rörr•r¼ÚsplitrÚ_get_column_name_listZnlevelsr)rfròrŽróÚfmtr²ZadjoinedZ
col_headerrgrJrhr³¾s,
 
ü ú     z'DataFrameFormatter._get_formatted_indexzlist[Hashable]cCsLg}|jj}t|tƒr.| dd„|jDƒ¡n| |jdkr@dn|j¡|S)Ncss|]}|dkrdn|VqdSrcrgr¬rgrgrhr­êsz;DataFrameFormatter._get_column_name_list.<locals>.<genexpr>rd)ròrór§rCÚextendr®r€r)rfr®rórgrgrhrNæs 
z(DataFrameFormatter._get_column_name_list)NNTTrXNNNNTNNNFrîFT)(r…r†r‡Ú__doc__rNrVrirÚpropertyr
r    r ržr rrrrrrÿrýrþrûrürrr#rr r"r!r¥r'r(rr3r8r5r³rNrgrgrgrhrí.s~  í4/  
 
/  )(ríc@s¨eZdZdZdddœdd„Zd(d    d
d d
d d
d d d
d
d
d œ dd„Zd)d    d
dd dd
d d
dœdd„Zd*d    d
dd
dœdd„Zd+dd
d d!d"d d#dd d
dd
d d
d d$d
d%œd&d'„ZdS),ÚDataFrameRendereraJClass for creating dataframe output in multiple formats.
 
    Called in pandas.core.generic.NDFrame:
        - to_csv
        - to_latex
 
    Called in pandas.core.frame.DataFrame:
        - to_html
        - to_string
 
    Parameters
    ----------
    fmt : DataFrameFormatter
        Formatter with the formatting options.
    rír\)rOrbcCs
||_dSr«)rO)rfrOrgrgrhriszDataFrameRenderer.__init__NFú"FilePath | WriteBuffer[str] | NonerŠrZzstr | tuple[str, str] | None) r^Ú column_formatÚ    longtabler¿Ú multicolumnÚmulticolumn_formatÚmultirowÚcaptionr0Úpositionrbc  Cs>ddlm} | |j|||||||    |
d    } |  ¡} t| ||dS)zU
        Render a DataFrame to a LaTeX tabular/longtable environment output.
        r)ÚLatexFormatter)rVrUrWrXrYrZr0r[©r^r¿)Zpandas.io.formats.latexr\rOr„Úsave_to_buffer)rfr^rUrVr¿rWrXrYrZr0r[r\Zlatex_formatterÚstringrgrgrhÚto_latexs ÷ zDataFrameRenderer.to_latexzstr | list | tuple | Nonezint | bool | None)r^r¿ÚclassesÚnotebookÚborderÚtable_idÚ render_linksrbc CsFddlm}m}    |r|    n|}
|
|j||||d} |  ¡} t| ||dS)uJ
        Render a DataFrame to a html table.
 
        Parameters
        ----------
        buf : str, path object, file-like object, or None, default None
            String, path object (implementing ``os.PathLike[str]``), or file-like
            object implementing a string ``write()`` function. If None, the result is
            returned as a string.
        encoding : str, default â€œutf-8”
            Set character encoding.
        classes : str or list-like
            classes to include in the `class` attribute of the opening
            ``<table>`` tag, in addition to the default "dataframe".
        notebook : {True, False}, optional, default False
            Whether the generated HTML is for IPython Notebook.
        border : int
            A ``border=border`` attribute is included in the opening
            ``<table>`` tag. Default ``pd.options.display.html.border``.
        table_id : str, optional
            A css id is included in the opening `<table>` tag if specified.
        render_links : bool, default False
            Convert URLs to HTML links.
        r)Ú HTMLFormatterÚNotebookFormatter)rarcrdrer])Zpandas.io.formats.htmlrfrgrOr„r^) rfr^r¿rarbrcrdrerfrgZKlassZhtml_formatterr_rgrgrhÚto_html$s" ûzDataFrameRenderer.to_htmlr‹)r^r¿rçrbcCs0ddlm}||j|d}| ¡}t|||dS)u%
        Render a DataFrame to a console-friendly tabular output.
 
        Parameters
        ----------
        buf : str, path object, file-like object, or None, default None
            String, path object (implementing ``os.PathLike[str]``), or file-like
            object implementing a string ``write()`` function. If None, the result is
            returned as a string.
        encoding: str, default â€œutf-8”
            Set character encoding.
        line_width : int, optional
            Width to wrap a line in characters.
        r)ÚStringFormatter)rçr])Zpandas.io.formats.stringrirOr„r^)rfr^r¿rçriZstring_formatterr_rgrgrhr„Ws zDataFrameRenderer.to_stringú,ÚwÚinferú"TÚstrictz7FilePath | WriteBuffer[bytes] | WriteBuffer[str] | Noner[rïzIndexLabel | Noner&r+)Ú path_or_bufr¿ÚsepróÚ index_labelr¹Ú compressionreÚ    quotecharÚlineterminatorÚ    chunksizeÚ date_formatÚ doublequoteÚ
escapecharÚerrorsÚstorage_optionsrbcCs‚ddlm}|dkr d}tƒ}nd}|||
||||||||| |    | | |||jd}| ¡|r~t|tƒsjt‚| ¡}| ¡|SdS)z;
        Render dataframe as comma-separated file.
        r)Ú CSVFormatterNTF)rortrpr¿ryrrrerrqr¹rursrvrwrxrzr9)    Zpandas.io.formats.csvsr{rrOÚsaver§r¨ÚgetvalueÚclose)rfror¿rprórqr¹rrrersrtrurvrwrxryrzr{Zcreated_bufferZ csv_formatterÚcontentrgrgrhÚto_csvqs> ïzDataFrameRenderer.to_csv)
NNFNFNFNNN)NNNFNNF)NNN)NNrjNNrkrlNrmNNNTNrnN)    r…r†r‡rQrir`rhr„r€rgrgrgrhrSðsTõ$"ø5üïrSr[rTrŠ)r_r^r¿rbc
CsLt||d6}| |¡|dkr4| ¡W5QR£SW5QR£dSQRXdS)zQ
    Perform serialization. Write to buf or return as string if buf is None.
    )r¿N)Ú
get_bufferÚwriter})r_r^r¿Úfrgrgrhr^­s
 
r^zIGenerator[WriteBuffer[str], None, None] | Generator[StringIO, None, None])r^r¿rbc    cs|dk    rt|ƒ}ntƒ}|dkr&d}nt|tƒs8tdƒ‚t|dƒrJ|VnBt|tƒr„tt|ƒƒt|d|dd }|VW5QRXntdƒ‚dS)    z€
    Context manager to open, yield and close buffer for filenames or Path-like
    objects, otherwise yield buf unchanged.
    Nzutf-8z1buf is not a file name and encoding is specified.r‚rkrd)r¿Únewlinez1buf is not a file name and it has no write method)    rJrr§r[rÚhasattrrIÚopenÚ    TypeError)r^r¿rƒrgrgrhr½s
 
 
 
 rrXrPrîTr r;rðr‹zstr | int | Nonerñrr) r‚r9rsr`ÚdigitsrÈrRrør´reÚfallback_formatterrbc CsÂt|jƒrt} n`t|jtƒr"t} nNt|jƒr2t} n>t|jƒrBt    } n.t
|jƒsVt |jƒr\t } nt |jƒrlt} nt} |dkr|d}|dkrŒtdƒ}|dkrœtdƒ}| ||||||||||    |
d } |  ¡S)a{
    Format an array for printing.
 
    Parameters
    ----------
    values
    formatter
    float_format
    na_rep
    digits
    space
    justify
    decimal
    leading_space : bool, optional, default True
        Whether the array should be formatted with a leading space.
        When an array as a column of a Series or DataFrame, we do want
        the leading space to pad between columns.
 
        When formatting an Index subclass
        (e.g. IntervalIndex._format_native_types), we don't want the
        leading space since it should be left-aligned.
    fallback_formatter
 
    Returns
    -------
    List[str]
    Né r“údisplay.precision)
rˆr`rsr9rÈrRrør´rer‰)r/rÚDatetime64Formatterr§r9ÚDatetime64TZFormatterr8ÚTimedelta64Formatterr0ÚExtensionArrayFormatterr2r.ÚFloatArrayFormatterr4ÚIntArrayFormatterÚGenericArrayFormatterrÚ
get_result) r‚r9rsr`rˆrÈrRrør´rer‰Z    fmt_klassZfmt_objrgrgrhrtãsB)
 
 
 
õrtc@sPeZdZddd    d
d d d d d dddd
ddœ dd„Zddœdd„Zddœdd„ZdS)r’éNrXrŠrPrîTr r™r;r[r:rðr‹rZrñr\) r‚rˆr9r`rÈrsrRrøreÚ fixed_widthr´r‰rbc CsL||_||_||_||_||_||_||_||_|    |_|
|_    | |_
| |_ dSr«) r‚rˆr`rÈr9rsrRrører•r´r‰) rfr‚rˆr9r`rÈrsrRrører•r´r‰rgrgrhri6szGenericArrayFormatter.__init__rrrjcCs| ¡}t||jƒSr«)Ú_format_stringsr4rR)rfrrgrgrhr“Rsz GenericArrayFormatter.get_resultc sˆˆjdkr0tdƒ}|dkr6tdƒ‰‡fdd„}nˆj}ˆjdk    rHˆj‰n6ˆjdk    rZˆj‰n$ˆjdk    olˆjtk}ttjd|d‰‡‡fdd„}t    ˆj
d    d
}t |t j ƒs®td ƒ‚t |t¡}|t jt|ƒttd t|jƒƒƒd @}ˆj}|dkrö| ¡}g}t|ƒD]€\}    }
||    s|s&ˆjdk    r<| d||
ƒ›¡nD||    rV| ||
ƒ¡n*|dkrfd} nd} | | j||
ƒd¡q|S)Nr“r‹cst|dˆd›d›ƒS)Nz .Údrƒ)Ú_trim_zeros_single_floatrC)Ú    precisionrgrhÚ<lambda>[sÿz7GenericArrayFormatter._format_strings.<locals>.<lambda>r¡)r¤Ú quote_stringsc    sªˆjdk    rvt|ƒrvt|ƒrvz<|dkr*WdS|tkr<ttƒWS|tksNt |¡rTWdSWntt    fk
rnYnXˆjSt
|t ƒrˆt|ƒSt
|t ƒršt |ƒStˆ|ƒƒSdS)Nr\r)r`r7r:rr[rÚnpZisnatr‡rr§r@r?ÚreprrC)r9rfrgrhÚ_formatms 
 
 
 
z6GenericArrayFormatter._format_strings.<locals>._formatT©Z extract_numpyz<ExtensionArray formatting should use ExtensionArrayFormatterr—r)r>Fz{v}z {v}©rH)rsrr9r‰rerrrKr©rAr‚r§rœÚndarrayr‡rZ    map_inferr1rr;r+ÚrangernÚshaper´r¯r2r€r°) rfrsr›ržÚvalsÚinferredZ is_float_typer´rr{rHZtplrg)r9r™rfrhr–VsR
 
 
ý ÿ  þÿ
 
z%GenericArrayFormatter._format_strings) r”NrXrŠNrPrîNTTN)r…r†r‡rir“r–rgrgrgrhr’5só(r’csReZdZddœ‡fdd„ Zddddd    œd
d „Zd dœd d„Zddœdd„Z‡ZS)rr\rjcsDtƒj||Ž|jdk    r@|jdkr@d|_t|jƒr@|j|_d|_dS)NF)rÐrirsr9r•Úcallable)rfÚargsrÊrÓrgrhri¦s 
zFloatArrayFormatter.__init__Nrðz float | Noner )rsÚ    thresholdrbcslˆdkrˆj‰ˆr"‡‡fdd„‰n ‡fdd„‰ˆjdkrH‡‡fdd„‰nˆ‰ˆdkrXˆS‡‡‡fdd    „}|S)
z;Returns a function to be applied on each value to format itNcs$ˆdk    s t‚t|ƒrˆ|dSˆjS)N©Úvalue)r¨r;r`r )rsrfrgrhÚbase_formatterÄs
 ÿ ýz<FloatArrayFormatter._value_formatter.<locals>.base_formattercst|ƒrt|ƒSˆjSr«)r;r[r`r rvrgrhr«Ñsrîcsˆ|ƒ dˆjd¡S)Nrîr—)Úreplacerør )r«rfrgrhÚdecimal_formatterÖsz?FloatArrayFormatter._value_formatter.<locals>.decimal_formattercs0t|ƒr&t|ƒˆkrˆ|ƒSˆdƒSnˆjSdS)Ng)r;Úabsr`r©)r­rfr¨rgrhr9ßs
 
z7FloatArrayFormatter._value_formatter.<locals>.formatter)rsrø)rfrsr¨r9rg)r«r­rsrfr¨rhÚ_value_formatter²s 
    z$FloatArrayFormatter._value_formatterú
np.ndarrayc
    spddddœdd„‰ˆjdk    r.ˆˆjˆjˆjƒSˆjr>tdƒ‰nd‰‡‡‡fd    d
„}ˆjdkrˆjrˆˆjd krrd }nd }t|jˆj    d}qœˆj}n ‡fdd„}||ƒ}ˆjs®|St
|ƒdkrÜt dd„|Dƒƒ}|ˆj    dk}nd}t j dd:t  ˆj¡}|dk ¡}|dˆj     k|dk@ ¡}    W5QRX|    s>|rl|rlˆjd krPd}nd}t|jˆj    d}||ƒ}|S)zˆ
        Returns the float values converted into strings using
        the parameters given at initialisation, as a numpy array
        r"r r[)r‚r9r`cs<t|ƒ}t ‡‡fdd„t| ¡| ¡ƒDƒ¡ |j¡}|S)Ncs g|]\}}|sˆ|ƒnˆ‘qSrgrg)rzÚvalÚm©r9r`rgrhr|ósÿzWFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_rep.<locals>.<listcomp>)r:rœÚarrayrÚravelZreshaper£)r‚r9r`ÚmaskÚ    formattedrgr³rhÚformat_with_na_repðs þÿûzCFloatArrayFormatter.get_result_as_array.<locals>.format_with_na_repNzdisplay.chop_thresholdcsxˆ |ˆ¡}ˆjdkr"dˆj}nˆj}ˆj}t|ƒ}ˆ|||ƒ}ˆjrt|rZt|ˆjƒ}n t|ˆjƒ}t    j
|ddS|S)NrOr>Úobject©r) r¯rRr`r‚r.r•Ú_trim_zeros_complexrøÚ_trim_zeros_floatrœÚasarray)rsr9r`r‚Z
is_complexrƒ©r¸rfr¨rgrhÚformat_values_withs 
   zCFloatArrayFormatter.get_result_as_array.<locals>.format_values_withTz{value: .{digits:d}f}z{value:.{digits:d}f})rˆcs
ˆj|Sr«)rsr©rvrgrhrš(óz9FloatArrayFormatter.get_result_as_array.<locals>.<lambda>rcss|]}t|ƒVqdSr«rÂrÛrgrgrhr­4sz:FloatArrayFormatter.get_result_as_array.<locals>.<genexpr>éFÚignore©Úinvalidg€„.Aé
z{value: .{digits:d}e}z{value:.{digits:d}e})r9r‚r`r•rrsr´rr°rˆrnr6rœÚerrstater®r¯)
rfr¿Zfmt_strrsZformatted_valuesÚmaxlenZtoo_longZabs_valsZhas_large_valuesZhas_small_valuesrgr¾rhÚget_result_as_arrayêsD
 
 
 
 
    ÿ z'FloatArrayFormatter.get_result_as_arrayrrcCs t| ¡ƒSr«)r*rÈrvrgrgrhr–Msz#FloatArrayFormatter._format_strings)NN)r…r†r‡rir¯rÈr–rßrgrgrÓrhr¥s ý8crc@seZdZddœdd„ZdS)r‘rrrjcs>|jdkrdd„}ndd„}|jp$|‰‡fdd„|jDƒ}|S)NFcSs|d›j|dS)Nr—rC©r°rCrgrgrhršTrÀz3IntArrayFormatter._format_strings.<locals>.<lambda>cSs|d›j|dS)Nz drCrÉrCrgrgrhršVrÀcsg|] }ˆ|ƒ‘qSrgrgrÛ©r9rgrhr|Xsz5IntArrayFormatter._format_strings.<locals>.<listcomp>)r´r9r‚)rfZ formatter_strrrgrÊrhr–Rs 
 
 
z!IntArrayFormatter._format_stringsN©r…r†r‡r–rgrgrgrhr‘Qsr‘cs8eZdZd dddddœ‡fdd„ Zd    d
œd d „Z‡ZS)rŒrNz3np.ndarray | Series | DatetimeIndex | DatetimeArrayr[r\)r‚Únat_reprvrbc s tƒj|f|Ž||_||_dSr«)rÐrirÌrv)rfr‚rÌrvrÊrÓrgrhri]szDatetime64Formatter.__init__rrrjcsZˆj}t|tƒst|ƒ}ˆjdk    r>tˆjƒr>‡fdd„|DƒS|jjˆjˆjd}|     ¡S)z&we by definition have DO NOT have a TZNcsg|]}ˆ |¡‘qSrgrÊrÛrvrgrhr|psz7Datetime64Formatter._format_strings.<locals>.<listcomp>)r`rv)
r‚r§rFr9r¦Ú_dataZ_format_native_typesrÌrvÚtolist)rfr‚rrgrvrhr–hs
ÿz#Datetime64Formatter._format_strings)rN©r…r†r‡rir–rßrgrgrÓrhrŒ\sü rŒc@seZdZddœdd„ZdS)rrrrjc Cs|t|jdd}|j}d}|dkr,|jdd}t|tƒr@| ¡}n
t |¡}t    |||j
|j |j |j |j|j|j|j|d }|S)NTrŸ)Zboxed)    rsr`rˆrÈrRrør´rer‰)rAr‚r9Ú
_formatterr§r<rurœr½rtrsr`rˆrÈrRrør´re)rfr‚r9r‰r´rrgrgrhr–ys, 
 
 
õ z'ExtensionArrayFormatter._format_stringsNrËrgrgrgrhrxsrznp.ndarray | Sequence[float])Ú percentilesrbc CsXt |¡}tjdd2t|ƒr<t |dk¡r<t |dk¡sDtdƒ‚W5QRXd|}| ¡ t¡}t     ||¡}t |¡r’| t
¡}dd„|DƒSt  |¡}|ddkr°|dnd    }|d
dkrÌd|d
nd    }t  t  t tj|||d ¡¡¡ t¡ }td|ƒ}tj|td }|| ¡ t¡ t
¡||<|| |¡ t
¡||<d d„|DƒS)a
    Outputs rounded and formatted percentiles.
 
    Parameters
    ----------
    percentiles : list-like, containing floats from interval [0,1]
 
    Returns
    -------
    formatted : list of strings
 
    Notes
    -----
    Rounding precision is chosen so that: (1) if any two elements of
    ``percentiles`` differ, they remain different after rounding
    (2) no entry is *rounded* to 0% or 100%.
    Any non-integer is always rounded to at least 1 decimal place.
 
    Examples
    --------
    Keeps all entries different after rounding:
 
    >>> format_percentiles([0.01999, 0.02001, 0.5, 0.666666, 0.9999])
    ['1.999%', '2.001%', '50%', '66.667%', '99.99%']
 
    No element is rounded to 0% or 100% (unless already equal to it).
    Duplicates are allowed:
 
    >>> format_percentiles([0, 0.5, 0.02001, 0.5, 0.666666, 0.9999])
    ['0%', '50%', '2.0%', '50%', '66.67%', '99.99%']
    rÂrÃrr—z/percentiles should all be in the interval [0,1]édcSsg|] }|d‘qS©ú%rgryrgrgrhr|Ësz&format_percentiles.<locals>.<listcomp>Néÿÿÿÿ)Úto_beginÚto_endrºcSsg|] }|d‘qSrÓrgryrgrgrhr|Ús)rœr½rÆr6rrÚroundÚastyper™Úiscloser[ÚuniqueÚfloorÚlog10ršZediff1dr6Z
empty_liker¹)rÑZpercentiles_round_typeZint_idxÚoutZ unique_pctsrÖr×ÚprecrgrgrhÚformat_percentiles—s8"
ÿ þ ý 
 
 
ÿþ
ràz2np.ndarray | DatetimeArray | Index | DatetimeIndexrZ©r‚rbcCs~t|tƒs| ¡}t|ttfƒs(t|ƒ}|jdk    r6dS|j}|tk}t|j    ƒ}t
|ƒ}t   |||dk¡  ¡dk}|rzdSdS)NFrT)r§rBrµr=rFÚtzZasi8rrrr rœÚ logical_andr×)r‚Ú
values_intÚconsider_valuesZresoZppdÚ    even_daysrgrgrhÚ is_dates_onlyÝs
 
 
rçrzNaTType | Timestamp)rÜrÌrbcCs|tkr |St|ƒSr«)rr[)rÜrÌrgrgrhÚ_format_datetime64ösrè)rÜrÌrvrbcCs&t|tƒr|S|r| |¡S|jSdSr«)r§r!ÚstrftimeZ
_date_repr)rÜrÌrvrgrgrhÚ_format_datetime64_dateonlyÿs
 
 
rêr )Úis_dates_only_rÌrvrbcs"|r‡‡fdd„S‡fdd„SdS)z]Return a formatter callable taking a datetime64 as input and providing
    a string as outputcst|ˆˆdS)N)rÌrv)rêrC©rvrÌrgrhršsÿz'get_format_datetime64.<locals>.<lambda>cs t|ˆdS)N©rÌ)rèrCrírgrhršrÀNrg)rërÌrvrgrìrhÚget_format_datetime64srîz*np.ndarray | DatetimeArray | DatetimeIndex)r‚rvrbcCs6t|tjƒr|jdkr| ¡}t|ƒ}|r2|p0dS|S)z6given values and a date_format, return a string formatr—z%Y-%m-%d)r§rœr¡Úndimrµrç)r‚rvÚidorgrgrhÚ!get_format_datetime64_from_valuess rñc@seZdZddœdd„ZdS)rrrrjcs>|j t¡}t|ƒ}|jp&t||jd‰‡fdd„|Dƒ}|S)zwe by definition have a TZ)rvcsg|] }ˆ|ƒ‘qSrgrgrÛrÊrgrhr|4sz9Datetime64TZFormatter._format_strings.<locals>.<listcomp>)r‚rÙr¹rçr9rîrv)rfr‚rðrrgrÊrhr–-s ÿz%Datetime64TZFormatter._format_stringsNrËrgrgrgrhr,srcs8eZdZddddddœ‡fdd    „ Zd
d œd d „Z‡ZS)rŽrFznp.ndarray | TimedeltaIndexr[rZr\©r‚rÌÚboxrbc s tƒj|f|Ž||_||_dSr«)rÐrirÌró)rfr‚rÌrórÊrÓrgrhri:szTimedelta64Formatter.__init__rrrjcs.|jpt|j|j|jd‰‡fdd„|jDƒS)N)rÌrócsg|] }ˆ|ƒ‘qSrgrgrÛrÊrgrhr|Isz8Timedelta64Formatter._format_strings.<locals>.<listcomp>)r9Úget_format_timedelta64r‚rÌrórvrgrÊrhr–Es ÿz$Timedelta64Formatter._format_strings)rFrÏrgrgrÓrhrŽ9sü rŽFz,np.ndarray | TimedeltaIndex | TimedeltaArrayz str | floatròc
s^| tj¡}|tk}d}||dk}t ||¡}| ¡dk}|rFd‰nd‰‡‡‡fdd„}    |    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
    lž"R:rNÚlongcsN|dkst|ƒrt|ƒrˆSt|tƒs.t|ƒ}|jˆd}ˆrJd|›d}|S)NrÉú')r7r:r§rZ
_repr_base)rÜrƒ©rór°rÌrgrhrÐks
  z*get_format_timedelta64.<locals>._formatter)ÚviewrœÚint64rrãr×)
r‚rÌróräråZ one_day_nanosZ not_midnightZbothrærÐrgr÷rhrôLs     rôzTextAdjustment | None)r.rRr/r•rbcs®t|ƒdks|dkr|S|dkr(tƒ‰n|‰t‡fdd„|Dƒƒ‰|dk    rTt|ˆƒ‰tdƒ‰ˆdk    rpˆˆkrpˆ‰dddœ‡‡‡fdd    „ ‰‡fd
d „|Dƒ}ˆj|ˆ|d }|S) Nrrc3s|]}ˆ |¡VqdSr«rÂrÛ)Ú
adjustmentrgrhr­‰sz$_make_fixed_width.<locals>.<genexpr>rãr[)rÜrbcs6ˆdk    r2ˆdkˆ |¡ˆk@r2|dˆd…d}|S)Nr¶r·rÂrC)rúÚconf_maxrÆrgrhÚjust’sz_make_fixed_width.<locals>.justcsg|] }ˆ|ƒ‘qSrgrgrÛ)rürgrhr|˜sz%_make_fixed_width.<locals>.<listcomp>r¸)rnr”r6rrR)r.rRr/r•rƒrg)rúrûrürÆrhr4{s
r4r°)Ú str_complexesrørbcsD‡fdd„|Dƒ}dd„|Dƒ}t|ƒ‰‡fdd„t||ƒDƒ}|S)z‰
    Separates the real and imaginary parts from the complex number, and
    executes the _trim_zeros_float method on each of those.
    c    s$g|]}d tt d|¡ˆƒ¡‘qS)rdz([j+-]))rr¼ÚrerMrÛ)rørgrhr|¢sÿz'_trim_zeros_complex.<locals>.<listcomp>cSsg|] }t|ƒ‘qSrgrÂ)rzÚsrgrgrhr|¨scsŒg|]„\}}|d|ddd …ˆ|dd||ddd |dd …||dd d…ˆ|dd|d‘qS)Nr—r˜Ú0rÕrg)rzrÿrG)Ú
max_lengthrgrhr|ªsúÿ"þýüû)r6r)rýrøÚtrimmedÚlengthsZpaddedrg)rørrhr»s
þ
ù    r»)Ú    str_floatrbcCs | d¡}| d¡r|d7}|S)zX
    Trims trailing zeros after a decimal point,
    leaving just one if necessary.
    rrî)ÚrstripÚendswith)rrgrgrhr˜¶s
 
r˜únp.ndarray | list[str])Ú
str_floatsrørbcsp|}t dˆ›d¡‰ddœ‡fdd„ ‰dddœ‡fd    d
„ }||ƒrX‡fd d „|Dƒ}q<‡‡fd d „|Dƒ}|S)z‰
    Trims the maximum number of trailing zeros equally from
    all numbers containing decimals, leaving just one if
    necessary.
    z^\s*[\+-]?[0-9]+\z[0-9]*$rZrjcst ˆ|¡dk    Sr«)rþÚmatchrC)Ú number_regexrgrhÚis_number_with_decimalÍsz1_trim_zeros_float.<locals>.is_number_with_decimalrrács0‡fdd„|Dƒ}t|ƒdko.tdd„|DƒƒS)zñ
        Determine if an array of strings should be trimmed.
 
        Returns True if all numbers containing decimals (defined by the
        above regular expression) within the array end in a zero, otherwise
        returns False.
        csg|]}ˆ|ƒr|‘qSrgrgrÛ©r rgrhr|Øsz:_trim_zeros_float.<locals>.should_trim.<locals>.<listcomp>rcss|]}| d¡VqdS)rN©rrÛrgrgrhr­Ùsz9_trim_zeros_float.<locals>.should_trim.<locals>.<genexpr>)rnr)r‚Znumbersr rgrhÚ should_trimÐsz&_trim_zeros_float.<locals>.should_trimcs$g|]}ˆ|ƒr|dd…n|‘qS)NrÕrgrÛr rgrhr|Üsz%_trim_zeros_float.<locals>.<listcomp>cs*g|]"}ˆ|ƒr"| ˆ¡r"|dn|‘qS)rr rÛ)rør rgrhr|ßsÿ)rþÚcompile)rrørrrƒrg)rør r
rhr¼Âs  þr¼rB)rŽrbcCs$t|tƒrtj|jŽS|jdk    SdSr«)r§rCÚcomZ any_not_noner®r)rŽrgrgrhr æs
 r c@s\eZdZdZdddddddd    d
d d d ddddddœZd!ddddœdd„Zdddœdd „ZdS)"Ú EngFormatterzl
    Formats float values according to engineering format.
 
    Based on matplotlib.ticker.EngFormatter
    r?ÚzÚarƒÚpÚnÚur²rdrGÚMÚGÚTÚPÚEÚZÚY)ièÿÿÿiëÿÿÿiîÿÿÿiñÿÿÿiôÿÿÿi÷ÿÿÿiúÿÿÿéýÿÿÿrr¶rÁé    rŠééééNFr‹rZr\©ÚaccuracyÚuse_eng_prefixrbcCs||_||_dSr«©r%r&)rfr%r&rgrgrhri    szEngFormatter.__init__Úfloatr[)Únumrbc
Cstt|ƒƒ}t |¡rdSt |¡r(dSd}|dkr>d}| }|dkrfttt | ¡d¡dƒƒ}ntdƒ}| t    |j
  ¡ƒ¡}|     t|j
  ¡ƒ¡}t|ƒ}|j r°|j
|}n$|dkrÈd| d›}n d    |d›}||d
|}|j d krôd }nd |j d›d}|j||d}    |    S)añ
        Formats a number in engineering notation, appending a letter
        representing the power of 1000 of the original number. Some examples:
        >>> format_eng = EngFormatter(accuracy=0, use_eng_prefix=True)
        >>> format_eng(0)
        ' 0'
        >>> format_eng = EngFormatter(accuracy=1, use_eng_prefix=True)
        >>> format_eng(1_000_000)
        ' 1.0M'
        >>> format_eng = EngFormatter(accuracy=2, use_eng_prefix=False)
        >>> format_eng("-1e-6")
        '-1.00E-06'
 
        @param num: the value to represent
        @type num: either a numeric value or a string that can be converted to
                   a numeric value (as per decimal.Decimal constructor)
 
        @return: engineering formatted string
        rXÚinfr—rrÕr¶zE-Z02dzE+rÅNz{mant: g}{prefix}z{mant: .r—z
f}{prefix})ÚmantÚprefix)rr[Úis_nanÚ is_infiniter™ÚmathrÜrÝršr6Ú ENG_PREFIXESrr&r%r°)
rfr)ZdnumÚsignZpow10Z    int_pow10r,r+Z
format_strr·rgrgrhÚ__call__s4 
 
   
zEngFormatter.__call__)NF)r…r†r‡rQr0rir2rgrgrgrhrís.ïÿrr¶r™r\r$cCstdt||ƒƒdS)a
    Format float representation in DataFrame with SI notation.
 
    Parameters
    ----------
    accuracy : int, default 3
        Number of decimal digits after the floating point.
    use_eng_prefix : bool, default False
        Whether to represent a value with SI prefixes.
 
    Returns
    -------
    None
 
    Examples
    --------
    >>> df = pd.DataFrame([1e-9, 1e-3, 1, 1e3, 1e6])
    >>> df
                  0
    0  1.000000e-09
    1  1.000000e-03
    2  1.000000e+00
    3  1.000000e+03
    4  1.000000e+06
 
    >>> pd.set_eng_float_format(accuracy=1)
    >>> df
             0
    0  1.0E-09
    1  1.0E-03
    2  1.0E+00
    3  1.0E+03
    4  1.0E+06
 
    >>> pd.set_eng_float_format(use_eng_prefix=True)
    >>> df
            0
    0  1.000n
    1  1.000m
    2   1.000
    3  1.000k
    4  1.000M
 
    >>> pd.set_eng_float_format(accuracy=1, use_eng_prefix=True)
    >>> df
          0
    0  1.0n
    1  1.0m
    2   1.0
    3  1.0k
    4  1.0M
 
    >>> pd.set_option("display.float_format", None)  # unset option
    r“N)rrr'rgrgrhÚset_eng_float_formatNs7r3rdzbool | object | strzlist[dict[int, int]])rEÚsentinelrbc    Cs’t|ƒdkrgSdgt|dƒ}g}|D]b}d}i}t|ƒD]2\}}||rX||krXq>d||<||||<|}q>t|ƒ|||<| |¡q*|S)a
    For each index in each level the function returns lengths of indexes.
 
    Parameters
    ----------
    levels : list of lists
        List of values on for level.
    sentinel : string, optional
        Value which states that no new index starts on there.
 
    Returns
    -------
    Returns list of maps. For each level returns map of indexes (key is index
    in row and value is length of index).
    rTF)rnr2r€)    rEr4Úcontrolrƒr=Ú
last_indexrr{ÚkeyrgrgrhÚget_level_lengthsˆs    r8zWriteBuffer[str])r^ÚlinesrbcCs4tdd„|Dƒƒr dd„|Dƒ}| d |¡¡dS)z‘
    Appends lines to a buffer.
 
    Parameters
    ----------
    buf
        The buffer to write to
    lines
        The lines to append.
    css|]}t|tƒVqdSr«)r§r[rÛrgrgrhr­¾sz#buffer_put_lines.<locals>.<genexpr>cSsg|] }t|ƒ‘qSrgrKrÛrgrgrhr|¿sz$buffer_put_lines.<locals>.<listcomp>rmN)r¯r‚r)r^r9rgrgrhÚbuffer_put_lines³s r:)NN)N)    NrXNNrPrîTNN)r)rN)rN)rF)rPNN)rî)rî)r¶F)rd)™rQÚ
__future__rÚ
contextlibrÚcsvrrrørÚ    functoolsrÚiorr/rþÚshutilr    Útypingr
r r r rrrrrrrrÚ unicodedatarÚnumpyrœZpandas._config.configrrZ pandas._libsrZpandas._libs.missingrZpandas._libs.tslibsrrrrrr Zpandas._libs.tslibs.nattyper!Zpandas._typingr"r#r$r%r&r'r(r)r*r+r,Zpandas.core.dtypes.commonr-r.r/r0r1r2r3r4r5r6r7r8Zpandas.core.dtypes.dtypesr9Zpandas.core.dtypes.missingr:r;Zpandas.core.arraysr<r=r>Zpandas.core.arrays.string_r?Zpandas.core.baser@Zpandas.core.commonÚcoreÚcommonrZpandas.core.constructionrAZpandas.core.indexes.apirBrCrDrEZpandas.core.indexes.datetimesrFZpandas.core.indexes.timedeltasrGZpandas.core.reshape.concatrHZpandas.io.commonrIrJrèrKZpandasrLrMrNÚ__annotations__Z_VALID_JUSTIFY_PARAMETERSrVrWrˆr¾rËr”rêrìrírSr^rrtr’rr‘rŒrràrçrèrêrîrñrrŽrôr4r»r˜r¼r rr3r8r:rgrgrgrhÚ<module>sÌ      8     48         ;     @!'!&E@ýÿ(õ&Rp- F ýÿ ý1ü" ÿ$a;ÿ+