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
U
¬ý°dgeã@sDdZddlmZddlmZmZddlmZmZm    Z    ddl
Z ddl m Z erXddlmZdd    d
œd d „ZGd d„dƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d ƒZd!d"d#œd$d%„Zd!d&d"d'œd(d)„Zed*kr@ddlZe ¡dS)+z-
Module for formatting output data in Latex.
é)Ú annotations)ÚABCÚabstractmethod)Ú TYPE_CHECKINGÚIteratorÚSequenceN)Ú ABCMultiIndex)ÚDataFrameFormatterústr | tuple[str, str] | Noneztuple[str, str])ÚcaptionÚreturnc
Csh|rXt|tƒr|}d}q`z |\}}Wq`tk
rT}zd}t|ƒ|‚W5d}~XYq`Xnd}d}||fS)aÊExtract full and short captions from caption string/tuple.
 
    Parameters
    ----------
    caption : str or tuple, optional
        Either table caption string or tuple (full_caption, short_caption).
        If string is provided, then it is treated as table full caption,
        while short_caption is considered an empty string.
 
    Returns
    -------
    full_caption, short_caption : tuple
        Tuple of full_caption, short_caption strings.
    Úz9caption must be either a string or a tuple of two stringsN)Ú
isinstanceÚstrÚ
ValueError)r Z full_captionÚ short_captionÚerrÚmsg©rúNd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/io/formats/latex.pyÚ_split_into_full_short_captions
 rc@säeZdZdZd+ddddddœd    d
„Zd d d œdd„Zed dœdd„ƒZed dœdd„ƒZed dœdd„ƒZ    ed dœdd„ƒZ
ddœdd„Z ed dœdd„ƒZ ddd œd!d"„Z ddd œd#d$„Zdd dd%œd&d'„Zd d d d(œd)d*„ZdS),ÚRowStringConverteravConverter for dataframe rows into LaTeX strings.
 
    Parameters
    ----------
    formatter : `DataFrameFormatter`
        Instance of `DataFrameFormatter`.
    multicolumn: bool, optional
        Whether to use \multicolumn macro.
    multicolumn_format: str, optional
        Multicolumn format.
    multirow: bool, optional
        Whether to use \multirow macro.
 
    FNr    Úboolú
str | NoneÚNone)Ú    formatterÚ multicolumnÚmulticolumn_formatÚmultirowr cCsF||_|jj|_||_||_||_g|_| ¡|_tt    |jŽƒ|_
dS©N) ÚfmtÚframerrrÚclinebufÚ _get_strcolsÚstrcolsÚlistÚzipÚstrrows)ÚselfrrrrrrrÚ__init__Is
 
zRowStringConverter.__init__Úintr)Úrow_numr c    CsÊ|j|}||jko |jjo |j}||jkoB|jjoB|joB|jdk}|oX|t    |jƒdk}| 
|¡}|rr|  |¡}|r‚|  ||¡}g}|  d |¡¡|  d¡|rÀ| |t    |jƒ¡}|  |¡d |¡S)z%Get string representation of the row.éz & z \\r )r'Ú column_levelsr ÚheaderrÚ header_levelsÚindexrÚ index_levelsÚlenÚ_preprocess_rowÚ_format_multicolumnÚ_format_multirowÚappendÚjoinÚ_compose_cliner$)    r(r+ÚrowZ is_multicolZ is_multirowZis_cline_maybe_requiredÚcrowÚlstZclinerrrÚ
get_strrowYs.
ÿ
ÿþü
 
 
 
zRowStringConverter.get_strrow©r cCs|jjr|jSdS)zNumber of rows in header.r)r r.r/©r(rrrÚ_header_row_numysz"RowStringConverter._header_row_numcCs
|jjjS)z"Integer number of levels in index.)r!r0Únlevelsr>rrrr1~szRowStringConverter.index_levelscCs
|jjjSr)r!Úcolumnsr@r>rrrr-ƒsz RowStringConverter.column_levelscCs"|j}|jjr|jjr|d7}|S)Nr,)r-r Úhas_index_namesZshow_index_names)r(r@rrrr/‡sz RowStringConverter.header_levelszlist[list[str]]csÜ|jjjr|jgg}n
|j ¡}|jjrØt|jjtƒrØ|jjjd|jj    |jj
|jj d}dd„‰‡fdd„|Dƒ}|jj j ‰‡fdd„|Dƒ}|jj j}t|ƒrÈd    d„|Dƒ}|||jjj d
d ˆ…<||d
d …}|S) z%String representation of the columns.F)ZadjoinÚsparsifyÚnamesÚna_repcs>t|ƒD]0‰ˆr|dg‡fdd„|dd…DƒSqdS)Nrcs g|]}|r|n
dtˆƒ‘qS)ú ©r2©Ú.0Úi©ÚpadrrÚ
<listcomp>£szHRowStringConverter._get_strcols.<locals>.pad_empties.<locals>.<listcomp>r,)Úreversed)ÚxrrKrÚ pad_empties s z4RowStringConverter._get_strcols.<locals>.pad_emptiesc3s|]}ˆ|ƒVqdSrrrH)rPrrÚ    <genexpr>¥sz2RowStringConverter._get_strcols.<locals>.<genexpr>cs&g|]}dt|dƒgˆ|‘qS)rFéÿÿÿÿrGrH)ÚclevelsrrrM©sz3RowStringConverter._get_strcols.<locals>.<listcomp>cSsg|]}|r|nd‘qS©ú{}rrHrrrrM®sr,N)r r!ÚemptyÚ_empty_info_lineZ get_strcolsr0rrÚformatrCrBrErAr@rDÚany)r(r$ÚoutÚgenZcnamesZ    new_namesr)rSrPrr#Žs(
 
ü    
 
zRowStringConverter._get_strcolscCs&dt|jƒj›d|jj›d|jj›S)NzEmpty z
 
Columns: z
Index: )Útyper!Ú__name__rAr0r>rrrrWµs$ÿz#RowStringConverter._empty_info_lineú Sequence[str]ú    list[str]©r9r cCs@|jjrt|ƒ}ndd„|Dƒ}|jjr<|jjr<t||jƒ}|S)zPreprocess elements of the row.cSsg|]}|r|nd‘qSrTr©rIrOrrrrMÂsz6RowStringConverter._preprocess_row.<locals>.<listcomp>)r ÚescapeÚ_escape_symbolsZ    bold_rowsr0Ú_convert_to_boldr1)r(r9r:rrrr3½s 
 z"RowStringConverter._preprocess_rowcst|dˆj…‰d‰d‰ddœ‡‡‡‡fdd„ }|ˆjd…D](}| ¡r\ˆrR|ƒ|‰d‰q<ˆd7‰q<ˆrp|ƒˆS)zø
        Combine columns belonging to a group to a single multicolumn entry
        according to self.multicolumn_format
 
        e.g.:
        a &  &  & b & c &
        will become
        \multicolumn{3}{l}{a} & b & \multicolumn{2}{l}{c}
        Nr,r rr=c    s>ˆdkr0ˆ dˆd›dˆj›dˆ ¡›d¡n
ˆ ˆ¡dS)Nr,ú \multicolumn{Údz}{Ú})r6rÚstripr©ZcoltextZncolZrow2r(rrÚ
append_colÕs
ÿz:RowStringConverter._format_multicolumn.<locals>.append_col)r1rh)r(r9rjÚcrrirr4Çs
 
z&RowStringConverter._format_multicolumn)r9rJr cCsšt|jƒD]Š}|| ¡r
d}|j|dd…D]}|| ¡sJ|d7}q0qPq0|dkr
d|d›d|| ¡›d||<|j ||d|dg¡q
|S)zá
        Check following rows, whether row should be a multirow
 
        e.g.:     becomes:
        a & 0 &   \multirow{2}{*}{a} & 0 &
          & 1 &     & 1 &
        b & 0 &   \cline{1-2}
                  b & 0 &
        r,Nz
\multirow{rfz}{*}{rg)Úranger1rhr'r"r6)r(r9rJÚjZnrowÚrrrrr5ïs
 
 z#RowStringConverter._format_multirow)rJÚicolr cs\g}|jD]F}|dˆkr
| d|dd›d|d›d¡‡fdd„|jDƒ|_q
d     |¡S)
zC
        Create clines after multirow-blocks are finished.
        rz
\cline{r,rfú-rgcsg|]}|dˆkr|‘qS)rrra©rJrrrMs z5RowStringConverter._compose_cline.<locals>.<listcomp>r )r"r6r7)r(rJror;Zclrrqrr8s 
  z!RowStringConverter._compose_cline)FNF)r]Ú
__module__Ú __qualname__Ú__doc__r)r<Úpropertyr?r1r-r/r#rWr3r4r5r8rrrrr9s*û '
(rc@s"eZdZdZeddœdd„ƒZdS)ÚRowStringIteratorz:Iterator over rows of the header or the body of the table.ú Iterator[str]r=cCsdS)z2Iterate over LaTeX string representations of rows.Nrr>rrrÚ__iter__szRowStringIterator.__iter__N)r]rrrsrtrrxrrrrrvsrvc@seZdZdZddœdd„ZdS)ÚRowHeaderIteratorz#Iterator for the table header rows.rwr=ccs.tt|jƒƒD]}||jkr| |¡VqdSr©rlr2r'r?r<©r(r+rrrrx s
zRowHeaderIterator.__iter__N©r]rrrsrtrxrrrrrysryc@seZdZdZddœdd„ZdS)ÚRowBodyIteratorz!Iterator for the table body rows.rwr=ccs.tt|jƒƒD]}||jkr| |¡VqdSrrzr{rrrrx)s
zRowBodyIterator.__iter__Nr|rrrrr}&sr}c @sÚeZdZdZddddddddddddœ
d    d
„Zd d œd d„Zeed d œdd„ƒƒZeed d œdd„ƒƒZ    eed d œdd„ƒƒZ
eed d œdd„ƒƒZ eed d œdd„ƒƒZ eed d œdd„ƒƒZ eed d œdd„ƒƒZdS)ÚTableBuilderAbstracta
    Abstract table builder producing string representation of LaTeX table.
 
    Parameters
    ----------
    formatter : `DataFrameFormatter`
        Instance of `DataFrameFormatter`.
    column_format: str, optional
        Column format, for example, 'rcl' for three columns.
    multicolumn: bool, optional
        Use multicolumn to enhance MultiIndex columns.
    multicolumn_format: str, optional
        The alignment for multicolumns, similar to column_format.
    multirow: bool, optional
        Use multirow to enhance MultiIndex rows.
    caption: str, optional
        Table caption.
    short_caption: str, optional
        Table short caption.
    label: str, optional
        LaTeX label.
    position: str, optional
        Float placement specifier, for example, 'htb'.
    NFr    rrr)
rÚ column_formatrrrr rÚlabelÚpositionr c
 
Cs:||_||_||_||_||_||_||_||_|    |_dSr)    r rrrrr rr€r)
r(rrrrrr rr€rrrrr)Is zTableBuilderAbstract.__init__rr=cCsD|j|j|j|j|j|j|jg}d dd„|Dƒ¡}d}||7}|S)z%String representation of LaTeX table.Ú
cSsg|] }|r|‘qSrr©rIÚitemrrrrMjsz3TableBuilderAbstract.get_result.<locals>.<listcomp>)Ú    env_beginÚ top_separatorr.Úmiddle_separatorÚenv_bodyÚbottom_separatorÚenv_endr7)r(ÚelementsÚresultZtrailing_newlinerrrÚ
get_result_sù    zTableBuilderAbstract.get_resultcCsdS)zBeginning of the environment.Nrr>rrrr…oszTableBuilderAbstract.env_begincCsdS)zTop level separator.Nrr>rrrr†tsz"TableBuilderAbstract.top_separatorcCsdS)z Header lines.Nrr>rrrr.yszTableBuilderAbstract.headercCsdS)zMiddle level separator.Nrr>rrrr‡~sz%TableBuilderAbstract.middle_separatorcCsdS)zEnvironment body.Nrr>rrrrˆƒszTableBuilderAbstract.env_bodycCsdS)zBottom level separator.Nrr>rrrr‰ˆsz%TableBuilderAbstract.bottom_separatorcCsdS)zEnd of the environment.Nrr>rrrrŠszTableBuilderAbstract.env_end)NFNFNNNN)r]rrrsrtr)rrurr…r†r.r‡rˆr‰rŠrrrrr~/s@ö"r~c@s¼eZdZdZeddœdd„ƒZeddœdd„ƒZeddœdd    „ƒZeddœd
d „ƒZd dœd d„Z    eddœdd„ƒZ
eddœdd„ƒZ eddœdd„ƒZ dddœdd„Z dddœdd„ZdS)ÚGenericTableBuilderz=Table builder producing string representation of LaTeX table.rr=cCs|jdd}d t|ƒ¡S)Nr.©Úoverr‚©Ú_create_row_iteratorr7r%©r(Úiteratorrrrr.–s zGenericTableBuilder.headercCsdS)Nz\toprulerr>rrrr†›sz!GenericTableBuilder.top_separatorcCs| ¡r dSdS)Nú\midruler )Ú_is_separator_requiredr>rrrr‡Ÿsz$GenericTableBuilder.middle_separatorcCs|jdd}d t|ƒ¡S)NÚbodyrr‚r‘r“rrrrˆ£s zGenericTableBuilder.env_bodyrcCst|jo |jƒSr)rr.rˆr>rrrr–¨sz*GenericTableBuilder._is_separator_requiredcCs|jrd|j›dSdS)z7Position macro, extracted from self.position, like [h].ú[ú]r )rr>rrrÚ_position_macro«sz#GenericTableBuilder._position_macrocCs8|jr4d d|jr d|j›dndd|j›dg¡SdS)zÌCaption macro, extracted from self.caption.
 
        With short caption:
            \caption[short_caption]{caption_string}.
 
        Without short caption:
            \caption{caption_string}.
        r z\captionr˜r™Ú{rg)r r7rr>rrrÚ_caption_macro°s
 ýÿz"GenericTableBuilder._caption_macrocCs|jrd|j›dSdS)z9Label macro, extracted from self.label, like \label{ref}.z\label{rgr )r€r>rrrÚ _label_macroÄsz GenericTableBuilder._label_macrorv)rr cCs"| |¡}||j|j|j|jdS)a
Create iterator over header or body of the table.
 
        Parameters
        ----------
        over : {'body', 'header'}
            Over what to iterate.
 
        Returns
        -------
        RowStringIterator
            Iterator over body or header.
        )rrrr)Ú_select_iteratorr rrr)r(rZ iterator_kindrrrr’És
üz(GenericTableBuilder._create_row_iteratorztype[RowStringIterator]cCs0|dkr tS|dkrtSd|›d}t|ƒ‚dS)z'Select proper iterator over table rows.r.r—z.'over' must be either 'header' or 'body', but z  was providedN)ryr}r)r(rrrrrržÞs  z$GenericTableBuilder._select_iteratorN)r]rrrsrtrur.r†r‡rˆr–ršrœrr’ržrrrrrŽ“s$rŽc@sfeZdZdZeddœdd„ƒZddœdd„Zeddœdd    „ƒZeddœd
d „ƒZeddœd d „ƒZ    dS)ÚLongTableBuilderaVConcrete table builder for longtable.
 
    >>> from pandas.io.formats import format as fmt
    >>> df = pd.DataFrame({"a": [1, 2], "b": ["b1", "b2"]})
    >>> formatter = fmt.DataFrameFormatter(df)
    >>> builder = LongTableBuilder(formatter, caption='a long table',
    ...                            label='tab:long', column_format='lrl')
    >>> table = builder.get_result()
    >>> print(table)
    \begin{longtable}{lrl}
    \caption{a long table}
    \label{tab:long}\\
    \toprule
    {} &  a &   b \\
    \midrule
    \endfirsthead
    \caption[]{a long table} \\
    \toprule
    {} &  a &   b \\
    \midrule
    \endhead
    \midrule
    \multicolumn{3}{r}{{Continued on next page}} \\
    \midrule
    \endfoot
    <BLANKLINE>
    \bottomrule
    \endlastfoot
    0 &  1 &  b1 \\
    1 &  2 &  b2 \\
    \end{longtable}
    <BLANKLINE>
    rr=cCs8d|j›d|j›d}|| ¡›g}d dd„|Dƒ¡S)Nz\begin{longtable}r›rgr‚cSsg|] }|r|‘qSrrrƒrrrrMsz.LongTableBuilder.env_begin.<locals>.<listcomp>)ršrÚ_caption_and_labelr7)r(Z    first_rowr‹rrrr… sÿzLongTableBuilder.env_begincCsH|js |jr@d}|j›|j›g}d dd„|Dƒ¡}||7}|SdSdS)Nz\\r‚cSsg|] }|r|‘qSrrrƒrrrrMsz7LongTableBuilder._caption_and_label.<locals>.<listcomp>r )r r€rœrr7)r(Zdouble_backslashr‹Zcaption_and_labelrrrr s z#LongTableBuilder._caption_and_labelc Csf|jdd}dd|jr$d|j›dnd|j|jdddd    t|jƒ›d
dd d d g }| ¡rbd |¡SdS)Nr.rr•z \endfirstheadz \caption[]{z} \\r z\endheadrez!}{r}{{Continued on next page}} \\z    \endfoot
ú \bottomrulez \endlastfootr‚)r’r r†r.r2r$r–r7)r(r”r‹rrrr‡s$ ò
z!LongTableBuilder.middle_separatorcCsdS)Nr rr>rrrr‰9sz!LongTableBuilder.bottom_separatorcCsdS)Nz\end{longtable}rr>rrrrŠ=szLongTableBuilder.env_endN)
r]rrrsrtrur…r r‡r‰rŠrrrrrŸés"
rŸc@sFeZdZdZeddœdd„ƒZeddœdd„ƒZeddœdd    „ƒZd
S) ÚRegularTableBuilderaConcrete table builder for regular table.
 
    >>> from pandas.io.formats import format as fmt
    >>> df = pd.DataFrame({"a": [1, 2], "b": ["b1", "b2"]})
    >>> formatter = fmt.DataFrameFormatter(df)
    >>> builder = RegularTableBuilder(formatter, caption='caption', label='lab',
    ...                               column_format='lrc')
    >>> table = builder.get_result()
    >>> print(table)
    \begin{table}
    \centering
    \caption{caption}
    \label{lab}
    \begin{tabular}{lrc}
    \toprule
    {} &  a &   b \\
    \midrule
    0 &  1 &  b1 \\
    1 &  2 &  b2 \\
    \bottomrule
    \end{tabular}
    \end{table}
    <BLANKLINE>
    rr=cCs<d|j›d|j›|j›d|j›dg}d dd„|Dƒ¡S)Nz \begin{table}z
\centeringú\begin{tabular}{rgr‚cSsg|] }|r|‘qSrrrƒrrrrMesz1RegularTableBuilder.env_begin.<locals>.<listcomp>)ršrœrrr7)r(r‹rrrr…\s
 ûzRegularTableBuilder.env_begincCsdS©Nr¡rr>rrrr‰gsz$RegularTableBuilder.bottom_separatorcCsd ddg¡S)Nr‚ú \end{tabular}z \end{table})r7r>rrrrŠkszRegularTableBuilder.env_endN©r]rrrsrtrur…r‰rŠrrrrr¢Bs
r¢c@sFeZdZdZeddœdd„ƒZeddœdd„ƒZeddœdd    „ƒZd
S) ÚTabularBuilderañConcrete table builder for tabular environment.
 
    >>> from pandas.io.formats import format as fmt
    >>> df = pd.DataFrame({"a": [1, 2], "b": ["b1", "b2"]})
    >>> formatter = fmt.DataFrameFormatter(df)
    >>> builder = TabularBuilder(formatter, column_format='lrc')
    >>> table = builder.get_result()
    >>> print(table)
    \begin{tabular}{lrc}
    \toprule
    {} &  a &   b \\
    \midrule
    0 &  1 &  b1 \\
    1 &  2 &  b2 \\
    \bottomrule
    \end{tabular}
    <BLANKLINE>
    rr=cCsd|j›dS)Nr£rg)rr>rrrr…„szTabularBuilder.env_begincCsdSr¤rr>rrrr‰ˆszTabularBuilder.bottom_separatorcCsdS)Nr¥rr>rrrrŠŒszTabularBuilder.env_endNr¦rrrrr§psr§c @s¤eZdZdZdddddddddddd    œ
d
d „Zd d œdd„Zedd œdd„ƒZdd œdd„Zedd œdd„ƒZ    e    j
dddœdd„ƒZ    d d œdd„Z d d œdd„Z dS)ÚLatexFormattera 
    Used to render a DataFrame to a LaTeX tabular/longtable environment output.
 
    Parameters
    ----------
    formatter : `DataFrameFormatter`
    longtable : bool, default False
        Use longtable environment.
    column_format : str, default None
        The columns format as specified in `LaTeX table format
        <https://en.wikibooks.org/wiki/LaTeX/Tables>`__ e.g 'rcl' for 3 columns
    multicolumn : bool, default False
        Use \multicolumn to enhance MultiIndex columns.
    multicolumn_format : str, default 'l'
        The alignment for multicolumns, similar to `column_format`
    multirow : bool, default False
        Use \multirow to enhance MultiIndex rows.
    caption : str or tuple, optional
        Tuple (full_caption, short_caption),
        which results in \caption[short_caption]{full_caption};
        if a single string is passed, no short caption will be set.
    label : str, optional
        The LaTeX label to be placed inside ``\label{}`` in the output.
    position : str, optional
        The LaTeX positional argument for tables, to be placed after
        ``\begin{}`` in the output.
 
    See Also
    --------
    HTMLFormatter
    FNr    rrr
r)
rÚ    longtablerrrrr r€rr c
 
CsN||_|jj|_||_||_||_||_||_t|ƒ\|_|_    ||_
|    |_ dSr) r r!r©rrrrrr rr€r)
r(rr©rrrrr r€rrrrr)²s 
zLatexFormatter.__init__rr=cCs
|j ¡S)zp
        Render a DataFrame to a LaTeX tabular, longtable, or table/tabular
        environment output.
        )Úbuilderrr>rrrÚ    to_stringÉszLatexFormatter.to_stringr~c Cs4| ¡}||j|j|j|j|j|j|j|j|j    d    S)zVConcrete table builder.
 
        Returns
        -------
        TableBuilder
        )    rrrrrr rr€r)
Ú_select_builderr rrrrr rr€r)r(rªrrrrªÐs÷zLatexFormatter.builderztype[TableBuilderAbstract]cCs&|jr
tSt|j|j|jgƒr"tStS)zSelect proper table builder.)r©rŸrYr r€rr¢r§r>rrrr¬ås
zLatexFormatter._select_buildercCs|jS)zColumn format.)Ú_column_formatr>rrrríszLatexFormatter.column_format)Úinput_column_formatr cCsD|dkr| ¡| ¡|_n$t|tƒs:tdt|ƒ›ƒ‚n||_dS)zSetter for column format.Nz*column_format must be str or unicode, not )Ú_get_index_formatÚ"_get_column_format_based_on_dtypesr­rrrr\)r(r®rrrròsÿ
 ÿcCs(ddœdd„}|jjj}d t||ƒ¡S)zkGet column format based on data type.
 
        Right alignment for numbers and left - for strings.
        rr=cSst|jtjƒrdSdS)NrnÚl)Ú
issubclassr\ÚnpÚnumber)ZdtyperrrÚ get_col_typeszGLatexFormatter._get_column_format_based_on_dtypes.<locals>.get_col_typer )r!ÚdtypesZ_valuesr7Úmap)r(rµr¶rrrr°s
z1LatexFormatter._get_column_format_based_on_dtypescCs|jjrd|jjjSdS)zGet index column format.r±r )r r0r!r@r>rrrr¯sz LatexFormatter._get_index_format)FNFNFNNN) r]rrrsrtr)r«rurªr¬rÚsetterr°r¯rrrrr¨‘s(#ö"r¨r^r_r`cCsdd„|DƒS)züCarry out string replacements for special symbols.
 
    Parameters
    ----------
    row : list
        List of string, that may contain special symbols.
 
    Returns
    -------
    list
        list of strings with the special symbols replaced.
    cSspg|]h}|rh|dkrh| dd¡ dd¡ dd¡ dd¡ d    d
¡ d d ¡ d d¡ dd¡ dd¡ dd¡nd‘qS)rUú\z\textbackslash Ú_z\_ú%z\%ú$z\$ú#z\#r›z\{rgz\}ú~z\textasciitilde ú^z\textasciicircum ú&z\&)ÚreplacerarrrrM!sBýö
öÿþýüûúùø    ÷ z#_escape_symbols.<locals>.<listcomp>r)r9rrrrcs ñrcr*)r:Úilevelsr cs‡fdd„t|ƒDƒS)z%Convert elements in ``crow`` to bold.cs4g|],\}}|ˆkr,| ¡dkr,d|›dn|‘qS))r rUz\textbf{rg)rh)rIrmrO©rÂrrrM6sÿz$_convert_to_bold.<locals>.<listcomp>)Ú    enumerate)r:rÂrrÃrrd4s
þrdÚ__main__) rtÚ
__future__rÚabcrrÚtypingrrrÚnumpyr³Zpandas.core.dtypes.genericrZpandas.io.formats.formatr    rrrvryr}r~rŽrŸr¢r§r¨rcrdr]ÚdoctestÚtestmodrrrrÚ<module>s2   !]        dVY.!