
    d(b                       d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
ZddlmZ erddlmZ d*dZ G d d          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d           Zd+d$Zd,d(Zed)k    rddlZ ej                     dS dS )-z-
Module for formatting output data in Latex.
    )annotations)ABCabstractmethod)TYPE_CHECKINGIteratorSequenceN)ABCMultiIndex)DataFrameFormattercaptionstr | tuple[str, str] | Nonereturntuple[str, str]c                    | rEt          | t                    r| }d}n/	 | \  }}n(# t          $ r}d}t          |          |d}~ww xY wd}d}||fS )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   full_captionshort_captionerrmsgs        S/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/io/formats/latex.py_split_into_full_short_captionr      s    "  gs## 	/"LMM/.5+mm / / /Q oo3./ &&s   $ 
AA  Ac                      e Zd ZdZ	 	 	 d"d#dZd$dZed%d            Zed%d            Zed%d            Z	ed%d            Z
d&dZed'd            Zd(dZd)dZd*dZd+d!ZdS ),RowStringConverterav  Converter 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.

    FN	formatterr
   multicolumnboolmulticolumn_format
str | Nonemultirowr   Nonec                    || _         | j         j        | _        || _        || _        || _        g | _        |                                 | _        t          t          | j                   | _
        d S N)fmtframer   r   r!   clinebuf_get_strcolsstrcolslistzipstrrows)selfr   r   r   r!   s        r   __init__zRowStringConverter.__init__I   sa     X^
&"4 )+((**C.//    row_numintr   c                   | j         |         }|| j        k     o| j        j        o| j        }|| j        k    o| j        j        o| j        o
| j        dk    }|o|t          | j                   dz
  k     }| 
                    |          }|r|                     |          }|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-   r0   rowis_multicolis_multirowis_cline_maybe_requiredcrowlstclines	            r   
get_strrowzRowStringConverter.get_strrowY   sV   l7# d((QTX_QAQ 	
 t)) &&& !A%	 	 #."Q'C<M<MPQ<Q2Q##C(( 	2++D11D 	8((w77D

5::d##$$$

7" 	''T\1B1BCCEJJuwws||r/   c                ,    | j         j        r| j        ndS )zNumber of rows in header.r   )r%   r5   r6   r-   s    r   _header_row_numz"RowStringConverter._header_row_numy   s     &*X_;t!!!;r/   c                $    | j         j        j        S )z"Integer number of levels in index.)r&   r7   nlevelsrI   s    r   r8   zRowStringConverter.index_levels~   s     z''r/   c                $    | j         j        j        S r$   )r&   columnsrL   rI   s    r   r4   z RowStringConverter.column_levels   s    z!))r/   c                N    | j         }| j        j        r| j        j        r|dz  }|S )Nr3   )r4   r%   has_index_namesshow_index_names)r-   rL   s     r   r6   z RowStringConverter.header_levels   s1    $8# 	(A 	qLGr/   list[list[str]]c                Z   | j         j        j        r
| j        gg}n| j                                         }| j         j        rt          | j        j        t                    r| j        j                            d| j         j	        | j         j
        | j         j                  }d fd|D             }| j        j        j        fd|D             }| j        j        j        }t          |          r+d |D             }||| j        j        j        dz
           d<   ||dd         z   }|S )	z%String representation of the columns.F)adjoinsparsifynamesna_repc                t    t          |           D ]&r"| d         gfd| dd          D             z   c S 'd S )Nr   c                <    g | ]}|r|nd t                    z  S ) r9   ).0ipads     r   
<listcomp>zHRowStringConverter._get_strcols.<locals>.pad_empties.<locals>.<listcomp>   s,    (S(S(Sa)CS3s88^(S(S(Sr/   r3   )reversed)xr^   s    @r   pad_emptiesz4RowStringConverter._get_strcols.<locals>.pad_empties   si    #A;; T TC T !!v(S(S(S(SQqrrU(S(S(SSSSSTT Tr/   c              3  .   K   | ]} |          V  d S r$    )r\   r]   rb   s     r   	<genexpr>z2RowStringConverter._get_strcols.<locals>.<genexpr>   s+      //a;;q>>//////r/   c                N    g | ]!}d t          |d                   z  gz  |z   "S )rZ   r[   )r\   r]   clevelss     r   r_   z3RowStringConverter._get_strcols.<locals>.<listcomp>   s5    AAAC#ae**$%/!3AAAr/   c                    g | ]}|r|nd 	S {}rd   )r\   r]   s     r   r_   z3RowStringConverter._get_strcols.<locals>.<listcomp>   s!    >>>!!-QQ>>>r/   r3   N)r%   r&   empty_empty_info_lineget_strcolsr7   r   r	   formatrU   rP   rW   rN   rL   rV   any)r-   r)   outgencnames	new_namesrh   rb   s         @@r   r(   zRowStringConverter._get_strcols   sR   8> 	--./GGh**,,G 8> 	(j)9=II 	(*"))*h.x	 *  CT T T
 0///3///C j(0GAAAASAAAC Z'-F6{{ H>>v>>>	>GDJ$,q01(7(; GABBK'Gr/   c                n    dt          | j                  j         d| j        j         d| j        j         S )NzEmpty z

Columns: z
Index: )typer&   __name__rN   r7   rI   s    r   rm   z#RowStringConverter._empty_info_line   sI    )T$*%%. ) )
*) )j&) )	
r/   r@   Sequence[str]	list[str]c                    | j         j        rt          |          }nd |D             }| j         j        r!| j         j        rt          || j                  }|S )zPreprocess elements of the row.c                    g | ]}|r|nd 	S rj   rd   r\   ra   s     r   r_   z6RowStringConverter._preprocess_row.<locals>.<listcomp>   s!    222$AA222r/   )r%   escape_escape_symbols	bold_rowsr7   _convert_to_boldr8   )r-   r@   rD   s      r   r:   z"RowStringConverter._preprocess_row   s_    8? 	3"3''DD22c222D8 	=$(. 	=#D$*;<<Dr/   c                     |d j                  ddd fd}| j         d         D ],}|                                rr
 |             |d'dz  -r
 |             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}
        Nr3   r   r   r"   c            	         dk    r9                     dddj         d                                  d           d S                                  d S )Nr3   \multicolumn{dz}{})r=   r   strip)coltextncolrow2r-   s   r   
append_colz:RowStringConverter._format_multicolumn.<locals>.append_col   s    axx-dM - -$2I - - - - -     G$$$$$r/   )r   r"   )r8   r   )r-   r@   r   cr   r   r   s   `   @@@r   r;   z&RowStringConverter._format_multicolumn   s     &T&&'		% 		% 		% 		% 		% 		% 		% 		% 		% T&(() 		 		Awwyy  !JLLL 	 	JLLLr/   r]   c                v   t          | j                  D ]}||                                         rd}| j        |dz   d         D ]"}||                                         s|dz  }" |dk    rJd|dd||                                          d||<   | j                            ||z   dz
  |dz   g           |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 &
        r3   Nz
\multirow{r   z}{*}{r   )ranger8   r   r,   r'   r=   )r-   r@   r]   jnrowrs         r   r<   z#RowStringConverter._format_multirow   s     t()) 	@ 	@A1v||~~ @a!egg.  AQ4::<< 	!88ODOOOSV\\^^OOOCFM((!d(Q,A)>???
r/   icolc                    g }| j         D ]J}|d         k    r<|                    d|d         dd|dd           fd| j         D             | _         Kd                    |          S )	zC
        Create clines after multirow-blocks are finished.
        r   z
\cline{r3   r   -r   c                ,    g | ]}|d          k    |S )r   rd   )r\   ra   r]   s     r   r_   z5RowStringConverter._compose_cline.<locals>.<listcomp>  s"     G G GqQqTQYYYYYr/   r   )r'   r=   r>   )r-   r]   r   rE   cls    `   r   r?   z!RowStringConverter._compose_cline  s     - 	H 	HB!uzz

=A===4====>>> G G G GDM G G Gwws||r/   )FNF)
r   r
   r   r   r   r    r!   r   r   r"   )r0   r1   r   r   )r   r1   )r   rR   r   r   r@   rx   r   ry   )r@   ry   r   ry   )r@   ry   r]   r1   r   ry   )r]   r1   r   r1   r   r   )rw   
__module____qualname____doc__r.   rG   propertyrJ   r8   r4   r6   r(   rm   r:   r;   r<   r?   rd   r/   r   r   r   9   s]        $ ")-0 0 0 0 0    @ < < < X< ( ( ( X( * * * X*    X% % % %N 
 
 
 X
   & & & &P   2
 
 
 
 
 
r/   r   c                  *    e Zd ZdZedd            ZdS )RowStringIteratorz:Iterator over rows of the header or the body of the table.r   Iterator[str]c                    dS )z2Iterate over LaTeX string representations of rows.Nrd   rI   s    r   __iter__zRowStringIterator.__iter__        r/   Nr   r   )rw   r   r   r   r   r   rd   r/   r   r   r     s>        DDA A A ^A A Ar/   r   c                      e Zd ZdZddZdS )RowHeaderIteratorz#Iterator for the table header rows.r   r   c              #     K   t          t          | j                            D ]$}|| j        k     r|                     |          V  %d S r$   r   r9   r,   rJ   rG   r-   r0   s     r   r   zRowHeaderIterator.__iter__   sX      S..// 	/ 	/G---oog.....	/ 	/r/   Nr   rw   r   r   r   r   rd   r/   r   r   r     s.        --/ / / / / /r/   r   c                      e Zd ZdZddZdS )RowBodyIteratorz!Iterator for the table body rows.r   r   c              #     K   t          t          | j                            D ]$}|| j        k    r|                     |          V  %d S r$   r   r   s     r   r   zRowBodyIterator.__iter__)  sX      S..// 	/ 	/G$...oog.....	/ 	/r/   Nr   r   rd   r/   r   r   r   &  s.        ++/ / / / / /r/   r   c                  L   e Zd ZdZ	 	 	 	 	 	 	 	 dddZddZeedd                        Zeedd                        Z	eedd                        Z
eedd                        Zeedd                        Zeedd                        Zeedd                        ZdS )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   r
   column_formatr    r   r   r   r!   r   r   labelpositionr   r"   c
                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        d S r$   )	r%   r   r   r   r!   r   r   r   r   )
r-   r   r   r   r   r!   r   r   r   r   s
             r   r.   zTableBuilderAbstract.__init__I  sK     *&"4 *
 r/   r   c                    | j         | j        | j        | j        | j        | j        | j        g}d                    d |D                       }d}||z  }|S )z%String representation of LaTeX table.
c                    g | ]}||S rd   rd   r\   items     r   r_   z3TableBuilderAbstract.get_result.<locals>.<listcomp>j  s    >>>T>D>>>r/   )	env_begintop_separatorr5   middle_separatorenv_bodybottom_separatorenv_endr>   )r-   elementsresulttrailing_newlines       r   
get_resultzTableBuilderAbstract.get_result_  si     NK!M!L
 >>X>>>??""r/   c                    dS )zBeginning of the environment.Nrd   rI   s    r   r   zTableBuilderAbstract.env_begino  r   r/   c                    dS )zTop level separator.Nrd   rI   s    r   r   z"TableBuilderAbstract.top_separatort  r   r/   c                    dS )zHeader lines.Nrd   rI   s    r   r5   zTableBuilderAbstract.headery  r   r/   c                    dS )zMiddle level separator.Nrd   rI   s    r   r   z%TableBuilderAbstract.middle_separator~  r   r/   c                    dS )zEnvironment body.Nrd   rI   s    r   r   zTableBuilderAbstract.env_body  r   r/   c                    dS )zBottom level separator.Nrd   rI   s    r   r   z%TableBuilderAbstract.bottom_separator  r   r/   c                    dS )zEnd of the environment.Nrd   rI   s    r   r   zTableBuilderAbstract.env_end  r   r/   )NFNFNNNN)r   r
   r   r    r   r   r   r    r!   r   r   r    r   r    r   r    r   r    r   r"   r   )rw   r   r   r   r.   r   r   r   r   r   r5   r   r   r   r   rd   r/   r   r   r   /  s        8 %)!)-"$( #! ! ! ! !,     , , , ^ X, # # # ^ X#    ^ X & & & ^ X&       ^ X  & & & ^ X& & & & ^ X& & &r/   r   c                      e Zd ZdZedd            Zedd            Zedd            Zedd            Zdd	Z	edd
            Z
edd            Zedd            ZddZddZdS )GenericTableBuilderz=Table builder producing string representation of LaTeX table.r   r   c                r    |                      d          }d                    t          |                    S )Nr5   overr   _create_row_iteratorr>   r*   r-   iterators     r   r5   zGenericTableBuilder.header  s0    ,,(,;;yyh(((r/   c                    dS )Nz\toprulerd   rI   s    r   r   z!GenericTableBuilder.top_separator  s    {r/   c                2    |                                  rdndS )N\midruler   )_is_separator_requiredrI   s    r   r   z$GenericTableBuilder.middle_separator  s    "99;;C{{Cr/   c                r    |                      d          }d                    t          |                    S )Nbodyr   r   r   r   s     r   r   zGenericTableBuilder.env_body  s0    ,,&,99yyh(((r/   r   c                8    t          | j        o| j                  S r$   )r   r5   r   rI   s    r   r   z*GenericTableBuilder._is_separator_required  s    DK1DM222r/   c                *    | j         rd| j          dndS )z7Position macro, extracted from self.position, like [h].[]r   )r   rI   s    r   _position_macroz#GenericTableBuilder._position_macro  s$     (,}<#4=####"<r/   c                z    | j         r3d                    d| j        rd| j         dndd| j          dg          S dS )zCaption macro, extracted from self.caption.

        With short caption:
            \caption[short_caption]{caption_string}.

        Without short caption:
            \caption{caption_string}.
        r   z\captionr   r   {r   )r   r>   r   rI   s    r   _caption_macroz"GenericTableBuilder._caption_macro  sb     < 	77151CK-*----))))   rr/   c                *    | j         rd| j          dndS )z9Label macro, extracted from self.label, like \label{ref}.z\label{r   r   )r   rI   s    r   _label_macroz GenericTableBuilder._label_macro  s$     .2Z?)4:))))R?r/   r   r   c                r    |                      |          } || j        | j        | j        | j                  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.
        )r   r   r   r!   )_select_iteratorr%   r   r   r!   )r-   r   iterator_kinds      r   r   z(GenericTableBuilder._create_row_iterator  sF     --d33}h(#6]	
 
 
 	
r/   type[RowStringIterator]c                `    |dk    rt           S |dk    rt          S d| d}t          |          )z'Select proper iterator over table rows.r5   r   z.'over' must be either 'header' or 'body', but z was provided)r   r   r   )r-   r   r   s      r   r   z$GenericTableBuilder._select_iterator  s>    8$$V^^""V4VVVCS//!r/   Nr   )r   r   )r   r   r   r   )r   r   r   r   )rw   r   r   r   r   r5   r   r   r   r   r   r   r   r   r   rd   r/   r   r   r     s<       GG) ) ) X)    X D D D XD ) ) ) X)3 3 3 3 = = = X=    X& @ @ @ X@
 
 
 
*" " " " " "r/   r   c                  z    e Zd ZdZed
d            Zd
dZed
d            Zed
d            Zed
d            Z	d	S )LongTableBuilderaV  Concrete 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>
    r   r   c                    d| j          d| j         d}||                                  g}d                    d |D                       S )Nz\begin{longtable}r   r   r   c                    g | ]}||S rd   rd   r   s     r   r_   z.LongTableBuilder.env_begin.<locals>.<listcomp>      <<<4t<$<<<r/   )r   r   _caption_and_labelr>   )r-   	first_rowr   s      r   r   zLongTableBuilder.env_begin  sb     R4#7QQ4;MQQQ 	 $"9"9";";=>yy<<8<<<===r/   c                    | j         s| j        r8d}| j         | j         g}d                    d |D                       }||z  }|S dS )Nz\\r   c                    g | ]}||S rd   rd   r   s     r   r_   z7LongTableBuilder._caption_and_label.<locals>.<listcomp>  s    *M*M*MD*M4*M*M*Mr/   r   )r   r   r   r   r>   )r-   double_backslashr   caption_and_labels       r   r   z#LongTableBuilder._caption_and_label  si    < 	4: 	%.0T5F2HIH $		*M*MH*M*M*M N N!11$$2r/   c                   |                      d          }dd| j        rd| j         dnd| j        | j        dddd	t	          |j                   d
ddddg}|                                 rd                    |          S dS )Nr5   r   r   z\endfirstheadz\caption[]{z} \\r   z\endheadr   z!}{r}{{Continued on next page}} \\z	\endfoot
\bottomrulez\endlastfootr   )r   r   r   r5   r9   r)   r   r>   )r-   r   r   s      r   r   z!LongTableBuilder.middle_separator  s    ,,(,;; 59\I1DL1111rK.c("233 . . .
  &&(( 	'99X&&&rr/   c                    dS )Nr   rd   rI   s    r   r   z!LongTableBuilder.bottom_separator9  s    rr/   c                    dS )Nz\end{longtable}rd   rI   s    r   r   zLongTableBuilder.env_end=  s    !!r/   Nr   )
rw   r   r   r   r   r   r   r   r   r   rd   r/   r   r   r     s           D > > > X>       X4    X " " " X" " "r/   r   c                  Z    e Zd ZdZedd            Zedd            Zedd            Zd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>
    r   r   c                    d| j          d| j         | j         d| j         dg}d                    d |D                       S )Nz\begin{table}z
\centering\begin{tabular}{r   r   c                    g | ]}||S rd   rd   r   s     r   r_   z1RegularTableBuilder.env_begin.<locals>.<listcomp>e  r   r/   )r   r   r   r   r>   )r-   r   s     r   r   zRegularTableBuilder.env_begin\  sb     6t355"$ "94#5999
 yy<<8<<<===r/   c                    dS Nr   rd   rI   s    r   r   z$RegularTableBuilder.bottom_separatorg      ~r/   c                0    d                     ddg          S )Nr   \end{tabular}z\end{table})r>   rI   s    r   r   zRegularTableBuilder.env_endk  s    yy*N;<<<r/   Nr   rw   r   r   r   r   r   r   r   rd   r/   r   r   r   B  s~         2 > > > X>    X = = = X= = =r/   r   c                  Z    e Zd ZdZedd            Zedd            Zedd            Zd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>
    r   r   c                    d| j          dS )Nr   r   )r   rI   s    r   r   zTabularBuilder.env_begin  s    <d&8<<<<r/   c                    dS r   rd   rI   s    r   r   zTabularBuilder.bottom_separator  r   r/   c                    dS )Nr   rd   rI   s    r   r   zTabularBuilder.env_end  s    r/   Nr   r   rd   r/   r   r  r  p  s~         & = = = X=    X       X     r/   r  c                      e Zd ZdZ	 	 	 	 	 	 	 	 dd dZd!dZed"d            Zd#dZed$d            Z	e	j
        d%d            Z	d!dZd!dZdS )&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   r
   	longtabler   r   r    r   r   r!   r   r   r   r   r   r"   c
                    || _         | j         j        | _        || _        || _        || _        || _        || _        t          |          \  | _        | _	        || _
        |	| _        d S r$   )r%   r&   r  r   r   r   r!   r   r   r   r   r   )
r-   r   r  r   r   r   r!   r   r   r   s
             r   r.   zLatexFormatter.__init__  se     X^
"*&"4 +I'+R+R(d(
 r/   r   c                4    | j                                         S )zp
        Render a DataFrame to a LaTeX tabular, longtable, or table/tabular
        environment output.
        )builderr   rI   s    r   	to_stringzLatexFormatter.to_string  s    
 |&&(((r/   r   c                    |                                  } || j        | j        | j        | j        | j        | j        | j        | j        | j	        	  	        S )zVConcrete table builder.

        Returns
        -------
        TableBuilder
        )	r   r   r   r   r!   r   r   r   r   )
_select_builderr%   r   r   r   r!   r   r   r   r   )r-   r
  s     r   r
  zLatexFormatter.builder  s_     &&((wh,(#6]L,*]

 

 

 
	
r/   type[TableBuilderAbstract]c                |    | j         rt          S t          | j        | j        | j        g          rt          S t          S )zSelect proper table builder.)r  r   rp   r   r   r   r   r  rI   s    r   r  zLatexFormatter._select_builder  s;    > 	$##dj$-899 	'&&r/   c                    | j         S )zColumn format.)_column_formatrI   s    r   r   zLatexFormatter.column_format  s     ""r/   input_column_formatc                    |0|                                  |                                 z   | _        dS t          |t                    st          dt          |                     || _        dS )zSetter for column format.Nz*column_format must be str or unicode, not )_get_index_format"_get_column_format_based_on_dtypesr  r   r   r   rv   )r-   r  s     r   r   zLatexFormatter.column_format  s     &&&((4+R+R+T+TT  /55 	63/003 3  
 #6Dr/   c                r    dd}| j         j        j        }d                    t	          ||                    S )zkGet column format based on data type.

        Right alignment for numbers and left - for strings.
        r   r   c                H    t          | j        t          j                  rdS dS )Nr   l)
issubclassrv   npnumber)dtypes    r   get_col_typezGLatexFormatter._get_column_format_based_on_dtypes.<locals>.get_col_type  s"    %*bi00 s3r/   r   r   )r&   dtypes_valuesr>   map)r-   r  r  s      r   r  z1LatexFormatter._get_column_format_based_on_dtypes  sA    	 	 	 	
 "*wws<00111r/   c                F    | j         j        rd| j        j        j        z  ndS )zGet index column format.r  r   )r%   r7   r&   rL   rI   s    r   r  z LatexFormatter._get_index_format  s#    15GsTZ%---RGr/   )FNFNFNNN)r   r
   r  r   r   r    r   r   r   r    r!   r   r   r   r   r    r   r    r   r"   r   )r   r   )r   r  )r   r    )r  r    r   r"   )rw   r   r   r   r.   r  r   r
  r  r   setterr  r  rd   r/   r   r  r    s        F  $(!)-04 #! ! ! ! !.) ) ) ) 
 
 
 X
(    # # # X# 6 6 6 62 2 2 2H H H H H Hr/   r  r@   rx   ry   c                    d | D             S )zCarry 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.
    c                   g | ]}|r|d k    r|                     dd                               dd                               dd                               dd                               d	d
                               dd                               dd                               dd                               dd                               dd          nd S )rk   \z\textbackslash _z\_%z\%$z\$#z\#r   z\{r   z\}~z\textasciitilde ^z\textasciicircum &z\&)replacer|   s     r   r_   z#_escape_symbols.<locals>.<listcomp>!  s          4ii IId.//WS%  WS%  WS%  WS%  WS%  WS%  WS-..WS.//WS%     r/   rd   )r@   s    r   r~   r~     s%         r/   rD   ilevelsr1   c                :    fdt          |           D             S )z%Convert elements in ``crow`` to bold.c                ^    g | ])\  }}|k     r|                                 d vrd| dn|*S ))r   rk   z\textbf{r   )r   )r\   r   ra   r.  s      r   r_   z$_convert_to_bold.<locals>.<listcomp>6  sX       Aq  'kkaggiiz.I.IQq  r/   )	enumerate)rD   r.  s    `r   r   r   4  s4       dOO   r/   __main__)r   r   r   r   r   )rD   rx   r.  r1   r   ry   ) r   
__future__r   abcr   r   typingr   r   r   numpyr  pandas.core.dtypes.genericr	   pandas.io.formats.formatr
   r   r   r   r   r   r   r   r   r   r  r  r~   r   rw   doctesttestmodrd   r/   r   <module>r;     s    # " " " " "                     4 4 4 4 4 4 <;;;;;;' ' ' 'BY Y Y Y Y Y Y YxA A A A A* A A A/ / / / /) / / // / / / /' / / /a& a& a& a& a&3 a& a& a&HS" S" S" S" S". S" S" S"lV" V" V" V" V"* V" V" V"r+= += += += +=- += += +=\         (      B@H @H @H @H @H @H @H @HF   @    zNNNGO r/   