
    *g                       d Z ddlmZ ddlmZmZmZmZ ddlZddl	Z	ddl
Z
ddl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 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$c 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 erddl2m3Z3m4Z4m5Z5m6Z6 ddlm7Z7  G d d      Z8 G d de8      Z9 G d d      Z: G d d      Z;y)zC
Utilities for conversion to writer-agnostic Excel representation.
    )annotations)HashableIterableMappingSequenceN)TYPE_CHECKINGAnyCallablecast)is_list_like)doc)find_stack_level)missing)is_float	is_scalar)	DataFrameIndex
MultiIndexPeriodIndex)_shared_docs)CSS4_COLORS)CSSResolver
CSSWarning)get_level_lengths)pprint_thing)FilePath
IndexLabelStorageOptionsWriteExcelBufferExcelWriterc                  6    e Zd ZdZeZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZy)	ExcelCellrowcolvalstyle
mergestartmergeendNc                X    || _         || _        || _        || _        || _        || _        y Nr$   )selfr%   r&   r'   r(   r)   r*   s          a/var/www/html/articles-backend/trend/venv/lib/python3.12/site-packages/pandas/io/formats/excel.py__init__zExcelCell.__init__C   s.     
$     )NNN)
r%   intr&   r1   r)   
int | Noner*   r2   returnNone)__name__
__module____qualname__
__fields__	__slots__r/    r0   r.   r#   r#   ?   sL    IJI !%#!! ! ! ! 
!r0   r#   c                  @     e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ xZS )CssExcelCellc	                    |rK|rI|||f   D 
ci c]  \  }
}|
j                         | }}
}t        |j                               } ||      }t        |   d|||d|	 y c c}}
w )Nr%   r&   r'   r(   r:   )lower	frozensetitemssuperr/   )r-   r%   r&   r'   r(   
css_stylescss_rowcss_colcss_converterkwargspropdeclaration_dictunique_declarations	__class__s                r.   r/   zCssExcelCell.__init__U   s     - 4>gw>N3O &/dC

c!    #,,<,B,B,D"E!"56EJScs%J6J s   A$)r%   r1   r&   r1   r(   dict | NonerC   z3dict[tuple[int, int], list[tuple[str, Any]]] | NonerD   r1   rE   r1   rF   Callable | Noner3   r4   )r5   r6   r7   r/   __classcell__)rK   s   @r.   r<   r<   T   sf    KK K
 K HK K K 'K 
K Kr0   r<   c                     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D  ci c]  }|j                         | c}} Zded<   d.d/dZ e       Z	 	 	 	 d0dZ	 	 	 	 d0dZd1dZd2dZd3dZd4dZ	 	 	 	 d5dZd6dZd7dZd8dZd9dZd:dZd;d Z	 	 	 	 d<d!Zd4d"Zd4d#Zd=d$Z d>d%Z!d4d&Z"d=d'Z#d?d(Z$d@d)Z%dAd*Z&dBd+Z'dCd,Z(dBd-Z)yc c}} w )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)rQ   ztext-topmiddlebaselinerS   ztext-bottomTF)boldbolder600700800900normallighter100200300400500)r\   italicoblique            )serifz
sans-serifcursivefantasy)
dashedmediumDashDot
dashDotDothairdottedmediumDashDotDotdoubledashDotslantDashDotmediumDashedzdict[str, str] | None	inheritedNc                    || j                  |      | _        nd | _        t        j                  | j                        | _        y r,   )compute_cssrv   	functoolscache_call_uncached_call_cached)r-   rv   s     r.   r/   zCSSToExcelConverter.__init__   s:     !--i8DN!DN &OOD,?,?@r0   c                $    | 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.
        )r|   )r-   declarationss     r.   __call__zCSSToExcelConverter.__call__   s    &   ..r0   c                \    | j                  || j                        }| j                  |      S r,   )rx   rv   build_xlstyle)r-   r~   
propertiess      r.   r{   z"CSSToExcelConverter._call_uncached   s+     %%lDNNC
!!*--r0   c                    | j                  |      | j                  |      | j                  |      | j                  |      | j	                  |      d}dfd |       |S )N)	alignmentborderfillfontnumber_formatc                    t        | j                               D ]*  \  }}|| |= t        |t              s |       |r(| |= , y)z4Remove key where value is None, through nested dictsN)listrA   
isinstancedict)dkvremove_nones      r.   r   z6CSSToExcelConverter.build_xlstyle.<locals>.remove_none   sG    QWWY !19!4(NaD!r0   )r   dict[str, str | None]r3   r4   )build_alignmentbuild_border
build_fill
build_fontbuild_number_format)r-   propsoutr   s      @r.   r   z!CSSToExcelConverter.build_xlstyle   s`    --e4''.OOE*OOE*!55e<
	! 	C
r0   c                h    |j                  d      | j                  |      | j                  |      dS )Nz
text-align)
horizontalvertical	wrap_text)get_get_vertical_alignment_get_is_wrap_textr-   r   s     r.   r   z#CSSToExcelConverter.build_alignment   s6      ))L144U;//6
 	
r0   c                `    |j                  d      }|r| j                  j                  |      S y )Nzvertical-align)r   VERTICAL_MAP)r-   r   vertical_aligns      r.   r   z+CSSToExcelConverter._get_vertical_alignment  s.    #34$$((88r0   c                F    |j                  d      y t        |d   dv      S )Nzwhite-space)nowrapprezpre-line)r   boolr   s     r.   r   z%CSSToExcelConverter._get_is_wrap_text  s*    99]#+E-(0MMNNr0   c                *   dD ci c]  }|| j                  |j                  d| d      |j                  d| d      | j                  |j                  d| d                  | j                  |j                  d| d            d c}S c c}w )NrQ   rightrS   leftzborder-z-stylez-widthz-color)r(   color)_border_styler   color_to_excel)r-   r   sides      r.   r   z CSSToExcelConverter.build_border  s     ;

  ++IIvV45IIvV45''		GD62H(IJ
 ,,UYYf7M-NO 

 
	
 

s   BBc                ,   |||y ||y|dv ry| j                  |      }|y|dv r|S |dk(  ry|dk(  r|dv ryy|dk(  r|dv ryy	|| j                  v r| j                  |   S t        j                  d
t	        |       t
        t                      y)Nnone)r   hidden)Ngrooveridgeinsetoutsetsolidrr   rp   )ro   thinrq   rl   ru   zUnhandled border style format: 
stacklevel)_get_width_nameBORDER_STYLE_MAPwarningswarnreprr   r   )r-   r(   widthr   
width_names        r.   r   z!CSSToExcelConverter._border_style  s     =U]u}=U]&&))%0
IIHH--%H--!d+++((//MM1$u+?+-
 r0   c                J    | j                  |      }|dk  ry |dk  ry|dk  ryy)Ngh㈵>g?r   gffffff@mediumthick)_width_to_float)r-   width_inputr   s      r.   r   z#CSSToExcelConverter._get_width_nameV  s3    $$[14<S[S[r0   c                ,    |d}| j                  |      S )N2pt)_pt_to_float)r-   r   s     r.   r   z#CSSToExcelConverter._width_to_float`  s    =E  ''r0   c                \    |j                  d      sJ t        |j                  d            S )Npt)endswithfloatrstrip)r-   	pt_strings     r.   r   z CSSToExcelConverter._pt_to_floate  s,    !!$'''Y%%d+,,r0   c                V    |j                  d      }|dvr| j                  |      ddS y )Nzbackground-color)Ntransparentr   r   )fgColorpatternType)r   r   )r-   r   
fill_colors      r.   r   zCSSToExcelConverter.build_filli  s7     YY12
::#22:>wWW ;r0   c                t    |j                  d      }t        |t              r|j                  dd      n|}d|iS )Nznumber-format   §;format_code)r   r   strreplace)r-   r   fcs      r.   r   z'CSSToExcelConverter.build_number_formatp  s6    YY'&0S&9RZZc"rr""r0   c                V   | j                  |      }| j                  |      }|r|d   nd | j                  |      | j                  |      | j	                  |      | j                  |      d|v rdnd d|v xs d | j                  |j                  d            | j                  |      d	S )Nr   	underlinesinglezline-throughr   )	namefamilysizerV   rc   r   striker   shadow)	_get_font_names_get_decoration_select_font_family_get_font_size_get_is_bold_get_is_italicr   r   _get_shadow)r-   r   
font_names
decorations       r.   r   zCSSToExcelConverter.build_fontu  s     ))%0
))%0
%/JqMT..z:''.%%e,))%0&1Z&?(T%3<((7);<&&u-
 	
r0   c                `    |j                  d      }|r| j                  j                  |      S y )Nzfont-weight)r   BOLD_MAP)r-   r   weights      r.   r   z CSSToExcelConverter._get_is_bold  s+    =)==$$V,,r0   c                `    |j                  d      }|r| j                  j                  |      S y )Nz
font-style)r   
ITALIC_MAP)r-   r   
font_styles      r.   r   z"CSSToExcelConverter._get_is_italic  s+    YY|,
??&&z22r0   c                J    |j                  d      }||j                         S y)Nztext-decorationr:   )r   split)r-   r   r   s      r.   r   z#CSSToExcelConverter._get_decoration  s)    YY01
!##%%r0   c                    d|v ryy )Nr   r   r:   )r-   r   s     r.   _get_underlinez"CSSToExcelConverter._get_underline  s    *$r0   c                P    d|v r"t        t        j                  d|d               S y )Nztext-shadowz^[^#(]*[1-9])r   researchr   s     r.   r   zCSSToExcelConverter._get_shadow  s(    E!		.%2FGHHr0   c                $   t        j                  d|j                  dd            }g }|D ]b  }|d d dk(  r|dd j                  dd      }n.|d d dk(  r|dd j                  d	d      }n|j	                         }|sR|j                  |       d |S )
Nz(?x)
            (
            "(?:[^"]|\\")+"
            |
            '(?:[^']|\\')+'
            |
            [^'",]+
            )(?=,|\s*$)
        zfont-family re   "z\"'z\')r   findallr   r   stripappend)r-   r   font_names_tmpr   r   s        r.   r   z#CSSToExcelConverter._get_font_names  s     IImR(
 
" 	(DBQx3Abz))%5bqSAbz))%5zz|!!$'	( r0   c                N    |j                  d      }||S | j                  |      S )Nz	font-size)r   r   )r-   r   r   s      r.   r   z"CSSToExcelConverter._get_font_size  s+    yy%<K  &&r0   c                X    d }|D ]"  }| j                   j                  |      }|s! |S  |S r,   )
FAMILY_MAPr   )r-   r   r   r   s       r.   r   z'CSSToExcelConverter._select_font_family  s<     	D__((.F	
 r0   c                    |y | j                  |      r| j                  |      S 	 | j                  |   S # t        $ r3 t	        j
                  dt        |       t        t                      Y y w xY w)NzUnhandled color format: r   )	_is_hex_color_convert_hex_to_excelNAMED_COLORSKeyErrorr   r   r   r   r   r-   r'   s     r.   r   z"CSSToExcelConverter.color_to_excel  sv    ;c"--c22	$$S)) 	MM*49+6+-
 	s   6 9A21A2c                6    t        |j                  d            S )N#)r   
startswith)r-   color_strings     r.   r  z!CSSToExcelConverter._is_hex_color  s    L++C011r0   c                    |j                  d      }| j                  |      r(|d   dz  |d   dz  z   |d   dz  z   j                         S |j                         S )Nr  r   rf   re   )lstrip_is_shorthand_colorupperr-   r  codes      r.   r  z)CSSToExcelConverter._convert_hex_to_excel  s]    ""3'##L1GaK$q'A+-Q!;BBDD::<r0   c                |    |j                  d      }t        |      dk(  ryt        |      dk(  ryt        d|       )zcCheck if color code is shorthand.

        #FFF is a shorthand as opposed to full #FFFFFF.
        r     T   FzUnexpected color )r  len
ValueErrorr  s      r.   r  z'CSSToExcelConverter._is_shorthand_color  sC    
 ""3't9>Y!^0?@@r0   r,   )rv   
str | Noner3   r4   )r~   z str | frozenset[tuple[str, str]]r3   dict[str, dict[str, str]])r   Mapping[str, str]r3   r  )r   r  r3   zdict[str, bool | str | None])r   r  r3   r  )r   r  r3   zbool | None)r   r  r3   z dict[str, dict[str, str | None]])r(   r  r   r  r   r  )r   r  r3   r  )r   r  r3   r   )r   r   r3   r   )r   r  )r   r  r3   r   )r   r  r3   z$dict[str, bool | float | str | None])r   r  r3   Sequence[str])r   r  r3   r  )r   r  r3   zfloat | None)r   r  r3   r2   )r'   r  r3   r  )r  r   r3   r   )r  r   r3   r   )*r5   r6   r7   __doc__r   r	  r   r   r   r  r?   r   __annotations__r/   r   rx   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  ).0r(   s   00r.   rP   rP   m   s   " L L H" J 	J
 	u( %$A -K/</	"/*.<.	".0
O

&
	)
5n(
-X#

&
	-
$

4'"2 AA
s   CrP   c                     e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       Zd Z	ddZ
dd	Zdd
ZddZddZddZedd       ZddZddZ eed         	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Zy)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 @  Nc                   d| _         || _        t        |t              sA|| _        | j                  j                          |j                  }|

t               }
|
| _        nd | _        d | _        || _	        |t        t        |      j                  |j                              st        d      t        t        |      j                  |j                              t        t        |            k7  rt        d      |j!                  |      | _	        | j                  j                  | _        || _        || _        || _        || _        || _        |	| _        y )Nr   z,passes columns are not ALL present dataframez.Not all names specified in 'columns' are found)columns)
rowcounterna_repr   r   styler_computedatarP   style_converterdfr  r   intersectionr%  r
  setreindexfloat_formatindexindex_labelheadermerge_cellsinf_rep)r-   r,  r'  r0  colsr3  r1  r2  r4  r5  r+  s              r.   r/   zExcelFormatter.__init__  s    "i(DKKK  "B&"5"74CD DK#'D uT{//

;<MNN5;++BJJ78CD	NJOPPjjj.DGww(
&&r0   c                "    ddidddddddddS )	NrV   Tr   r   rR   rQ   )r   r   )r   bordersr   r:   r-   s    r.   header_stylezExcelFormatter.header_styleG  s0     TN 	 )1eD	
 		
r0   c                |   t        |      r"t        j                  |      r| j                  }nvt	        |      rkt        j
                  |      r| j                  }nIt        j                  |      rd| j                   }n$| j                  t        | j                  |z        }t        |dd       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   isnar'  r   isposinf_scalarr5  isneginf_scalarr0  r   getattrr  r  s     r.   _format_valuezExcelFormatter._format_valueT  s    S>gll3/++Cc]&&s+ll((-$,,("".D--343$'3@ 
 
r0   c              #    K   | j                   j                  dkD  r| j                  st        d      | j                  s| j
                  sy | j                   }|j                  | j                  d      }t        |      }d}d}| j                  rIt        | j                  j                  t              r%t        | j                  j                  d         dz
  }| j                  rt        |j                        D ]   \  }}t        |||| j                          " t        t#        ||j$                  |j&                              D ]  \  }\  }}}	|j)                  |	      }
|j+                         D ]b  \  }}d\  }}|dkD  r
|||z   |z   }}t-        |||z   dz   |
|   | j                   t/        | j0                  dd       ||| j2                  ||	
       d  || _        y t        t#        |       D ]h  \  }}
d
j5                  t7        t8        |
            }t-        |||z   dz   || j                   t/        | j0                  dd       ||| j2                         j || _        y w)Nre   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.Fsparsifyinclude_namesr   r>   NNctx_columns
r%   r&   r'   r(   rC   rD   rE   rF   r)   r*   .r%   r&   r'   r(   rC   rD   rE   rF   )r%  nlevelsr1  NotImplementedError_has_aliasesr3  _format_multir4  r   r   r,  r   r  	enumeratenamesr#   r:  ziplevelscodestakerA   r<   rA  r(  r+  joinmapr   r&  )r-   r%  
level_strslevel_lengths	coloffsetlnumr   spansrS  level_codesvaluesispan_valr)   r*   r   s                   r.   _format_header_miz ExcelFormatter._format_header_mif  s_    <<!#::)D 
 !!T[[,,**%%U + 

 **5	::*TWW]]J?DGGMM!,-1I'6 
d!++	  7@M7>>7==A7 22ufk  [1#(;;= KAx+5(J!|/3Y]X5MH
& %MA-"1I"//#*4;;t#L $ !&*&:&:#-!) 		F  'sJ'78 	6HHSv67"!A)++&t{{M4H "&"6"6	 	 s   I#I%c              #    K   | j                   s| j                  rbd}| j                  rOd}t        | j                  j                  t
              r)t        | j                  j                  j                        }| j                  }| j                   rt        t        | j                        | _        t        | j                        t        | j                        k7  r8t        dt        | j                         dt        | j                         d      | j                  }t        |      D ]P  \  }}t        | j                  ||z   || j                  t!        | j"                  dd       d|| j$                         R y y w)Nr   re   zWriting z cols but got z aliasesrH  rK  )rN  r3  r1  r   r,  r   r  rQ  r%  r   r   r  rP  r<   r&  r:  rA  r(  r+  )r-   rZ  colnamescolindexcolnames        r.   _format_header_regularz%ExcelFormatter._format_header_regular  s7    Izz	dggmmZ8 #DGGMM$7$7 8I||H  "8T[[9t{{#s4<<'88$"3t||#4"5 6##&t{{#3"4H>   ;;%.x%8 
!'" 9,++&t{{M4H$"&"6"6	 	
% !,s   E=E?c                    t         j                  t              r j                         }n j	                         }d} j
                  j                  j                  r j
                  j                  j                  D cg c]  }||nd
 c}dgt         j                        z  z   }t        j                  d d |D              r) fdt        |      D        } xj                  dz  c_        t        j                  ||      S c c}w )Nr:   r   c                    | xr |S r,   r:   )xys     r.   <lambda>z/ExcelFormatter._format_header.<locals>.<lambda>  s
    QW1 r0   c              3  &   K   | ]	  }|d k7    yw)r   Nr:   )r!  ri  s     r.   	<genexpr>z0ExcelFormatter._format_header.<locals>.<genexpr>  s     6L1qBw6Ls   c              3  h   K   | ])  \  }}t        j                  ||j                         + y wr,   )r#   r&  r:  )r!  rd  r'   r-   s      r.   rm  z0ExcelFormatter._format_header.<locals>.<genexpr>  s2      %# dooxd>O>OPs   /2re   )r   r%  r   ra  rf  r,  r1  rQ  r  ry   reducerP  r&  	itertoolschain)r-   gengen2ri  r%   s   `    r.   _format_headerzExcelFormatter._format_header  s     dllJ/((*C--/C$&77==7;ww}}7J7JK!12-KODLL!O" "C  46L6LM)23 1$sD)) Ls   Dc                    t        | j                  j                  t              r| j	                         S | j                         S r,   )r   r,  r1  r   _format_hierarchical_rows_format_regular_rowsr9  s    r.   _format_bodyzExcelFormatter._format_body  s2    dggmmZ01133,,..r0   c              #  P  K   | j                   s| j                  r| xj                  dz  c_        | j                  r| j                  rDt        | j                  t        t        t        j                  t        f      r| j                  d   }nV| j                  r't        | j                  t              r| j                  }n#| j                  j                  j                  d   }t        | j                  t              r| xj                  dz  c_        |r5| j                  dur't!        | j                  dz
  d|| j"                         | j                  j                  }t        | j                  j                  t$              r$| j                  j                  j'                         }t)        |      D ]P  \  }}t+        | j                  |z   d|| j"                  t-        | j.                  dd       |d| j0                         R d}nd}| j3                  |      E d {    y 7 w)Nre   r   F	ctx_indexrK  )rN  r3  r&  r1  r2  r   r   tuplenpndarrayr   r   r,  rQ  r%  r   r#   r:  r   to_timestamprP  r<   rA  r(  r+  _generate_body)r-   r2  index_valuesidxidxvalrZ  s         r.   rw  z#ExcelFormatter._format_regular_rows  s    OOq O :: J  4

E"B% #..q1!!j1A1A3&G".."ggmm11!4$,,
31$t{{%7! 3QTEVEVWW  77==L$''--5#ww}}99;(6 
V"#-++&t{{KF"&"6"6	 	
 II&&y111s   HH&H$H&c              #  T  K   | j                   s| j                  r| xj                  dz  c_        d}| j                  r| j                  j                  j
                  }| j                  r@t        | j                  t        t        t        j                  t        f      r| j                  }t        | j                  t              r!| j                  r| xj                  dz  c_        t!        j"                  | rH| j                  dur:t%        |      D ],  \  }}t'        | j                  dz
  ||| j(                         . | j                  r;| j                  j                  j+                  dd      }t-        |      }t/        || j                  j                  j0                  | j                  j                  j2                        D ]  \  }}}	|j5                  |	|j6                  |j8                        }
|j;                         D ]v  \  }}d\  }}|dkD  r| j                  |z   |z   dz
  }|}t=        | j                  |z   ||
|   | j(                  t?        | j@                  dd       ||| jB                  ||	
       x |dz  } nt/        | j                  j                   D ]e  }t%        |      D ]P  \  }}t=        | j                  |z   ||| j(                  t?        | j@                  dd       ||| jB                  
       R |dz  }g | jE                  |      E d {    y 7 w)Nre   r   FTrD  )
allow_fill
fill_valuerG  rz  rI  rK  )#rN  r3  r&  r1  r,  rQ  r2  r   r   r{  r|  r}  r   r%  r   r4  comany_not_nonerP  r#   r:  rO  r   rR  rS  rT  rU  _can_hold_na	_na_valuerA   r<   rA  r(  r+  r  )r-   gcolidxindex_labelscidxr   rX  rY  r\  rS  r]  r^  r_  r`  r)   r*   indexcolvalsr  indexcolvals                     r.   rv  z(ExcelFormatter._format_hierarchical_rows  s    OOq O::77==..LJ  4

E"B%  $// $,,
38H8H1$ .4;;e3K"+L"9 XJD$#DOOa$7tTEVEVWWX !WW]]88! 9 
 !2* =25!477==#7#79L9L3 !.E6; $[[##)#6#6#)#3#3 ) F (-{{} 8/9,
H#a<)-1)<x)G!)KJ'.H* $! 3 ' &q	"&"3"3'.t{{K'N$%$+*.*>*>'1%- " qLG5!< %($7 !L,5l,C 
([* $# 5 ' +"&"3"3'.t{{K'N$'$+*.*>*>	 	
 qLG! &&w///s   LL( L&!L(c                ,    t        | j                        S )z1Whether the aliases for column names are present.)r   r3  r9  s    r.   rN  zExcelFormatter._has_aliasesc  s     DKK((r0   c              #  :  K   t        t        | j                              D ]v  }| j                  j                  d d |f   }t        |      D ]I  \  }}t        | j                  |z   ||z   |d t        | j                  dd       ||| j                         K x y w)NctxrK  )ranger  r%  r,  ilocrP  r<   r&  rA  r(  r+  )r-   rZ  colidxseriesr_  r'   s         r.   r  zExcelFormatter._generate_bodyh  s     C-. 	FWW\\!V),F#F+ 
3"!+*&t{{E4@""&"6"6	 	
	s   BBc              #     K   t        j                  | j                         | j                               D ]&  }| j	                  |j
                        |_        | ( y wr,   )rp  rq  rt  rx  rB  r'   )r-   cells     r.   get_formatted_cellsz"ExcelFormatter.get_formatted_cellsx  sM     OOD$7$7$94;L;L;NO 	D))$((3DHJ	s   AAstorage_options)r  c	           
        ddl m}	 | j                  j                  \  }
}|
| j                  kD  s|| j
                  kD  r+t        d|
 d| d| j                   d| j
                         |i }| j                         }t        ||	      rd}n |	||||      }d	}	 |j                  |||||
       |r|j                          yy# |r|j                          w w xY w)ab  
        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``,
            or ``io.excel.xlsm.writer``.

        {storage_options}

        engine_kwargs: dict, optional
            Arbitrary keyword arguments passed to excel engine.
        r   r    z-This sheet is too large! Your sheet size is: z, z Max sheet size is: NF)enginer  engine_kwargsT)startrowstartcolfreeze_panes)pandas.io.excelr!   r,  shapemax_rowsmax_colsr  r  r   _write_cellsclose)r-   writer
sheet_namer  r  r  r  r  r  r!   num_rowsnum_colsformatted_cells	need_saves                 r.   writezExcelFormatter.write}  s    D 	0!WW]](dmm#x$--'??zH: V&&*mm_Bt}}oG 
  M224fk*I  /+	F I	!!)     y s   C C)	r   NNTTNFinfN)r'  r   r0  r  r6  zSequence[Hashable] | Noner3  zSequence[Hashable] | boolr1  r   r2  zIndexLabel | Noner4  r   r5  r   r+  rM   r3   r4   )r3   z dict[str, dict[str, str | bool]])r3   Iterable[ExcelCell])r3   r   )rZ  r1   r3   r  )Sheet1r   r   NNNN)r  z)FilePath | WriteExcelBuffer | ExcelWriterr  r   r  r1   r  r1   r  ztuple[int, int] | Noner  r  r  zStorageOptions | Noner  rL   r3   r4   )r5   r6   r7   r  r  r  r/   propertyr:  rB  ra  rf  rt  rx  rw  rv  rN  r  r  r   r   r  r:   r0   r.   r#  r#    s   @ HH
 #'*.,0)-!+/+ + !	+
 (+ *+ + '+ + + )+ 
+Z 

 

$CJ>*,/,2\M0^ ) ) 
 	&789 #/3!15%)D9D D 	D
 D -D D /D #D 
D :Dr0   r#  )<r  
__future__r   collections.abcr   r   r   r   ry   rp  r   typingr   r	   r
   r   r   numpyr|  pandas._libs.libr   pandas.util._decoratorsr   pandas.util._exceptionsr   pandas.core.dtypesr   pandas.core.dtypes.commonr   r   pandasr   r   r   r   pandas.core.commoncorecommonr  pandas.core.shared_docsr   pandas.io.formats._color_datar   pandas.io.formats.cssr   r   pandas.io.formats.formatr   pandas.io.formats.printingr   pandas._typingr   r   r   r   r!   r#   r<   rP   r#  r:   r0   r.   <module>r     s    #    	    ) ' 4 &
  !   0 5 7 3  #! !*K9 K2FA FARL Lr0   