3
Uéd¿  ã               @   st   d dl mZ d dlmZmZ i Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úimport_optional_dependency)Ú
is_integerÚis_list_likec             C   s"   t | ƒstdƒ‚| j}| t|< dS )z°
    Add engine to the excel writer registry.io.excel.

    You must use this method to integrate with ``to_excel``.

    Parameters
    ----------
    klass : ExcelWriter
    z&Can only register callables as enginesN)ÚcallableÚ
ValueErrorZengineÚ_writers)ÚklassÚengine_name© r
   úI/var/www/html/virt/lib64/python3.6/site-packages/pandas/io/excel/_util.pyÚregister_writer   s    
r   c             C   s0   dddddœ}t dddd}|r(d|d	< ||  S )
zþ
    Return the default writer for the given extension.

    Parameters
    ----------
    ext : str
        The excel file extension for which to get the default engine.

    Returns
    -------
    str
        The default engine for the extension.
    ZopenpyxlZxlwtZodf)ÚxlsxZxlsmZxlsZodsÚ
xlsxwriterFÚwarn)Zraise_on_missingZ
on_versionr   )r   )ÚextZ_default_writersr   r
   r
   r   Ú_get_default_writer   s    r   c             C   sB   yt |  S  tk
r< } ztd| › dƒ|‚W Y d d }~X nX d S )NzNo Excel writer 'ú')r   ÚKeyErrorr   )r	   Úerrr
   r
   r   Ú
get_writer4   s    r   c             C   sh   d}xZ| j ƒ jƒ D ]J}t|ƒ}|tdƒk s6|tdƒkrDtd| › ƒ‚|d | tdƒ d }qW |d S )ai  
    Convert Excel column name like 'AB' to 0-based column index.

    Parameters
    ----------
    x : str
        The Excel column name to convert to a 0-based column index.

    Returns
    -------
    num : int
        The column index corresponding to the name.

    Raises
    ------
    ValueError
        Part of the Excel column name was invalid.
    r   ÚAÚZzInvalid column name: é   é   )ÚupperÚstripÚordr   )ÚxÚindexÚcÚcpr
   r
   r   Ú
_excel2num;   s    r!   c             C   sb   g }xX| j dƒD ]J}d|krL|j dƒ}|jtt|d ƒt|d ƒd ƒƒ q|jt|ƒƒ qW |S )a”  
    Convert comma separated list of column names and ranges to indices.

    Parameters
    ----------
    areas : str
        A string containing a sequence of column ranges (or areas).

    Returns
    -------
    cols : list
        A list of 0-based column indices.

    Examples
    --------
    >>> _range2cols('A:E')
    [0, 1, 2, 3, 4]
    >>> _range2cols('A,C,Z:AB')
    [0, 2, 25, 26, 27]
    ú,ú:r   r   )ÚsplitÚextendÚranger!   Úappend)ZareasÚcolsÚrngr
   r
   r   Ú_range2cols[   s    
&r*   c             C   s2   | dkr| S t | ƒrtdƒ‚t| tƒr.t| ƒS | S )a  
    Convert `usecols` into a compatible format for parsing in `parsers.py`.

    Parameters
    ----------
    usecols : object
        The use-columns object to potentially convert.

    Returns
    -------
    converted : object
        The compatible format of `usecols`.
    Nz}Passing an integer for `usecols` is no longer supported.  Please pass in a list of int from 0 to `usecols` inclusive instead.)r   r   Ú
isinstanceÚstrr*   )Zusecolsr
   r
   r   Ú_maybe_convert_usecols|   s    
r-   c             C   s6   | d k	r2t | ƒdkr*tdd„ | D ƒƒr*dS tdƒ‚dS )Né   c             s   s   | ]}t |tƒV  qd S )N)r+   Úint)Ú.0Úitemr
   r
   r   ú	<genexpr>œ   s    z)_validate_freeze_panes.<locals>.<genexpr>TzLfreeze_panes must be of form (row, column) where row and column are integersF)ÚlenÚallr   )Zfreeze_panesr
   r
   r   Ú_validate_freeze_panes™   s    r5   c             C   s:   x4t | ƒdkr4| d dks&| d d kr4| dd … } qW | S )Nr   Ú r   )r3   )Úrowr
   r
   r   Ú_trim_excel_headerª   s    &r8   c             C   sj   | d }xXt dt| ƒƒD ]F}|| s,| | }| | dksD| | dkrN|| |< qd||< | | }qW | |fS )aç  
    Forward fill blank entries in row but only inside the same parent index.

    Used for creating headers in Multiindex.

    Parameters
    ----------
    row : list
        List of items in a single row.
    control_row : list of bool
        Helps to determine if particular column is in same parent index as the
        previous value. Used to stop propagation of empty cells between
        different indexes.

    Returns
    -------
    Returns changed row and control_row
    r   r   r6   NF)r&   r3   )r7   Zcontrol_rowÚlastÚir
   r
   r   Ú_fill_mi_header²   s    
r;   c             C   sR   t |ƒs|nt|ƒ}| | }|dkr(dn|}|| d|… dg | |d d…  fS )a•  
    Pop the header name for MultiIndex parsing.

    Parameters
    ----------
    row : list
        The data row to parse for the header name.
    index_col : int, list
        The index columns for our data. Assumed to be non-null.

    Returns
    -------
    header_name : str
        The extracted header name.
    trimmed_row : list
        The original data row with the header name removed.
    r6   Nr   )r   Úmax)r7   Z	index_colr:   Úheader_namer
   r
   r   Ú_pop_header_nameÓ   s    r>   N)Zpandas.compat._optionalr   Zpandas.core.dtypes.commonr   r   r   r   r   r   r!   r*   r-   r5   r8   r;   r>   r
   r
   r
   r   Ú<module>   s    !!