U
    ÎZjÎ|  ã                   @  s\  d Z ddlmZ ddlmZ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 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/m0Z0 ddl1m2Z2 ddl3m4Z4 G dd„ dƒZ5G dd„ de5ƒZ6G dd„ dƒZ7G dd„ dƒZ8dS )zC
Utilities for conversion to writer-agnostic Excel representation.
é    )Úannotations)Ú	lru_cacheÚreduceN)ÚAnyÚCallableÚHashableÚIterableÚMappingÚSequenceÚcast)Úis_list_like)Ú
IndexLabelÚStorageOptions)Údoc)Úfind_stack_level)Ú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d„ZdS )
Ú	ExcelCell©ÚrowÚcolÚvalÚstyleÚ
mergestartÚmergeendNÚintú
int | NoneÚNone)r    r!   r$   r%   Úreturnc                 C  s(   || _ || _|| _|| _|| _|| _d S ©Nr   )Úselfr    r!   r"   r#   r$   r%   © r,   úZ/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/pandas/io/formats/excel.pyÚ__init__=   s    	zExcelCell.__init__)NNN)Ú__name__Ú
__module__Ú__qualname__Z
__fields__Ú	__slots__r.   r,   r,   r,   r-   r   9   s      ùr   c                	      s0   e Zd Zd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 | Noner(   )r    r!   r#   Ú
css_stylesÚcss_rowÚcss_colÚcss_converterr)   c	                   sR   |r2|r2dd„ |||f D ƒ}
t |
 ¡ ƒ}||ƒ}tƒ jf ||||dœ|	—Ž d S )Nc                 S  s   i | ]\}}|  ¡ |“qS r,   )Úlower)Ú.0Úpropr"   r,   r,   r-   Ú
<dictcomp>]   s     z)CssExcelCell.__init__.<locals>.<dictcomp>©r    r!   r"   r#   )Ú	frozensetÚitemsÚsuperr.   )r+   r    r!   r"   r#   r5   r6   r7   r8   ÚkwargsZdeclaration_dictZunique_declarations©Ú	__class__r,   r-   r.   O   s    
ÿzCssExcelCell.__init__)r/   r0   r1   r.   Ú__classcell__r,   r,   rB   r-   r3   N   s   r3   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< dcdddœdd„Zeƒ Zedd�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-d.„Zddd/œd0d1„Zdd2d3œd4d5„Zd6d2d7œd8d9„Zdd:œd;d<„Zdd=dœd>d?„Zdd@dœdAdB„Zdd&dœdCdD„Zdd&dœdEdF„ZddGdœdHdI„ZdGddJœdKdL„Zdd&dœdMdN„Z ddGdœdOdP„Z!ddQdœdRdS„Z"dTdUœdVdW„Z#dddXœdYdZ„Z$d6d[d\œd]d^„Z%d6d6d\œd_d`„Z&d6d[d\œdadb„Z'dS )dÚ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 | Noner(   )rS   r)   c                 C  s    |d k	r|   |¡| _nd | _d S r*   )Úcompute_cssrS   )r+   rS   r,   r,   r-   r.   ¨   s    zCSSToExcelConverter.__init__)Úmaxsizez str | frozenset[tuple[str, str]]zdict[str, dict[str, str]])Údeclarationsr)   c                 C  s   |   || j¡}|  |¡S )aå  
        Convert CSS declarations to ExcelWriter style.

        Parameters
        ----------
        declarations : str | frozenset[tuple[str, str]]
            CSS string or set of CSS declaration tuples.
            e.g. "font-weight: bold; background: blue" or
            {("font-weight", "bold"), ("background", "blue")}

        Returns
        -------
        xlstyle : dict
            A style as interpreted by ExcelWriter when found in
            ExcelCell.style.
        )rU   rS   Úbuild_xlstyle)r+   rW   Ú
propertiesr,   r,   r-   Ú__call__°   s    zCSSToExcelConverter.__call__zMapping[str, str])Úpropsr)   c                   sN   |   |¡|  |¡|  |¡|  |¡|  |¡dœ}dddœ‡ fdd„‰ ˆ |ƒ |S )N)Ú	alignmentÚborderÚfillÚfontZnumber_formatúdict[str, str | None]r(   )Údr)   c                   sF   t |  ¡ ƒD ]4\}}|dkr$| |= qt|tƒrˆ |ƒ |s| |= qdS )z4Remove key where value is None, through nested dictsN)Úlistr?   Ú
isinstanceÚdict)ra   ÚkÚv©Ú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 krd S t|d dkƒ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                   sf   i | ]^}|ˆ  ˆ  d |› d�¡ˆ  d |› d�¡ˆ ˆ  d |› d�¡¡¡ˆ ˆ  d |› d�¡¡dœ“qS )zborder-z-stylez-widthz-color)r#   Úcolor)Ú_border_stylerr   Úcolor_to_excel)r:   Zside©r[   r+   r,   r-   r<   õ   s   	øýúz4CSSToExcelConverter.build_border.<locals>.<dictcomp>©rF   ÚrightrH   Úleftr,   ru   r,   r|   r-   rj   ò   s    	÷z CSSToExcelConverter.build_border)r#   Úwidthry   c                 C  s¦   |d kr|d kr|d krd S |d kr0|d kr0dS |dks@|dkrDdS |   |¡}|d krZdS |dkrf|S |dkrrdS |dkrŠ|dkr†dS dS |dkr¢|dkrždS d	S d S )
NÚnoneZhidden)NZgrooveZridgeZinsetZoutsetÚsolidÚdoubleZdotted)ZhairÚthinZmediumDashDotDotZdashedZmediumDashed)Ú_get_width_name)r+   r#   r€   ry   Z
width_namer,   r,   r-   rz     s*    
z!CSSToExcelConverter._border_style)Úwidth_inputr)   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€   r)   c                 C  s   |d krd}|   |¡S )NZ2pt)Ú_pt_to_float)r+   r€   r,   r,   r-   r‡   8  s    z#CSSToExcelConverter._width_to_floatÚstr)Ú	pt_stringr)   c                 C  s   |  d¡st‚t| d¡ƒS )NÚpt)ÚendswithÚAssertionErrorrˆ   Úrstrip)r+   r‹   r,   r,   r-   r‰   =  s    z CSSToExcelConverter._pt_to_float)r[   c                 C  s&   |  d¡}|dk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   A  s    
zCSSToExcelConverter.build_fillr`   c                 C  s,   |  d¡}t|tƒr | dd¡n|}d|iS )Nznumber-formatõ   Â§ú;Zformat_code)rr   rc   rŠ   Úreplace)r+   r[   Úfcr,   r,   r-   rm   H  s    
z'CSSToExcelConverter.build_number_formatz$dict[str, bool | float | str | None]c                 C  sv   |   |¡}|  |¡}|r |d nd |  |¡|  |¡|  |¡|  |¡d|krNdnd d|k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   M  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Ÿ   _  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    e  s    
z"CSSToExcelConverter._get_is_italiczSequence[str]c                 C  s"   |  d¡}|d k	r| ¡ S dS d S )Nztext-decorationr,   )rr   Úsplit)r+   r[   r£   r,   r,   r-   rœ   k  s    
z#CSSToExcelConverter._get_decoration)r£   r)   c                 C  s   d|krdS d S )Nr•   r–   r,   )r+   r£   r,   r,   r-   Ú_get_underliner  s    z"CSSToExcelConverter._get_underlinec                 C  s    d|krt t d|d ¡ƒS d S )Nztext-shadowz^[^#(]*[1-9])rx   ÚreÚsearchru   r,   r,   r-   r¡   w  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   r“   ÚstripÚappend)r+   r[   Zfont_names_tmpr¢   r—   r,   r,   r-   r›   |  s    	
öz#CSSToExcelConverter._get_font_nameszfloat | Nonec                 C  s    |  d¡}|d kr|S |  |¡S )Nz	font-size)rr   r‰   )r+   r[   r™   r,   r,   r-   rž   –  s    
z"CSSToExcelConverter._get_font_sizer'   ©r)   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"   r)   c                 C  sb   |d krd S |   |¡r |  |¡S z| j| W S  tk
r\   tjdt|ƒ› �ttƒ d� Y nX d S )NzUnhandled color format: )Ú
stacklevel)	Ú_is_hex_colorÚ_convert_hex_to_excelÚNAMED_COLORSÚKeyErrorÚwarningsÚwarnÚreprr   r   ©r+   r"   r,   r,   r-   r{   ¥  s    

ýz"CSSToExcelConverter.color_to_excelrx   )Úcolor_stringr)   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/   r0   r1   Ú__doc__r   r·   rv   r¤   r¦   r³   Ú__annotations__r.   r   rU   r   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   g   sz   
úóýü-
	rE   c                   @  s  e Zd ZdZdZdZd8d	d
dddddd	dddœ
dd„Zeddœ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/ d0�d9d	d)d)d3d
d4dd5œd6d7„ƒZdS ):Ú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ÚinfrŠ   rT   zSequence[Hashable] | NonezSequence[Hashable] | boolrx   zIndexLabel | Noner4   r(   )
Úna_repÚfloat_formatÚcolsÚheaderÚindexÚindex_labelÚmerge_cellsÚinf_repÚstyle_converterr)   c                 C  sà   d| _ || _t|tƒsB|| _| j ¡  |j}|
d kr:tƒ }
|
| _nd | _d | _|| _	|d k	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Í   rc   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__z dict[str, dict[str, str | bool]]r²   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 k	rdt	| j| ƒ}t
|dd ƒd k	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]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#   r5   r6   r7   r8   r$   r%   Ú.©r    r!   r"   r#   r5   r6   r7   r8   )rÖ   ZnlevelsrÑ   ÚNotImplementedErrorÚ_has_aliasesrÐ   ÚformatrÓ   r   rc   rÚ   r   rÇ   Ú	enumeraterä   r   rÞ   ÚzipÚlevelsÚcodesÚtaker?   r3   rá   rØ   rÕ   ÚjoinÚmapr   r×   )r+   rÖ   Ú
level_strsÚlevel_lengthsÚ	coloffsetÚlnumr—   Úspansrï   Úlevel_codesÚvaluesÚiÚspan_valr$   r%   rf   r,   r,   r-   Ú_format_header_mi?  sv    ÿ  ÿü
ÿ


ö
øz ExcelFormatter._format_header_mic                 c  sÒ   | j s| jrÎd}| jr6d}t| jjtƒr6t| jjjƒ}| 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Ñ   rc   rÚ   r   rÇ   rä   rÖ   r   r
   rÈ   rí   r3   r×   rÞ   rá   rØ   rÕ   )r+   rö   ZcolnamesÚcolindexZcolnamer,   r,   r-   Ú_format_header_regular„  s2    ÿø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 k	r|nd‘qS ©Nr«   r,   )r:   Úxr,   r,   r-   Ú
<listcomp>¯  s     z1ExcelFormatter._format_header.<locals>.<listcomp>r«   c                 S  s   | o|S r*   r,   )r  Úyr,   r,   r-   Ú<lambda>²  ó    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Þ   )r:   rþ   r"   rÝ   r,   r-   Ú	<genexpr>³  s   ÿz0ExcelFormatter._format_header.<locals>.<genexpr>rO   )rc   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*   )rc   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k	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Ò   rc   rb   ÚtupleÚnpÚndarrayr   rŠ   rÚ   rä   rÖ   r   r   rÞ   r   Zto_timestamprí   r3   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k	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Ò   rc   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_valuer?   r3   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  î  s€    
 ÿ  ÿ  ÿý
öø
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ö   r)   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í   r3   r×   rá   rØ   rÕ   )r+   rö   ZcolidxZseriesrû   r"   r,   r,   r-   r  D  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_cellsT  s    z"ExcelFormatter.get_formatted_cellsÚstorage_options)r  ÚSheet1r   ztuple[int, int] | Noner   )Ú
sheet_nameÚstartrowÚstartcolÚfreeze_panesÚenginer  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 5 |r | 	¡  X 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)r  r  T)r  r  r  N)Zpandas.io.excelr   rÚ   ÚshapeÚmax_rowsÚmax_colsrÈ   r  rc   ÚcloseZ_write_cells)r+   Úwriterr  r  r  r  r  r  r   Znum_rowsZnum_colsZformatted_cellsZ	need_saver,   r,   r-   ÚwriteY  s2    &ÿ
  ÿû
	zExcelFormatter.write)	r«   NNTTNFrÌ   N)r  r   r   NNN)r/   r0   r1   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Ë   )9rÉ   Ú
__future__r   Ú	functoolsr   r   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.util._exceptionsr   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   r3   rE   rË   r,   r,   r,   r-   Ú<module>   s4   $	  i