o
    Û­j©  ã                   @  sZ  U d dl mZ d dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZmZ erHd dlmZ ee Zede
egef d�Zi Zd	ed
< dKdd„ZdLdMdd„ZdNdd„ZdOdd„ZdPd!d"„ZedQd%d&„ƒZ edRd(d&„ƒZ edSd)d&„ƒZ edTd*d&„ƒZ dUd-d&„Z edVd1d2„ƒZ!edWd4d2„ƒZ!dXd7d2„Z!dYd=d>„Z"dZdBdC„Z#d[dHdI„Z$dJS )\é    )Úannotations)ÚHashableÚIterableÚMutableMappingÚSequence)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚTypeVarÚoverload©Úimport_optional_dependency)Ú
is_integerÚis_list_like)ÚExcelWriterÚusecols_func)Úboundz"MutableMapping[str, ExcelWriter_t]Ú_writersÚklassÚExcelWriter_tÚreturnÚNonec                 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Ú
ValueErrorÚ_enginer   )r   Úengine_name© r   úR/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pandas/io/excel/_util.pyÚregister_writer"   s   
r   ÚreaderÚextÚstrÚmodeúLiteral['reader', 'writer']c                 C  sZ   ddddddœ}dddddœ}|dv sJ ‚|dkr)t d	d
d�}|r%d	|d< ||  S ||  S )a�  
    Return the default reader/writer for the given extension.

    Parameters
    ----------
    ext : str
        The excel file extension for which to get the default engine.
    mode : str {'reader', 'writer'}
        Whether to get the default engine for reading or writing.
        Either 'reader' or 'writer'

    Returns
    -------
    str
        The default engine for the extension.
    ÚopenpyxlÚpyxlsbÚxlrdÚodf)ÚxlsxÚxlsmÚxlsbÚxlsÚods)r)   r*   r+   r-   )r    Úwriterr.   Ú
xlsxwriterÚwarn)Úerrorsr)   r   )r!   r#   Ú_default_readersÚ_default_writersr/   r   r   r   Úget_default_engine2   s$   ûür4   r   c              
   C  s6   zt |  W S  ty } z	td| › d�ƒ|‚d }~ww )NzNo Excel writer 'ú')r   ÚKeyErrorr   )r   Úerrr   r   r   Ú
get_writer[   s   
€ÿr8   ÚxÚintc                 C  sd   d}|   ¡  ¡ D ]%}t|ƒ}|tdƒk s|tdƒkr!td| › �ƒ‚|d | tdƒ d }q|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   )r9   ÚindexÚcÚcpr   r   r   Ú
_excel2numb   s   rE   Úareasú	list[int]c                 C  s^   g }|   d¡D ]%}d|v r%|  d¡}| tt|d ƒt|d ƒd ƒ¡ q| t|ƒ¡ q|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ÚrangerE   Úappend)rF   ÚcolsÚrngÚrngsr   r   r   Ú_range2cols‚   s   
&rQ   Úusecolsústr | list[int]c                 C  ó   d S ©Nr   ©rR   r   r   r   Úmaybe_convert_usecols£   ó   rW   ú	list[str]c                 C  rT   rU   r   rV   r   r   r   rW   ¨   rX   c                 C  rT   rU   r   rV   r   r   r   rW   ­   rX   c                 C  rT   rU   r   rV   r   r   r   rW   ²   rX   ú1str | list[int] | list[str] | usecols_func | Noneú+None | list[int] | list[str] | usecols_funcc                 C  s2   | du 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   Ú
isinstancer"   rQ   rV   r   r   r   rW   ·   s   ÿ
Úfreeze_panesútuple[int, int]úLiteral[True]c                 C  rT   rU   r   ©r]   r   r   r   Úvalidate_freeze_panesÖ   rX   ra   úLiteral[False]c                 C  rT   rU   r   r`   r   r   r   ra   Û   rX   útuple[int, int] | NoneÚboolc                 C  s6   | d urt | ƒdkrtdd„ | D ƒƒrdS tdƒ‚dS )Né   c                 s  s   � | ]}t |tƒV  qd S rU   )r\   r:   )Ú.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   r`   r   r   r   ra   à   s   ÿÿÚrowúlist[Hashable]Úcontrol_rowú
list[bool]ú!tuple[list[Hashable], list[bool]]c                 C  sf   | d }t dt| ƒƒD ]#}|| s| | }| | dks!| | du r&|| |< qd||< | | }q| |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>   Ú NF)rL   ri   )rk   rm   ÚlastÚir   r   r   Úfill_mi_headerñ   s   

rs   Ú	index_colúint | Sequence[int]ú&tuple[Hashable | None, list[Hashable]]c                 C  sp   t |ƒrt|tƒsJ ‚t|ƒ}n	t|tƒrJ ‚|}| | }|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.
    rp   Nr>   )r   r\   r   Úmax)rk   rt   rr   Úheader_namer   r   r   Úpop_header_name  s   
&ry   Úengine_kwargsúdict[str, Any] | NoneÚkwargsÚdictc                 C  s$   | du ri }n|   ¡ }| |¡ |S )a  
    Used to combine two sources of kwargs for the backend engine.

    Use of kwargs is deprecated, this function is solely for use in 1.3 and should
    be removed in 1.4/2.0. Also _base.ExcelWriter.__new__ ensures either engine_kwargs
    or kwargs must be None or empty respectively.

    Parameters
    ----------
    engine_kwargs: dict
        kwargs to be passed through to the engine.
    kwargs: dict
        kwargs to be psased through to the engine (deprecated)

    Returns
    -------
    engine_kwargs combined with kwargs
    N)ÚcopyÚupdate)rz   r|   Úresultr   r   r   Úcombine_kwargs6  s
   
r�   N)r   r   r   r   )r    )r!   r"   r#   r$   r   r"   )r   r"   r   r   )r9   r"   r   r:   )rF   r"   r   rG   )rR   rS   r   rG   )rR   rY   r   rY   )rR   r   r   r   )rR   r   r   r   )rR   rZ   r   r[   )r]   r^   r   r_   )r]   r   r   rb   )r]   rc   r   rd   )rk   rl   rm   rn   r   ro   )rk   rl   rt   ru   r   rv   )rz   r{   r|   r}   r   r}   )%Ú
__future__r   Úcollections.abcr   r   r   r   Útypingr   r   r	   r
   r   r   Úpandas.compat._optionalr   Úpandas.core.dtypes.commonr   r   Úpandas.io.excel._baser   Útyper   Úobjectr   r   Ú__annotations__r   r4   r8   rE   rQ   rW   ra   rs   ry   r�   r   r   r   r   Ú<module>   s@     	

)

 !



#"