
    cMh                       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;dS )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                  &    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          W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pandas/io/formats/excel.py__init__zExcelCell.__init__C   s2     
$     )NNN)
r%   r+   r&   r+   r)   r,   r*   r,   r-   r.   )__name__
__module____qualname__
__fields__	__slots__r3    r4   r2   r#   r#   ?   sB        IJI !%#! ! ! ! ! ! !r4   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 r:   lower).0propr'   s      r2   
<dictcomp>z)CssExcelCell.__init__.<locals>.<dictcomp>c   s3          &/dC

c     r4   r%   r&   r'   r(   r:   )	frozensetitemssuperr3   )r1   r%   r&   r'   r(   r>   r@   rA   rB   kwargsdeclaration_dictunique_declarations	__class__s               r2   r3   zCssExcelCell.__init__U   s      	7- 	7   3=gw>N3O      #,,<,B,B,D,D"E"E!M"566EJScs%JJ6JJJJJr4   )r%   r+   r&   r+   r(   r=   r>   r?   r@   r+   rA   r+   rB   rC   r-   r.   )r5   r6   r7   r3   __classcell__)rR   s   @r2   r<   r<   T   sG        K K K K K K K K K Kr4   r<   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<   dKdLdZ e            ZdMdZdMdZdNdZdOd!ZdPd"ZdQd$ZdRd&ZdSd*ZdTd,ZdUd.ZdVd1ZdWd2ZdXd4ZdYd6ZdQd7ZdQd8ZdZd:Zd[d<Z dQd=Z!dZd>Z"d\d@Z#d]dCZ$d^dEZ%d_dHZ&d`dIZ'd_dJZ(dS )aCSSToExcelConverteraK  
    A callable for converting CSS declarations to ExcelWriter styles

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

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

    Parameters
    ----------
    inherited : str, optional
        CSS declarations understood to be the containing scope for the
        CSS processed by :meth:`__call__`.
    topcenterbottom)rV   ztext-topmiddlebaselinerX   ztext-bottomTF)boldbolder600700800900normallighter100200300400500)ra   italicoblique            )serifz
sans-serifcursivefantasyc                8    i | ]}|                                 |S r:   rF   )rH   r(   s     r2   rJ   zCSSToExcelConverter.<dictcomp>   s2        	u  r4   )
dashedmediumDashDot
dashDotDothairdottedmediumDashDotDotdoubledashDotslantDashDotmediumDashedzdict[str, str] | None	inheritedN
str | Noner-   r.   c                    ||                      |          | _        nd | _        t          j        | j                  | _        d S r0   )compute_cssr|   	functoolscache_call_uncached_call_cached)r1   r|   s     r2   r3   zCSSToExcelConverter.__init__   sC     !--i88DNN!DN &OD,?@@r4   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   )r1   r   s     r2   __call__zCSSToExcelConverter.__call__   s    &   ...r4   c                b    |                      || j                  }|                     |          S r0   )r   r|   build_xlstyle)r1   r   
propertiess      r2   r   z"CSSToExcelConverter._call_uncached   s/     %%lDNCC
!!*---r4   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)listrM   
isinstancedict)r   kvremove_nones      r2   r   z6CSSToExcelConverter.build_xlstyle.<locals>.remove_none   sk    QWWYY ! !19!4(( !KNNN !aD! !r4   )r   r   r-   r.   )build_alignmentbuild_border
build_fill
build_fontbuild_number_format)r1   r   outr   s      @r2   r   z!CSSToExcelConverter.build_xlstyle   s    --e44''..OOE**OOE**!55e<<
 
	! 	! 	! 	! 	! 	! 	C
r4   dict[str, bool | str | None]c                    |                     d          |                     |          |                     |          dS )Nz
text-align)
horizontalvertical	wrap_text)get_get_vertical_alignment_get_is_wrap_textr1   r   s     r2   r   z#CSSToExcelConverter.build_alignment   sD      ))L1144U;;//66
 
 	
r4   c                h    |                     d          }|r| j                             |          S d S )Nzvertical-align)r   VERTICAL_MAP)r1   r   vertical_aligns      r2   r   z+CSSToExcelConverter._get_vertical_alignment  s8    #344 	9$((888tr4   bool | Nonec                ^    |                     d          d S t          |d         dv          S )Nzwhite-space)nowrapprezpre-line)r   boolr   s     r2   r   z%CSSToExcelConverter._get_is_wrap_text  s2    99]##+4E-(0MMNNNr4    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)rH   sider   r1   s     r2   rJ   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 

 

 

r4   rV   rightrX   leftr:   r   s   ``r2   r   z CSSToExcelConverter.build_border  s6    

 

 

 

 

 ;

 

 

 
	
r4   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solidrx   rv   )ru   thinrw   rr   r{   zUnhandled border style format: 
stacklevel)_get_width_nameBORDER_STYLE_MAPwarningswarnreprr   r   )r1   r(   r   r   
width_names        r2   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++??+--   
 6r4   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)r1   r   r   s      r2   r   z#CSSToExcelConverter._get_width_nameV  sD    $$[114<<4S[[6S[[8wr4   floatc                4    |d}|                      |          S )N2pt)_pt_to_float)r1   r   s     r2   r   z#CSSToExcelConverter._width_to_float`  s     =E  '''r4   	pt_stringstrc                t    |                     d          sJ t          |                    d                    S )Npt)endswithr   rstrip)r1   r   s     r2   r   z CSSToExcelConverter._pt_to_floate  s8    !!$'''''Y%%d++,,,r4   c                h    |                     d          }|dvr|                     |          ddS d S )Nzbackground-color)Ntransparentr   r   )fgColorpatternType)r   r   )r1   r   
fill_colors      r2   r   zCSSToExcelConverter.build_filli  sF     YY122
:::#22:>>wWWW ;:r4   r   c                    |                     d          }t          |t                    r|                    dd          n|}d|iS )Nznumber-format   §;format_code)r   r   r   replace)r1   r   fcs      r2   r   z'CSSToExcelConverter.build_number_formatp  sE    YY''&0S&9&9ARZZc"""rr""r4   $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sizer[   rh   r   striker   shadow)	_get_font_names_get_decoration_select_font_family_get_font_size_get_is_bold_get_is_italicr   r   _get_shadow)r1   r   
font_names
decorations       r2   r   zCSSToExcelConverter.build_fontu  s     ))%00
))%00
%/9JqMMT..z::''..%%e,,))%00&1Z&?&?((T%3<((7););<<&&u--
 
 	
r4   c                h    |                     d          }|r| j                             |          S d S )Nzfont-weight)r   BOLD_MAP)r1   r   weights      r2   r   z CSSToExcelConverter._get_is_bold  s6    =)) 	-=$$V,,,tr4   c                h    |                     d          }|r| j                             |          S d S )Nz
font-style)r   
ITALIC_MAP)r1   r   
font_styles      r2   r   z"CSSToExcelConverter._get_is_italic  s6    YY|,,
 	3?&&z222tr4   Sequence[str]c                \    |                     d          }||                                S dS )Nztext-decorationr:   )r   split)r1   r   r   s      r2   r   z#CSSToExcelConverter._get_decoration  s1    YY011
!##%%%2r4   r   c                    d|v rdS d S )Nr   r   r:   )r1   r   s     r2   _get_underlinez"CSSToExcelConverter._get_underline  s    *$$8tr4   c                ^    d|v r(t          t          j        d|d                             S d S )Nztext-shadowz^[^#(]*[1-9])r   researchr   s     r2   r   zCSSToExcelConverter._get_shadow  s1    E!!	.%2FGGHHHtr4   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 rj   "z\"'z\')r  findallr   r   stripappend)r1   r   font_names_tmpr   r   s        r2   r   z#CSSToExcelConverter._get_font_names  s     IImR((
 
 
" 	( 	(DBQBx3AbDz))%55bqbSAbDz))%55zz|| (!!$'''r4   float | Nonec                ^    |                     d          }||S |                     |          S )Nz	font-size)r   r   )r1   r   r   s      r2   r   z"CSSToExcelConverter._get_font_size  s1    yy%%<K  &&&r4   r   r,   c                P    d }|D ] }| j                             |          }|r n!|S r0   )
FAMILY_MAPr   )r1   r   r   r   s       r2   r   z'CSSToExcelConverter._select_font_family  sD     	 	D_((..F  r4   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   r1   r'   s     r2   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)r1   r  s     r2   r  z!CSSToExcelConverter._is_hex_color  s    L++C00111r4   c                    |                     d          }|                     |          r5|d         dz  |d         dz  z   |d         dz  z                                   S |                                S )Nr  r   rk   rj   )lstrip_is_shorthand_colorupperr1   r  codes      r2   r  z)CSSToExcelConverter._convert_hex_to_excel  sm    ""3''##L11 	 GaK$q'A+-Q!;BBDDD::<<r4   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      r2   r#  z'CSSToExcelConverter._is_shorthand_color  sV    
 ""3''t99>>4YY!^^5???@@@r4   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   )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   )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   ))r5   r6   r7   __doc__r   r  r   r   r   r  r   __annotations__r3   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#  r:   r4   r2   rU   rU   m   s         " L  L  H"  J 	 J 
  ( %$$$A A A A A +--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r4   rU   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+         ,          	 	 	 	 	 	 	 dAdBd:            ZdS )C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_formatr}   colsSequence[Hashable] | NoneheaderSequence[Hashable] | boolindexr   index_labelIndexLabel | Nonemerge_cellsinf_repstyle_converterrC   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)
rowcounterr1  r   r   styler_computedatarU   r<  dfr*  r   intersectionr>  r  setreindexr2  r7  r8  r5  r:  r;  )r1   rC  r1  r2  r3  r5  r7  r8  r:  r;  r<  s              r2   r3   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(
&&r4    dict[str, dict[str, str | bool]]c                "    ddidddddddddS )	Nr[   Tr   r   rW   rV   )r   r   )r   bordersr   r:   r1   s    r2   header_stylezExcelFormatter.header_styleG  s=     TN 	  )1eDD	
 	
 		
r4   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   isnar1  r   isposinf_scalarr;  isneginf_scalarr2  r   getattrr+  r  s     r2   _format_valuezExcelFormatter._format_valueT  s    S>> 	5gl3// 	5+CCc]] 	5&s++ 5l(-- 5($,((".D-3443$''3@  
 
r4   Iterable[ExcelCell]c              #  p  K   | j         j        dk    r| j        st          d          | j        s	| j        sd S | j         }|                    | j        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 )Nrj   z]Writing to Excel with MultiIndex columns and no index ('index'=False) is not yet implemented.Fsparsifyinclude_namesr   rK   NNctx_columns
r%   r&   r'   r(   r>   r@   rA   rB   r)   r*   .r%   r&   r'   r(   r>   r@   rA   rB   )r>  nlevelsr7  NotImplementedError_has_aliasesr5  _format_multir:  r   r   rC  r   r*  	enumeratenamesr#   rK  ziplevelscodestakerM   r<   rR  r@  r<  joinmapr   r?  )r1   r>  
level_strslevel_lengths	coloffsetlnumr   spansre  level_codesvaluesispan_valr)   r*   r   s                   r2   _format_header_miz ExcelFormatter._format_header_mif  s     <!##: )D  
 ! 	T[ 	F,**%U + 
 

 **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	 	 	 	 	 	 	 r4   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   rj   zWriting z cols but got z aliasesrZ  r]  )r`  r5  r7  r   rC  r   r*  rc  r>  r   r   r+  rb  r<   r?  rK  rR  r@  r<  )r1   rl  colnamescolindexcolnames        r2   _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	 	 	 	 	 	 	'	 	$
 
r4   c                    t           j        t                    r                                 }n                                 }d} j        j        j        rd  j        j        j        D             dgt           j                  z  z   }t          j
        d d |D                       r+ fdt          |          D             } xj        dz  c_        t          j        ||          S )Nr:   c                    g | ]}||nd	S )Nr  r:   rH   xs     r2   
<listcomp>z1ExcelFormatter._format_header.<locals>.<listcomp>  s     KKK!112KKKr4   r  c                
    | o|S r0   r:   )r|  ys     r2   <lambda>z/ExcelFormatter._format_header.<locals>.<lambda>  s
    QW1 r4   c              3  "   K   | ]
}|d k    V  dS )r  Nr:   r{  s     r2   	<genexpr>z0ExcelFormatter._format_header.<locals>.<genexpr>  s&      6L6L1qBw6L6L6L6L6L6Lr4   c              3  V   K   | ]#\  }}t          j        ||j                  V  $d S r0   )r#   r?  rK  )rH   rv  r'   r1   s      r2   r  z0ExcelFormatter._format_header.<locals>.<genexpr>  sN        %# doxd>OPP     r4   rj   )r   r>  r   rs  rx  rC  r7  rc  r*  r   reducerb  r?  	itertoolschain)r1   gengen2r%   s   `   r2   _format_headerzExcelFormatter._format_header  s    dlJ// 	0((**CC--//C$&7= 		%KKtw}7JKKKODL!!O" "C  4 46L6L6L6L6LMM %   )23   1$sD)))r4   c                    t          | j        j        t                    r|                                 S |                                 S r0   )r   rC  r7  r   _format_hierarchical_rows_format_regular_rowsrJ  s    r2   _format_bodyzExcelFormatter._format_body  s<    dgmZ00 	/11333,,...r4   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 )Nrj   r   F	ctx_indexr]  )r`  r5  r?  r7  r8  r   r   tuplenpndarrayr   r   rC  rc  r>  r   r#   rK  r   to_timestamprb  r<   rR  r@  r<  _generate_body)r1   r8  index_valuesidxidxvalrl  s         r2   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1r4   c              #  4  K   | j         s| j        r| xj        dz  c_        d}| j        rR| 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          }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 )Nrj   r   FTrV  )
allow_fill
fill_valuerY  r  r[  r]  )#r`  r5  r?  r7  rC  rc  r8  r   r   r  r  r  r   r>  r   r:  comany_not_nonerb  r#   rK  ra  r   rd  re  rf  rg  _can_hold_na	_na_valuerM   r<   rR  r@  r<  r  )r1   gcolidxindex_labelscidxr   rj  rk  rn  re  ro  rp  rq  rr  r)   r*   indexcolvalsr  indexcolvals                     r2   r  z(ExcelFormatter._format_hierarchical_rows  s5      	! 	!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]88! 9  
 !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///////////r4   c                *    t          | j                  S )z1Whether the aliases for column names are present.)r   r5  rJ  s    r2   r`  zExcelFormatter._has_aliasesc  s     DK(((r4   rl  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ctxr]  )ranger*  r>  rC  ilocrb  r<   r?  rR  r@  r<  )r1   rl  colidxseriesrq  r'   s         r2   r  zExcelFormatter._generate_bodyh  s      C--.. 	 	FW\!!!V),F#F++ 
 
3"!+*&t{E4@@""&"6	 	 	 	 	 	 	
	 	r4   c              #     K   t          j        |                                 |                                           D ]%}|                     |j                  |_        |V  &d S r0   )r  r  r  r  rS  r'   )r1   cells     r2   get_formatted_cellsz"ExcelFormatter.get_formatted_cellsx  se      OD$7$7$9$94;L;L;N;NOO 	 	D))$(33DHJJJJ	 	r4   storage_options)r  Sheet1r   writer)FilePath | WriteExcelBuffer | ExcelWriter
sheet_namestartrowstartcolfreeze_panestuple[int, int] | NoneengineStorageOptions | Noneengine_kwargsr=   c	           
        ddl m}	 | j        j        \  }
}|
| j        k    s|| j        k    r%t          d|
 d| d| j         d| j                   |i }|                                 }t          ||	          rd}n |	||||          }d	}	 |	                    |||||
           |r|
                                 dS dS # |r|
                                 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)r  r  r  T)r  r  r  )pandas.io.excelr!   rC  shapemax_rowsmax_colsr+  r  r   _write_cellsclose)r1   r  r  r  r  r  r  r  r  r!   num_rowsnum_colsformatted_cells	need_saves                 r2   writezExcelFormatter.write}  si   D 	0/////!W](dm##x$-'?'?G G GH G G&*mG G7;}G G  
  M2244fk** 		II [ /+	  F I	!!)        y s   C C)	r  NNTTNFr0  N)r1  r   r2  r}   r3  r4  r5  r6  r7  r   r8  r9  r:  r   r;  r   r<  rC   r-   r.   )r-   rG  )r-   rT  )r-   r   )rl  r+   r-   rT  )r  r   r   NNNN)r  r  r  r   r  r+   r  r+   r  r  r  r}   r  r  r  r=   r-   r.   )r5   r6   r7   r,  r  r  r3   propertyrK  rS  rs  rx  r  r  r  r  r`  r  r  r   r   r  r:   r4   r2   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!15%)D D D D :9D D Dr4   r/  )<r,  
__future__r   collections.abcr   r   r   r   r   r  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<   rU   r/  r:   r4   r2   <module>r     s7    # " " " " "                    				                 ) ) ) ) ) ) ' ' ' ' ' ' 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L L L L L L L L L Lr4   