a
    j=ic-b                     @  sF  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rXddlmZ dd	d
ddZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d Zd!d"d#d$d%Zd!d&d"d'd(d)Zed*krBddlZe  dS )+z-
Module for formatting output data in Latex.
    )annotations)ABCabstractmethod)TYPE_CHECKINGIteratorSequenceN)ABCMultiIndex)DataFrameFormatterstr | tuple[str, str] | Noneztuple[str, str])captionreturnc              
   C  sj   | rZt | tr| }d}qbz| \}}W qb tyV } zd}t||W Y d}~qbd}~0 0 n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   Zfull_captionshort_captionerrmsg r   h/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/pandas/io/formats/latex.py_split_into_full_short_caption   s    
"r   c                   @  s   e Zd ZdZd+ddddddd	d
ZdddddZeddddZeddddZeddddZ	eddddZ
ddddZedd Zddd d!d"Zddd d#d$Zdddd%d&d'Zdddd(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.

    FNr	   bool
str | NoneNone)	formattermulticolumnmulticolumn_formatmultirowr   c                 C  sF   || _ | j j| _|| _|| _|| _g | _|  | _tt	| j | _
d S N)fmtframer   r   r   clinebuf_get_strcolsstrcolslistzipstrrows)selfr   r   r   r   r   r   r   __init__I   s    

zRowStringConverter.__init__intr   )row_numr   c           	      C  s   | j | }|| jk o | jjo | j}|| jkoB| jjoB| joB| jdk}|oX|t	| j d k }| 
|}|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_multirowZis_cline_maybe_requiredcrowlstZcliner   r   r   
get_strrowY   s.    





zRowStringConverter.get_strrowr   c                 C  s   | j jr| jS dS )zNumber of rows in header.r   )r    r.   r/   r(   r   r   r   _header_row_numy   s    z"RowStringConverter._header_row_numc                 C  s
   | j jjS )z"Integer number of levels in index.)r!   r0   nlevelsr>   r   r   r   r1   ~   s    zRowStringConverter.index_levelsc                 C  s
   | j jjS r   )r!   columnsr@   r>   r   r   r   r-      s    z RowStringConverter.column_levelsc                 C  s"   | j }| jjr| jjr|d7 }|S )Nr,   )r-   r    has_index_namesZshow_index_names)r(   r@   r   r   r   r/      s    z RowStringConverter.header_levelszlist[list[str]]c                   s   | j jjr| jgg}n
| j  }| j jrt| jjtr| jjjd| j j	| j j
| j jd}dd fdd|D }| jjj  fdd|D }| jjj}t|rd	d |D }||| jjjd
  d < ||d
d  }|S )z%String representation of the columns.F)Zadjoinsparsifynamesna_repc                   s:   t | D ]  r qq| d g fdd| dd  D  S )Nr   c                   s    g | ]}|r|n
d t   qS ) r2   .0ipadr   r   
<listcomp>       zHRowStringConverter._get_strcols.<locals>.pad_empties.<locals>.<listcomp>r,   )reversed)xr   rK   r   pad_empties   s    z4RowStringConverter._get_strcols.<locals>.pad_emptiesc                 3  s   | ]} |V  qd S r   r   rH   )rQ   r   r   	<genexpr>   rN   z2RowStringConverter._get_strcols.<locals>.<genexpr>c                   s&   g | ]}d t |d  g  | qS )rF   rG   rH   )clevelsr   r   rM      rN   z3RowStringConverter._get_strcols.<locals>.<listcomp>c                 S  s   g | ]}|r|nd qS {}r   rH   r   r   r   rM      rN   r,   N)r    r!   empty_empty_info_lineZget_strcolsr0   r   r   formatrC   rB   rE   rA   r@   rD   any)r(   r$   outgenZcnamesZ	new_namesr   )rT   rQ   r   r#      s(    

	

zRowStringConverter._get_strcolsc                 C  s&   dt | jj d| jj d| jj S )NzEmpty z

Columns: z
Index: )typer!   __name__rA   r0   r>   r   r   r   rX      s    z#RowStringConverter._empty_info_lineSequence[str]	list[str]r9   r   c                 C  s@   | j jrt|}ndd |D }| j jr<| j jr<t|| j}|S )zPreprocess elements of the row.c                 S  s   g | ]}|r|nd qS rU   r   rI   rP   r   r   r   rM      rN   z6RowStringConverter._preprocess_row.<locals>.<listcomp>)r    escape_escape_symbolsZ	bold_rowsr0   _convert_to_boldr1   )r(   r9   r:   r   r   r   r3      s    
z"RowStringConverter._preprocess_rowc                   sn   |dj  dd  fdd}|j d D ](}| rV rL|  | dq6d7 q6 rj|  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   c                	     s>   dkr0 dddj d   d n
   d S )Nr,   \multicolumn{dz}{})r6   r   stripr   ZcoltextZncolZrow2r(   r   r   
append_col   s    z:RowStringConverter._format_multicolumn.<locals>.append_col)r1   ri   )r(   r9   rk   cr   rj   r   r4      s    

z&RowStringConverter._format_multicolumn)r9   rJ   r   c                 C  s   t | jD ]}||  r
d}| j|d d D ]}||  sJ|d7 }q0 qPq0|dkr
d|dd||   d||< | j|| d |d g 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{rg   z}{*}{rh   )ranger1   ri   r'   r"   r6   )r(   r9   rJ   jZnrowrr   r   r   r5      s    

 z#RowStringConverter._format_multirow)rJ   icolr   c                   s\   g }| j D ]F}|d  kr
|d|d dd|dd  fdd| j D | _ q
d	|S )
zC
        Create clines after multirow-blocks are finished.
        r   z
\cline{r,   rg   -rh   c                   s   g | ]}|d   kr|qS )r   r   rb   rJ   r   r   rM     rN   z5RowStringConverter._compose_cline.<locals>.<listcomp>r   )r"   r6   r7   )r(   rJ   rp   r;   clr   rr   r   r8   	  s    
 z!RowStringConverter._compose_cline)FNF)r^   
__module____qualname____doc__r)   r<   propertyr?   r1   r-   r/   r#   rX   r3   r4   r5   r8   r   r   r   r   r   9   s*       (

(r   c                   @  s"   e Zd ZdZeddddZdS )RowStringIteratorz:Iterator over rows of the header or the body of the table.Iterator[str]r=   c                 C  s   dS )z2Iterate over LaTeX string representations of rows.Nr   r>   r   r   r   __iter__  s    zRowStringIterator.__iter__N)r^   rt   ru   rv   r   rz   r   r   r   r   rx     s   rx   c                   @  s   e Zd ZdZddddZdS )RowHeaderIteratorz#Iterator for the table header rows.ry   r=   c                 c  s.   t t| jD ]}|| jk r| |V  qd S r   rm   r2   r'   r?   r<   r(   r+   r   r   r   rz   !  s    
zRowHeaderIterator.__iter__Nr^   rt   ru   rv   rz   r   r   r   r   r{     s   r{   c                   @  s   e Zd ZdZddddZdS )RowBodyIteratorz!Iterator for the table body rows.ry   r=   c                 c  s.   t t| jD ]}|| jkr| |V  qd S r   r|   r}   r   r   r   rz   *  s    
zRowBodyIterator.__iter__Nr~   r   r   r   r   r   '  s   r   c                   @  s   e Zd ZdZdddddddddddd
d	d
ZddddZeeddddZeeddddZ	eeddddZ
eeddddZeeddddZeeddddZeedd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   r   r   )
r   column_formatr   r   r   r   r   labelpositionr   c
           
      C  s:   || _ || _|| _|| _|| _|| _|| _|| _|	| _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   r)   J  s    zTableBuilderAbstract.__init__r   r=   c                 C  sD   | j | j| j| j| j| j| jg}ddd |D }d}||7 }|S )z%String representation of LaTeX table.
c                 S  s   g | ]}|r|qS r   r   rI   itemr   r   r   rM   k  rN   z3TableBuilderAbstract.get_result.<locals>.<listcomp>)	env_begintop_separatorr.   middle_separatorenv_bodybottom_separatorenv_endr7   )r(   elementsresultZtrailing_newliner   r   r   
get_result`  s    	zTableBuilderAbstract.get_resultc                 C  s   dS )zBeginning of the environment.Nr   r>   r   r   r   r   p  s    zTableBuilderAbstract.env_beginc                 C  s   dS )zTop level separator.Nr   r>   r   r   r   r   u  s    z"TableBuilderAbstract.top_separatorc                 C  s   dS )zHeader lines.Nr   r>   r   r   r   r.   z  s    zTableBuilderAbstract.headerc                 C  s   dS )zMiddle level separator.Nr   r>   r   r   r   r     s    z%TableBuilderAbstract.middle_separatorc                 C  s   dS )zEnvironment body.Nr   r>   r   r   r   r     s    zTableBuilderAbstract.env_bodyc                 C  s   dS )zBottom level separator.Nr   r>   r   r   r   r     s    z%TableBuilderAbstract.bottom_separatorc                 C  s   dS )zEnd of the environment.Nr   r>   r   r   r   r     s    zTableBuilderAbstract.env_end)NFNFNNNN)r^   rt   ru   rv   r)   r   rw   r   r   r   r.   r   r   r   r   r   r   r   r   r   0  s@           "r   c                   @  s   e Zd ZdZeddddZeddddZedddd	Zeddd
dZddddZ	eddddZ
eddddZeddddZdddddZdddddZdS )GenericTableBuilderz=Table builder producing string representation of LaTeX table.r   r=   c                 C  s   | j dd}dt|S )Nr.   overr   _create_row_iteratorr7   r%   r(   iteratorr   r   r   r.     s    zGenericTableBuilder.headerc                 C  s   dS )Nz\topruler   r>   r   r   r   r     s    z!GenericTableBuilder.top_separatorc                 C  s   |   rdS dS )N\midruler   )_is_separator_requiredr>   r   r   r   r     s    z$GenericTableBuilder.middle_separatorc                 C  s   | j dd}dt|S )Nbodyr   r   r   r   r   r   r   r     s    zGenericTableBuilder.env_bodyr   c                 C  s   t | jo| jS r   )r   r.   r   r>   r   r   r   r     s    z*GenericTableBuilder._is_separator_requiredc                 C  s   | j rd| j  dS dS )z7Position macro, extracted from self.position, like [h].[]r   )r   r>   r   r   r   _position_macro  s    z#GenericTableBuilder._position_macroc                 C  s8   | j r4d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   {rh   )r   r7   r   r>   r   r   r   _caption_macro  s    
z"GenericTableBuilder._caption_macroc                 C  s   | j rd| j  dS dS )z9Label macro, extracted from self.label, like \label{ref}.z\label{rh   r   )r   r>   r   r   r   _label_macro  s    z GenericTableBuilder._label_macrorx   )r   r   c                 C  s"   |  |}|| j| j| j| jd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   Ziterator_kindr   r   r   r     s    
z(GenericTableBuilder._create_row_iteratorztype[RowStringIterator]c                 C  s0   |dkrt S |dkrtS d| d}t|dS )z'Select proper iterator over table rows.r.   r   z.'over' must be either 'header' or 'body', but z was providedN)r{   r   r   )r(   r   r   r   r   r   r     s    z$GenericTableBuilder._select_iteratorN)r^   rt   ru   rv   rw   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s$   r   c                   @  sf   e Zd ZdZeddddZddddZedddd	Zeddd
dZedd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                 C  s8   d| j  d| j d}||   g}ddd |D S )Nz\begin{longtable}r   rh   r   c                 S  s   g | ]}|r|qS r   r   r   r   r   r   rM     rN   z.LongTableBuilder.env_begin.<locals>.<listcomp>)r   r   _caption_and_labelr7   )r(   	first_rowr   r   r   r   r     s    zLongTableBuilder.env_beginc                 C  sH   | j s| jr@d}| j | j g}ddd |D }||7 }|S dS d S )Nz\\r   c                 S  s   g | ]}|r|qS r   r   r   r   r   r   rM     rN   z7LongTableBuilder._caption_and_label.<locals>.<listcomp>r   )r   r   r   r   r7   )r(   Zdouble_backslashr   Zcaption_and_labelr   r   r   r     s    z#LongTableBuilder._caption_and_labelc                 C  sf   | j dd}dd| jr$d| j dnd| j| jdddd	t|j d
ddddg}|  rbd|S dS )Nr.   r   r   z\endfirstheadz\caption[]{z} \\r   z\endheadrf   z!}{r}{{Continued on next page}} \\z	\endfoot
\bottomrulez\endlastfootr   )r   r   r   r.   r2   r$   r   r7   )r(   r   r   r   r   r   r     s$    
z!LongTableBuilder.middle_separatorc                 C  s   dS )Nr   r   r>   r   r   r   r   :  s    z!LongTableBuilder.bottom_separatorc                 C  s   dS )Nz\end{longtable}r   r>   r   r   r   r   >  s    zLongTableBuilder.env_endN)
r^   rt   ru   rv   rw   r   r   r   r   r   r   r   r   r   r     s   "
r   c                   @  sF   e Zd ZdZeddddZeddddZedd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                 C  s<   d| j  d| j | j d| j dg}ddd |D S )Nz\begin{table}z
\centering\begin{tabular}{rh   r   c                 S  s   g | ]}|r|qS r   r   r   r   r   r   rM   f  rN   z1RegularTableBuilder.env_begin.<locals>.<listcomp>)r   r   r   r   r7   )r(   r   r   r   r   r   ]  s    
zRegularTableBuilder.env_beginc                 C  s   dS Nr   r   r>   r   r   r   r   h  s    z$RegularTableBuilder.bottom_separatorc                 C  s   d ddgS )Nr   \end{tabular}z\end{table})r7   r>   r   r   r   r   l  s    zRegularTableBuilder.env_endNr^   rt   ru   rv   rw   r   r   r   r   r   r   r   r   C  s   
r   c                   @  sF   e Zd ZdZeddddZeddddZedd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                 C  s   d| j  dS )Nr   rh   )r   r>   r   r   r   r     s    zTabularBuilder.env_beginc                 C  s   dS r   r   r>   r   r   r   r     s    zTabularBuilder.bottom_separatorc                 C  s   dS )Nr   r   r>   r   r   r   r     s    zTabularBuilder.env_endNr   r   r   r   r   r   q  s   r   c                   @  s   e Zd ZdZdddddddddddd	
d
dZddddZeddddZddddZeddddZ	e	j
dddddZ	ddddZdd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   r   r
   r   )
r   	longtabler   r   r   r   r   r   r   r   c
           
      C  sN   || _ | 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   r   r   r   r)     s    
zLatexFormatter.__init__r   r=   c                 C  s
   | j  S )zp
        Render a DataFrame to a LaTeX tabular, longtable, or table/tabular
        environment output.
        )builderr   r>   r   r   r   	to_string  s    zLatexFormatter.to_stringr   c                 C  s4   |   }|| j| j| j| j| j| j| j| j| j	d	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   r   r   r   r     s    zLatexFormatter.builderztype[TableBuilderAbstract]c                 C  s&   | j r
tS t| j| j| jgr"tS tS )zSelect proper table builder.)r   r   rZ   r   r   r   r   r   r>   r   r   r   r     s
    zLatexFormatter._select_builderc                 C  s   | j S )zColumn format.)_column_formatr>   r   r   r   r     s    zLatexFormatter.column_format)input_column_formatr   c                 C  sD   |du r|   |   | _n$t|ts:tdt| n|| _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   r]   )r(   r   r   r   r   r     s    
c                 C  s"   dd }| j jj}dt||S )zkGet column format based on data type.

        Right alignment for numbers and left - for strings.
        c                 S  s   t | jtjrdS dS )Nro   l)
issubclassr]   npnumber)Zdtyper   r   r   get_col_type  s    zGLatexFormatter._get_column_format_based_on_dtypes.<locals>.get_col_typer   )r!   dtypesZ_valuesr7   map)r(   r   r   r   r   r   r     s    
z1LatexFormatter._get_column_format_based_on_dtypesc                 C  s   | j jrd| jjj S dS )zGet index column format.r   r   )r    r0   r!   r@   r>   r   r   r   r     s    z LatexFormatter._get_index_format)FNFNFNNN)r^   rt   ru   rv   r)   r   rw   r   r   r   setterr   r   r   r   r   r   r     s(   #        "r   r_   r`   ra   c                 C  s   d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                 S  sp   g | ]h}|rh|d krh| dd dd dd dd d	d
 dd dd dd dd ddnd qS )rV   \z\textbackslash _z\_%z\%$z\$#z\#r   z\{rh   z\}~z\textasciitilde ^z\textasciicircum &z\&)replacerb   r   r   r   rM   "  s0   
	z#_escape_symbols.<locals>.<listcomp>r   )r9   r   r   r   rd     s    rd   r*   )r:   ilevelsr   c                   s    fddt | D S )z%Convert elements in ``crow`` to bold.c                   s4   g | ],\}}| k r,|  d vr,d| dn|qS ))r   rV   z\textbf{rh   )ri   )rI   rn   rP   r   r   r   rM   7  s   z$_convert_to_bold.<locals>.<listcomp>)	enumerate)r:   r   r   r   r   re   5  s    
re   __main__) rv   
__future__r   abcr   r   typingr   r   r   numpyr   Zpandas.core.dtypes.genericr   Zpandas.io.formats.formatr	   r   r   rx   r{   r   r   r   r   r   r   r   rd   re   r^   doctesttestmodr   r   r   r   <module>   s2   ! ^		dVY.!  
