a
    oÝEby  ã                   @  sL  d Z ddlmZ ddlmZ ddlZddlZddlmZm	Z	m
Z
mZmZmZmZ ddlZddlZddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZm Z m!Z!m"Z" ddl#m$  m%Z& ddl'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 G dd„ dƒZ2G dd„ de2ƒZ3G dd„ dƒZ4G dd„ dƒZ5dS )zC
Utilities for conversion to writer-agnostic Excel representation.
é    )Úannotations)ÚreduceN)ÚAnyÚCallableÚHashableÚIterableÚMappingÚSequenceÚcast)Úis_list_like)Ú
IndexLabelÚStorageOptions)Údoc)Úmissing)Úis_floatÚ	is_scalar)Ú	DataFrameÚIndexÚ
MultiIndexÚPeriodIndex)Ú_shared_docs)ÚCSS4_COLORS)ÚCSSResolverÚ
CSSWarning)Úget_level_lengths)Úpprint_thingc                   @  s*   e Zd ZdZeZddddddœdd„ZdS )	Ú	ExcelCell©ÚrowÚcolÚvalÚstyleÚ
mergestartÚmergeendNÚintú
int | None)r   r   r"   r#   c                 C  s(   || _ || _|| _|| _|| _|| _d S ©Nr   )Úselfr   r   r    r!   r"   r#   © r(   úW/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/pandas/io/formats/excel.pyÚ__init__9   s    	zExcelCell.__init__)NNN)Ú__name__Ú
__module__Ú__qualname__Z
__fields__Ú	__slots__r*   r(   r(   r(   r)   r   5   s      ùr   c                      s.   e Zd Zddddddddœ‡ fdd„Z‡  ZS )ÚCssExcelCellr$   zdict | Nonez3dict[tuple[int, int], list[tuple[str, Any]]] | NoneúCallable | None)r   r   r!   Ú
css_stylesÚcss_rowÚcss_colÚcss_converterc	                   sH   |r,|r,d  dd„ |||f D ƒ¡}
||
ƒ}tƒ jf ||||dœ|	¤ŽS )Nú;c                 S  s    g | ]\}}|d  t |ƒ ‘qS )ú:)Ústr)Ú.0ÚaÚvr(   r(   r)   Ú
<listcomp>Y   ó    z)CssExcelCell.__init__.<locals>.<listcomp>©r   r   r    r!   )ÚjoinÚsuperr*   )r'   r   r   r    r!   r1   r2   r3   r4   ÚkwargsÚcss©Ú	__class__r(   r)   r*   K   s    ÿzCssExcelCell.__init__)r+   r,   r-   r*   Ú__classcell__r(   r(   rB   r)   r/   J   s   r/   c                   @  s  e Zd ZU dZeZdddddddœZddddddddddddddœZdddd	œZd
ddddœZ	de
d< d`ddœdd„Zeƒ Zdddœdd„Zdddœdd„Zdddœd d!„Zdddœd"d#„Zdd$dœd%d&„Zdd'dœd(d)„Zddd*œd+d,„Zddd-œd.d/„Zdd0d1œd2d3„Zdd0d4œd5d6„Zdd7œd8d9„Zdd:dœd;d<„Zdd=dœd>d?„Zdd$dœd@dA„Zdd$dœdBdC„ZddDdœdEdF„ZdDddGœdHdI„Zdd$dœdJdK„ZddDdœdLdM„Z ddNdœdOdP„Z!dQdRœdSdT„Z"dddUœdVdW„Z#ddXdYœdZd[„Z$dddYœd\d]„Z%ddXdYœd^d_„Z&dS )aÚCSSToExcelConverteraK  
    A callable for converting CSS declarations to ExcelWriter styles

    Supports parts of CSS 2.2, with minimal CSS 3.0 support (e.g. text-shadow),
    focusing on font styling, backgrounds, borders and alignment.

    Operates by first computing CSS styles in a fairly generic
    way (see :meth:`compute_css`) then determining Excel style
    properties from CSS properties (see :meth:`build_xlstyle`).

    Parameters
    ----------
    inherited : str, optional
        CSS declarations understood to be the containing scope for the
        CSS processed by :meth:`__call__`.
    ÚtopÚcenterÚbottom)rF   ztext-topÚmiddleZbaselinerH   ztext-bottomTF)ÚboldZbolderZ600Z700Z800Z900ÚnormalZlighterÚ100Z200Z300Z400Ú500)rK   ÚitalicZobliqueé   é   é   é   )Zserifz
sans-serifZcursiveZfantasyzdict[str, str] | NoneÚ	inheritedNú
str | None)rS   c                 C  s    |d ur|   |¡| _nd | _d S r&   )Úcompute_cssrS   )r'   rS   r(   r(   r)   r*   ¡   s    zCSSToExcelConverter.__init__r7   zdict[str, dict[str, str]])Údeclarations_strÚreturnc                 C  s   |   || j¡}|  |¡S )ax  
        Convert CSS declarations to ExcelWriter style.

        Parameters
        ----------
        declarations_str : str
            List of CSS declarations.
            e.g. "font-weight: bold; background: blue"

        Returns
        -------
        xlstyle : dict
            A style as interpreted by ExcelWriter when found in
            ExcelCell.style.
        )rU   rS   Úbuild_xlstyle)r'   rV   Ú
propertiesr(   r(   r)   Ú__call__©   s    zCSSToExcelConverter.__call__zMapping[str, str])ÚpropsrW   c                   sN   |   |¡|  |¡|  |¡|  |¡|  |¡dœ}dddœ‡ fdd„‰ ˆ |ƒ |S )N)Ú	alignmentÚborderÚfillÚfontZnumber_formatzdict[str, str]ÚNone)ÚdrW   c                   sF   t |  ¡ ƒD ]4\}}|du r$| |= qt|tƒrˆ |ƒ |s| |= qdS )z4Remove key where value is None, through nested dictsN)ÚlistÚitemsÚ
isinstanceÚdict)ra   Úkr:   ©Úremove_noner(   r)   rh   È   s    
z6CSSToExcelConverter.build_xlstyle.<locals>.remove_none)Úbuild_alignmentÚbuild_borderÚ
build_fillÚ
build_fontÚbuild_number_format)r'   r[   Úoutr(   rg   r)   rX   ½   s    û

z!CSSToExcelConverter.build_xlstylezdict[str, bool | str | None]c                 C  s   |  d¡|  |¡|  |¡dœS )Nz
text-align)Ú
horizontalÚverticalÚ	wrap_text)ÚgetÚ_get_vertical_alignmentÚ_get_is_wrap_text©r'   r[   r(   r(   r)   ri   Õ   s    ýz#CSSToExcelConverter.build_alignmentc                 C  s   |  d¡}|r| j  |¡S d S )Nzvertical-align)rr   ÚVERTICAL_MAP)r'   r[   Zvertical_alignr(   r(   r)   rs   Ý   s    
z+CSSToExcelConverter._get_vertical_alignmentzbool | Nonec                 C  s"   |  d¡d u rd S t|d dvƒS )Nzwhite-space)ZnowrapÚprezpre-line)rr   Úboolru   r(   r(   r)   rt   ã   s    z%CSSToExcelConverter._get_is_wrap_textz dict[str, dict[str, str | None]]c                   s   ‡ ‡fdd„dD ƒS )Nc                   sP   i | ]H}|ˆ  ˆ  d |› d�¡ˆ  d |› d�¡¡ˆ ˆ  d |› d�¡¡dœ“qS )zborder-z-stylez-widthz-color)r!   Úcolor)Ú_border_stylerr   Úcolor_to_excel)r8   Zside©r[   r'   r(   r)   Ú
<dictcomp>ë   s   ùþûz4CSSToExcelConverter.build_border.<locals>.<dictcomp>©rF   ÚrightrH   Úleftr(   ru   r(   r|   r)   rj   è   s    øz CSSToExcelConverter.build_border)r!   Úwidthc                 C  sŠ   |d u r|d u rd S |dks$|dkr(d S |   |¡}|d u r>d S |dv rJ|S |dkrVdS |dkrn|dv rjdS dS |dkr†|dv r‚dS d	S d S )
NÚnoneÚhidden)NZgrooveZridgeZinsetZoutsetÚsolidÚdoubleZdotted)ZhairÚthinZmediumDashDotDotZdashedZmediumDashed)Ú_get_width_name)r'   r!   r�   Z
width_namer(   r(   r)   rz   ö   s&    
z!CSSToExcelConverter._border_style)Úwidth_inputrW   c                 C  s2   |   |¡}|dk rd S |dk r"dS |dk r.dS dS )Ngñhãˆµøä>gÍÌÌÌÌÌô?r†   gffffff@ZmediumZthick)Ú_width_to_float)r'   rˆ   r�   r(   r(   r)   r‡     s    
z#CSSToExcelConverter._get_width_nameÚfloat)r�   rW   c                 C  s   |d u rd}|   |¡S )NZ2pt)Ú_pt_to_float)r'   r�   r(   r(   r)   r‰   '  s    z#CSSToExcelConverter._width_to_float)Ú	pt_stringrW   c                 C  s   |  d¡sJ ‚t| d¡ƒS )NÚpt)ÚendswithrŠ   Úrstrip)r'   rŒ   r(   r(   r)   r‹   ,  s    z CSSToExcelConverter._pt_to_float)r[   c                 C  s&   |  d¡}|dvr"|  |¡ddœS d S )Nzbackground-color)NÚtransparentr‚   r„   )ZfgColorZpatternType)rr   r{   )r'   r[   Z
fill_colorr(   r(   r)   rk   0  s    
zCSSToExcelConverter.build_fillzdict[str, str | None]c                 C  s   d|  d¡iS )NZformat_codeznumber-format)rr   ru   r(   r(   r)   rm   7  s    z'CSSToExcelConverter.build_number_formatz*dict[str, bool | int | float | str | None]c                 C  sv   |   |¡}|  |¡}|r |d nd |  |¡|  |¡|  |¡|  |¡d|v rNdnd d|v pZd |  | d¡¡|  |¡dœ	S )Nr   Ú	underlineÚsinglezline-throughry   )	ÚnameÚfamilyÚsizerJ   rN   r‘   Ústrikery   Zshadow)	Ú_get_font_namesÚ_get_decorationÚ_select_font_familyÚ_get_font_sizeÚ_get_is_boldÚ_get_is_italicr{   rr   Ú_get_shadow)r'   r[   Ú
font_namesÚ
decorationr(   r(   r)   rl   :  s    


özCSSToExcelConverter.build_fontc                 C  s   |  d¡}|r| j  |¡S d S )Nzfont-weight)rr   ÚBOLD_MAP)r'   r[   Úweightr(   r(   r)   r›   L  s    
z CSSToExcelConverter._get_is_boldc                 C  s   |  d¡}|r| j  |¡S d S )Nz
font-style)rr   Ú
ITALIC_MAP)r'   r[   Z
font_styler(   r(   r)   rœ   R  s    
z"CSSToExcelConverter._get_is_italiczSequence[str]c                 C  s"   |  d¡}|d ur| ¡ S dS d S )Nztext-decorationr(   )rr   Úsplit)r'   r[   rŸ   r(   r(   r)   r˜   X  s    
z#CSSToExcelConverter._get_decoration)rŸ   rW   c                 C  s   d|v rdS d S )Nr‘   r’   r(   )r'   rŸ   r(   r(   r)   Ú_get_underline_  s    z"CSSToExcelConverter._get_underlinec                 C  s    d|v rt t d|d ¡ƒS d S )Nztext-shadowz^[^#(]*[1-9])rx   ÚreÚsearchru   r(   r(   r)   r�   d  s    zCSSToExcelConverter._get_shadowc                 C  sˆ   t  d| dd¡¡}g }|D ]f}|d d… dkrF|dd…  dd¡}n.|d d… dkrl|dd…  d	d¡}n| ¡ }|r| |¡ q|S )
Nz›(?x)
            (
            "(?:[^"]|\\")+"
            |
            '(?:[^']|\\')+'
            |
            [^'",]+
            )(?=,|\s*$)
        zfont-familyÚ rO   ú"éÿÿÿÿz\"ú'z\')r¥   Úfindallrr   ÚreplaceÚstripÚappend)r'   r[   Zfont_names_tmprž   r“   r(   r(   r)   r—   i  s    	
öz#CSSToExcelConverter._get_font_nameszfloat | Nonec                 C  s    |  d¡}|d u r|S |  |¡S )Nz	font-size)rr   r‹   )r'   r[   r•   r(   r(   r)   rš   ƒ  s    
z"CSSToExcelConverter._get_font_sizer%   ©rW   c                 C  s&   d }|D ]}| j  |¡}|r q"q|S r&   )Ú
FAMILY_MAPrr   )r'   rž   r”   r“   r(   r(   r)   r™   ‰  s    z'CSSToExcelConverter._select_font_family)r    rW   c                 C  sZ   |d u rd S |   |¡r |  |¡S z| j| W S  tyT   t dt|ƒ› �t¡ Y n0 d S )NzUnhandled color format: )Ú_is_hex_colorÚ_convert_hex_to_excelÚNAMED_COLORSÚKeyErrorÚwarningsÚwarnÚreprr   ©r'   r    r(   r(   r)   r{   ’  s    

z"CSSToExcelConverter.color_to_excelrx   )Úcolor_stringrW   c                 C  s   t | d¡ƒS )Nú#)rx   Ú
startswith)r'   r¹   r(   r(   r)   r±   Ÿ  s    z!CSSToExcelConverter._is_hex_colorc                 C  sH   |  d¡}|  |¡r<|d d |d d  |d d   ¡ S | ¡ S d S )Nrº   r   rP   rO   )ÚlstripÚ_is_shorthand_colorÚupper©r'   r¹   Úcoder(   r(   r)   r²   ¢  s    

(z)CSSToExcelConverter._convert_hex_to_excelc                 C  s<   |  d¡}t|ƒdkrdS t|ƒdkr*dS td|› �ƒ‚dS )zcCheck if color code is shorthand.

        #FFF is a shorthand as opposed to full #FFFFFF.
        rº   é   Té   FzUnexpected color N)r¼   ÚlenÚ
ValueErrorr¿   r(   r(   r)   r½   ©  s    
z'CSSToExcelConverter._is_shorthand_color)N)'r+   r,   r-   Ú__doc__r   r³   rv   r    r¢   r°   Ú__annotations__r*   r   rU   rZ   rX   ri   rs   rt   rj   rz   r‡   r‰   r‹   rk   rm   rl   r›   rœ   r˜   r¤   r�   r—   rš   r™   r{   r±   r²   r½   r(   r(   r(   r)   rE   `   sx   
úóýü'
	rE   c                   @  sî   e Zd ZdZdZdZd4d	d
dddddd	ddœ	dd„Zedd„ ƒZdd„ Z	ddœdd„Z
ddœdd„Zddœdd„Zddœdd „Zddœd!d"„Zddœd#d$„Zeddœd%d&„ƒZd'dd(œd)d*„Zddœd+d,„Zeed- d.�d5d1d.œd2d3„ƒZdS )6ÚExcelFormattera9  
    Class for formatting a DataFrame to a list of ExcelCells,

    Parameters
    ----------
    df : DataFrame or Styler
    na_rep: na representation
    float_format : str, default None
        Format string for floating point numbers
    cols : sequence, optional
        Columns to write
    header : bool or sequence of str, default True
        Write out column names. If a list of string is given it is
        assumed to be aliases for the column names
    index : bool, default True
        output row names (index)
    index_label : str or sequence, default None
        Column label for index column(s) if desired. If None is given, and
        `header` and `index` are True, then the index names are used. A
        sequence should be given if the DataFrame uses MultiIndex.
    merge_cells : bool, default False
        Format MultiIndex and Hierarchical Rows as merged cells.
    inf_rep : str, default `'inf'`
        representation for np.inf values (which aren't representable in Excel)
        A `'-'` sign will be added in front of -inf.
    style_converter : callable, optional
        This translates Styler styles (CSS) into ExcelWriter styles.
        Defaults to ``CSSToExcelConverter()``.
        It should have signature css_declarations string -> excel style.
        This is only called for body cells.
    i   i @  r§   NTFÚinfr7   rT   zSequence[Hashable] | NonezSequence[Hashable] | boolrx   zIndexLabel | Noner0   )	Úna_repÚfloat_formatÚcolsÚheaderÚindexÚindex_labelÚmerge_cellsÚinf_repÚstyle_converterc                 C  sà   d| _ || _t|tƒsB|| _| j ¡  |j}|
d u r:tƒ }
|
| _nd | _d | _|| _	|d ur®t
t|ƒ |j¡ƒsxtdƒ‚t
t|ƒ |j¡ƒt
t|ƒƒkr tdƒ‚|j|d�| _	| j	j| _|| _|| _|| _|| _|| _|	| _d S )Nr   z,passes columns are not ALL present dataframez.Not all names specified in 'columns' are found)Úcolumns)Ú
rowcounterrÉ   rd   r   ÚstylerZ_computeÚdatarE   rÑ   ÚdfrÃ   r   ÚintersectionrÒ   r´   ÚsetZreindexrÊ   rÍ   rÎ   rÌ   rÏ   rÐ   )r'   rÖ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   rÑ   r(   r(   r)   r*   Û  s2    

 
zExcelFormatter.__init__c                 C  s    ddidddddœdddœdœS )	NrJ   Tr†   r~   rG   rF   )ro   rp   )r_   Zbordersr\   r(   ©r'   r(   r(   r)   Úheader_style	  s    üøzExcelFormatter.header_stylec                 C  s€   t |ƒrt |¡r| j}nJt|ƒrdt |¡r4| j}n0t |¡rLd| j› �}n| jd urdt	| j| ƒ}t
|dd ƒd ur|tdƒ‚|S )Nú-Útzinfoz{Excel does not support datetimes with timezones. Please ensure that datetimes are timezone unaware before writing to Excel.)r   r   ZisnarÉ   r   Zisposinf_scalarrÐ   Zisneginf_scalarrÊ   rŠ   ÚgetattrrÄ   r¸   r(   r(   r)   Ú_format_value  s    


ÿzExcelFormatter._format_valuezIterable[ExcelCell]r¯   c                 c  sª  | j jdkr| jstdƒ‚| js*| js*d S | j }|j| jddd�}t|ƒ}d}d}| jrzt	| j
jtƒrzt| j
jd ƒd }| j�rHt|jƒD ]\}}t|||| jd�V  qŒtt||j|jƒƒD ]†\}\}}}	| |	¡}
| ¡ D ]d\}}d\}}|dk�r
||| |  }}t||| d |
| | jt| jdd ƒ||| j||d	�
V  qÞq¾nXtt|Ž ƒD ]J\}}
d
 tt|
ƒ¡}t||| d || jt| jdd ƒ||| jd�V  �qT|| _d S )NrO   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.F©ZsparsifyZadjoinÚnamesr   r=   ©NNÚctx_columns©
r   r   r    r!   r1   r2   r3   r4   r"   r#   Ú.©r   r   r    r!   r1   r2   r3   r4   )rÒ   ZnlevelsrÍ   ÚNotImplementedErrorÚ_has_aliasesrÌ   ÚformatrÏ   r   rd   rÖ   r   rÃ   Ú	enumeraterà   r   rÚ   ÚzipÚlevelsÚcodesÚtakerc   r/   rÝ   rÔ   rÑ   r>   Úmapr   rÓ   )r'   rÒ   Ú
level_strsÚlevel_lengthsÚ	coloffsetÚlnumr“   Úspansrë   Úlevel_codesÚvaluesÚiÚspan_valr"   r#   r:   r(   r(   r)   Ú_format_header_mi(  sr    ÿÿü
ÿ


ö
øz ExcelFormatter._format_header_mic                 c  sÔ   | j s| jrÐd}| jr8d}t| jjtƒr8t| jjd ƒ}| j}| j r�tt	| jƒ| _t| jƒt| jƒkrŠt
dt| jƒ› dt| jƒ› d�ƒ‚n| j}t|ƒD ]6\}}t| j|| || jt| jdd ƒd|| jd�V  q˜d S )Nr   rO   zWriting z cols but got z aliasesrâ   rå   )rç   rÌ   rÍ   rd   rÖ   r   rÃ   rÒ   r
   r	   rÄ   ré   r/   rÓ   rÚ   rÝ   rÔ   rÑ   )r'   rñ   ZcolnamesÚcolindexZcolnamer(   r(   r)   Ú_format_header_regularm  s6    ÿÿøz%ExcelFormatter._format_header_regularc                   s˜   t ˆ jtƒrˆ  ¡ }nˆ  ¡ }d}ˆ jjjrŒdd„ ˆ jjjD ƒdgtˆ jƒ  }t	dd„ t
dd„ |ƒƒrŒ‡ fdd	„t|ƒD ƒ}ˆ  jd
7  _t ||¡S )Nr(   c                 S  s   g | ]}|d ur|nd‘qS ©Nr§   r(   )r8   Úxr(   r(   r)   r;   •  r<   z1ExcelFormatter._format_header.<locals>.<listcomp>r§   c                 S  s   | o|S r&   r(   )rü   Úyr(   r(   r)   Ú<lambda>˜  r<   z/ExcelFormatter._format_header.<locals>.<lambda>c                 S  s   | dkS rû   r(   )rü   r(   r(   r)   rþ   ˜  r<   c                 3  s$   | ]\}}t ˆ j||ˆ jƒV  qd S r&   )r   rÓ   rÚ   )r8   rù   r    rÙ   r(   r)   Ú	<genexpr>›  s   ÿz0ExcelFormatter._format_header.<locals>.<genexpr>rO   )rd   rÒ   r   rø   rú   rÖ   rÍ   rà   rÃ   r   rî   ré   rÓ   Ú	itertoolsÚchain)r'   ÚgenZgen2r   r(   rÙ   r)   Ú_format_header�  s     

ÿþ
þzExcelFormatter._format_headerc                 C  s"   t | jjtƒr|  ¡ S |  ¡ S d S r&   )rd   rÖ   rÍ   r   Ú_format_hierarchical_rowsÚ_format_regular_rowsrÙ   r(   r(   r)   Ú_format_body¢  s    zExcelFormatter._format_bodyc                 c  s2  | j s| jr|  jd7  _| j�r| jrJt| jtttj	t
fƒrJ| jd }n(| jrdt| jtƒrd| j}n| jjjd }t| jtƒrŒ|  jd7  _|r²| jdur²t| jd d|| jƒV  | jj}t| jjtƒrÔ| jj ¡ }t|ƒD ]6\}}t| j| d|| jt| jdd ƒ|d| jd�V  qÜd}nd}|  |¡E d H  d S )NrO   r   FÚ	ctx_indexrå   )rç   rÌ   rÓ   rÍ   rÎ   rd   rb   ÚtupleÚnpÚndarrayr   r7   rÖ   rà   rÒ   r   r   rÚ   r   Zto_timestampré   r/   rÝ   rÔ   rÑ   Ú_generate_body)r'   rÎ   Zindex_valuesÚidxZidxvalrñ   r(   r(   r)   r  ¨  s>    ÿø

z#ExcelFormatter._format_regular_rowsc                 c  sú  | j s| jr|  jd7  _d}| j�ræ| jjj}| jrRt| jtt	t
jtfƒrR| j}t| jtƒrr| jrr|  jd7  _tj|Ž r°| jdur°t|ƒD ] \}}t| jd ||| jƒV  qŽ| j�rˆ| jjjdddd�}t|ƒ}t|| jjj| jjjƒD ]˜\}}}	|j|	|j|jd�}
| ¡ D ]h\}}d\}}|dk�rB| j| | d }|}t| j| ||
| | jt| j dd ƒ||| j!||d	�
V  �q|d7 }qìn^t| jjŽ D ]P}t|ƒD ]8\}}t| j| ||| jt| j dd ƒ||| j!d
�V  �q |d7 }�q”|  "|¡E d H  d S )NrO   r   FTrß   )Z
allow_fillZ
fill_valuerá   r  rã   rå   )#rç   rÌ   rÓ   rÍ   rÖ   rà   rÎ   rd   rb   r  r	  r
  r   rÒ   r   rÏ   ÚcomZany_not_noneré   r   rÚ   rè   r   rê   rë   rì   rí   Z_can_hold_naZ	_na_valuerc   r/   rÝ   rÔ   rÑ   r  )r'   ZgcolidxZindex_labelsZcidxr“   rï   rð   ró   rë   rô   rõ   rö   r÷   r"   r#   Zindexcolvalsr  Zindexcolvalr(   r(   r)   r  Ö  sv    
ÿÿÿý
öø
z(ExcelFormatter._format_hierarchical_rowsc                 C  s
   t | jƒS )z1Whether the aliases for column names are present.)r   rÌ   rÙ   r(   r(   r)   rç   '  s    zExcelFormatter._has_aliasesr$   )rñ   rW   c                 c  sn   t t| jƒƒD ]Z}| jjd d …|f }t|ƒD ]8\}}t| j| || |d t| j	dd ƒ||| j
d�V  q.qd S )NÚctxrå   )ÚrangerÃ   rÒ   rÖ   Zilocré   r/   rÓ   rÝ   rÔ   rÑ   )r'   rñ   ZcolidxZseriesrö   r    r(   r(   r)   r  ,  s    øzExcelFormatter._generate_bodyc                 c  s2   t  |  ¡ |  ¡ ¡D ]}|  |j¡|_|V  qd S r&   )r   r  r  r  rÞ   r    )r'   Úcellr(   r(   r)   Úget_formatted_cells<  s    z"ExcelFormatter.get_formatted_cellsÚstorage_options)r  ÚSheet1r   r   c              	   C  s²   ddl m} | jj\}	}
|	| jks,|
| jkrPtd|	› d|
› d| j› d| j› �ƒ‚|  ¡ }t||ƒrhd}n||||d�}d}z$|j	|||||d	� W |r®| 
¡  n|r¬| 
¡  0 d
S )a#  
        writer : path-like, file-like, or ExcelWriter object
            File path or existing ExcelWriter
        sheet_name : str, default 'Sheet1'
            Name of sheet which will contain DataFrame
        startrow :
            upper left cell row to dump data frame
        startcol :
            upper left cell column to dump data frame
        freeze_panes : tuple of integer (length 2), default None
            Specifies the one-based bottommost row and rightmost column that
            is to be frozen
        engine : string, default None
            write engine to use if writer is a path - you can also set this
            via the options ``io.excel.xlsx.writer``, ``io.excel.xls.writer``,
            and ``io.excel.xlsm.writer``.

            .. deprecated:: 1.2.0

                As the `xlwt <https://pypi.org/project/xlwt/>`__ package is no longer
                maintained, the ``xlwt`` engine will be removed in a future
                version of pandas.

        {storage_options}

            .. versionadded:: 1.2.0
        r   )ÚExcelWriterz-This sheet is too large! Your sheet size is: z, z Max sheet size is: F)Úenginer  T)ÚstartrowÚstartcolÚfreeze_panesN)Zpandas.io.excelr  rÖ   ÚshapeÚmax_rowsÚmax_colsrÄ   r  rd   Zwrite_cellsÚclose)r'   ÚwriterZ
sheet_namer  r  r  r  r  r  Znum_rowsZnum_colsZformatted_cellsZ	need_saver(   r(   r)   ÚwriteA  s:    &ÿÿÿ
ÿû	
ÿzExcelFormatter.write)	r§   NNTTNFrÈ   N)r  r   r   NNN)r+   r,   r-   rÅ   r  r  r*   ÚpropertyrÚ   rÞ   rø   rú   r  r  r  r  rç   r  r  r   r   r  r(   r(   r(   r)   rÇ   ·  sD             õ .
E .Q      ørÇ   )6rÅ   Ú
__future__r   Ú	functoolsr   r   r¥   Útypingr   r   r   r   r   r	   r
   rµ   Únumpyr	  Zpandas._libs.libr   Zpandas._typingr   r   Zpandas.util._decoratorsr   Zpandas.core.dtypesr   Zpandas.core.dtypes.commonr   r   Zpandasr   r   r   r   Zpandas.core.commonÚcoreÚcommonr  Zpandas.core.shared_docsr   Zpandas.io.formats._color_datar   Zpandas.io.formats.cssr   r   Zpandas.io.formats.formatr   Zpandas.io.formats.printingr   r   r/   rE   rÇ   r(   r(   r(   r)   Ú<module>   s2   $	  Y