
    d                       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'c 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          Z5 G d de5          Z6 G d d          Z7 G 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                  &    e Zd ZdZeZ	 	 	 dddZdS )	ExcelCellrowcolvalstyle
mergestartmergeendNr"   intr#   r&   
int | Noner'   returnNonec                Z    || _         || _        || _        || _        || _        || _        d S Nr!   )selfr"   r#   r$   r%   r&   r'   s          S/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/io/formats/excel.py__init__zExcelCell.__init__=   s2     
$     )NNN)
r"   r(   r#   r(   r&   r)   r'   r)   r*   r+   )__name__
__module____qualname__
__fields__	__slots__r0    r1   r/   r    r    9   sB        IJI !%#! ! ! ! ! ! !r1   r    c                        e Zd Zd fdZ xZS )CssExcelCellr"   r(   r#   r%   dict | None
css_styles3dict[tuple[int, int], list[tuple[str, Any]]] | Nonecss_rowcss_colcss_converterCallable | Noner*   r+   c	                    |rB|r@d |||f         D             }
t          |
                                          } ||          } t                      j        d||||d|	 d S )Nc                >    i | ]\  }}|                                 |S r7   lower).0propr$   s      r/   
<dictcomp>z)CssExcelCell.__init__.<locals>.<dictcomp>]   s3          &/dC

c     r1   r"   r#   r$   r%   r7   )	frozensetitemssuperr0   )r.   r"   r#   r$   r%   r;   r=   r>   r?   kwargsdeclaration_dictunique_declarations	__class__s               r/   r0   zCssExcelCell.__init__O   s      	7- 	7   3=gw>N3O      #,,<,B,B,D,D"E"E!M"566EJScs%JJ6JJJJJr1   )r"   r(   r#   r(   r%   r:   r;   r<   r=   r(   r>   r(   r?   r@   r*   r+   )r2   r3   r4   r0   __classcell__)rO   s   @r/   r9   r9   N   sG        K K K K K K K K K Kr1   r9   c                  t   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D             Z
ded<   dJdKdZ e            ZdLdZdLdZdMdZdNd!ZdOd"ZdPd$ZdQd&ZdRd*ZdSd,ZdTd.ZdUd1ZdVd2ZdWd4ZdXd6ZdPd7ZdPd8ZdYd:ZdZd<Z dPd=Z!dYd>Z"d[d@Z#d\dBZ$d]dDZ%d^dGZ&d_dHZ'd^dIZ(dS )`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)rS   ztext-topmiddlebaselinerU   ztext-bottomTF)boldbolder600700800900normallighter100200300400500)r^   italicoblique            )serifz
sans-serifcursivefantasyc                8    i | ]}|                                 |S r7   rC   )rE   r%   s     r/   rG   zCSSToExcelConverter.<dictcomp>   s2        	u  r1   )
dashedmediumDashDot
dashDotDothairdottedmediumDashDotDotdoubledashDotslantDashDotmediumDashedzdict[str, str] | None	inheritedN
str | Noner*   r+   c                    ||                      |          | _        nd | _         t          d           | j                  | _        d S )N)maxsize)compute_cssry   r   _call_uncached_call_cached)r.   ry   s     r/   r0   zCSSToExcelConverter.__init__   sN     !--i88DNN!DN 4Id333D4GHHr1   declarations str | frozenset[tuple[str, str]]dict[str, dict[str, str]]c                ,    |                      |          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.   r   s     r/   __call__zCSSToExcelConverter.__call__   s    &   ...r1   c                b    |                      || j                  }|                     |          S r-   )r}   ry   build_xlstyle)r.   r   
propertiess      r/   r~   z"CSSToExcelConverter._call_uncached   s/     %%lDNCC
!!*---r1   propsMapping[str, str]c                    |                      |          |                     |          |                     |          |                     |          |                     |          d}dfd |           |S )N)	alignmentborderfillfontnumber_formatddict[str, str | None]r*   r+   c                    t          |                                           D ]0\  }}|| |= t          |t                    r |           |s| |= 1dS )z4Remove key where value is None, through nested dictsN)listrJ   
isinstancedict)r   kvremove_nones      r/   r   z6CSSToExcelConverter.build_xlstyle.<locals>.remove_none   sk    QWWYY ! !19!4(( !KNNN !aD! !r1   )r   r   r*   r+   )build_alignmentbuild_border
build_fill
build_fontbuild_number_format)r.   r   outr   s      @r/   r   z!CSSToExcelConverter.build_xlstyle   s    --e44''..OOE**OOE**!55e<<
 
	! 	! 	! 	! 	! 	! 	C
r1   dict[str, bool | str | None]c                    |                     d          |                     |          |                     |          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   sD      ))L1144U;;//66
 
 	
r1   c                h    |                     d          }|r| j                             |          S d S )Nzvertical-align)r   VERTICAL_MAP)r.   r   vertical_aligns      r/   r   z+CSSToExcelConverter._get_vertical_alignment   s8    #344 	9$((888tr1   bool | Nonec                ^    |                     d          d S t          |d         dv          S )Nzwhite-space)nowrapprezpre-line)r   boolr   s     r/   r   z%CSSToExcelConverter._get_is_wrap_text  s2    99]##+4E-(0MMNNNr1    dict[str, dict[str, str | None]]c                $      fddD             S )Nc                J   i | ]}|                                         d | d                              d | d                                                  d | d                                                                      d | d                    dS )zborder-z-stylez-widthz-color)r%   color)_border_styler   color_to_excel)rE   sider   r.   s     r/   rG   z4CSSToExcelConverter.build_border.<locals>.<dictcomp>  s     

 

 

  ++II444455II444455''		2HD2H2H2H(I(IJJ 
 ,,UYY7M7M7M7M-N-NOO 

 

 

r1   rS   rightrU   leftr7   r   s   ``r/   r   z CSSToExcelConverter.build_border
  s6    

 

 

 

 

 ;

 

 

 
	
r1   r%   widthr   c                P   |||d S ||dS |dv rdS |                      |          }|dS |dv r|S |dk    rdS |dk    r|dv rdS dS |dk    r|dv rdS d	S || j        v r| j        |         S t          j        d
t	          |           t
          t                                 dS )Nnone)r   hidden)Ngrooveridgeinsetoutsetsolidru   rs   )rr   thinrt   ro   rx   zUnhandled border style format: 
stacklevel)_get_width_nameBORDER_STYLE_MAPwarningswarnreprr   r   )r.   r%   r   r   
width_names        r/   r   z!CSSToExcelConverter._border_style  s    =U]u}4=U]6&&&6))%00
6IIIH8H---x%%H---x!>d+++(//M?$u++??+--   
 6r1   width_inputc                `    |                      |          }|dk     rd S |dk     rdS |dk     rdS dS )Ngh㈵>g?r   gffffff@mediumthick)_width_to_float)r.   r   r   s      r/   r   z#CSSToExcelConverter._get_width_nameP  sD    $$[114<<4S[[6S[[8wr1   floatc                4    |d}|                      |          S )N2pt)_pt_to_float)r.   r   s     r/   r   z#CSSToExcelConverter._width_to_floatZ  s     =E  '''r1   	pt_stringstrc                t    |                     d          sJ t          |                    d                    S )Npt)endswithr   rstrip)r.   r   s     r/   r   z CSSToExcelConverter._pt_to_float_  s8    !!$'''''Y%%d++,,,r1   c                h    |                     d          }|dvr|                     |          ddS d S )Nzbackground-color)Ntransparentr   r   )fgColorpatternType)r   r   )r.   r   
fill_colors      r/   r   zCSSToExcelConverter.build_fillc  sF     YY122
:::#22:>>wWWW ;:r1   r   c                    |                     d          }t          |t                    r|                    dd          n|}d|iS )Nznumber-format   §;format_code)r   r   r   replace)r.   r   fcs      r/   r   z'CSSToExcelConverter.build_number_formatj  sE    YY''&0S&9&9ARZZc"""rr""r1   $dict[str, bool | float | str | None]c                   |                      |          }|                     |          }|r|d         nd |                     |          |                     |          |                     |          |                     |          d|v rdnd d|v pd |                     |                    d                    |                     |          d	S )Nr   	underlinesinglezline-throughr   )	namefamilysizerX   re   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_fonto  s     ))%00
))%00
%/9JqMMT..z::''..%%e,,))%00&1Z&?&?((T%3<((7););<<&&u--
 
 	
r1   c                h    |                     d          }|r| j                             |          S d S )Nzfont-weight)r   BOLD_MAP)r.   r   weights      r/   r   z CSSToExcelConverter._get_is_bold  s6    =)) 	-=$$V,,,tr1   c                h    |                     d          }|r| j                             |          S d S )Nz
font-style)r   
ITALIC_MAP)r.   r   
font_styles      r/   r   z"CSSToExcelConverter._get_is_italic  s6    YY|,,
 	3?&&z222tr1   Sequence[str]c                \    |                     d          }||                                S dS )Nztext-decorationr7   )r   split)r.   r   r   s      r/   r   z#CSSToExcelConverter._get_decoration  s1    YY011
!##%%%2r1   r   c                    d|v rdS d S )Nr   r   r7   )r.   r   s     r/   _get_underlinez"CSSToExcelConverter._get_underline  s    *$$8tr1   c                ^    d|v r(t          t          j        d|d                             S d S )Nztext-shadowz^[^#(]*[1-9])r   researchr   s     r/   r   zCSSToExcelConverter._get_shadow  s1    E!!	.%2FGGHHHtr1   c                p   t          j        d|                    dd                    }g }|D ]}|d d         dk    r|dd                             dd          }nA|d d         dk    r|dd                             d	d          }n|                                }|r|                    |           |S )
Nz(?x)
            (
            "(?:[^"]|\\")+"
            |
            '(?:[^']|\\')+'
            |
            [^'",]+
            )(?=,|\s*$)
        zfont-family rg   "z\"'z\')r  findallr   r   stripappend)r.   r   font_names_tmpr   r   s        r/   r   z#CSSToExcelConverter._get_font_names  s     IImR((
 
 
" 	( 	(DBQBx3AbDz))%55bqbSAbDz))%55zz|| (!!$'''r1   float | Nonec                ^    |                     d          }||S |                     |          S )Nz	font-size)r   r   )r.   r   r   s      r/   r   z"CSSToExcelConverter._get_font_size  s1    yy%%<K  &&&r1   r)   c                P    d }|D ] }| j                             |          }|r n!|S r-   )
FAMILY_MAPr   )r.   r   r   r   s       r/   r   z'CSSToExcelConverter._select_font_family  sD     	 	D_((..F  r1   r$   c                   |d S |                      |          r|                     |          S 	 | j        |         S # t          $ r; t	          j        dt          |           t          t                                 Y nw xY wd S )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  s    ;4c"" 	3--c222	$S)) 	 	 	M649966+--     	 ts   = ABBcolor_stringr   c                F    t          |                    d                    S )N#)r   
startswith)r.   r  s     r/   r  z!CSSToExcelConverter._is_hex_color  s    L++C00111r1   c                    |                     d          }|                     |          r5|d         dz  |d         dz  z   |d         dz  z                                   S |                                S )Nr  r   rh   rg   )lstrip_is_shorthand_colorupperr.   r  codes      r/   r  z)CSSToExcelConverter._convert_hex_to_excel  sm    ""3''##L11 	 GaK$q'A+-Q!;BBDDD::<<r1   c                    |                     d          }t          |          dk    rdS t          |          dk    rdS 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  sV    
 ""3''t99>>4YY!^^5???@@@r1   r-   )ry   rz   r*   r+   )r   r   r*   r   )r   r   r*   r   )r   r   r*   r   )r   r   r*   rz   )r   r   r*   r   )r   r   r*   r   )r%   rz   r   rz   r   rz   )r   rz   r*   rz   )r   rz   r*   r   )r   r   r*   r   )r   r   )r   r   r*   r   )r   r   r*   r   )r   r   r*   r   )r   r   r*   rz   )r   r   r*   r  )r*   r)   )r$   rz   r*   rz   )r  r   r*   r   )r  r   r*   r   ))r2   r3   r4   __doc__r   r  r   r   r   r  r   __annotations__r0   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  r  r  r7   r1   r/   rR   rR   g   s         " L  L  H"  J 	 J 
  ( %$$$I I I I I +--K/ / / /*. . . .   0
 
 
 
   O O O O

 
 
 
5 5 5 5n   ( ( ( (
- - - -X X X X# # # #

 
 
 
$            
   
   4' ' ' '      "2 2 2 2       A A A A A Ar1   rR   c                      e Zd ZdZdZdZ	 	 	 	 	 	 	 	 	 d7d8dZed9d            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>d6            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infna_repr   float_formatrz   colsSequence[Hashable] | NoneheaderSequence[Hashable] | boolindexr   index_labelIndexLabel | Nonemerge_cellsinf_repstyle_converterr@   r*   r+   c                   d| _         || _        t          |t                    s?|| _        | j                                         |j        }|
t                      }
|
| _        nd | _        d | _        || _	        |t          t          |                              |j                            st          d          t          t          |                              |j                            t          t          |                    k    rt          d          |                    |          | _	        | j	        j        | _        || _        || _        || _        || _        || _        |	| _        d S )Nr   z,passes columns are not ALL present dataframez.Not all names specified in 'columns' are found)columns)
rowcounterr-  r   r   styler_computedatarR   r8  dfr&  r   intersectionr:  r  setreindexr.  r3  r4  r1  r6  r7  )r.   r?  r-  r.  r/  r1  r3  r4  r6  r7  r8  s              r/   r0   zExcelFormatter.__init__  sI    "i(( 		(DKK  """B&"5"7"74CD  DK#'D uT{{//
;;<< OMNNN5;;++BJ7788CD		NNJJOPPPjjj..DGw(
&&r1    dict[str, dict[str, str | bool]]c                "    ddidddddddddS )	NrX   Tr   r   rT   rS   )r   r   )r   bordersr   r7   r.   s    r/   header_stylezExcelFormatter.header_styleA  s=     TN 	  )1eDD	
 	
 		
r1   c                l   t          |          rt          j        |          r| j        }nht	          |          rYt          j        |          r| j        }n=t          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_scalarr7  isneginf_scalarr.  r   getattrr'  r  s     r/   _format_valuezExcelFormatter._format_valueN  s    S>> 	5gl3// 	5+CCc]] 	5&s++ 5l(-- 5($,((".D-3443$''3@  
 
r1   Iterable[ExcelCell]c              #  r  K   | j         j        dk    r| j        st          d          | j        s	| j        sd S | j         }|                    | j        dd          }t          |          }d}d}| j        rAt          | j
        j        t                    r"t          | j
        j        d                   dz
  }| j        rt          |j                  D ]\  }}t          |||| j                  V   t          t#          ||j        |j                            D ]\  }\  }}}	|                    |	          }
|                                D ]_\  }}d\  }}|dk    r
|||z   |z   }}t-          |||z   dz   |
|         | j        t/          | j        dd           ||| j        ||	
  
        V  `nt          t#          |           D ]j\  }}
d
                    t7          t8          |
                    }t-          |||z   dz   || j        t/          | j        dd           ||| j                  V  k|| _        d S )Nrg   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.Fsparsifyadjoinnamesr   rH   NNctx_columns
r"   r#   r$   r%   r;   r=   r>   r?   r&   r'   .r"   r#   r$   r%   r;   r=   r>   r?   )r:  nlevelsr3  NotImplementedError_has_aliasesr1  formatr6  r   r   r?  r   r&  	enumeraterU  r    rG  ziplevelscodestakerJ   r9   rN  r<  r8  joinmapr   r;  )r.   r:  
level_strslevel_lengths	coloffsetlnumr   spansra  level_codesvaluesispan_valr&   r'   r   s                   r/   _format_header_miz ExcelFormatter._format_header_mi`  s     <!##: )D  
 ! 	T[ 	F,^^%e5 $ 
 

 **55	: 	2*TW]J?? 	2DGM!,--1I +	'66  
d!+	       7@M7>7=AA7 7  22ufk  [11#(;;==  KAx+5(J!||/3Y]X5MH
& %MA-"1I"/#*4;t#L#L $ !&*&:#-!)      		, 'sJ'788  	6HHSv6677"!A)+&t{M4HH "&"6	 	 	 	 	 	 	 r1   c              #    K   | j         s| j        r4d}| j        r?d}t          | j        j        t
                    rt          | j        j        j                  }| j        }| j         rt          t          | j                  | _        t          | j                  t          | j                  k    r:t          dt          | j                   dt          | j                   d          | j        }t          |          D ]F\  }}t          | j        ||z   || j        t!          | j        dd           d|| j                  V  Ed S d S )Nr   rg   zWriting z cols but got z aliasesrW  rZ  )r]  r1  r3  r   r?  r   r&  rU  r:  r   r   r'  r_  r9   r;  rG  rN  r<  r8  )r.   rh  colnamescolindexcolnames        r/   _format_header_regularz%ExcelFormatter._format_header_regular  sw      	 	Iz 9	dgmZ88 9 #DGM$7 8 8I|H  '"8T[99t{##s4<'8'888$>3t|#4#4 > >#&t{#3#3> > >    ;%.x%8%8 
 
!'" 9,+&t{M4HH$"&"6	 	 	 	 	 	 	'	 	$
 
r1   c                    t           j        t                    r                                 }n                                 }d} j        j        j        rd  j        j        j        D             dgt           j                  z  z   }t          d t          d |                    r+ fdt          |          D             } xj        dz  c_        t          j        ||          S )Nr7   c                    g | ]}||nd	S Nr  r7   )rE   xs     r/   
<listcomp>z1ExcelFormatter._format_header.<locals>.<listcomp>  s     KKK!112KKKr1   r  c                
    | o|S r-   r7   )rx  ys     r/   <lambda>z/ExcelFormatter._format_header.<locals>.<lambda>  s
    17 r1   c                    | dk    S rw  r7   )rx  s    r/   r|  z/ExcelFormatter._format_header.<locals>.<lambda>  s
    !r' r1   c              3  V   K   | ]#\  }}t          j        ||j                  V  $d S r-   )r    r;  rG  )rE   rr  r$   r.   s      r/   	<genexpr>z0ExcelFormatter._format_header.<locals>.<genexpr>  sN        %# doxd>OPP     r1   rg   )r   r:  r   ro  rt  r?  r3  rU  r&  r   re  r_  r;  	itertoolschain)r.   gengen2r"   s   `   r/   _format_headerzExcelFormatter._format_header  s    dlJ// 	0((**CC--//C$&7= 		%KKtw}7JKKKODL!!O" "C **C0A0A3,G,GHH %   )23   1$sD)))r1   c                    t          | j        j        t                    r|                                 S |                                 S r-   )r   r?  r3  r   _format_hierarchical_rows_format_regular_rowsrF  s    r/   _format_bodyzExcelFormatter._format_body  s<    dgmZ00 	/11333,,...r1   c              #    K   | j         s| j        r| xj        dz  c_        | j        r}| j        r@t          | j        t          t          t          j	        t          f          r| j        d         }n@| j        r"t          | j        t                    r| j        }n| j        j        j        d         }t          | j        t                    r| xj        dz  c_        |r*| j        dur!t!          | j        dz
  d|| j                  V  | j        j        }t          | j        j        t$                    r| j        j                                        }t)          |          D ]D\  }}t+          | j        |z   d|| j        t-          | j        dd           |d| j                  V  Ed}nd}|                     |          E d {V  d S )Nrg   r   F	ctx_indexrZ  )r]  r1  r;  r3  r4  r   r   tuplenpndarrayr   r   r?  rU  r:  r   r    rG  r   to_timestampr_  r9   rN  r<  r8  _generate_body)r.   r4  index_valuesidxidxvalrh  s         r/   r  z#ExcelFormatter._format_regular_rows  s      	! 	!OOq OO : %	  5J 4
E"B% % 5 #.q1! 5j1A3&G&G 5"."gm1!4$,
33 %1$ Xt{%77! 3QTEVWWWWW  7=L$'-55 <#w}99;;(66 
 
V"#-+&t{KFF"&"6	 	 	 	 	 	 	 III&&y11111111111r1   c              #  6  K   | j         s| j        r| xj        dz  c_        d}| j        rS| j        j        j        }| j        r9t          | j        t          t          t          j        t          f          r| j        }t          | j        t                    r| j        r| xj        dz  c_        t!          j        | r?| j        dur6t%          |          D ]&\  }}t'          | j        dz
  ||| j                  V  '| j        r| j        j                            ddd          }t-          |          }t/          || j        j        j        | j        j        j                  D ]\  }}}	|                    |	|j        |j                  }
|                                D ]i\  }}d\  }}|dk    r| j        |z   |z   dz
  }|}t=          | j        |z   ||
|         | j        t?          | j         dd           ||| j!        ||	
  
        V  j|dz  }not/          | j        j         D ][}t%          |          D ]D\  }}t=          | j        |z   ||| j        t?          | j         dd           ||| j!        
          V  E|dz  }\| "                    |          E d {V  d S )Nrg   r   FTrR  )
allow_fill
fill_valuerV  r  rX  rZ  )#r]  r1  r;  r3  r?  rU  r4  r   r   r  r  r  r   r:  r   r6  comany_not_noner_  r    rG  r^  r   r`  ra  rb  rc  _can_hold_na	_na_valuerJ   r9   rN  r<  r8  r  )r.   gcolidxindex_labelscidxr   rf  rg  rj  ra  rk  rl  rm  rn  r&   r'   indexcolvalsr  indexcolvals                     r/   r  z(ExcelFormatter._format_hierarchical_rows  s7      	! 	!OOq OO: E	!7=.L 0J 4
E"B% % 0  $/ $,
33 %8H %1$ . X4;e3K3K"+L"9"9 X XJD$#DOa$7tTEVWWWWWW 1!!W]11!%u 2  
 !2* = =25!47=#79L3 3 ! !.E6; $[[##)#6#)#3 )  F (-{{}}  8/9,
H#a<<)-1)<x)G!)KJ'.H* $! 3 ' &q	"&"3'.t{K'N'N$%$+*.*>'1%-       qLGG5!< %($7 ! !L,5l,C,C 
 
([* $# 5 ' +"&"3'.t{K'N'N$'$+*.*>	 	 	 	 	 	 	 qLGG&&w///////////r1   c                *    t          | j                  S )z1Whether the aliases for column names are present.)r   r1  rF  s    r/   r]  zExcelFormatter._has_aliases]  s     DK(((r1   rh  r(   c              #  "  K   t          t          | j                            D ]j}| j        j        d d |f         }t          |          D ]B\  }}t          | j        |z   ||z   |d t          | j	        dd           ||| j
                  V  Ckd S )NctxrZ  )ranger&  r:  r?  ilocr_  r9   r;  rN  r<  r8  )r.   rh  colidxseriesrm  r$   s         r/   r  zExcelFormatter._generate_bodyb  s      C--.. 	 	FW\!!!V),F#F++ 
 
3"!+*&t{E4@@""&"6	 	 	 	 	 	 	
	 	r1   c              #     K   t          j        |                                 |                                           D ]%}|                     |j                  |_        |V  &d S r-   )r  r  r  r  rO  r$   )r.   cells     r/   get_formatted_cellsz"ExcelFormatter.get_formatted_cellsr  se      OD$7$7$9$94;L;L;N;NOO 	 	D))$(33DHJJJJ	 	r1   storage_options)r  Sheet1r   
sheet_namestartrowstartcolfreeze_panestuple[int, int] | Noneenginer   c           
        ddl m} | j        j        \  }	}
|	| j        k    s|
| j        k    r%t          d|	 d|
 d| j         d| j                   |                                 }t          ||          rd}n ||||          }d}	 |	                    |||||	           |r|
                                 d
S d
S # |r|
                                 w w xY w)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``,
            or ``io.excel.xlsm.writer``.

        {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)pandas.io.excelr  r?  shapemax_rowsmax_colsr'  r  r   _write_cellsclose)r.   writerr  r  r  r  r  r  r  num_rowsnum_colsformatted_cells	need_saves                r/   writezExcelFormatter.writew  s[   @ 	0/////!W](dm##x$-'?'?G G GH G G&*mG G7;}G G  
 2244fk** 	II ![v  F I	!!)        y s   	B= =C)	r  NNTTNFr,  N)r-  r   r.  rz   r/  r0  r1  r2  r3  r   r4  r5  r6  r   r7  r   r8  r@   r*   r+   )r*   rC  )r*   rP  )r*   r   )rh  r(   r*   rP  )r  r   r   NNN)r  r   r  r(   r  r(   r  r  r  rz   r  r   r*   r+   )r2   r3   r4   r(  r  r  r0   propertyrG  rO  ro  rt  r  r  r  r  r]  r  r  r   r   r  r7   r1   r/   r+  r+    s        @ HH
 #'*.,0)-!+/+ + + + +Z 

 

 

 X

  $C C C CJ   >* * * *,/ / / /,2 ,2 ,2 ,2\M0 M0 M0 M0^ ) ) ) X)       
 	S&78999 #/3!*.> > > > :9> > >r1   r+  )9r(  
__future__r   	functoolsr   r   r  r  typingr   r   r   r	   r
   r   r   r   numpyr  pandas._libs.libr   pandas._typingr   r   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   r    r9   rR   r+  r7   r1   r/   <module>r     s    # " " " " "            				                       ) ) ) ) ) )        ( ' ' ' ' ' 4 4 4 4 4 4 & & & & & &       
            !                 0 0 0 0 0 0 5 5 5 5 5 5        7 6 6 6 6 6 3 3 3 3 3 3! ! ! ! ! ! ! !*K K K K K9 K K K2FA FA FA FA FA FA FA FARF F F F F F F F F Fr1   