o
    öÑÐbZ* ã                   @   s¾  d dl Z d dlZd dlZd dl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 ddlm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 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  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% ddlm&Z& ddl'm(Z( dd„ Z)dd„ Z*dd „ Z+ed!d"ƒZ,ed#d$ƒZ-ed%d&ƒZ.ed'd(ƒZ/ed)d*ƒZ0ed+d,ƒZ1G d-d.„ d.ejƒZ2dS )/é    N)Údefaultdict)Ú
namedtuple)Úisnan)Úisinf)Úwarné   )ÚStringIO)Úforce_unicode)Ú	num_typesÚ	str_types)Ú	xmlwriter)ÚFormat)ÚDrawing)ÚShape)Ú	XMLwriter)Úxl_rowcol_to_cell)Úxl_rowcol_to_cell_fast)Úxl_cell_to_rowcol)Úxl_col_to_name)Úxl_range©Úxl_color)Úget_sparkline_style)Úsupported_datetime)Údatetime_to_excel_datetime)Úquote_sheetname)ÚDuplicateTableNamec                    ó   ‡ fdd„}|S )zn
    Decorator function to convert A1 notation in cell method calls
    to the default row/col notation.

    c                    s^   zt |ƒr|d }t|ƒ W n ty#   t|ƒ}||dd …  }Y nw ˆ | g|¢R i |¤ŽS ©Nr   r   )ÚlenÚintÚ
ValueErrorr   )ÚselfÚargsÚkwargsZ	first_argÚnew_args©Úmethod© úS/var/www/secure340b-portal/env/lib/python3.10/site-packages/xlsxwriter/worksheet.pyÚcell_wrapper9   s   €ýz'convert_cell_args.<locals>.cell_wrapperr(   ©r'   r*   r(   r&   r)   Úconvert_cell_args3   s   r,   c                    r   )zo
    Decorator function to convert A1 notation in range method calls
    to the default row/col notation.

    c           
         s¶   zt |ƒrt|d ƒ W nC tyO   d|d v r/|d  d¡\}}t|ƒ\}}t|ƒ\}}nt|d ƒ\}}||}}||||g}	|	 |dd … ¡ |	}Y nw ˆ | g|¢R i |¤ŽS )Nr   ú:r   ©r   r    r!   Úsplitr   Úextend)
r"   r#   r$   Úcell_1Úcell_2Zrow_1Úcol_1Zrow_2Úcol_2r%   r&   r(   r)   r*   P   s    €
ôz(convert_range_args.<locals>.cell_wrapperr(   r+   r(   r&   r)   Úconvert_range_argsJ   s   r5   c                    r   )zq
    Decorator function to convert A1 notation in columns method calls
    to the default row/col notation.

    c           	         s”   zt |ƒrt|d ƒ W n2 ty>   dd„ |d  d¡D ƒ\}}t|ƒ\}}t|ƒ\}}||g}| |dd … ¡ |}Y nw ˆ | g|¢R i |¤ŽS )Nr   c                 S   s   g | ]}|d  ‘qS )Ú1r(   )Ú.0Úcolr(   r(   r)   Ú
<listcomp>w   s    z?convert_column_args.<locals>.column_wrapper.<locals>.<listcomp>r-   r   r.   )	r"   r#   r$   r1   r2   Ú_r3   r4   r%   r&   r(   r)   Úcolumn_wrappero   s   €ù	z+convert_column_args.<locals>.column_wrapperr(   )r'   r;   r(   r&   r)   Úconvert_column_argsi   s   r<   ÚStringzstring, formatÚNumberznumber, formatÚBlankÚformatÚBooleanzboolean, formatÚFormulazformula, format, valueÚArrayFormulaz$formula, format, value, range, atypec                       sb
  e Zd ZdZ‡ fdd„Zdd„ Zedd„ ƒZdd	„ ZedÏdd„ƒZ	dÏdd„Z
edÏdd„ƒZdÏdd„ZedÏdd„ƒZdÏdd„ZedÐdd„ƒZdÐdd„Ze	dÐdd„ƒZe	dÐdd„ƒZd d!„ Z		"dÑd#d$„ZedÏd%d&„ƒZdÏd'd(„ZedÏd)d*„ƒZdÏd+d,„Ze	
	
dÒd-d.„ƒZ	
	
dÒd/d0„Zed1d2„ ƒZd3d4„ Zd5d6„ ZedÏd7d8„ƒZedÏd9d:„ƒZ edÏd;d<„ƒZ!edÏd=d>„ƒZ"edÏd?d@„ƒZ#edÏdAdB„ƒZ$dCdD„ Z%dÓdFdG„Z&dHdI„ Z'dJdK„ Z(dLdM„ Z)dNdO„ Z*dPdQ„ Z+dRdS„ Z,e-	
	
dÒdTdU„ƒZ.e-	
	
dÒdVdW„ƒZ/dÒdXdY„Z0dÒdZd[„Z1dÔd\d]„Z2e	
dÏd^d_„ƒZ3ed`da„ ƒZ4dbdc„ Z5ddde„ Z6e	
dÏdfdg„ƒZ7e	
dÏdhdi„ƒZ8e	
dÏdjdk„ƒZ9edÏdldm„ƒZ:edndo„ ƒZ;	p	dÕdqdr„Z<edÖdsdt„ƒZ=ed×dudv„ƒZ>dØdxdy„Z?dzd{„ Z@d|d}„ ZAd~d„ ZBdÙdd‚„ZCd×dƒd„„ZDedÏd…d†„ƒZEd‡dˆ„ ZFd‰dŠ„ ZGd‹dŒ„ ZHddŽ„ ZIdd„ ZJd‘d’„ ZKdÚd•d–„ZLdÛd—d˜„ZMdÛd™dš„ZNdÏd›dœ„ZOe-dÏddž„ƒZPdÜdŸd „ZQd¡d¢„ ZRd£d¤„ ZSed¥d¦„ ƒZTd§d¨„ ZUd©dª„ ZVd«d¬„ ZWd­d®„ ZXd¯d°„ ZYd±d²„ ZZdÏd³d´„Z[dÏdµd¶„Z\d·d¸„ Z]d¹dº„ Z^dÝd»d¼„Z_d½d¾„ Z`d¿dÀ„ ZadÁdÂ„ ZbdÃdÄ„ ZcdÅdÆ„ ZddÇdÈ„ ZedÉdÊ„ ZfdËdÌ„ ZgdÍdÎ„ ZhdÏdÐ„ ZidÑdÒ„ ZjdÓdÔ„ ZkdÕdÖ„ Zld×dØ„ ZmdÞdÙdÚ„ZndÞdÛdÜ„ZodÝdÞ„ Zpdßdà„ Zqdádâ„ Zrdãdä„ Zsdådæ„ Ztdçdè„ Zudédê„ Zvdëdì„ Zwdídî„ Zxdïdð„ Zydñdò„ Zzdódô„ Z{dÏdõdö„Z|dÏd÷dø„Z}dùdú„ Z~dûdü„ Zdýdþ„ Z€dÿd „ Zdd„ Z‚dd„ Zƒdd„ Z„dÏdd„Z…d	d
„ Z†dd„ Z‡dd„ Zˆdd„ Z‰dd„ ZŠdd„ Z‹dd„ ZŒdd„ Zdd„ ZŽdd„ Zdd„ Zdd „ Z‘d!d"„ Z’d#d$„ Z“d%d&„ Z”d'd(„ Z•dÞd)d*„Z–d+d,„ Z—dÔd-d.„Z˜dÏd/d0„Z™d1d2„ Zšd3d4„ Z›d5d6„ Zœd7d8„ Zd9d:„ Zžd;d<„ ZŸd=d>„ Z d?d@„ Z¡dAdB„ Z¢dCdD„ Z£dEdF„ Z¤dGdH„ Z¥dIdJ„ Z¦	
	
dÒdKdL„Z§	
	
dÒdMdN„Z¨dOdP„ Z©dQdR„ ZªdSdT„ Z«dUdV„ Z¬dWdX„ Z­dYdZ„ Z®d[d\„ Z¯d]d^„ Z°d_d`„ Z±dadb„ Z²dcdd„ Z³dedf„ Z´dgdh„ Zµdidj„ Z¶dkdl„ Z·dmdn„ Z¸dodp„ Z¹dqdr„ Zºdsdt„ Z»dudv„ Z¼dwdx„ Z½dydz„ Z¾d{d|„ Z¿d}d~„ ZÀdd€„ ZÁdd‚„ ZÂdƒd„„ ZÃdÏd…d†„ZÄd‡dˆ„ ZÅd‰dŠ„ ZÆd‹dŒ„ ZÇddŽ„ ZÈdd„ ZÉd‘d’„ ZÊd“d”„ ZËd•d–„ ZÌd—d˜„ ZÍd™dš„ ZÎd›dœ„ ZÏddž„ ZÐdŸd „ ZÑd¡d¢„ ZÒd£d¤„ ZÓd¥d¦„ ZÔd§d¨„ ZÕd©dª„ ZÖd«d¬„ Z×d­d®„ ZØd¯d°„ ZÙd±d²„ ZÚd³d´„ ZÛdµd¶„ ZÜd·d¸„ ZÝd¹dº„ ZÞd»d¼„ Zßd½d¾„ Zàd¿dÀ„ ZádÁdÂ„ ZâdÃdÄ„ ZãdÅdÆ„ ZädÇdÈ„ ZådÉdÊ„ ZædËdÌ„ ZçdÍdÎ„ Zè‡  ZéS (ß  Ú	Worksheetz=
    A class for writing the Excel XLSX Worksheet file.

    c                    s$  t t| ƒ ¡  d| _d| _d| _d| _d| _d| _d| _	g | _
d| _d| _d| _d| _d| _d| _d| _d| _d| _d| _i | _g | _d| _d| _d| _g | _d| _d| _d| _d| _d	| _d| _ d| _!d| _"d| _#d
| _$d| _%d| _&d| _'d| _(d| _)d
| _*d
| _+g | _,g | _-g | _.d| _/d| _0d| _1d| _2d| _3d| _4d| _5d| _6d| _7d| _8d| _9d| _:d| _;d| _<d| _=d| _>d| _?g | _@g | _Ai | _Bg | _Cd| _Di | _EtFtGƒ| _Hd| _Id	| _Jd| _Kd| _Ld	| _Md| _Nd| _Od| _Pd| _Qd	| _Rd	| _Sd	| _Td| _Ud| _Vd| _Wd| _Xd| _Yd| _Zd| _[i | _\g | _]tFtGƒ| _^g | __i | _`d| _ad| _bd| _ctFtGƒ| _dg | _ed| _fd| _gd| _hg | _id| _jd| _kd| _lg | _md| _ni | _oi | _pi | _qi | _ri | _sd| _td| _ud	| _vd| _wd| _xg | _yg | _zg | _{g | _|g | _}g | _~g | _g | _€g | _g | _‚g | _ƒg | _„g | _…g | _†i | _‡d| _ˆi | _‰d| _Ši | _‹d| _Œd| _d| _Žd| _d| _g | _‘i | _’g | _“d| _”d	| _•d| _–d| _—d| _˜tFtGƒ| _™d| _šd
| _›d| _œd
| _d| _žd| _Ÿd| _ d| _¡d| _¢d| _£d| _¤d| _¥d| _hd| _¢d| _£d| _¦d| _§d| _¨i | _©d| _ªd| _«d| _¬dS )z
        Constructor.

        Nr   Fi×  i   i @  éÿ  é   r   TÚ çffffffæ?ç      è?ç333333Ó?éd   é   é   ç\Âõ(Ü @é@   é   i  )­ÚsuperrD   Ú__init__ÚnameÚindexÚ	str_tableÚpaletteÚconstant_memoryÚtmpdirÚis_chartsheetZ
ext_sheetsZ
fileclosedÚexcel_versionÚexcel2003_styleÚ
xls_rowmaxÚ
xls_colmaxÚ
xls_strmaxÚ
dim_rowminÚ
dim_rowmaxÚ
dim_colminÚ
dim_colmaxÚcolinfoÚ
selectionsÚhiddenÚactiveÚ	tab_colorÚpanesÚactive_paneÚselectedÚpage_setup_changedÚ
paper_sizeÚorientationÚprint_options_changedÚhcenterÚvcenterÚprint_gridlinesÚscreen_gridlinesÚprint_headersÚrow_col_headersÚheader_footer_changedÚheaderÚfooterÚheader_footer_alignsÚheader_footer_scalesÚheader_imagesÚfooter_imagesÚheader_images_listÚmargin_leftÚmargin_rightÚ
margin_topÚmargin_bottomÚmargin_headerÚmargin_footerÚrepeat_row_rangeÚrepeat_col_rangeÚprint_area_rangeÚ
page_orderZblack_whiteZdraft_qualityZprint_commentsÚ
page_startÚfit_pageÚ	fit_widthÚ
fit_heightÚhbreaksÚvbreaksÚprotect_optionsÚprotected_rangesÚnum_protected_rangesZset_colsr   ÚdictÚset_rowsÚzoomÚzoom_scale_normalÚprint_scaleÚis_right_to_leftÚ
show_zerosZleading_zerosÚoutline_row_levelÚoutline_col_levelÚoutline_styleÚoutline_belowÚoutline_rightÚ
outline_onÚoutline_changedÚoriginal_row_heightÚdefault_row_heightÚdefault_row_pixelsÚdefault_col_widthÚdefault_col_pixelsÚdefault_row_zeroedÚnamesZwrite_matchÚtableÚmergeÚ	row_spansÚhas_vmlÚhas_header_vmlÚhas_commentsÚcommentsÚcomments_listÚcomments_authorÚcomments_visibleÚvml_shape_idÚbuttons_listÚvml_header_idÚautofilter_areaÚautofilter_refÚfilter_rangeÚ	filter_onÚfilter_colsÚfilter_typeÚ	col_sizesÚ	row_sizesÚcol_formatsÚcol_size_changedÚrow_size_changedZlast_shape_idÚ	rel_countÚhlink_countÚ
hlink_refsÚexternal_hyper_linksÚexternal_drawing_linksÚexternal_comment_linksÚexternal_vml_linksÚexternal_table_linksÚexternal_background_linksÚdrawing_linksÚvml_drawing_linksÚchartsÚimagesÚtablesÚ
sparklinesÚshapesZ
shape_hashÚdrawingÚdrawing_relsÚdrawing_rels_idÚvml_drawing_relsÚvml_drawing_rels_idÚbackground_imageÚbackground_bytesÚrstringÚprevious_rowÚvalidationsÚcond_formatsÚdata_bars_2010Úuse_data_bars_2010Údxf_priorityÚ	page_viewÚvba_codenameÚ	date_1904Ú
hyperlinksÚstrings_to_numbersÚstrings_to_urlsÚnan_inf_to_errorsÚstrings_to_formulasÚdefault_date_formatÚdefault_url_formatÚremove_timezoneÚmax_url_lengthÚrow_data_filenameÚrow_data_fhÚworksheet_metaÚvml_data_idÚrow_data_fh_closedÚvertical_dpiÚhorizontal_dpiÚwrite_handlersÚignored_errorsÚhas_dynamic_arraysÚuse_future_functions©r"   ©Ú	__class__r(   r)   rR   ¢   sX  




zWorksheet.__init__c                 G   sf  |dkr| j ||g|¢R Ž S | jr | d¡r | j||g|¢R Ž S | d¡r4| d¡r4| j||g|¢R Ž S d|v rq| jrKt d|¡rK| j||g|¢R Ž S | jr^t d|¡r^| j||g|¢R Ž S | jrqt d|¡rq| j||g|¢R Ž S | j	r©z!t
|ƒ}| js„t|ƒs”t|ƒs”| j|||g|d	d … ¢R Ž W S W n	 tyž   Y nw | j||g|¢R Ž S | j||g|¢R Ž S )
NrG   ú=z{=Ú}r-   ú(ftp|http)s?://úmailto:z(in|ex)ternal:r   )Ú_write_blankrâ   Ú
startswithÚ_write_formulaÚendswithrà   ÚreÚmatchÚ
_write_urlrß   Úfloatrá   r   r   Ú_write_numberr!   Ú_write_string)r"   ÚtokenÚrowr8   r#   Úfr(   r(   r)   Ú_write_token_as_stringx  s8   ÿÿ €þz Worksheet._write_token_as_stringc                 G   ó   | j ||g|¢R Ž S )aÎ  
        Write data to a worksheet cell by calling the appropriate write_*()
        method based on the type of data being passed.

        Args:
            row:   The cell row (zero indexed).
            col:   The cell column (zero indexed).
            *args: Args to pass to sub functions.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of called method.

        ©Ú_write©r"   r  r8   r#   r(   r(   r)   Úwrite›  s   zWorksheet.writec           	   	   G   sL  t |ƒstdƒ‚|d }t|ƒ}|| jv r+| j| }|| ||g|¢R Ž }|d u r)n|S |d u r9| j||g|¢R Ž S |tu rG| j||g|¢R Ž S |tv rU| j||g|¢R Ž S |t	u rd| j
|||g|¢R Ž S |tjtjtjtjfv rz| j||g|¢R Ž S tjdk r|tu rz| j
t	|ƒ||g|¢R Ž W S  ttfyœ   Y nw t|tƒr¬| j||g|¢R Ž S t|tƒr¼| j
|||g|¢R Ž S t|tƒrË| j||g|¢R Ž S t|ƒrÙ| j||g|¢R Ž S zt|ƒ}| j|||g|dd … ¢R Ž W S  työ   Y n ty   tdt|ƒ ƒ‚w zt	|ƒ | j||g|¢R Ž W S  ty%   tdt|ƒ ƒ‚w )Nz,write() takes at least 4 arguments (3 given)r   )rF   r   r   r   zUnsupported type %s in write())r   Ú	TypeErrorÚtyperî   rù   ÚboolÚ_write_booleanr
   r  Ústrr  ÚdatetimeÚdateÚtimeÚ	timedeltaÚ_write_datetimeÚsysÚversion_infoÚunicodeÚUnicodeEncodeErrorÚ	NameErrorÚ
isinstancer   r   r   r!   r  )	r"   r  r8   r#   r  Ú
token_typeZwrite_handlerZfunction_returnr  r(   r(   r)   r	  ¯  sr   

ý

ÿ
ÿÿ


 ÿÿzWorksheet._writeNc                 C   ó   |   ||||¡S )a›  
        Write a string to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            string: Cell data. Str.
            format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.

        )r  )r"   r  r8   ÚstringÚcell_formatr(   r(   r)   Úwrite_string  ó   zWorksheet.write_stringc                 C   s~   d}|   ||¡r
dS t|ƒ| jkr|d | j… }d}| js$| j |¡}n|}| jr3|| jkr3|  |¡ t||ƒ| j	| |< |S ©Nr   éÿÿÿÿéþÿÿÿ)
Ú_check_dimensionsr   r^   rW   rU   Ú_get_shared_string_indexrÕ   Ú_write_single_rowÚcell_string_tupler¥   )r"   r  r8   r  r  Ú	str_errorÚstring_indexr(   r(   r)   r    s   
zWorksheet._write_stringc                 C   r  )a„  
        Write a number to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            number:      Cell data. Int or float.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  ©r"   r  r8   Únumberr  r(   r(   r)   Úwrite_number5  ó   zWorksheet.write_numberc                 C   s–   t |ƒst|ƒr*| jr&t |ƒr|  ||d|d¡S t|ƒr%|  ||d|d¡S ntdƒ‚|  ||¡r2dS | jr?|| jkr?|  |¡ t	||ƒ| j
| |< dS )Nú#NUM!z1/0ú#DIV/0!zUNAN/INF not supported in write_number() without 'nan_inf_to_errors' Workbook() optionr#  r   )r   r   rá   rû   r  r%  rW   rÕ   r'  Úcell_number_tupler¥   r+  r(   r(   r)   r  H  s(   ÿÿÿÿ
zWorksheet._write_numberc                 C   r  )aè  
        Write a blank cell with formatting to a worksheet cell. The blank
        token is ignored and the format only is written to the cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            blank:       Any value. It is ignored.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )rù   ©r"   r  r8   Úblankr  r(   r(   r)   Úwrite_blankd  r!  zWorksheet.write_blankc                 C   sL   |d u rdS |   ||¡rdS | jr|| jkr|  |¡ t|ƒ| j| |< dS )Nr   r#  )r%  rW   rÕ   r'  Úcell_blank_tupler¥   r2  r(   r(   r)   rù   x  s   
zWorksheet._write_blankr   c                 C   s   |   |||||¡S )aô  
        Write a formula to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            formula:     Cell formula.
            cell_format: An optional cell Format object.
            value:       An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Formula can't be None or empty.

        )rû   ©r"   r  r8   Úformular  Úvaluer(   r(   r)   Úwrite_formulaŠ  s   zWorksheet.write_formulac              	   C   s:  |   ||¡rdS |d u s|dkrtdƒ dS t d|¡s^t d|¡s^t d|¡s^t d|¡s^t d|¡s^t d	|¡s^t d
|¡s^t d|¡s^t d|¡s^t d|¡s^t d|¡s^t d|¡ri|  |||||||¡S | d¡r~| d¡r~|  |||||||¡S |  |¡}| j	r|| j
kr|  |¡ t|||ƒ| j| |< dS )Nr#  rG   zFormula can't be None or emptyú\bSORT\(ú\bLET\(ú
\bLAMBDA\(ú
\bSINGLE\(ú
\bSORTBY\(ú
\bUNIQUE\(ú
\bXMATCH\(ú
\bFILTER\(ú\bXLOOKUP\(ú\bSEQUENCE\(ú\bRANDARRAY\(ú\bANCHORARRAY\(Ú{rö   r   )r%  r   rý   ÚsearchÚwrite_dynamic_array_formularú   rü   Ú_write_array_formulaÚ_prepare_formularW   rÕ   r'  Úcell_formula_tupler¥   r6  r(   r(   r)   rû      sR   
ÿ
þ
ý
ü
û
ú
ù
ø
	÷

ö
õþÿ

zWorksheet._write_formulac              
   C   s¾   t  d|¡sHt  d|¡sHt  d|¡sHt  d|¡sHt  d|¡sHt  d|¡sHt  d|¡sHt  d|¡sHt  d	|¡sHt  d
|¡sHt  d|¡sHt  d|¡rS|  |||||||¡S |  |||||||d¡S )an  
        Write a formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  Ústatic)rý   rG  rH  rI  )r"   Ú	first_rowÚ	first_colÚlast_rowÚlast_colr7  r  r8  r(   r(   r)   Úwrite_array_formulaÊ  s@   
ÿ
þ
ý
ü
û
ú
ù
ø
	÷

ö
õý
þzWorksheet.write_array_formulac           	   
   C   s*   |   |||||||d¡}|dkrd| _|S )a|  
        Write a dynamic array formula to a worksheet cell/range.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            formula:      Cell formula.
            cell_format:  An optional cell Format object.
            value:        An optional value for the formula. Default is 0.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Údynamicr   T)rI  rð   )	r"   rM  rN  rO  rP  r7  r  r8  Úerrorr(   r(   r)   rH  ô  s   
þz%Worksheet.write_dynamic_array_formulac                 C   s   |  d¡r|dd … }|  d¡r|dd … }| d¡r!|d d… }d|v r'|S t dd|¡}t d	d
|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}| js€|S t dd |¡}t d!d"|¡}t d#d$|¡}t d%d&|¡}t d'd(|¡}t d)d*|¡}t d+d,|¡}t d-d.|¡}t d/d0|¡}t d1d2|¡}t d3d4|¡}t d5d6|¡}t d7d8|¡}t d9d:|¡}t d;d<|¡}t d=d>|¡}t d?d@|¡}t dAdB|¡}t dCdD|¡}t dEdF|¡}t dGdH|¡}t dIdJ|¡}t dKdL|¡}t dMdN|¡}t dOdP|¡}t dQdR|¡}t dSdT|¡}t dUdV|¡}t dWdX|¡}t dYdZ|¡}t d[d\|¡}t d]d^|¡}t d_d`|¡}t dadb|¡}t dcdd|¡}t dedf|¡}t dgdh|¡}t didj|¡}t dkdl|¡}t dmdn|¡}t dodp|¡}t dqdr|¡}t dsdt|¡}t dudv|¡}t dwdx|¡}t dydz|¡}t d{d||¡}t d}d~|¡}t dd€|¡}t dd‚|¡}t dƒd„|¡}t d…d†|¡}t d‡dˆ|¡}t d‰dŠ|¡}t d‹dŒ|¡}t ddŽ|¡}t dd|¡}t d‘d’|¡}t d“d”|¡}t d•d–|¡}t d—d˜|¡}t d™dš|¡}t d›dœ|¡}t ddž|¡}t dŸd |¡}t d¡d¢|¡}t d£d¤|¡}t d¥d¦|¡}t d§d¨|¡}t d©dª|¡}t d«d¬|¡}t d­d®|¡}t d¯d°|¡}t d±d²|¡}t d³d´|¡}t dµd¶|¡}t d·d¸|¡}t d¹dº|¡}t d»d¼|¡}t d½d¾|¡}t d¿dÀ|¡}t dÁdÂ|¡}t dÃdÄ|¡}t dÅdÆ|¡}t dÇdÈ|¡}t dÉdÊ|¡}t dËdÌ|¡}t dÍdÎ|¡}t dÏdÐ|¡}t dÑdÒ|¡}t dÓdÔ|¡}t dÕdÖ|¡}t d×dØ|¡}t dÙdÚ|¡}t dÛdÜ|¡}t dÝdÞ|¡}t dßdà|¡}t dádâ|¡}t dãdä|¡}t dådæ|¡}t dçdè|¡}t dédê|¡}t dëdì|¡}t dídî|¡}t dïdð|¡}t dñdò|¡}t dódô|¡}t dõdö|¡}t d÷dø|¡}t dùdú|¡}t dûdü|¡}t dýdþ|¡}t dÿd |¡}t dd|¡}t dd|¡}t dd|¡}t dd|¡}t d	d
|¡}t dd|¡}|S (  NrF  r   rõ   rö   r#  z_xlfn.r;  z
_xlfn.LET(r<  z_xlfn.LAMBDA(r=  z_xlfn.SINGLE(r>  z_xlfn.SORTBY(r?  z_xlfn.UNIQUE(r@  z_xlfn.XMATCH(r:  z_xlfn._xlws.SORT(rB  z_xlfn.XLOOKUP(rC  z_xlfn.SEQUENCE(rA  z_xlfn._xlws.FILTER(rD  z_xlfn.RANDARRAY(rE  z_xlfn.ANCHORARRAY(z\bCOT\(z
_xlfn.COT(z\bCSC\(z
_xlfn.CSC(z\bIFS\(z
_xlfn.IFS(z\bPHI\(z
_xlfn.PHI(z\bRRI\(z
_xlfn.RRI(z\bSEC\(z
_xlfn.SEC(z\bXOR\(z
_xlfn.XOR(z\bACOT\(z_xlfn.ACOT(z\bBASE\(z_xlfn.BASE(z\bCOTH\(z_xlfn.COTH(z\bCSCH\(z_xlfn.CSCH(z\bDAYS\(z_xlfn.DAYS(z\bIFNA\(z_xlfn.IFNA(z\bSECH\(z_xlfn.SECH(z	\bACOTH\(z_xlfn.ACOTH(z	\bBITOR\(z_xlfn.BITOR(z	\bF.INV\(z_xlfn.F.INV(z	\bGAMMA\(z_xlfn.GAMMA(z	\bGAUSS\(z_xlfn.GAUSS(z	\bIMCOT\(z_xlfn.IMCOT(z	\bIMCSC\(z_xlfn.IMCSC(z	\bIMSEC\(z_xlfn.IMSEC(z	\bIMTAN\(z_xlfn.IMTAN(z	\bMUNIT\(z_xlfn.MUNIT(z	\bSHEET\(z_xlfn.SHEET(z	\bT.INV\(z_xlfn.T.INV(z	\bVAR.P\(z_xlfn.VAR.P(z	\bVAR.S\(z_xlfn.VAR.S(z
\bARABIC\(z_xlfn.ARABIC(z
\bBITAND\(z_xlfn.BITAND(z
\bBITXOR\(z_xlfn.BITXOR(z
\bCONCAT\(z_xlfn.CONCAT(z
\bF.DIST\(z_xlfn.F.DIST(z
\bF.TEST\(z_xlfn.F.TEST(z
\bIMCOSH\(z_xlfn.IMCOSH(z
\bIMCSCH\(z_xlfn.IMCSCH(z
\bIMSECH\(z_xlfn.IMSECH(z
\bIMSINH\(z_xlfn.IMSINH(z
\bMAXIFS\(z_xlfn.MAXIFS(z
\bMINIFS\(z_xlfn.MINIFS(z
\bSHEETS\(z_xlfn.SHEETS(z
\bSKEW.P\(z_xlfn.SKEW.P(z
\bSWITCH\(z_xlfn.SWITCH(z
\bT.DIST\(z_xlfn.T.DIST(z
\bT.TEST\(z_xlfn.T.TEST(z
\bZ.TEST\(z_xlfn.Z.TEST(z\bCOMBINA\(z_xlfn.COMBINA(z\bDECIMAL\(z_xlfn.DECIMAL(z\bRANK.EQ\(z_xlfn.RANK.EQ(z\bSTDEV.P\(z_xlfn.STDEV.P(z\bSTDEV.S\(z_xlfn.STDEV.S(z\bUNICHAR\(z_xlfn.UNICHAR(z\bUNICODE\(z_xlfn.UNICODE(z\bBETA.INV\(z_xlfn.BETA.INV(z\bF.INV.RT\(z_xlfn.F.INV.RT(z\bNORM.INV\(z_xlfn.NORM.INV(z\bRANK.AVG\(z_xlfn.RANK.AVG(z\bT.INV.2T\(z_xlfn.T.INV.2T(z\bTEXTJOIN\(z_xlfn.TEXTJOIN(z\bAGGREGATE\(z_xlfn.AGGREGATE(z\bBETA.DIST\(z_xlfn.BETA.DIST(z\bBINOM.INV\(z_xlfn.BINOM.INV(z\bBITLSHIFT\(z_xlfn.BITLSHIFT(z\bBITRSHIFT\(z_xlfn.BITRSHIFT(z\bCHISQ.INV\(z_xlfn.CHISQ.INV(z\bF.DIST.RT\(z_xlfn.F.DIST.RT(z\bFILTERXML\(z_xlfn.FILTERXML(z\bGAMMA.INV\(z_xlfn.GAMMA.INV(z\bISFORMULA\(z_xlfn.ISFORMULA(z\bMODE.MULT\(z_xlfn.MODE.MULT(z\bMODE.SNGL\(z_xlfn.MODE.SNGL(z\bNORM.DIST\(z_xlfn.NORM.DIST(z\bPDURATION\(z_xlfn.PDURATION(z\bT.DIST.2T\(z_xlfn.T.DIST.2T(z\bT.DIST.RT\(z_xlfn.T.DIST.RT(z\bBINOM.DIST\(z_xlfn.BINOM.DIST(z\bCHISQ.DIST\(z_xlfn.CHISQ.DIST(z\bCHISQ.TEST\(z_xlfn.CHISQ.TEST(z\bEXPON.DIST\(z_xlfn.EXPON.DIST(z\bFLOOR.MATH\(z_xlfn.FLOOR.MATH(z\bGAMMA.DIST\(z_xlfn.GAMMA.DIST(z\bISOWEEKNUM\(z_xlfn.ISOWEEKNUM(z\bNORM.S.INV\(z_xlfn.NORM.S.INV(z\bWEBSERVICE\(z_xlfn.WEBSERVICE(z\bERF.PRECISE\(z_xlfn.ERF.PRECISE(z\bFORMULATEXT\(z_xlfn.FORMULATEXT(z\bLOGNORM.INV\(z_xlfn.LOGNORM.INV(z\bNORM.S.DIST\(z_xlfn.NORM.S.DIST(z\bNUMBERVALUE\(z_xlfn.NUMBERVALUE(z\bQUERYSTRING\(z_xlfn.QUERYSTRING(z\bCEILING.MATH\(z_xlfn.CEILING.MATH(z\bCHISQ.INV.RT\(z_xlfn.CHISQ.INV.RT(z\bCONFIDENCE.T\(z_xlfn.CONFIDENCE.T(z\bCOVARIANCE.P\(z_xlfn.COVARIANCE.P(z\bCOVARIANCE.S\(z_xlfn.COVARIANCE.S(z\bERFC.PRECISE\(z_xlfn.ERFC.PRECISE(z\bFORECAST.ETS\(z_xlfn.FORECAST.ETS(z\bHYPGEOM.DIST\(z_xlfn.HYPGEOM.DIST(z\bLOGNORM.DIST\(z_xlfn.LOGNORM.DIST(z\bPERMUTATIONA\(z_xlfn.PERMUTATIONA(z\bPOISSON.DIST\(z_xlfn.POISSON.DIST(z\bQUARTILE.EXC\(z_xlfn.QUARTILE.EXC(z\bQUARTILE.INC\(z_xlfn.QUARTILE.INC(z\bWEIBULL.DIST\(z_xlfn.WEIBULL.DIST(z\bCHISQ.DIST.RT\(z_xlfn.CHISQ.DIST.RT(z\bFLOOR.PRECISE\(z_xlfn.FLOOR.PRECISE(z\bNEGBINOM.DIST\(z_xlfn.NEGBINOM.DIST(z\bPERCENTILE.EXC\(z_xlfn.PERCENTILE.EXC(z\bPERCENTILE.INC\(z_xlfn.PERCENTILE.INC(z\bCEILING.PRECISE\(z_xlfn.CEILING.PRECISE(z\bCONFIDENCE.NORM\(z_xlfn.CONFIDENCE.NORM(z\bFORECAST.LINEAR\(z_xlfn.FORECAST.LINEAR(z\bGAMMALN.PRECISE\(z_xlfn.GAMMALN.PRECISE(z\bPERCENTRANK.EXC\(z_xlfn.PERCENTRANK.EXC(z\bPERCENTRANK.INC\(z_xlfn.PERCENTRANK.INC(z\bBINOM.DIST.RANGE\(z_xlfn.BINOM.DIST.RANGE(z\bFORECAST.ETS.STAT\(z_xlfn.FORECAST.ETS.STAT(z\bFORECAST.ETS.CONFINT\(z_xlfn.FORECAST.ETS.CONFINT(z\bFORECAST.ETS.SEASONALITY\(z_xlfn.FORECAST.ETS.SEASONALITY()rú   rü   rý   Úsubrñ   ©r"   r7  r(   r(   r)   rJ    sL  


ÿÿÿÿÿÿÿÿÿÿÿÿzWorksheet._prepare_formularL  c	                 C   s  ||kr	||}}||kr||}}|   ||¡rdS |   ||¡r"dS ||kr0||kr0t||ƒ}	nt||ƒd t||ƒ }	|  |¡}| jrN|| jkrN|  |¡ t||||	|ƒ| j| |< | js‚t||d ƒD ]}
t||d ƒD ]}|
|ksx||kr€|  	|
|d|¡ qnqedS )Nr#  r-   r   r   )
r%  r   rJ  rW   rÕ   r'  Úcell_arformula_tupler¥   Úranger  )r"   rM  rN  rO  rP  r7  r  r8  ÚatypeÚ
cell_ranger  r8   r(   r(   r)   rI  ¼  s<   

ÿ

ü€þzWorksheet._write_array_formulac                 C   r  )aŽ  
        Write a date or time to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            date:        Date and/or time as a datetime object.
            cell_format: A cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  )r"   r  r8   r  r  r(   r(   r)   Úwrite_datetimeê  r.  zWorksheet.write_datetimec                 C   sZ   |   ||¡rdS | jr|| jkr|  |¡ |  |¡}|d u r!| j}t||ƒ| j| |< dS )Nr#  r   )r%  rW   rÕ   r'  Ú_convert_date_timerã   r1  r¥   )r"   r  r8   r  r  r,  r(   r(   r)   r  ý  s   

zWorksheet._write_datetimec                 C   r  )aˆ  
        Write a boolean value to a worksheet cell.

        Args:
            row:         The cell row (zero indexed).
            col:         The cell column (zero indexed).
            boolean:     Cell data. bool type.
            cell_format: An optional cell Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        )r  )r"   r  r8   Úbooleanr  r(   r(   r)   Úwrite_boolean  r.  zWorksheet.write_booleanc                 C   sP   |   ||¡rdS | jr|| jkr|  |¡ |rd}nd}t||ƒ| j| |< dS )Nr#  r   r   )r%  rW   rÕ   r'  Úcell_boolean_tupler¥   )r"   r  r8   r\  r  r8  r(   r(   r)   r  &  s   
zWorksheet._write_booleanc                 C   s   |   ||||||¡S )aˆ  
        Write a hyperlink to a worksheet cell.

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            url:    Hyperlink url.
            format: An optional cell Format object.
            string: An optional display string for the hyperlink.
            tip:    An optional tooltip.
        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32767 characters.
            -3: URL longer than Excel limit of 255 characters.
            -4: Exceeds Excel limit of 65,530 urls per worksheet.
        )rÿ   )r"   r  r8   Úurlr  r  Útipr(   r(   r)   Ú	write_urlB  s   zWorksheet.write_urlc                 C   sè  |   ||¡rdS |d u r|}d}| d¡r#| dd¡}| dd¡}d}d}| d¡rD| dd¡}| dd	¡}| dd¡}| dd	¡}d
}| dd¡}d}	t|ƒ| jkrYtdƒ dS |}
|dkr•d|v rl| dd¡\}}
nd }
|  |¡}|
d ur~|s~|  |
¡}
t 	d|¡sŠt 	d|¡rŽd| }t 
dd|¡}|
p˜d}| j}t|ƒ|ks¨t|ƒ|kr´tdt|ƒ|f ƒ dS |  jd7  _| jdkrÊtdt|ƒ ƒ dS | jr×|| jkr×|  |¡ |d u rÞ| j}|  ||||¡ |||
|dœ| j| |< |	S )Nr#  r   ú	internal:rG   é   Fú	external:ú/ú\Trø   r   zFIgnoring URL since it exceeds Excel's string limit of 32767 charactersr$  ú#ú\w:ú\\úfile:///z^\.\\zfIgnoring URL '%s' with link or location/anchor > %d characters since it exceeds Excel's limit for URLSéýÿÿÿiúÿ  zNIgnoring URL '%s' since it exceeds Excel's limit of 65,530 URLS per worksheet.éüÿÿÿ)Ú	link_typer_  r  r`  )r%  rú   Úreplacer   r^   r   r/   Ú_escape_urlrý   rþ   rT  ræ   r	   r¾   rW   rÕ   r'  rä   r  rÞ   )r"   r  r8   r_  r  r  r`  rm  Zexternalr)  Zurl_strZtmp_url_strZmax_urlr(   r(   r)   rÿ   Y  sp   




þ
ÿ
üzWorksheet._write_urlc                 G   r  )aI  
        Write a "rich" string with multiple formats to a worksheet cell.

        Args:
            row:          The cell row (zero indexed).
            col:          The cell column (zero indexed).
            string_parts: String and format pairs.
            cell_format:  Optional Format object.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String truncated to 32k characters.
            -3: 2 consecutive formats used.
            -4: Empty string used.
            -5: Insufficient parameters.

        )Ú_write_rich_stringr
  r(   r(   r)   Úwrite_rich_stringÀ  s   zWorksheet.write_rich_stringc                 G   s
  t |ƒ}d }d}d}|  ||¡rdS t|d tƒr| ¡ }tƒ }tƒ | _| j |¡ tƒ }	g }
d}d}t	|ƒdkr?t
dƒ dS |D ]I}t|tƒsp|dkrW|
 |	¡ |
 |¡ n|
 |¡ |dkrgt
dƒ  d	S |t	|ƒ7 }d
}n|dkr|dkrt
dƒ  dS |
 |¡ d}|d7 }qAt|
d tƒs˜| j d¡ |
D ]4}t|tƒr­| j d¡ |  |¡ qšg }t d|¡s»t d|¡rÀ| d¡ | j d||¡ | j d¡ qš| jj ¡ }|| jkràt
dƒ dS | jsê| j |¡}n|}| jrù|| jkrù|  |¡ t||ƒ| j| |< dS )Nr   r#  r@   rc  zfYou must specify more than 2 format/fragments for rich strings. Ignoring input in write_rich_string().éûÿÿÿrG   zYExcel doesn't allow empty strings in rich strings. Ignoring input in write_rich_string().rl  r  zaExcel doesn't allow 2 consecutive formats in rich strings. Ignoring input in write_rich_string().rk  r   Úrú^\sú\s$)z	xml:spaceÚpreserveÚtzfString length must be less than or equal to Excel's limit of 32,767 characters in write_rich_string().r$  )Úlistr%  r  r   Úpopr   r   rÔ   Z_set_filehandler   r   ÚappendÚ_xml_start_tagÚ_write_fontrý   rG  Ú_xml_data_elementÚ_xml_end_tagÚfhÚgetvaluer^   rW   rU   r&  rÕ   r'  r(  r¥   )r"   r  r8   r#   Útokensr  Z
str_lengthr*  r  ÚdefaultÚ	fragmentsÚpreviousÚposr  Ú
attributesr  r(   r(   r)   rp  Ø  sr   








zWorksheet._write_rich_stringc                 C   s   || j |< dS )a"  
        Add a callback function to the write() method to handle user defined
        types.

        Args:
            user_type:      The user type() to match on.
            user_function:  The user defined function to write the type data.
        Returns:
            Nothing.

        N)rî   )r"   Z	user_typeÚuser_functionr(   r(   r)   Úadd_write_handlerH  s   zWorksheet.add_write_handlerc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }qdS )a†  
        Write a row of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r  ©r"   r  r8   Údatar  r  rS  r(   r(   r)   Ú	write_rowW  ó   
zWorksheet.write_rowc                 C   s2   |D ]}|   ||||¡}|r|  S |d7 }qdS )a‰  
        Write a column of data starting from (row, col).

        Args:
            row:    The cell row (zero indexed).
            col:    The cell column (zero indexed).
            data:   A list of tokens to be written with write().
            format: An optional cell Format object.
        Returns:
            0:  Success.
            other: Return value of write() method.

        r   r   r  r‰  r(   r(   r)   Úwrite_columnn  rŒ  zWorksheet.write_columnc                 C   s  |   ||dd¡rtd||f ƒ dS |du ri }| dd¡}| dd¡}| dd	¡}| d
d	¡}| dd¡}	| dd¡}
| dd¡}| dd¡}| dd¡}| dd¡}| d|¡}|sltj |¡sltdt|ƒ ƒ dS | j ||||||||	|
||||g¡ dS )a¸  
        Insert an image with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            filename: Path and filename for in supported formats.
            options:  Position, scale, url and data stream of the image.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert image at (%d, %d).r#  NÚx_offsetr   Úy_offsetÚx_scaler   Úy_scaler_  r`  Úobject_positionrc  Ú
image_dataÚdescriptionÚ
decorativeFZpositioningúImage file '%s' not found.)	r%  r   ÚgetÚosÚpathÚexistsr	   rÉ   rz  )r"   r  r8   ÚfilenameÚoptionsrŽ  r  r  r‘  r_  r`  Úanchorr“  r”  r•  r(   r(   r)   Úinsert_image…  s0   þzWorksheet.insert_imagec           
      C   sš   |   ||dd¡rtd||f ƒ dS |du rd}|du ri }| dd¡}| dd¡}| d	d
¡}| dd
¡}| dd
¡}	| j ||||||||	|g	¡ dS )a†  
        Insert an textbox with its top-left corner in a worksheet cell.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            text:     The text for the textbox.
            options:  Textbox options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz"Cannot insert textbox at (%d, %d).r#  NrG   rŽ  r   r  r  r   r‘  r’  )r%  r   r—  rÌ   rz  )
r"   r  r8   Útextrœ  rŽ  r  r  r‘  r  r(   r(   r)   Úinsert_textbox´  s    
ÿzWorksheet.insert_textboxc           
   
   C   sø   |   ||dd¡rtd||f ƒ dS |du ri }|js"|jr(|jjr(tdƒ dS d|_|jr2d|j_| dd¡}| dd¡}| d	d
¡}| dd
¡}| dd
¡}	|jd
krX|j}|jd
kr`|j}|jrf|j}|jrl|j}| j	 
||||||||	g¡ dS )a„  
        Insert an chart with its top-left corner in a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            chart:   Chart object.
            options: Position and scale of the chart.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz Cannot insert chart at (%d, %d).r#  Nz7Chart cannot be inserted in a worksheet more than once.rŽ  r   r  r  r   r‘  r’  )r%  r   Zalready_insertedÚcombinedr—  r  r‘  rŽ  r  rÈ   rz  )
r"   r  r8   Úchartrœ  rŽ  r  r  r‘  r  r(   r(   r)   Úinsert_chartÙ  s@   ÿ

ýzWorksheet.insert_chartc                 C   sT   |du ri }|   ||¡rdS t|ƒ| jkrdS d| _d| _||||g| j| |< dS )až  
        Write a comment to a worksheet cell.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            comment: Cell comment. Str.
            options: Comment formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: String longer than 32k characters.

        Nr#  r$  r   r   )r%  r   r^   r¨   rª   r«   )r"   r  r8   Úcommentrœ  r(   r(   r)   Úwrite_comment  s   zWorksheet.write_commentc                 C   ó
   d| _ dS )z†
        Make any comments in the worksheet visible.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r®   rò   r(   r(   r)   Úshow_comments:  ó   
zWorksheet.show_commentsFc                 C   s4   |st j |¡stdt|ƒ ƒ dS || _|| _dS )zî
        Set a background image for a worksheet.

        Args:
            filename:       Path and filename for in supported formats.
            is_byte_stream: File is a stream of bytes.
        Returns:
            Nothing.

        r–  r#  N)r˜  r™  rš  r   r	   rÓ   rÒ   )r"   r›  Zis_byte_streamr(   r(   r)   Úset_backgroundG  s
   
zWorksheet.set_backgroundc                 C   ó
   || _ dS )z¦
        Set the default author of the cell comments.

        Args:
            author: Comment author name. String.

        Returns:
            Nothing.

        N)r­   )r"   Úauthorr(   r(   r)   Úset_comments_authorZ  r¨  zWorksheet.set_comments_authorc                 C   s   | j S )zw
        Retrieve the worksheet name.

        Args:
            None.

        Returns:
            Nothing.

        )rS   rò   r(   r(   r)   Úget_nameg  s   zWorksheet.get_namec                 C   s   d| _ d| _| j| j_dS )a  
        Set this worksheet as the active worksheet, i.e. the worksheet that is
        displayed when the workbook is opened. Also set it as selected.

        Note: An active worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)re   rj   rT   ré   Zactivesheetrò   r(   r(   r)   Úactivateu  s   zWorksheet.activatec                 C   ó   d| _ d| _dS )zó
        Set current worksheet as a selected worksheet, i.e. the worksheet
        has its tab highlighted.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)rj   re   rò   r(   r(   r)   Úselect‡  s   
zWorksheet.selectc                 C   r¯  )zv
        Hide the current worksheet.

        Args:
            None.

        Returns:
            Nothing.

        r   r   N)re   rj   rò   r(   r(   r)   Úhide˜  s   
zWorksheet.hidec                 C   s   d| _ | j| j_dS )aJ  
        Set current worksheet as the first visible sheet. This is necessary
        when there are a large number of worksheets and the activated
        worksheet is not visible on the screen.

        Note: A selected worksheet cannot be hidden.

        Args:
            None.

        Returns:
            Nothing.

        r   N)re   rT   ré   Z
firstsheetrò   r(   r(   r)   Úset_first_sheet«  s   zWorksheet.set_first_sheetc                 C   s  |du ri }||kr||}}d}|  dd¡}|  dd¡}|  dd¡}	|s)|r,|r,d}
nd}
|  d|||
¡r8dS |  d|||
¡rBdS |	dk rHd}	|	d	krNd	}	|	| jkrV|	| _||||||	|g| jd
| < d| _|du rn| j}t||d ƒD ]}||g| j|< |r…|| j|< qudS )a  
        Set the width, and other properties of a single column or a
        range of columns.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        NTre   FÚ	collapsedÚlevelr   r#  é   z%05dr   )	r—  r%  r˜   rc   r»   r¡   rW  r¸   rº   )r"   rN  rP  Úwidthr  rœ  Ú
ignore_rowre   r³  r´  Ú
ignore_colr8   r(   r(   r)   Ú
set_column½  sD   

þ
€zWorksheet.set_columnc                 C   s$   |dur	|   |¡}|  |||||¡S )a;  
        Set the width, and other properties of a single column or a
        range of columns, where column width is in pixels.

        Args:
            first_col:   First column (zero-indexed).
            last_col:    Last column (zero-indexed). Can be same as first_col.
            width:       Column width in pixels. (optional).
            cell_format: Column cell_format. (optional).
            options:     Dict of options such as hidden and level.

        Returns:
            0:  Success.
            -1: Column number is out of worksheet bounds.

        N)Ú_pixels_to_widthr¹  )r"   rN  rP  r¶  r  rœ  r(   r(   r)   Úset_column_pixels  s
   

ÿzWorksheet.set_column_pixelsc           	      C   sÊ   |du ri }| j dur| j }nd}|  ||¡rdS |du r | j}| dd¡}| dd¡}| dd¡}|dkr;d}| j}|dk rAd}|d	krGd	}|| jkrO|| _|||||g| j|< d
| _||g| j|< dS )aš  
        Set the width, and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        Nr   r#  re   Fr³  r´  r   rµ  T)ra   r%  rŸ   r—  r—   r‘   r¼   r¹   )	r"   r  Úheightr  rœ  Zmin_colre   r³  r´  r(   r(   r)   Úset_row!  s2   

zWorksheet.set_rowc                 C   s"   |dur	|   |¡}|  ||||¡S )a°  
        Set the width (in pixels), and other properties of a row.

        Args:
            row:         Row number (zero-indexed).
            height:      Row height in pixels. (optional).
            cell_format: Row cell_format. (optional).
            options:     Dict of options such as hidden, level and collapsed.

        Returns:
            0:  Success.
            -1: Row number is out of worksheet bounds.

        N)Ú_pixels_to_heightr½  )r"   r  r¼  r  rœ  r(   r(   r)   Úset_row_pixels^  s   
zWorksheet.set_row_pixelsc                 C   s6   |du r| j }|| jkrd| _|| _ |rd| _dS dS )zý
        Set the default row properties.

        Args:
            height:           Default height. Optional, defaults to 15.
            hide_unused_rows: Hide unused rows. Optional, defaults to False.

        Returns:
            Nothing.

        NTr   )rŸ   rž   r¼   r£   )r"   r¼  Zhide_unused_rowsr(   r(   r)   Úset_default_rowr  s   

ÿzWorksheet.set_default_rowc           	      C   sÒ   ||kr||krt dƒ dS ||kr||}}||kr ||}}|  ||¡r(dS |  ||¡r0dS | j ||||g¡ |  ||||¡ t||d ƒD ]}t||d ƒD ]}||kr]||kr]qR|  ||d|¡ qRqIdS )a3  
        Merge a range of cells.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            data:         Cell data.
            cell_format:  Cell Format object.

        Returns:
             0:    Success.
            -1:    Row or column is out of worksheet bounds.
            other: Return value of write().

        zCan't merge single cellNr#  r   rG   r   )r   r%  r¦   rz  r	  rW  rù   )	r"   rM  rN  rO  rP  rŠ  r  r  r8   r(   r(   r)   Úmerge_range‰  s(   

ýzWorksheet.merge_rangec                 C   s\   ||k r	||}}||k r||}}|   ||||¡}t||||ƒ}|| _|| _||g| _dS )aƒ  
        Set the autofilter area in the worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
             Nothing.

        N)Ú_convert_name_arear   r²   r³   r´   )r"   rM  rN  rO  rP  ÚareaÚrefr(   r(   r)   Ú
autofilterÀ  s   

ÿzWorksheet.autofilterc                 C   s`  | j s	tdƒ dS zt|ƒ W n! ty0   |}t|d ƒ\}}|| jkr.td| ƒ Y dS Y nw | j\}}||k s>||krItd|||f ƒ dS |  |¡}t|ƒdks`t|ƒdks`td| ƒ |  	||¡}t|ƒd	kr||d
 d	kr||  
||d g¡ n/t|ƒdkr¡|d
 d	kr¡|d	 dkr¡|d d	kr¡|  
||d |d g¡ n
|| j|< d
| j|< d| _dS )zÆ
        Set the column filter criteria.

        Args:
            col:       Filter column (zero-indexed).
            criteria:  Filter criteria.

        Returns:
             Nothing.

        ú-Must call autofilter() before filter_column()Nr6   úInvalid column '%s'z6Column '%d' outside autofilter() column range (%d, %d)rF   rµ  z+Incorrect number of tokens in criteria '%s'rc  r   r   é   é   )r²   r   r    r!   r   r]   r´   Ú_extract_filter_tokensr   Ú_parse_filter_expressionÚfilter_column_listr¶   r·   rµ   )r"   r8   ÚcriteriaÚ
col_letterr:   Ú	col_firstÚcol_lastr  r(   r(   r)   Úfilter_columnÞ  s@   
þû
	ÿ
$
ÿ


zWorksheet.filter_columnc                 C   s°   | j s	tdƒ dS zt|ƒ W n! ty0   |}t|d ƒ\}}|| jkr.td| ƒ Y dS Y nw | j\}}||k s>||krItd|||f ƒ dS || j|< d| j|< d| _	dS )zî
        Set the column filter criteria in Excel 2007 list style.

        Args:
            col:      Filter column (zero-indexed).
            filters:  List of filter criteria to match.

        Returns:
             Nothing.

        rÆ  Nr6   rÇ  z5Column '%d' outside autofilter() column range (%d,%d)r   )
r²   r   r    r!   r   r]   r´   r¶   r·   rµ   )r"   r8   ÚfiltersrÎ  r:   rÏ  rÐ  r(   r(   r)   rÌ    s,   
þû
	ÿ


zWorksheet.filter_column_listc                 C   s  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }i dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“}| ¡ D ]}||vrdtd| ƒ  dS qUd|v ro|d |d< d|v ry|d |d< d|vrƒtdƒ dS dddddddddddddœ}|d |vr¢td |d  ƒ dS ||d  |d< |d dkrÀ| d¡du rÀ| d¡du rÀdS |d dksÒ|d dksÒ|d dkrÚd!|d< d|d	< d|vrätd"ƒ dS i d!d!“d#d$“d%d&“d'd&“d(d&“d)d*“d+d*“d,d*“d-d.“d/d.“d0d1“d2d1“d3d4“d5d4“d6d7“d8d7“}	|d |	vr'td9|d  ƒ dS |	|d  |d< |d d!ks=|d d$krId	|vrHtd:ƒ dS nd|d	< d;d<d=d>œ}
d|vr]d;|d< n|d |
vrntd?|d  ƒ dS |
|d  |d< |d dks„|d dkr¶|d rt|d ƒr|  |d ¡}d@| |d< |d	 r¶t|d	 ƒr¶|  |d	 ¡}d@| |d	< | d¡rÑt|d ƒdAkrÑtdBt|d ƒ ƒ dS | d¡rìt|d ƒdAkrìtdCt|d ƒ ƒ dS | d¡rt|d ƒdDkrtdEt|d ƒ ƒ dS | d¡r"t|d ƒdDkr"tdFt|d ƒ ƒ dS |d dkrJt	|d ƒt
u rJ| j|d Ž }t|ƒdDkrJtdGt|ƒ ƒ dS d
|vrSd<|d
< d|vr\d<|d< d|vred<|d< d|vrnd<|d< ||||gg|dH< d|v r…|dH  |d ¡ | j |¡ d;S )Ia  
        Add a data validation to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Data validation options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr#  NÚvalidaterÍ  r8  ÚsourceÚminimumÚmaximumÚignore_blankÚdropdownÚ
show_inputÚinput_titleÚinput_messageÚ
show_errorÚerror_titleÚerror_messageÚ
error_typeZother_cellsz+Unknown parameter '%s' in data_validation()r$  z5Parameter 'validate' is required in data_validation()ÚnoneÚwholeÚdecimalrx  r  r  Ú
textLengthÚcustom)Úanyz	any valuezwhole numberrá  Úintegerrâ  rx  r  r  ztext lengthÚlengthrä  zJUnknown validation type '%s' for parameter 'validate' in data_validation()Úbetweenz5Parameter 'criteria' is required in data_validation()únot betweenÚ
notBetweenúequal toÚequalrõ   ú==únot equal toÚnotEqualú!=ú<>úgreater thanÚgreaterThanú>ú	less thanÚlessThanú<úgreater than or equal toÚgreaterThanOrEqualú>=úless than or equal toÚlessThanOrEqualú<=zHUnknown criteria type '%s' for parameter 'criteria' in data_validation()zcParameter 'maximum' is required in data_validation() when using 'between' or 'not between' criteriar   r   rc  )ÚstopÚwarningÚinformationzJUnknown criteria type '%s' for parameter 'error_type' in data_validation()ú%.16gé    z6Length of input title '%s' exceeds Excel's limit of 32z6Length of error title '%s' exceeds Excel's limit of 32éÿ   z9Length of input message '%s' exceeds Excel's limit of 255z9Length of error message '%s' exceeds Excel's limit of 255zSLength of list items '%s' exceeds Excel's limit of 255, use a formula range insteadÚcells)r%  ÚcopyÚkeysr   r—  r   r[  r   r	   r  rx  Ú	_csv_joinr0   rÖ   rz  )r"   rM  rN  rO  rP  rœ  Úvalid_parametersÚ	param_keyÚvalid_typesZcriteria_typesZerror_typesÚ	date_timer7  r(   r(   r)   Údata_validationA  sŽ  ÿþýüûúùø	÷
öõôóòñðþôÿÿþ
ÿ
þÿþýüûúùø	÷
öõôóòñðÿ
ÿ
ýý

ÿ


ÿ
ÿÿ
ÿÿ
ÿ þ




zWorksheet.data_validationc                 C   sj  |   ||dd¡r
dS |   ||dd¡rdS |du ri }n| ¡ }i dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“i dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d“d!d“d"d“d#d“d$d“d%d“¥ddd&œ¥}| ¡ D ]}||vr¡td'| ƒ  d(S q’d|vr¬td)ƒ d(S i d*d+“d,d,“d-d-“d.d/“d0d1“d2d3“d4d5“d6d5“d7d7“d8d9“d:d;“d<d=“d>d?“d@dA“dBdB“dCdC“dDdE“dFdGdHœ¥}|d |vrötdI|d  ƒ d(S |d d6krd6|dJ< ||d  |d< i dKdK“dLdM“dNdO“dPdO“dQdO“dRdS“dTdS“dUdS“dVdW“dXdW“dYdZ“d[dZ“d\d]“d^d]“d_d`“dad`“dbdc“dddedfdgdhdidjdkdldmdndodldodpœ¥}	d|v rc|d |	v rc|	|d  |d< |d d,ksq|d d-krÒd+|d< d|v r”t|d ƒs‡tdqƒ d(S |  |d ¡}
dr|
 |d< d|v r³t|d ƒs¦tdsƒ d(S |  |d ¡}
dr|
 |d< d	|v rÒt|d	 ƒsÅtdtƒ d(S |  |d	 ¡}
dr|
 |d	< i dudv“dwdx“dydz“d{d|“d}d~“dd€“dd‚“dƒd„“d…d†“d‡dˆ“d‰dŠ“d‹dŒ“ddŽ“dd“d‘d’“d“d”“d•d–“}|d dGkr^| d$¡std—ƒ d˜S |d$ |vr+td™|d$  ƒ d(S ||d$  |d$< dš|d›< |d$  dœ¡rDd|d›< n|d$  dž¡rPdŸ|d›< |  | d›¡| d ¡¡|d < ||krh||}}||krr||}}t	||||ƒ}t
||ƒ}d|v r|d }| d¡d¢¡}d|v rŸ|d rŸ|d  ¡ |d< | j|d£< |  jd¤7  _| jsñ| d#¡sñ| d¡sñ| d¡sñ| d¡sñ| d¡sñ| d¡sñ| d¡sñ| d¡sñ| d ¡sñ| d!¡sñ| d¡rõd|d¥< |d d7krf|d dckrdc|d< d¦|d |f |d§< nT|d ddkr(d¨|d< d©|d |f |d§< n>|d dekrCde|d< dª|t|d ƒ|d f |d§< n#|d dfkr^df|d< d«|t|d ƒ|d f |d§< ntd¬|d  ƒ |d d9kr|d dgkr{d­| |d§< n—|d dhkr‰d®| |d§< n‰|d d¯kr—d°| |d§< n{|d dikr§d±||f |d§< nk|d djkr·d²||f |d§< n[|d dkkrÇd³||f |d§< nK|d dlkr×d´||f |d§< n;|d dmkrèdµ|||f |d§< n*|d dnkrød¶||f |d§< n|d dokr
d·||||f |d§< ntd¸|d  ƒ |d d;krd¹| |d§< |d d=kr,dº| |d§< |d d?kr9d»| |d§< |d dAkrFd¼| |d§< |d dBkr‘d½|d< d|d< d|d< d|d< | dd¾¡ | dd¿¡ | ddÀ¡ | ddÀ¡ | ddÁ¡ | ddÂ¡ t|d ƒ|d< t|d ƒ|d< |d dCkrñd½|d< d|d< | dd¾¡ | ddÃ¡ | dd¿¡ | ddÀ¡ | ddÀ¡ | ddÄ¡ | ddÅ¡ | ddÆ¡ t|d ƒ|d< t|d ƒ|d< t|d ƒ|d< d|vrñdÇ|d< |d dEkr¤d|d< | d¡sd¾|d< dÈ|dÉ< n|d |dÉ< | d¡s d¿|d< dÊ|dË< n|d |dË< | ddÀ¡ | ddÀ¡ | ddÌ¡ | d|d ¡ | d"dÍ¡ | ddÍ¡ | ddÍ¡ | dd¢¡ | ddÎ¡ | ddÎ¡ | ddÍ¡ | ddÍ¡ | d d¢¡ | d!dÏ¡ t|d ƒ|d< t|d ƒ|d< t|d! ƒ|d!< t|d ƒ|d< t|d ƒ|d< | d¥¡rÕdÐ| _|d d¾kr¿|d dÀkr¿d|d< |d d¿krÑ|d dÀkrÑd|d< ||dÑ< z|d  dP¡|d< W n ttfyì   Y nw z|d  dP¡|d< W n ttfy   Y nw z|d  dP¡|d< W n ttfy   Y nw || jv r-| j|  |¡ dÀS |g| j|< dÀS )Òa#  
        Add a conditional format to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Conditional format options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.
        Tr#  Nr  r@   rÍ  r8  rÕ  rÖ  Ústop_if_trueÚmin_typeÚmid_typeÚmax_typeÚ	min_valueÚ	mid_valueÚ	max_valueÚ	min_colorÚ	mid_colorÚ	max_colorÚ
min_lengthÚ
max_lengthZmulti_rangeÚ	bar_colorÚbar_negative_colorÚbar_negative_color_sameÚ	bar_solidÚbar_border_colorÚbar_negative_border_colorÚbar_negative_border_color_sameÚbar_no_borderÚbar_directionÚbar_axis_positionÚbar_axis_colorÚbar_onlyZdata_bar_2010Ú
icon_styleÚreverse_icons)Ú
icons_onlyÚiconsz.Unknown parameter '%s' in conditional_format()r$  z4Parameter 'type' is required in conditional_format()ÚcellÚcellIsr  r  ÚaverageÚaboveAverageZ	duplicateÚduplicateValuesÚuniqueÚuniqueValuesÚtopÚtop10ÚbottomrŸ  Ztime_periodÚ
timePeriodÚblanksÚcontainsBlanksZ	no_blanksÚnotContainsBlanksÚerrorsÚcontainsErrorsZ	no_errorsÚnotContainsErrorsZ2_color_scaleZ3_color_scaleÚdata_barÚdataBarÚ
expressionÚiconSet)r7  Zicon_setz?Unknown value '%s' for parameter 'type' in conditional_format()Ú	directionrè  ré  rê  rë  rì  rõ   rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  Z
containingÚcontainsTextZnotContainsÚ
beginsWithÚendsWithÚ	yesterdayÚtodayZ	last7DaysZlastWeekZthisWeekZnextWeekZ	lastMonthZ	thisMonthZ	nextMonth)znot containingzbegins withz	ends withrB  rC  zlast 7 daysz	last weekz	this weekz	next weekz
last monthz
this monthz
next monthzcontinue weekzcontinue monthz5Conditional format 'value' must be a datetime object.r  z7Conditional format 'minimum' must be a datetime object.z7Conditional format 'maximum' must be a datetime object.Z3_arrowsZ3ArrowsZ3_flagsZ3FlagsZ3_traffic_lights_rimmedZ3TrafficLights2Z3_symbols_circledZ3SymbolsZ4_arrowsZ4ArrowsZ4_red_to_blackZ4RedToBlackZ4_traffic_lightsZ4TrafficLightsZ5_arrows_grayZ5ArrowsGrayZ
5_quartersZ	5QuartersZ3_arrows_grayZ3ArrowsGrayZ3_traffic_lightsÚ3TrafficLightsZ3_signsZ3SignsZ	3_symbolsZ	3Symbols2Z4_arrows_grayZ4ArrowsGrayZ	4_ratingsZ4RatingZ5_arrowsZ5ArrowsZ	5_ratingsZ5Ratingz^The 'icon_style' parameter must be specified when 'type' == 'icon_set' in conditional_format()rk  z/Unknown icon_style '%s' in conditional_format()rF   Útotal_iconsÚ4rÉ  Ú5rÈ  r(  ú$rG   Úpriorityr   Úis_data_bar_2010zNOT(ISERROR(SEARCH("%s",%s)))r7  ÚnotContainsTextzISERROR(SEARCH("%s",%s))zLEFT(%s,%d)="%s"zRIGHT(%s,%d)="%s"z2Invalid text criteria '%s' in conditional_format()zFLOOR(%s,1)=TODAY()-1zFLOOR(%s,1)=TODAY()ZtomorrowzFLOOR(%s,1)=TODAY()+1z0AND(TODAY()-FLOOR(%s,1)<=6,FLOOR(%s,1)<=TODAY())z]AND(TODAY()-ROUNDDOWN(%s,0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(%s,0)<(WEEKDAY(TODAY())+7))z\AND(TODAY()-ROUNDDOWN(%s,0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(%s,0)-TODAY()<=7-WEEKDAY(TODAY()))z_AND(ROUNDDOWN(%s,0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(%s,0)-TODAY()<(15-WEEKDAY(TODAY())))zdAND(MONTH(%s)=MONTH(TODAY())-1,OR(YEAR(%s)=YEAR(TODAY()),AND(MONTH(%s)=1,YEAR(A1)=YEAR(TODAY())-1)))z4AND(MONTH(%s)=MONTH(TODAY()),YEAR(%s)=YEAR(TODAY()))zeAND(MONTH(%s)=MONTH(TODAY())+1,OR(YEAR(%s)=YEAR(TODAY()),AND(MONTH(%s)=12,YEAR(%s)=YEAR(TODAY())+1)))z9Invalid time_period criteria '%s' in conditional_format()zLEN(TRIM(%s))=0zLEN(TRIM(%s))>0zISERROR(%s)zNOT(ISERROR(%s))Ú
colorScaleÚminÚmaxr   z#FF7128z#FFEF9CÚ
percentilez#F8696Bz#FFEB84z#63BE7Bé2   ÚautoMinÚx14_min_typeÚautoMaxÚx14_max_typez#638EC6Fz#FF0000z#000000éÚ  rW  )r%  r  r  r   r   r[  r—  rú   Ú_set_icon_propsr   r   rn  Ú_get_dxf_indexrÚ   rÙ   r   Ú
setdefaultr   rZ   ÚlstripÚKeyErrorÚAttributeErrorr×   rz  )r"   rM  rN  rO  rP  rœ  Úvalid_parameterr	  Z
valid_typeZcriteria_typer  Zvalid_iconsrY  Ú
start_cellr(   r(   r)   Úconditional_format.	  s¦  ÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ü'ÿýÿþýüûúùø	÷
öõôóòñðïíÿÿþýüûúùø	÷
öõôóòñðïà#


ÿþýüûúùø	÷
öõôóòñðïÿ
ÿ






ÿþýüûúùø	÷
öõ

ÿ

ÿ
þ
ÿ
þ
ÿÿÿÿþÿþÿþÿþÿÿÿ
þÿÿ



ÿ
ÿÿÿÿþzWorksheet.conditional_formatc                 C   s$  i }i }|du ri }n|  ¡ }| jrtdƒ dS |  ||dd¡r"dS |  ||dd¡r,dS ||kr5||}}||kr>||}}ddddddddddddœ}| ¡ D ]}	|	|vr_td|	 ƒ  dS qP| d	d¡|d	< | d
d¡|d
< | dd¡|d< || }
|d
 r„|
d8 }
|
dk rŽtdƒ dS | dd¡|d< | dd¡|d< | d	d¡|d< | dd¡|d< | d
d¡|d< | dd¡|d< d|v r|d }||d< d|v rÙtdt|ƒ ƒ dS t d|tj	¡rçt d|¡rñtdt|ƒ ƒ dS t d |¡rtd!t|ƒ ƒ dS t d"|¡st d#|¡rtd$t|ƒ ƒ dS d%|v r;|d% |d%< |d% du r0d&|d%< |d%  
dd&¡|d%< nd'|d%< |}|}| d
¡rM|d7 }| d¡rW|d8 }t||||ƒ|d(< t||||ƒ|d)< |d
 srd|d< |d r}|d) |d< d}g |d*< i }t||d ƒD ]#}|d+t|ƒ d&d&dd&ddd,œ}d*|v r“|t|d* ƒkrµ|d* |d  }nd}|r“| d-d¡}| d.¡rÌ|d. |d< |d }| ¡ }||v rätd/t|ƒ ƒ  dS d||< | d0¡|d1< d2|v r%|d2 r%|d2 }| d3¡r| d3¡}| 
d4d5¡}||d2< t||d ƒD ]}|  ||||¡ q| d6¡ri|d6 }| ¡ }| 
d7d&¡}| 
dd&¡}|d8krFd9}|d:krMd;}||d6< |  ||d ¡}| d<d¡}|  |||||¡ n| d=¡r‚|d= }||d=< |  |||| d-¡¡ |dur| ¡ |d-< |||d < |d*  |¡ |d
 r«|  |||d |d1 ¡ |d7 }qŒd>|v r
|d> }d}t||d ƒD ]F}d}t||d ƒD ]5}|t|ƒk rþ|t|| ƒk rþ|| | }||v rö|  ||||| ¡ n|  |||d¡ |d7 }qÎ|d7 }qÃ| j |¡ dS )?aY  
        Add an Excel table to a worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.
            options:      Table format options. (Optional)

        Returns:
            0:  Success.
            -1: Not supported in constant_memory mode.
            -2: Row or column is out of worksheet bounds.
            -3: Incorrect parameter or option.
        Nz5add_table() isn't supported in 'constant_memory' moder#  Tr$  )rÅ  Úbanded_columnsÚbanded_rowsÚcolumnsrŠ  Úfirst_columnÚ
header_rowÚlast_columnrS   ÚstyleÚ	total_rowz%Unknown parameter '%s' in add_table()rk  r`  rc  rÅ  r   r   z1Must have at least one data row in in add_table()rb  FZshow_first_colrd  Zshow_last_colZshow_row_stripesr_  Zshow_col_stripesZheader_row_countrf  Ztotals_row_shownrS   ú z.Name '%s' in add_table() cannot contain spacesz^[\w\\][\w\\.]*$z^\dz-Invalid Excel characters in add_table(): '%s'z"^[a-zA-Z][a-zA-Z]?[a-dA-D]?[0-9]+$z0Name looks like a cell name in add_table(): '%s'z^[rcRC]$z^[rcRC]\d+[rcRC]\d+$z3Invalid name '%s' like a RC cell ref in add_table()re  rG   ZTableStyleMedium9rW  Za_rangera  ÚColumn)ÚidrS   Útotal_stringÚtotal_functionÚtotal_valuer7  r@   Úname_formatr@   rv   z*Duplicate header name in add_table(): '%s'Zheader_formatrm  r7  rõ   ú@z[#This Row],rk  r:   Z	countnumsÚ	countNumsZstddevÚstdDevrl  rj  rŠ  )r  rW   r   r%  r  r—  r	   rý   rþ   ÚUNICODErn  r   rW  r  r   Úlowerrú   rY  rû   Ú_table_function_to_formular  rW  rz  r	  rÊ   )r"   rM  rN  rO  rP  rœ  r¥   rº   r\  r	  Znum_rowsrS   Zfirst_data_rowZlast_data_rowÚcol_idZ
seen_namesÚcol_numZcol_dataÚ	user_dataZxformatÚheader_namer7  r  Úfunctionr8  rj  rŠ  ÚiÚjr8   r  r(   r(   r)   Ú	add_table  sn  

õþ
ÿ
ÿÿÿ
ÿÿ
ÿÿ


ø

ÿ


ÿÿ
ÿ
ÿ

ÿ
 
zWorksheet.add_tablec                 C   s6  |   ||dd¡r
dS dt||ƒgi}|du ri }i dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“ddddddddddœ	¥}| ¡ D ]}||vrltd| ƒ  dS q]d|vrwtdƒ dS | dd¡}|dvr‡tdƒ dS |dkrd}||d< d|v r«t|d ƒtu r¤|d |d< n|d g|d< t|d ƒtu rº|d |d< n|d g|d< t|d ƒ}t|d ƒ}	||	kr×td ƒ dS t|d ƒ|d!< t| j	ƒ}
g }|d D ]}| 
d"d#¡}| d$¡}d%|vr|
d% | }| |¡ qê||d< g }|d D ]}| 
d"d#¡}| |¡ q||d< | d¡|d&< | d	¡|d'< | d
¡|d(< | d¡|d)< | d¡|d*< | d¡|d< | d+¡|d+< | d,¡|d,< | d-¡|d-< | d.¡|d.< | d/¡|d0< | d1¡|d1< | d2d#¡}|d3kr‰d4|d5< n|d6kr“d7|d5< nd8|d5< | d9¡}|rªd%|vrª|
d% | }||d9< | dd4¡}t|ƒ}|d: |d< |d( |d< |d |d< |d) |d< |d* |d< |d& |d< |d' |d< |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ |  ||d¡ | j |¡ d4S );ap  
        Add sparklines to the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Sparkline formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.
            -2: Incorrect parameter or option.

        Tr#  Ú	locationsNÚlocationrW  r  Z
high_pointZ	low_pointZnegative_pointsZfirst_pointZ
last_pointÚmarkersre  Úseries_colorÚnegative_colorÚmarkers_colorÚfirst_colorÚ
last_colorÚ
high_colorÚ	low_color)	rN  rM  ÚaxisÚreverseÚempty_cellsÚshow_hiddenZplot_hiddenÚ	date_axisÚweightz)Unknown parameter '%s' in add_sparkline()z0Parameter 'range' is required in add_sparkline()r$  Úline)rŒ  ÚcolumnÚwin_losszJParameter 'type' must be 'line', 'column' or 'win_loss' in add_sparkline()rŽ  ZstackedÚrangeszMMust have the same number of location and range parameters in add_sparkline()ÚcountrH  rG   rõ   ú!ÚhighÚlowÚnegativeÚfirstÚlastrM  rN  r†  r‡  r‰  re   r‹  rˆ  Úzeror   ÚemptyÚconnectÚspanÚgaprŠ  Zseries)r%  r   r  r   r—  r  rx  r   r   rS   rn  rY  rz  r   Ú_set_spark_colorrË   )r"   r  r8   rœ  Ú	sparkliner  r	  Z
spark_typeZrange_countZlocation_countÚ	sheetnameZ
new_rangesÚspark_rangeZnew_locationsr}  r˜  Z
date_rangeÚstyle_idre  r(   r(   r)   Úadd_sparkline5  s  ÿþýüûúùø	÷
öõôóòñðïæþ







zWorksheet.add_sparklinec                 C   s^   d}t ||ƒ}||kr||}}||kr||}}t||||ƒ}|dkr&dS |||gg| _dS )a‰  
        Set the selected cell or cells in a worksheet

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Nothing.
        NÚA1)r   r   rd   )r"   rM  rN  rO  rP  ÚpaneÚactive_cellÚsqrefr(   r(   r)   Úset_selectionò  s   


zWorksheet.set_selectionr   c                 C   s"   || _ || _|| _|| _d| _dS )a  
        Control outline settings.

        Args:
            visible:       Outlines are visible. Optional, defaults to True.
            symbols_below: Show row outline symbols below the outline bar.
                           Optional, defaults to True.
            symbols_right: Show column outline symbols to the right of the
                           outline bar. Optional, defaults to True.
            auto_style:    Use Automatic style. Optional, defaults to False.

        Returns:
            0:  Nothing.
        TN)rœ   rš   r›   r™   r   )r"   ÚvisibleZsymbols_belowZsymbols_rightZ
auto_styler(   r(   r)   Úoutline_settings  s
   
zWorksheet.outline_settingsc                 C   s,   |du r|}|du r|}|||||g| _ dS )at  
        Create worksheet panes and mark them as frozen.

        Args:
            row:      The cell row (zero indexed).
            col:      The cell column (zero indexed).
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        N)rh   )r"   r  r8   Útop_rowÚleft_colÚ	pane_typer(   r(   r)   Úfreeze_panes,  s
   zWorksheet.freeze_panesc                 C   s   |   ||||d¡ dS )a‚  
        Create worksheet panes and mark them as split.

        Args:
            x:        The position for the vertical split.
            y:        The position for the horizontal split.
            top_row:  Topmost visible row in scrolling region of pane.
            left_col: Leftmost visible row in scrolling region of pane.

        Returns:
            0:  Nothing.

        rc  N)r¬  )r"   ÚxÚyr©  rª  r(   r(   r)   Úsplit_panesC  s   zWorksheet.split_panesrK   c                 C   s.   |dk s|dkrt d| ƒ d}t|ƒ| _dS )zš
        Set the worksheet zoom factor.

        Args:
            zoom: Scale factor: 10 <= zoom <= 400.

        Returns:
            Nothing.

        é
   é  z/Zoom factor %d outside range: 10 <= zoom <= 400rK   N)r   r    r’   )r"   r’   r(   r(   r)   Úset_zoomU  s   zWorksheet.set_zoomc                 C   r¦  )zš
        Display the worksheet right to left for some versions of Excel.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r•   rò   r(   r(   r)   Úright_to_leftg  r¨  zWorksheet.right_to_leftc                 C   r¦  )z
        Hide zero values in worksheet cells.

        Args:
            None.

        Returns:
            Nothing.

        r   N)r–   rò   r(   r(   r)   Ú	hide_zerot  r¨  zWorksheet.hide_zeroc                 C   s   t |ƒ| _dS )z“
        Set the color of the worksheet tab.

        Args:
            color: A #RGB color index.

        Returns:
            Nothing.

        N)r   rg   ©r"   Úcolorr(   r(   r)   Úset_tab_color  s   zWorksheet.set_tab_colorrG   c                 C   sÆ   |dkr	|   |¡}|si }i dd“dd“dd“dd“dd“d	d“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“}| ¡ D ]}||v rS|| ||< qFtd| ƒ qF||d< || _dS )zù
        Set the password and protection options of the worksheet.

        Args:
            password: An optional password string.
            options:  A dictionary of worksheet objects to protect.

        Returns:
            Nothing.

        rG   ÚsheetTÚcontentFÚobjectsÚ	scenariosÚformat_cellsÚformat_columnsÚformat_rowsÚinsert_columnsÚinsert_rowsÚinsert_hyperlinksÚdelete_columnsÚdelete_rowsÚselect_locked_cellsÚsortrÅ  Úpivot_tablesÚselect_unlocked_cellszUnknown protection object: '%s'ÚpasswordN)Ú_encode_passwordr  r   r   )r"   rÈ  rœ  ÚdefaultsÚkeyr(   r(   r)   ÚprotectŽ  sZ   
ÿþýüûúùø	÷
öõôóòñðï
zWorksheet.protectc                 C   sr   |du r
t dƒ dS | d¡}| dd¡}|  jd7  _|du r'dt| jƒ }|r.|  |¡}| j |||f¡ dS )	a0  
        Unprotect ranges within a protected worksheet.

        Args:
            cell_range: The cell or cell range to unprotect.
            range_name: An optional name for the range.
            password:   An optional password string. (undocumented)

        Returns:
            Nothing.

        Nz1Cell range must be specified in unprotect_range()r#  rõ   rH  rG   r   ÚRange)r   rY  rn  r   r  rÉ  rŽ   rz  ©r"   rY  Ú
range_namerÈ  r(   r(   r)   Úunprotect_rangeÁ  s   

zWorksheet.unprotect_rangec                 C   sT   |   ||dd¡rtd||f ƒ dS |du ri }|  |||¡}| j |¡ d| _dS )aM  
        Insert a button form object into the worksheet.

        Args:
            row:     The cell row (zero indexed).
            col:     The cell column (zero indexed).
            options: Button formatting options.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        Tz!Cannot insert button at (%d, %d).r#  Nr   r   )r%  r   Ú_button_paramsr°   rz  r¨   )r"   r  r8   rœ  Úbuttonr(   r(   r)   Úinsert_buttonà  s   zWorksheet.insert_buttonc                 C   r¯  )z
        Set the page orientation as landscape.

        Args:
            None.

        Returns:
            Nothing.

        r   TN©rm   rk   rò   r(   r(   r)   Úset_landscape  ó   
zWorksheet.set_landscapec                 C   r¯  )z€
        Set the page orientation as portrait.

        Args:
            None.

        Returns:
            Nothing.

        r   TNrÔ  rò   r(   r(   r)   Úset_portrait  rÖ  zWorksheet.set_portraitc                 C   r¦  )zr
        Set the page view mode.

        Args:
            None.

        Returns:
            Nothing.

        r   N)rÛ   rò   r(   r(   r)   Úset_page_view   r¨  zWorksheet.set_page_viewc                 C   s   |r
|| _ d| _dS dS )z˜
        Set the paper type. US Letter = 1, A4 = 9.

        Args:
            paper_size: Paper index.

        Returns:
            Nothing.

        TN)rl   rk   )r"   rl   r(   r(   r)   Ú	set_paper-  s   
þzWorksheet.set_paperc                 C   r¯  )zx
        Center the page horizontally.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)rn   ro   rò   r(   r(   r)   Úcenter_horizontally<  rÖ  zWorksheet.center_horizontallyc                 C   r¯  )zv
        Center the page vertically.

        Args:
            None.

        Returns:
            Nothing.

        Tr   N)rn   rp   rò   r(   r(   r)   Úcenter_verticallyJ  rÖ  zWorksheet.center_verticallyrH   rI   c                 C   s   || _ || _|| _|| _dS )zò
        Set all the page margins in inches.

        Args:
            left:   Left margin.
            right:  Right margin.
            top:    Top margin.
            bottom: Bottom margin.

        Returns:
            Nothing.

        N)r}   r~   r   r€   )r"   ÚleftÚrightr0  r2  r(   r(   r)   Úset_marginsX  s   
zWorksheet.set_marginsc                 C   óf  |}|  dd¡}t|ƒdkrtdƒ dS |dur"t|tƒs!d|i}ni }| ¡ }|dur0||d< g | _| d¡rG| j | d¡| d¡d	g¡ | d
¡r[| j | d
¡| d¡dg¡ | d¡ro| j | d¡| d¡dg¡ | 	d¡}t| jƒ}||kr‹td|||f ƒ g | _dS d|v r”|d | _
d|v r|d | _|| _| dd¡| _d| _|r±d| _dS dS )zù
        Set the page header caption and optional margin.

        Args:
            header:  Header string.
            margin:  Header margin.
            options: Header options, mainly for images.

        Returns:
            Nothing.

        ú
&[Picture]ú&Gr  zCHeader string cannot be longer than Excel's limit of 255 charactersNÚmarginÚ
image_leftÚimage_data_leftZLHÚimage_centerÚimage_data_centerZCHÚimage_rightÚimage_data_rightZRHzONumber of header images (%s) doesn't match placeholder count (%s) in string: %sÚalign_with_marginsÚscale_with_docrJ   T)rn  r   r   r  r   r  rz   r—  rz  r  rx   ry   rv   r   ru   r©   )r"   rv   rœ  râ  Zheader_origÚplaceholder_countÚimage_countr(   r(   r)   Ú
set_headerk  ó^   
€
þ
þ
þ

þ


ÿzWorksheet.set_headerc                 C   rß  )zù
        Set the page footer caption and optional margin.

        Args:
            footer:  Footer string.
            margin:  Footer margin.
            options: Footer options, mainly for images.

        Returns:
            Nothing.

        rà  rá  r  zCFooter string cannot be longer than Excel's limit of 255 charactersNrâ  rã  rä  ZLFrå  ræ  ZCFrç  rè  ZRFzONumber of footer images (%s) doesn't match placeholder count (%s) in string: %sré  rê  rJ   T)rn  r   r   r  r   r  r{   r—  rz  r  rx   ry   rw   r‚   ru   r©   )r"   rw   rœ  râ  Zfooter_origrë  rì  r(   r(   r)   Ú
set_footer·  rî  zWorksheet.set_footerc                 C   sD   |du r|}|d7 }|d7 }d||f }t | jƒ}|d | | _dS )zÕ
        Set the rows to repeat at the top of each printed page.

        Args:
            first_row: Start row for range.
            last_row: End row for range.

        Returns:
            Nothing.

        Nr   z$%d:$%dr‘  )r   rS   rƒ   )r"   rM  rO  rÃ  rž  r(   r(   r)   Úrepeat_rows  s   
zWorksheet.repeat_rowsc                 C   sH   |du r|}t |dƒ}t |dƒ}|d | }t| jƒ}|d | | _dS )zé
        Set the columns to repeat at the left hand side of each printed page.

        Args:
            first_col: Start column for range.
            last_col: End column for range.

        Returns:
            Nothing.

        Nr   r-   r‘  )r   r   rS   r„   )r"   rN  rP  rÃ  rž  r(   r(   r)   Úrepeat_columns  s   


zWorksheet.repeat_columnsc                 C   sF   |dkrd| _ d| _d| _dS |dkrd| _ d| _dS d| _ d| _dS )a1  
        Set the option to hide gridlines on the screen and the printed page.

        Args:
            option:    0 : Don't hide gridlines
                       1 : Hide printed gridlines only
                       2 : Hide screen and printed gridlines

        Returns:
            Nothing.

        r   r   TN)rq   rr   rn   )r"   Úoptionr(   r(   r)   Úhide_gridlines8  s   


zWorksheet.hide_gridlinesc                 C   s   d| _ d| _dS )z¢
        Set the option to print the row and column headers on the printed page.

        Args:
            None.

        Returns:
            Nothing.

        TN)rs   rn   rò   r(   r(   r)   Úprint_row_col_headersP  rÖ  zWorksheet.print_row_col_headersc                 C   r¦  )zž
        Set the option to hide the row and column headers on the worksheet.

        Args:
            None.

        Returns:
            Nothing.

        TN)rt   rò   r(   r(   r)   Úhide_row_col_headers^  r¨  zWorksheet.hide_row_col_headersc                 C   sJ   |dkr|dkr|| j d kr|| jd krdS |  ||||¡}|| _dS )aÃ  
        Set the print area in the current worksheet.

        Args:
            first_row:    The first row of the cell range. (zero indexed).
            first_col:    The first column of the cell range.
            last_row:     The last row of the cell range. (zero indexed).
            last_col:     The last column of the cell range.

        Returns:
            0:  Success.
            -1: Row or column is out of worksheet bounds.

        r   r   N)r\   r]   rÂ  r…   )r"   rM  rN  rO  rP  rÃ  r(   r(   r)   Ú
print_areak  s   ÿþÿzWorksheet.print_areac                 C   r¯  )z„
        Set the order in which pages are printed.

        Args:
            None.

        Returns:
            Nothing.

        r   TN)r†   rk   rò   r(   r(   r)   Úprint_acrossŠ  rÖ  zWorksheet.print_acrossc                 C   s   d| _ || _|| _d| _dS )a  
        Fit the printed area to a specific number of pages both vertically and
        horizontally.

        Args:
            width:  Number of pages horizontally.
            height: Number of pages vertically.

        Returns:
            Nothing.

        r   TN)rˆ   r‰   rŠ   rk   )r"   r¶  r¼  r(   r(   r)   Úfit_to_pages˜  s   
zWorksheet.fit_to_pagesc                 C   rª  )zœ
        Set the start page number when printing.

        Args:
            start_page: Start page number.

        Returns:
            Nothing.

        N)r‡   )r"   Z
start_pager(   r(   r)   Úset_start_pageª  r¨  zWorksheet.set_start_pagec                 C   s:   |dk s|dkrt d| ƒ dS d| _t|ƒ| _d| _dS )z§
        Set the scale factor for the printed page.

        Args:
            scale: Print scale. 10 <= scale <= 400.

        Returns:
            Nothing.

        r°  r±  z2Print scale '%d' outside range: 10 <= scale <= 400Nr   T)r   rˆ   r    r”   rk   )r"   Úscaler(   r(   r)   Úset_print_scale·  s   

zWorksheet.set_print_scalec                 C   rª  )z¿
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of rows where the page breaks should be added.

        Returns:
            Nothing.

        N)r‹   ©r"   Úbreaksr(   r(   r)   Úset_h_pagebreaksÍ  r¨  zWorksheet.set_h_pagebreaksc                 C   rª  )zÂ
        Set the horizontal page breaks on a worksheet.

        Args:
            breaks: List of columns where the page breaks should be added.

        Returns:
            Nothing.

        N)rŒ   rü  r(   r(   r)   Úset_v_pagebreaksÚ  r¨  zWorksheet.set_v_pagebreaksc                 C   s*   |dur	|| _ dS dt| jd ƒ | _ dS )zç
        Set the VBA name for the worksheet. By default this is the
        same as the sheet name: i.e., Sheet1 etc.

        Args:
            name: The VBA name for the worksheet.

        Returns:
            Nothing.

        NZSheetr   )rÜ   r  rT   )r"   rS   r(   r(   r)   Úset_vba_nameç  s   
zWorksheet.set_vba_namec              
   C   s^   |du rdS |  ¡ }ddddddddddœ	}| ¡ D ]}||vr)td| ƒ  dS q|| _dS )a  
        Ignore various Excel errors/warnings in a worksheet for user defined
        ranges.

        Args:
            options: A dict of ignore errors keys with cell range values.

        Returns:
            0: Success.
           -1: Incorrect parameter or option.

        Nr#  T)	Únumber_stored_as_textÚ
eval_errorÚformula_differsÚformula_rangeÚformula_unlockedÚempty_cell_referenceÚlist_data_validationÚcalculated_columnÚtwo_digit_text_yearz)Unknown parameter '%s' in ignore_errors()r   )r  r  r   rï   )r"   rœ  r  r	  r(   r(   r)   Úignore_errorsø  s(   ÷þzWorksheet.ignore_errorsc                 C   s4  |d | _ |d | _|d | _|d | _|d | _|d | _|d | _|d | _|d	 | _|d
 | _	|d | _
|d | _|d | _|d | _|d | _|d | _|d | _| jrvd| _d| _d| _d| _d| _d| _d| _d| _d| _d| _| jr˜tj| jd\}}t |¡ || _t  !|dd¡| _"| j"| _#d S d S )NrS   rT   rU   ré   rW   rX   rÝ   rß   râ   rà   rá   rã   rä   r[   rå   ræ   rñ   g     €)@é   rI   r   ç      à?F)Údirzw+úutf-8)$rS   rT   rU   ré   rW   rX   rÝ   rß   râ   rà   rá   rã   rä   r[   rå   ræ   rñ   rž   rŸ   r    r}   r~   r   r€   r   r‚   rx   ÚtempfileÚmkstempr˜  Úcloserç   ÚcodecsÚopenrè   r  )r"   Z	init_dataÚfdr›  r(   r(   r)   Ú_initialize'  sF   

















÷zWorksheet._initializec                 C   s  |   ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  | js$|  ¡  n|  	¡  |  
¡  |  ¡  | jr7|  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |  ¡  |   d¡ |  !¡  d S )NÚ	worksheet)"Z_xml_declarationÚ_write_worksheetÚ_write_sheet_prÚ_write_dimensionÚ_write_sheet_viewsÚ_write_sheet_format_prÚ_write_colsrW   Ú_write_sheet_dataÚ_write_optimized_sheet_dataÚ_write_sheet_protectionÚ_write_protected_rangesr[   Ú_write_phonetic_prÚ_write_auto_filterÚ_write_merge_cellsÚ_write_conditional_formatsÚ_write_data_validationsÚ_write_hyperlinksÚ_write_print_optionsÚ_write_page_marginsÚ_write_page_setupÚ_write_header_footerÚ_write_row_breaksÚ_write_col_breaksÚ_write_ignored_errorsÚ_write_drawingsÚ_write_legacy_drawingÚ_write_legacy_drawing_hfÚ_write_pictureÚ_write_table_partsÚ_write_ext_listr~  Z
_xml_closerò   r(   r(   r)   Ú_assemble_xml_fileR  sD   

zWorksheet._assemble_xml_filec                 C   s¼   |dk s|dk r
dS || j ks|| jkrdS |s$|s$| jr$|| jk r$dS |s@| jd u s0|| jk r3|| _| jd u s=|| jkr@|| _|s\| jd u sL|| jk rO|| _| jd u sY|| jkr\|| _dS r"  )r\   r]   rW   rÕ   r_   r`   ra   rb   )r"   r  r8   r·  r¸  r(   r(   r)   r%  ¶  s$   
zWorksheet._check_dimensionsc                 C   s   t || j| jƒS ©N)r   rÝ   rå   )r"   Zdt_objr(   r(   r)   r[  ×  s   þzWorksheet._convert_date_timec                 C   sÔ   d}d}d}d}t |dƒ}	t |dƒ}
dt|d ƒ }dt|d ƒ }|dkr4|| jd kr4|	}|
}d}n|dkrF|| jd krF|}|}d}n|	| }|
| }||krW|sW|}n|d | }t| jƒ}|d | }|S )NrG   r   r   rH  r-   r‘  )r   r  r\   r]   r   rS   )r"   Z	row_num_1Z	col_num_1Z	row_num_2Z	col_num_2Zrange1Zrange2rÃ  Zrow_col_onlyZ
col_char_1Z
col_char_2Z
row_char_1Z
row_char_2rž  r(   r(   r)   rÂ  Ý  s0   


zWorksheet._convert_name_areac                 C   sR   |sd S t |ƒ}d|v r| d¡ t|ƒ}| ¡  d}t|ƒ|kr'|d |… }|S )Nr   iÿ  )ÚsetÚremoverx  rÅ  r   )r"   rý  Z
breaks_setZbreaks_listZmax_num_breaksr(   r(   r)   Ú_sort_pagebreaks  s   
zWorksheet._sort_pagebreaksc                 C   sp   |sg S t  d¡}| |¡}g }|D ]#}| d¡r|dd … }| d¡r*|d d… }| dd¡}| |¡ q|S )Nz"(?:[^"]|"")*"|\S+ú"r   r#  z"")rý   ÚcompileÚfindallrú   rü   rn  rz  )r"   r<  Ztoken_rer  Z
new_tokensr  r(   r(   r)   rÊ    s   



z Worksheet._extract_filter_tokensc                 C   sŠ   t |ƒdkr?|d }t d|¡rd}nt d|¡rd}ntd||f ƒ |  ||dd… ¡}|  ||dd… ¡}||g | S |  ||¡S )	Nrµ  rF   z(and|&&)r   z	(or|\|\|)r   z?Token '%s' is not a valid conditional in filter expression '%s'rÉ  )r   rý   rþ   r   Ú_parse_filter_tokens)r"   r<  r  ZconditionalZexpression_1Zexpression_2r(   r(   r)   rË  @  s   ÿz"Worksheet._parse_filter_expressionc                 C   s€  dddddddddddddœ}|  |d d ¡}|d }t d|d	  ¡ ¡rjt|d ƒ}|dk s3|d
kr;td||f ƒ | ¡ }|dkrO|dkrOtd||f ƒ |d	  ¡ dkrZd}nd}|d dkrf|d7 }t|ƒ}|sz|d	 rztd|d	 |f ƒ t d| ¡ ¡r°|dkr”|dkr”td|d |f ƒ | ¡ }|dkr£|dkr¢d}n|dkr¬d}d}nd}d}|dkr¼t d|¡r¼d}||gS )Nrc  rÈ  r   rF   rÉ  é   )rí  rõ   z=~Úeqrð  z!~Únerñ  r÷  rý  rô  rú  z
top|bottomr   iô  z?The value '%d' in expression '%s' must be in the range 1 to 500Úitemsú%z>The type '%s' in expression '%s' must be either 'items' or '%'r0  é   r  z<Token '%s' is not a valid operator in filter expression '%s'zblanks|nonblankszRThe operator '%s' in expression '%s' is not valid in relation to Blanks/NonBlanks'r4  rg  z[*?]é   )r—  rý   rþ   rr  r    r   r  rG  )r"   r<  r  Ú	operatorsÚoperatorr  r8  r(   r(   r)   r<  \  sl   òÿÿ
ÿ
þ€zWorksheet._parse_filter_tokensc           
      C   s†   d}t |ƒ}g }|D ]!}|d7 }t|ƒ|> }|d@ }|d@ }|dL }||B }| |¡ q
d}|D ]}	||	N }q0||N }|dN }d| S )Nr   r   rE   i €ÿ?rL   iKÎ  z%X)r   Úordrz  )
r"   Ú	plaintextry  r  ÚdigitsÚcharZlow_15Zhigh_15Zpassword_hashÚdigitr(   r(   r)   rÉ  ®  s"   
zWorksheet._encode_passwordc                 C   sŒ  d}| j | \}}}}}}}}}}}}}||9 }||9 }|d| 9 }|d|	 9 }|  |||||||¡}td|d  ƒ}td|d  ƒ}| js_tƒ }d|_|| _| j ddt|ƒ d d g¡ n| j}| 	¡ }||d	< ||d
< ||d< ||d< ||d< d |d< ||d< d|d< d|d< ||d< ||d< |d urš||d< |r&d }d}d}t
 d|¡r®|  |¡}t
 d|¡r¹|  |¡}t
 d|¡rè| dd¡}|  |¡}| dd¡}t
 d|¡sÜt
 d|¡rád| }nt
 dd |¡}t
 d!|¡rö| d!d¡}d }|d ur&t|ƒ| jkrtd"t|ƒ| jf ƒ n| j |¡s| j |||g¡ |  |¡|d< | j |
¡s=| j d#d$t|ƒ d% | g¡ |  |
¡|d< d S )&Nrc  g      X@r  é5%  r   ú/drawingú../drawings/drawingú.xmlr  Ú
dimensionsr¶  r¼  r”  Úshaper  r   Ú	rel_indexÚurl_rel_indexr`  r•  ú
/hyperlinkÚExternalr÷   ú^mailto:rd  rG   rg  ú%23rh  ri  rj  re  rb  úaIgnoring URL '%s' with link and/or anchor > %d characters since it exceeds Excel's limit for URLSú/imageú../media/imageÚ.)rÉ   Ú_position_object_emusr    rÍ   r   ÚembeddedrÁ   rz  r  Ú_add_drawing_objectrý   rþ   ro  rn  rT  r   ræ   r   r	   rÎ   r—  rÆ   Ú_get_drawing_rel_index)r"   rT   Úimage_idÚ
drawing_idr¶  r¼  rS   Ú
image_typeÚx_dpiÚy_dpiÚdigestÚdrawing_typer  r8   r:   rŽ  r  r  r‘  r_  r`  r  r”  r•  rO  rÍ   Údrawing_objectÚtargetÚrel_typeÚtarget_moder(   r(   r)   Ú_prepare_imageÈ  s¢   þÿÿþý




þ
ÿÿÿÿþÿzWorksheet._prepare_imagec              	   C   sB  d}| j | \	}}}}}}	}
}}| d| jd ¡}| d| jd ¡}||9 }||	9 }|  |||||||¡}td|d  ƒ}td|d  ƒ}| jsatƒ }d|_|| _| j	 
dd	t|ƒ d
 d g¡ n| j}tdd|ƒ}|
|_| ¡ }||d< ||d< ||d< ||d< d |d< ||d< ||d< d|d< d|d< | d¡|d< d|d< | dd ¡}|rd }d}d}t d|¡rº|  |¡}t d|¡rÅ|  |¡}t d|¡rÜ| dd¡}|  |¡}| dd¡}t d |¡rê| d d¡}d }|d urt|ƒ| jkrtd!t|ƒ| jf ƒ d S | j |¡s| j 
|||g¡ |  |¡|d< d S d S d S )"NrF   r¶  r¼  r=  r  rK  r   rL  rM  rN  ZrectZTextBoxr  rO  r”  rP  r  r   rQ  rR  r`  r•  r_  rS  rT  r÷   rU  rd  rj  rg  rV  rb  rW  )rÌ   r—  r¢   r    r[  r    rÍ   r   r\  rÁ   rz  r  r   rŸ  r]  rý   rþ   ro  rn  r   ræ   r   r	   rÎ   rÆ   r^  )r"   rT   r`  re  r  r8   rŽ  r  r  r‘  rŸ  r  rœ  r¶  r¼  rO  rÍ   rP  rf  r_  rg  rh  ri  r(   r(   r)   Ú_prepare_shape*  sŠ   
ÿ
ÿÿþý




þ
ÿ
ÿázWorksheet._prepare_shapec
              	   C   sb   t  dd|¡}| j |	¡s| j ddt|ƒ d | g¡ |  |	¡}
| j |||||||
g¡ d S )Nz\..*$rG   rX  rY  rZ  )	rý   rT  rÐ   r—  rÇ   rz  r  Ú_get_vml_drawing_rel_indexr|   )r"   r_  r¶  r¼  rS   ra  Úpositionrb  rc  rd  Zref_idr(   r(   r)   Ú_prepare_header_image~  s   ÿÿþÿ

ÿzWorksheet._prepare_header_imagec                 C   s$   | j  ddt|ƒ d | g¡ d S )NrX  rY  rZ  )rÅ   rz  r  )r"   r_  ra  r(   r(   r)   Ú_prepare_background‘  s   ÿÿþ
ÿzWorksheet._prepare_backgroundc              	   C   s(  d}| j | \}}}}}	}
}}|d |_td|j|
  ƒ}td|j|  ƒ}|  ||||	|||¡}|j}| jsOtƒ }d|_	|| _| j
 ddt|ƒ d g¡ n| j}| ¡ }||d< ||d< ||d< ||d	< ||d
< d |d< ||d< |  ¡ |d< d|d< d |d< d|d< | j ddt|ƒ d g¡ d S )Nr   r  rL  rM  rN  r  rO  r¶  r¼  r”  rP  r  rQ  r   rR  r`  r•  z/chartz../charts/chart)rÈ   ri  r    r¶  r¼  r[  Z
chart_namerÍ   r   r\  rÁ   rz  r  r]  r^  rÆ   )r"   rT   Zchart_idr`  re  r  r8   r¢  rŽ  r  r  r‘  r  r¶  r¼  rO  rS   rÍ   rf  r(   r(   r)   Ú_prepare_chart˜  sR   ÿ
ÿÿþÿÿþ
ÿzWorksheet._prepare_chartc              
   C   s¢   |   |||||||¡\
}}}}}}	}
}}}tdd|  ƒ}tdd|  ƒ}tdd|
  ƒ}
tdd|  ƒ}tdd|  ƒ}tdd|  ƒ}||||||	|
|||f
S )Nr  rK  )Ú_position_object_pixelsr    )r"   Ú	col_startÚ	row_startÚx1Úy1r¶  r¼  r  Úcol_endÚrow_endÚx2Úy2Úx_absÚy_absr(   r(   r)   r[  Ê  s   
ÿ
þÿzWorksheet._position_object_emusc              
   C   s>  d}d}	|dk r!|dkr!||   |d ¡7 }|d8 }|dk r!|dks|dk r>|dkr>||  |d ¡7 }|d8 }|dk r>|dks)|dk rDd}|dk rJd}| jr\t|ƒD ]	}
||   |
¡7 }qQn|| j| 7 }||7 }| jryt|ƒD ]	}|	|  |¡7 }	qnn|	| j| 7 }	|	|7 }	||   ||¡krŸ||   |¡8 }|d7 }||   ||¡ksŒ||  ||¡krº||  |¡8 }|d7 }||  ||¡ks§|}|}|   ||¡dkrÊ|| }|  ||¡dkrÖ|| }||   ||¡krò||   ||¡8 }|d7 }||   ||¡ksÞ||  ||¡kr||  ||¡8 }|d7 }||  ||¡ksû|}|}||||||||||	g
S r   )Ú	_size_colÚ	_size_rowr»   rW  r¢   r¼   r    )r"   rr  rs  rt  ru  r¶  r¼  r  rz  r{  rt  Zrow_idrv  rw  rx  ry  r(   r(   r)   rq    sj   þþÿÿþþþþÿz!Worksheet._position_object_pixelsc                 C   sˆ   d}d}d}|| j v r?| j | d }| j | d }|r#|dkr#d}|S |dk r3t|||  d ƒ}|S t|| d ƒ| }|S | j}|S )Nrµ  rÈ  r   r   rÉ  r  )r¸   r    r¢   )r"   r8   r  Úmax_digit_widthÚpaddingÚpixelsr¶  re   r(   r(   r)   r|  d  s    
ùüþzWorksheet._size_colc                 C   s`   d}|| j v r'| j | d }| j | d }|r|dkrd}|S td| ƒ}|S td| j ƒ}|S )Nr   r   rÉ  gUUUUUUõ?)r¹   r    rŸ   )r"   r  r  r€  r¼  re   r(   r(   r)   r}    s   
üþzWorksheet._size_rowc                 C   s0   d}d}|dkr|||  }|S || | }|S )Ng      @g      @é   r(   )r"   r€  r~  r  r¶  r(   r(   r)   rº  ”  s   þzWorksheet._pixels_to_widthc                 C   s   d| S )NrI   r(   )r"   r€  r(   r(   r)   r¾     s   zWorksheet._pixels_to_heightc                 C   sV  d}d}d}d dd d d d ||d dd ddddd	œ}|  ¡ D ]}	||	 ||	< q|d
 s-||d
< |d s5||d< t|d ƒ ¡ |d< |d  ddd¡|d< |d d ur`t|d ƒ\}
}|
|d< ||d< | j}| j}|d d u r¢|dkrud|d< n-||d kr‚|d |d< n ||d kr|d |d< n||d krœ|d |d< n|d |d< |d d u rÖ|dkr±d|d< n%||d kr¼d|d< n||d krÇd|d< n||d krÒd|d< nd|d< |d d u r||d krê|d |d< n!||d kr÷|d |d< n||d kr|d |d< n|d |d< |d d u r:||d krd|d< n||d kr*d|d< n||d kr6d|d< nd|d< |d rI|d
 |d  |d
< |d rX|d |d  |d< td |d
  ƒ|d
< td |d  ƒ|d< |  |d |d |d |d |d
 |d |¡}| 	|d
 ¡ | 	|d ¡ ||||d! |d" |d |d# |d$ |d% g	|g S )&Né€   éJ   r   z#ffffe1r   ZTahomaé   rc  )r«  r¶  r]  Ú	start_colÚ	start_rowr§  r¶  r¼  rŽ  r  r  r‘  Ú	font_nameÚ	font_sizeÚfont_familyr¶  r¼  r¶  Úffrg  r]  r†  r…  rF   rµ  r=  rÈ  r  é   é   r°  rÉ  rŽ  é1   rL   r  r‘  r  r«  r§  r‡  rˆ  r‰  )
r  r   rr  rn  r   r\   r]   r    rq  rz  )r"   r  r8   r  rœ  Údefault_widthÚdefault_heightr  ÚparamsrË  r†  r…  Úrow_maxÚcol_maxÚverticesr(   r(   r)   Ú_comment_params¤  s°   ñ









þýýzWorksheet._comment_paramsc              	   C   s”  | j }| j}d}dt| jƒ }||i dœ}i }	| ¡ D ]}
||
 |	|
< q|	 d¡}|d u r1d| }||d d< |	 d¡rEd|	d  |d< nd	| |d< |	 d
|¡|	d
< |	 d|¡|	d< |	 dd¡|	d< |	 dd¡|	d< |	d
 |	 dd¡ |	d
< |	d |	 dd¡ |	d< td|	d
  ƒ|	d
< td|	d  ƒ|	d< ||	d< ||	d< |  |	d |	d |	d |	d |	d
 |	d |¡}| |	d
 ¡ | |	d ¡ ||d< |S )Nr   r   )r  r8   ÚfontÚcaptionz	Button %dr•  Úmacroz[0]!z[0]!Button%d_Clickr¶  r¼  rŽ  r  r  r‘  r  r†  r…  r“  )	r    r¢   r   r°   r  r—  r    rq  rz  )r"   r  r8   rœ  r  rŽ  r  Zbutton_numberrÒ  r  rË  r–  r“  r(   r(   r)   rÑ     sB   

þzWorksheet._button_paramsc                 C   sT  g }t | j ¡ ƒ}|D ]Y}t | j|  ¡ ƒ}|D ]K}	| j| |	 }
| j|
Ž }|| j| |	< | jrD| j| |	 d d u rDd| j| |	 d< | j| |	 d d u rY| j| j| |	 d< | | j| |	 ¡ qq| j ddt|ƒ d g¡ | j	r‡|| _
| j ddt|ƒ d	 g¡ t|ƒ}|}tt|d
 ƒƒD ]}d||| d f }q•|| _|| _|S )NrÉ  r   rF   ú/vmlDrawingú../drawings/vmlDrawingú.vmlz	/commentsz../commentsrN  rP   z%s,%d)Úsortedr«   r  r”  r®   r­   rz  rÃ   r  rª   r¬   rÂ   r   rW  r    rê   r¯   )r"   rê   r¯   Úvml_drawing_idZ
comment_idr«   Úrow_numsr  Úcol_numsr8   Úuser_optionsr  r  Zstart_data_idry  r(   r(   r)   Ú_prepare_vml_objects`  sL   
òÿþÿÿþÿzWorksheet._prepare_vml_objectsc                 C   s&   || _ | j ddt|ƒ d g¡ d S )Nr˜  r™  rš  )r±   rÃ   rz  r  )r"   r±   rœ  r(   r(   r)   Ú_prepare_header_vml_objects”  s   ÿÿ
ÿz%Worksheet._prepare_header_vml_objectsc                 C   s†   | j D ]=}||d< | d¡d u rdt|ƒ |d< |d  ¡ }||v r*td|d  ƒ‚d||< | j ddt|ƒ d g¡ |d	7 }qd S )
Nri  rS   ÚTablez2Duplicate name '%s' used in worksheet.add_table().Tz/tablez../tables/tablerN  r   )rÊ   r—  r  rr  r   rÄ   rz  )r"   Ztable_idÚseenr¥   rS   r(   r(   r)   Ú_prepare_tables  s*   
ÿÿÿþÿ
êzWorksheet._prepare_tablesc              	   C   s‚   d}t  dd|¡}t  dd|¡}t  dd|¡}t  dd	|¡}d
ddddddddœ}||v r9|| }d||f }|S td| ƒ |S )NrG   ú'z''rg  z'#ú]z']z\[z'[ée   éf   ég   éh   éi   ék   ém   én   )r+  ro  r  rN  rM  rp  ÚsumÚvarzSUBTOTAL(%s,[%s])z(Unsupported function '%s' in add_table())rý   rT  r   )r"   rx  Zcol_namer7  Z	subtotalsZfunc_numr(   r(   r)   rs  ·  s(   øþz$Worksheet._table_function_to_formulac                 C   s$   ||vrd S dt || ƒi||< d S )NÚrgbr   )r"   r  rœ  Z
user_colorr(   r(   r)   rœ  Ô  s   zWorksheet._set_spark_colorc                 C   s  | j rdS g }t||d ƒD ]p}|| jvr| d ¡ qt||d ƒD ][}|| j| v rx| j| | }t|ƒj}	|	dkrD| d|j ¡ q"|	dkrW|j}
| j 	|
¡}| |¡ q"|	dks_|	dkrn|j
}|d u rhd}| |¡ q"|	d	krw| d
¡ q"| d ¡ q"q|S )Nr(   r   r>   r  r=   rB   rC   r   r?   rG   )rW   rW  r¥   rz  r  Ú__name__r,  r  rU   Z_get_shared_stringr8  )r"   rs  rr  rw  rv  rŠ  Úrow_numru  r)  Útype_cell_namerT   r  r8  r(   r(   r)   Ú_get_range_dataÛ  s<   


ÿ
€Þ$zWorksheet._get_range_datac                 G   s   dd„ |D ƒ}d  |¡S )Nc                 S   s"   g | ]}t |tƒst|ƒn|‘qS r(   )r  r   r  )r7   Úitemr(   r(   r)   r9     s    ÿz'Worksheet._csv_join.<locals>.<listcomp>ú,)Újoin)r"   r@  r(   r(   r)   r    s   ÿ
zWorksheet._csv_joinc                 C   s˜   t  d|¡r|S | dd¡}| dd¡}| dd¡}| dd	¡}| d
d¡}| dd¡}| dd¡}| dd¡}| dd¡}| dd¡}| dd¡}|S )Nz%[0-9a-fA-F]{2}rA  z%25r9  z%22rg  z%20r÷  z%3crô  z%3eú[z%5br¦  z%5dú^z%5eú`z%60rF  z%7brö   z%7d)rý   rG  rn  )r"   r_  r(   r(   r)   ro    s   zWorksheet._escape_urlc                 C   sR   |d u r|  j d7  _ | j S | j |¡r| j| S |  j d7  _ | j | j|< | j S ©Nr   )rÏ   rÎ   r—  ©r"   rg  r(   r(   r)   r^  0  s   
z Worksheet._get_drawing_rel_indexc                 C   s6   | j  |¡r| j | S |  jd7  _| j| j |< | jS r¼  )rÐ   r—  rÑ   r½  r(   r(   r)   rl  <  s
   
z$Worksheet._get_vml_drawing_rel_indexc                 C   sl  | j }| d¡ |jr| d¡ |jr| d¡ |jr | d¡ |jr(| d¡ |jr0| d¡ |jr9|  	|j¡ |j
dkrC|  d¡ |j
d	krM|  d
¡ | dd|jfg¡ |jdkr]n,|jrh|  d|j¡ n!|jrs|  d|j¡ n|jrƒ|  |j¡}|  d|¡ n|  dd¡ | dd|jfg¡ | dd|jfg¡ |jdkr¯|js¯| dd|jfg¡ | d¡ d S )NZrPrÚbry  ÚstrikeÚoutlineZshadowr   Zsuperscriptrc  Z	subscriptÚszÚvalr#  ÚthemeZindexedr±  ZrFontÚfamilyZCalibriÚscheme)rÔ   r{  ÚboldÚ_xml_empty_tagÚitalicZfont_strikeoutZfont_outlineZfont_shadowÚ	underlineÚ_write_underlineZfont_scriptÚ_write_vert_alignrˆ  rÃ  Ú_write_colorZcolor_indexedZ
font_colorÚ_get_palette_colorÚ_write_rstring_colorr‡  r‰  Ú	hyperlinkZfont_schemer~  )r"   Z	xf_formatZ
xml_writerr¶  r(   r(   r)   r|  K  sH   











ÿzWorksheet._write_fontc                 C   sD   g }|dkr
dg}n|dkrdg}n|dkrdg}| j  d|¡ d S )Nrc  )rÂ  Údoubleé!   )rÂ  ZsingleAccountingé"   )rÂ  ZdoubleAccountingÚu©rÔ   rÇ  )r"   rÉ  r†  r(   r(   r)   rÊ  ‚  s   zWorksheet._write_underlinec                 C   s   d|fg}| j  d|¡ d S )NrÂ  Z	vertAlignrÔ  ©r"   rÂ  r†  r(   r(   r)   rË    ó   
zWorksheet._write_vert_alignc                 C   s   ||fg}| j  d|¡ d S ©Nr¶  rÔ  ©r"   rS   r8  r†  r(   r(   r)   rÎ  –  rÖ  zWorksheet._write_rstring_colorc                 C   s$   |d dkr|dd … }d|  ¡  S )Nr   rg  r   ZFF)Úupperrµ  r(   r(   r)   rÍ  œ  s   zWorksheet._get_palette_colorc                 C   s   | j s| j ¡  d| _ d S d S )NT)rë   rè   r  rò   r(   r(   r)   Ú
_opt_close£  s   

þzWorksheet._opt_closec                 C   s2   | j r| j}t |dd¡| _d| _ | j| _d S d S )Nza+r  F)rë   rç   r  r  rè   r  )r"   r›  r(   r(   r)   Ú_opt_reopen©  s   üzWorksheet._opt_reopenc           
      C   s¼  g }t |ƒD ]}| ddddœ¡ q|dkr"d|d d< d|d	 d< |d
kr8d|d d< d|d	 d< d|d d< |dkrTd|d d< d|d	 d< d|d d< d|d d< |rÜt|ƒ}||krb|d	 }t |ƒD ]u}||  d¡d ur”|| d || d< || d }t|tƒr”| d¡r”| d¡|| d< ||  d¡rÈd}|| d |vr°td|| d  ƒ n|| d || d< || d dkrÈd|| d< ||  d¡}	|	rÛ|	dkrÛd|| d< qf|S )NFr   Úpercent)rÍ  r8  r  rF   éC   r8  rÑ  r   rÉ  éK   rP  é   rc  rÈ  éP   é<   é(   rM   rõ   r  )rÜ  rO  r,  r7  zOUnknown icon property type '%s' for sub-property 'type' in conditional_format()r,  ÚnumrÍ  rô  T)	rW  rz  r   r—  r  r   rú   rY  r   )
r"   rE  Z
user_propsÚpropsr:   Zmax_datary  Útmpr
  rÍ  r(   r(   r)   rV  ±  sT   
þ
þ€zWorksheet._set_icon_propsc                 C   sx   d}|d }|d }|d }d}|d }d|fd|fg}| j d	kr4| d
|f¡ | d|f¡ | d¡ |  d|¡ d S )Nz"http://schemas.openxmlformats.org/zspreadsheetml/2006/mainz!officeDocument/2006/relationshipszmarkup-compatibility/2006zhttp://schemas.microsoft.com/zoffice/spreadsheetml/2009/9/acÚxmlnszxmlns:rrU  zxmlns:mczxmlns:x14ac)zmc:IgnorableZx14acr  )rZ   rz  r{  )r"   Úschemaræ  Zxmlns_rZxmlns_mcZ	ms_schemaZxmlns_x14acr†  r(   r(   r)   r  ü  s   þ

zWorksheet._write_worksheetc                 C   sÔ   | j d u r| jd u rd}nR| j d u r7| jd ur7| j| jkr$td| jƒ}n;td| jƒ}td| jƒ}|d | }n(| j | jkrK| j| jkrKt| j | jƒ}nt| j | jƒ}t| j| jƒ}|d | }|  dd|fg¡ d S )Nr¢  r   r-   Ú	dimensionrÄ  )r_   ra   rb   r   r`   rÇ  )r"   rÄ  r1   r2   r(   r(   r)   r    s    
ÿzWorksheet._write_dimensionc                 C   s    |   d¡ |  ¡  |  d¡ d S )NZ
sheetViews)r{  Ú_write_sheet_viewr~  rò   r(   r(   r)   r  6  s   
zWorksheet._write_sheet_viewsc                 C   sþ   g }| j s
| d¡ | jr| d¡ | js| d¡ | jr"| d¡ | jr*| d¡ | js2| d¡ | jr:| d¡ | jdkrU| jsU| d	| jf¡ | j	rU| d
| jf¡ | d¡ | j
sbt| jƒrw|  d|¡ |  ¡  |  ¡  |  d¡ d S |  d|¡ d S )N)ZshowGridLinesr   )ZshowRowColHeadersr   )Z	showZerosr   ©ÚrightToLeftr   )ZtabSelectedr   ©ZshowOutlineSymbolsr   )ÚviewZ
pageLayoutrK   Z	zoomScaleZzoomScaleNormal)ZworkbookViewIdr   Z	sheetView)rr   rz  rt   r–   r•   rj   rœ   rÛ   r’   r“   rh   r   rd   r{  Ú_write_panesÚ_write_selectionsr~  rÇ  ©r"   r†  r(   r(   r)   ré  ?  s6   








zWorksheet._write_sheet_viewc                 C   sŠ   | j }| j}| j}d|fg}| j | jkr| d¡ | jr!| d¡ |r*| d|f¡ |r3| d|f¡ | jdkr=| d¡ |  d|¡ d S )	NZdefaultRowHeight©ZcustomHeightr   )Z
zeroHeightr   ZoutlineLevelRowZoutlineLevelColrU  ©zx14ac:dyDescentz0.25ZsheetFormatPr)rŸ   r—   r˜   rž   rz  r£   rZ   rÇ  )r"   rŸ   Z	row_levelZ	col_levelr†  r(   r(   r)   r  p  s   




z Worksheet._write_sheet_format_prc                 C   sF   | j sd S |  d¡ t| j  ¡ ƒD ]
}|  | j | ¡ q|  d¡ d S )NÚcols)rc   r{  r›  r  Ú_write_col_infor~  )r"   r8   r(   r(   r)   r  ˆ  s   
zWorksheet._write_colsc                 C   s8  |\}}}}}}}d}	d}
|r|  ¡ }
|d u r!|sd}d}	n	d}n|dkr'd}	|dkr\d}d}|dk rHtt|||  d ƒt|ƒ d ƒd }ntt|| d ƒ| t|ƒ d ƒd }d|d fd	|d fd
d| fg}|
rv| d|
f¡ |r}| d¡ |	r„| d¡ |r| d|f¡ |r”| d¡ |  d|¡ d S )Nr   r   rN   rµ  rÈ  r  g      p@rM  rN  r¶  r  re  )re   r6   )ZcustomWidthr6   ÚoutlineLevel)r³  r6   r8   )Ú_get_xf_indexr    r   rz  rÇ  )r"   Zcol_infoÚcol_minr’  r¶  r  re   r´  r³  Zcustom_widthÚxf_indexr~  r  r†  r(   r(   r)   rô  –  s^   
ÿÿÿÿÿÿÿ


ý


zWorksheet._write_col_infoc                 C   s8   | j d u r|  d¡ d S |  d¡ |  ¡  |  d¡ d S )NÚ	sheetData)r_   rÇ  r{  Ú_write_rowsr~  rò   r(   r(   r)   r  Í  s
   

zWorksheet._write_sheet_datac                 C   s‚   | j d u r|  d¡ d S |  d¡ d}| j d¡ | j |¡}|r/| j |¡ | j |¡}|s!| j ¡  t	 
| j¡ |  d¡ d S )Nrù  i   r   )r_   rÇ  r{  rè   ÚseekÚreadr  r  r  r˜  Úunlinkrç   r~  )r"   Z	buff_sizerŠ  r(   r(   r)   r  Ø  s   

þ
z%Worksheet._write_optimized_sheet_datac                 C   sD   d| j fd| jfd| jfd| jfd| jfd| jfg}|  d|¡ d S )NrÜ  rÝ  r0  r2  rv   rw   ZpageMargins)r}   r~   r   r€   r   r‚   rÇ  rð  r(   r(   r)   r(  ð  s   úzWorksheet._write_page_marginsc                 C   sH  g }| j sd S | jr| d| jf¡ | jdkr| d| jf¡ | jr/| jdkr/| d| jf¡ | jr?| jdkr?| d| jf¡ | jrG| d¡ | jdkrT| d| jf¡ | j	r]| d	¡ n| d
¡ | jdkrl| d¡ | j
r†| jrz| d| jf¡ | jr…| d| jf¡ n| jr‘| d| jf¡ | jrœ| d| jf¡ |  d|¡ d S )NZ	paperSizerK   rú  r   Z
fitToWidthZfitToHeight)Z	pageOrderZoverThenDownZfirstPageNumber)rm   Zportrait)rm   Z	landscaper   )ZuseFirstPageNumberr6   ZhorizontalDpiZverticalDpiZ	pageSetup)rk   rl   rz  r”   rˆ   r‰   rŠ   r†   r‡   rm   rY   rí   rì   rÇ  rð  r(   r(   r)   r)  ü  s>   





€zWorksheet._write_page_setupc                 C   s^   g }| j sd S | jr| d¡ | jr| d¡ | jr| d¡ | jr'| d¡ |  d|¡ d S )N)ZhorizontalCenteredr   )ZverticalCenteredr   )Zheadingsr   )Z	gridLinesr   ZprintOptions)rn   ro   rz  rp   rs   rq   rÇ  rð  r(   r(   r)   r'  F  s   



zWorksheet._write_print_optionsc                 C   sz   g }| j s
| d¡ | js| d¡ | jr0|  d|¡ | jr"|  ¡  | jr)|  ¡  |  	d¡ d S | j
r;|  d|¡ d S d S )N)ZscaleWithDocr   )ZalignWithMarginsr   ZheaderFooter)ry   rz  rx   ru   r{  rv   Ú_write_odd_headerrw   Ú_write_odd_footerr~  r[   rÇ  rð  r(   r(   r)   r*  _  s   

ÿzWorksheet._write_header_footerc                 C   ó   |   d| j¡ d S )NZ	oddHeader)r}  rv   rò   r(   r(   r)   rþ  s  ó   zWorksheet._write_odd_headerc                 C   r   )NZ	oddFooter)r}  rw   rò   r(   r(   r)   rÿ  w  r  zWorksheet._write_odd_footerc                 C   s   |   ¡  t| j| jd ƒD ]€}|| jv s|| jv s| j| rt|d ƒ}|| jv r/| j| }nd }| j| rs|| jvrB|  	||¡ n
|  	||| j| ¡ t| j
| jd ƒD ]}|| j| v rl| j| | }|  |||¡ qU|  d¡ q|| jv rƒ|  ||| j| ¡ q|  ||| j| ¡ qd S )Nr   r‹  r  )Ú_calculate_spansrW  r_   r`   r‘   r«   r¥   r    r§   Ú
_write_rowra   rb   Ú_write_cellr~  Ú_write_empty_row)r"   r³  Ú
span_indexrš  ru  Úcol_refr(   r(   r)   rú  {  s8   ÿ


€
ÿÿ€ßzWorksheet._write_rowsc                 C   sÔ   | j }|| _ || jv s|| jv s| j| rcd }| j| rY|| jvr(|  ||¡ n
|  ||| j| ¡ t| j| jd ƒD ]}|| j| v rR| j| | }|  |||¡ q;|  	d¡ n
|  
||| j| ¡ | j ¡  d S )Nr   r  )rÕ   r‘   r«   r¥   r  rW  ra   rb   r  r~  r  Úclear)r"   Zcurrent_row_numr³  rš  ru  r  r(   r(   r)   r'  £  s$   ÿ

€zWorksheet._write_single_rowc                 C   s>  i }d }d }t | j| jd ƒD ]Š}|| jv r>t | j| jd ƒD ]}|| j| v r=|d u r1|}|}q||k r7|}||kr=|}q|| jv rpt | j| jd ƒD ]#}|| jv ro|| j| v ro|d u rc|}|}qL||k ri|}||kro|}qL|d d dks}|| jkr™t|d ƒ}|d ur™|d7 }|d7 }d||f ||< d }q|| _d S )Nr   r‹  r   z%s:%s)	rW  r_   r`   r¥   ra   rb   r«   r    r§   )r"   ÚspansZspan_minZspan_maxr³  ru  r  r(   r(   r)   r  É  sJ   
€

ÿ€€
zWorksheet._calculate_spansc                 C   s  d}|r|\}}}}	}
nd\}}}}	}
|d u r| j }d|d fg}|r'| ¡ }|r0| d|f¡ |r9| d|f¡ |r@| d¡ || jkrN| dd	| f¡ |rU| d
¡ || jkr_| d¡ |	rh| d|	f¡ |
ro| d¡ | jdkry| d¡ |rƒ|  d|¡ d S |  d|¡ d S )Nr   )NNr   r   r   rs  r   r	  Ús)ZcustomFormatr   Zhtz%g)re   r   rñ  rõ  )r³  r   rU  rò  r  )rŸ   rö  rz  rž   rZ   Z_xml_empty_tag_unencodedZ_xml_start_tag_unencoded)r"   r  r	  Ú
propertiesÚ	empty_rowrø  r¼  r  re   r´  r³  r†  r(   r(   r)   r  ú  s<   







zWorksheet._write_rowc                 C   s   | j |||dd d S )NT)r  )r  )r"   r  r	  r  r(   r(   r)   r  -  s   zWorksheet._write_empty_rowc                 C   s  t ||ƒ}d|fg}|jr|j ¡ }| d|f¡ n0|| jv r7| j| d r7| j| d }| d| ¡ f¡ n|| jv rJ| j| }| d| ¡ f¡ t|ƒj}	|	dkr\|  |j	|¡ d S |	dkrÍ|j
}
| jsn|  |
|¡ d S t dd|
¡}
t dd	d
„ |
¡}
tjd dkrŽtdƒ}tdƒ}nd}d}t |d|
¡}
t |d|
¡}
t d|
¡r´t d|
¡r´|  |
|¡ d S d}t d|
¡sÂt d|
¡rÄd}|  |
||¡ d S |	dkr|j}t|jƒtkrê| d¡ |jrçd}n#d}n t|jtƒr
d}|jdkrùn|j|v r| d¡ n| d¡ |  |j||¡ d S |	dkrV|jdkr$| d¡ zt|jƒ W n ty:   | d¡ Y nw |  d |¡ |  |j|j ¡ |  !|j¡ |  "d ¡ d S |	d!krc|  #d |¡ d S |	d"kr€| d¡ |  d |¡ |  !|j$¡ |  "d ¡ d S d S )#Nrs  r
  r   r>   r=   z(_x[0-9a-fA-F]{4}_)z_x005F\1z([\x00-\x08\x0B-\x1F])c                 S   s   dt |  d¡ƒ S )Nz_x%04X_r   )rF  Úgroup)rþ   r(   r(   r)   Ú<lambda>Z  s    ÿz'Worksheet._write_cell.<locals>.<lambda>r   rc  iþÿ  iÿÿ  u   ï¿¾u   ï¿¿Z_xFFFE_Z_xFFFF_z^<r>z</r>$rt  ru  rB   )rw  r¾  )r0  z#N/Az#NAME?z#NULL!r/  z#REF!z#VALUE!rG   )rw  Úe)rw  r  rC   rR  )Úcmr   Úcr?   rA   )%r   r@   rö  rz  r‘   rº   r  r²  Z_xml_number_elementr,  r  rW   Z_xml_string_elementrý   rT  r  r  ÚunichrrG  Z_xml_rich_inline_stringZ_xml_inline_stringr8  r  r  r   Z_xml_formula_elementr7  rX  r   r!   r{  Ú_write_cell_array_formularW  Ú_write_cell_valuer~  rÇ  r\  )r"   r  r8   r)  rY  r†  rø  Zrow_xfZcol_xfr´  r  Z	non_char1Z	non_char2rv  r8  Zerror_codesr(   r(   r)   r  1  sŽ   





þ






ÿ


ûzWorksheet._write_cellc                 C   s   |d u rd}|   d|¡ d S )NrG   Úv©r}  )r"   r8  r(   r(   r)   r  ©  s   zWorksheet._write_cell_valuec                 C   s   dd|fg}|   d||¡ d S )N)rw  ÚarrayrÄ  r  r  )r"   r7  rY  r†  r(   r(   r)   r  °  s   þz#Worksheet._write_cell_array_formulac                 C   s    g }| j s| js| js| js| jsd S | jr| d| jf¡ | jr&| d¡ | j s/| js/| jrH|  d|¡ |  ¡  |  ¡  |  	¡  |  
d¡ d S |  d|¡ d S )NZcodeName)Z
filterModer   ZsheetPr)rˆ   rµ   rg   r   rÜ   rz  r{  Ú_write_tab_colorÚ_write_outline_prÚ_write_page_set_up_prr~  rÇ  rð  r(   r(   r)   r  ¹  s4   ÿþýü
ÿþzWorksheet._write_sheet_prc                 C   s    | j sd S dg}|  d|¡ d S )N)Z	fitToPager   ZpageSetUpPr)rˆ   rÇ  rð  r(   r(   r)   r  Õ  s   zWorksheet._write_page_set_up_prc                 C   s(   | j }|sd S d|fg}|  d|¡ d S )Nr±  ZtabColor)rg   rÇ  )r"   r¶  r†  r(   r(   r)   r  Ý  s
   
zWorksheet._write_tab_colorc                 C   s^   g }| j sd S | jr| d¡ | js| d¡ | js| d¡ | js'| d¡ |  d|¡ d S )N)ZapplyStylesr   )ZsummaryBelowr   )ZsummaryRightr   rì  Z	outlinePr)r   r™   rz  rš   r›   rœ   rÇ  rð  r(   r(   r)   r  è  s   



zWorksheet._write_outline_prc                 C   ó\   |   | j¡}|s
d S t|ƒ}d|fd|fg}|  d|¡ |D ]}|  |d¡ q|  d¡ d S )Nr  ÚmanualBreakCountZ	rowBreaksiÿ?  )r8  r‹   r   r{  Ú
_write_brkr~  )r"   Úpage_breaksr  r†  r³  r(   r(   r)   r+  ú  ó   þzWorksheet._write_row_breaksc                 C   r  )Nr  r  Z	colBreaksiÿÿ )r8  rŒ   r   r{  r  r~  )r"   r  r  r†  ru  r(   r(   r)   r,    r  zWorksheet._write_col_breaksc                 C   s"   d|fd|fdg}|   d|¡ d S )Nri  rN  )Úmanr   Zbrk©rÇ  )r"   Zbrk_idZbrk_maxr†  r(   r(   r)   r  $  s
   ýzWorksheet._write_brkc                 C   óN   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  |¡ q|  d¡ d S )Nr  Z
mergeCells)r¦   r   r{  Ú_write_merge_cellr~  )r"   Zmerged_cellsr  r†  Úmerged_ranger(   r(   r)   r#  -  ó   
zWorksheet._write_merge_cellsc           
      C   sF   |\}}}}t ||ƒ}t ||ƒ}|d | }d|fg}	|  d|	¡ d S )Nr-   rÄ  Z	mergeCell)r   rÇ  )
r"   r$  Zrow_minr÷  r‘  r’  r1   r2   rÄ  r†  r(   r(   r)   r#  @  s   


zWorksheet._write_merge_cellc                 C   s`  g }d }t | j ¡ ƒ}|sd S |D ]u}t | j|  ¡ ƒ}|D ]g}| j| | }|d }| jrL| j| rL| j| | rL| j| | }	t|	ƒjdkrL|d }|dkrt|  jd7  _| |||| j|d ||d g¡ | j d|d dg¡ q| ||||d |d |d g¡ qq|  	d	¡ |D ]}
|
 
d
¡}|dkrŸ| j|
Ž  qŽ|dkr¨| j|
Ž  qŽ|  d	¡ d S )Nrm  r=   r_  r   r  r`  rS  rT  rÞ   r   rc  )r›  rÞ   r  r¥   r  r²  r½   rz  rÀ   r{  ry  Ú_write_hyperlink_externalÚ_write_hyperlink_internalr~  )r"   r¿   Údisplayr  r³  rž  ru  Úlinkrm  r)  r#   r(   r(   r)   r&  M  s`   ÿþú	ÿûá
'

€zWorksheet._write_hyperlinksc           
      C   sx   t ||ƒ}dt|ƒ }d|fd|fg}	|d ur|	 d|f¡ |d ur)|	 d|f¡ |d ur4|	 d|f¡ |  d|	¡ d S )NÚrIdrÄ  úr:idr}  r(  ÚtooltiprÏ  )r   r  rz  rÇ  )
r"   r  r8   Zid_numr}  r(  r,  rÄ  Úr_idr†  r(   r(   r)   r&  ”  s   
þz#Worksheet._write_hyperlink_externalc                 C   sN   t ||ƒ}d|fd|fg}|d ur| d|f¡ | d|f¡ |  d|¡ d S )NrÄ  r}  r,  r(  rÏ  )r   rz  rÇ  )r"   r  r8   r}  r(  r,  rÄ  r†  r(   r(   r)   r'  §  s   
þz#Worksheet._write_hyperlink_internalc                 C   sN   | j sd S d| j fg}| jr|  d|¡ |  ¡  |  d¡ d S |  d|¡ d S )NrÄ  Ú
autoFilter)r³   rµ   r{  Ú_write_autofiltersr~  rÇ  rð  r(   r(   r)   r"  ¶  s   zWorksheet._write_auto_filterc                 C   sT   | j \}}t||d ƒD ]}|| jvrq| j| }| j| }|  || ||¡ qd S r¼  )r´   rW  r¶   r·   Ú_write_filter_column)r"   Zcol1Zcol2r8   r  r·   r(   r(   r)   r/  Ç  s   



özWorksheet._write_autofiltersc                 C   sB   d|fg}|   d|¡ |dkr|  |¡ n|  |¡ |  d¡ d S )NZcolIdZfilterColumnr   )r{  Ú_write_filtersÚ_write_custom_filtersr~  )r"   rt  r·   rÒ  r†  r(   r(   r)   r0  Ø  s   

zWorksheet._write_filter_columnc                 C   s‚   dd„ |D ƒ}g }t |ƒt |ƒkrdg}t |ƒdkr(t |ƒdkr(|  d|¡ d S |  d|¡ t|ƒD ]}|  |¡ q2|  d¡ d S )Nc                 S   s    g | ]}t |ƒ ¡ d kr|‘qS )r4  )r  rr  )r7   Úfilterr(   r(   r)   r9   é  s    
ÿz,Worksheet._write_filters.<locals>.<listcomp>)r3  r   r   r   rÒ  )r   rÇ  r{  r›  Ú_write_filterr~  )r"   rÒ  Z
non_blanksr†  rÅ  r(   r(   r)   r1  ç  s   zWorksheet._write_filtersc                 C   ó   d|fg}|   d|¡ d S )NrÂ  r3  r!  rÕ  r(   r(   r)   r4  ü  ó   
zWorksheet._write_filterc                 C   sŽ   t |ƒdkr|  d¡ | j|Ž  |  d¡ d S g }|d dkr#dg}ndg}|  d|¡ |  |d |d ¡ |  |d |d ¡ |  d¡ d S )	Nrc  ZcustomFiltersr   )Úandr   )r7  r   r   rF   rÉ  )r   r{  Ú_write_custom_filterr~  )r"   r  r†  r(   r(   r)   r2    s   

zWorksheet._write_custom_filtersc                 C   sn   g }ddddddddœ}|| d ur|| }nt d| ƒ |dks(| d	|f¡ | d
|f¡ |  d|¡ d S )Nrö  rì  rü  ró  rï  rù  )r   rc  rF   rÉ  rÈ  r=  rC  zUnknown operator = %srE  rÂ  ZcustomFilter)r   rz  rÇ  )r"   rE  rÂ  r†  rD  r(   r(   r)   r8    s    ù
zWorksheet._write_custom_filterc                 C   sp  g }| j sd S | j }|d r| d|d f¡ |d r | d¡ |d r)| d¡ |d s2| d¡ |d s;| d	¡ |d
 rD| d¡ |d rM| d¡ |d rV| d¡ |d r_| d¡ |d rh| d¡ |d rq| d¡ |d rz| d¡ |d rƒ| d¡ |d sŒ| d¡ |d r•| d¡ |d rž| d¡ |d  r§| d!¡ |d" s°| d#¡ |  d$|¡ d S )%NrÈ  r¸  )r¸  r   r¹  )r¹  r   rº  )rº  r   r»  )r»  r   r¼  )ZformatCellsr   r½  )ZformatColumnsr   r¾  )Z
formatRowsr   r¿  )ZinsertColumnsr   rÀ  )Z
insertRowsr   rÁ  )ZinsertHyperlinksr   rÂ  )ZdeleteColumnsr   rÃ  )Z
deleteRowsr   rÄ  )ZselectLockedCellsr   rÅ  )rÅ  r   rÅ  )r.  r   rÆ  )ZpivotTablesr   rÇ  )ZselectUnlockedCellsr   ZsheetProtection)r   rz  rÇ  )r"   r†  rœ  r(   r(   r)   r  4  sR   
















z!Worksheet._write_sheet_protectionc                 C   sF   | j dkrd S |  d¡ | jD ]\}}}|  |||¡ q|  d¡ d S )Nr   ZprotectedRanges)r   r{  rŽ   Ú_write_protected_ranger~  rÎ  r(   r(   r)   r   d  s   

z!Worksheet._write_protected_rangesc                 C   sB   g }|r|  d|f¡ |  d|f¡ |  d|f¡ |  d|¡ d S )NrÈ  r¥  rS   ZprotectedRange©rz  rÇ  )r"   rY  rÏ  rÈ  r†  r(   r(   r)   r9  p  s   z Worksheet._write_protected_rangec                 C   s(   | j sd S |  jd7  _|  | j¡ d S r¼  )rÍ   r½   Ú_write_drawingrò   r(   r(   r)   r.  |  s   zWorksheet._write_drawingsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr*  r+  rÍ   ©r  rÇ  )r"   r`  r-  r†  r(   r(   r)   r;  „  s   
zWorksheet._write_drawingc                 C   ó@   | j sd S |  jd7  _dt| jƒ }d|fg}|  d|¡ d S )Nr   r*  r+  ZlegacyDrawing)r¨   r½   r  rÇ  ©r"   r-  r†  r(   r(   r)   r/  Œ  ó   
zWorksheet._write_legacy_drawingc                 C   r=  )Nr   r*  r+  ZlegacyDrawingHF)r©   r½   r  rÇ  r>  r(   r(   r)   r0  ™  r?  z"Worksheet._write_legacy_drawing_hfc                 C   r=  )Nr   r*  r+  Zpicture)rÒ   r½   r  rÇ  r>  r(   r(   r)   r1  ¦  r?  zWorksheet._write_picturec                 C   r"  )Nr  ZdataValidations)rÖ   r   r{  Ú_write_data_validationr~  )r"   rÖ   r  r†  Z
validationr(   r(   r)   r%  ³  r%  z!Worksheet._write_data_validationsc           	      C   sô  d}g }|d D ]+}|dkr|d7 }|\}}}}||kr!||}}||kr*||}}|t ||||ƒ7 }q|d dkrR| d|d f¡ |d dkrR| d	|d f¡ d
|v rl|d
 dkra| d¡ |d
 dkrl| d¡ |d ru| d¡ |d s~| d¡ |d r‡| d¡ |d r| d¡ d|v r| d|d f¡ d|v rª| d|d f¡ d|v r·| d|d f¡ d|v rÄ| d|d f¡ | d|f¡ |d dkrÙ|  d |¡ d S |  d |¡ |  |d! ¡ |d" d uró|  |d" ¡ |  d ¡ d S )#NrG   r  rg  rÓ  rà  r  rÍ  rè  rE  rß  r   )Ú
errorStylerÿ  rc  )rA  r   r×  )Z
allowBlankr   rØ  )ZshowDropDownr   rÙ  )ZshowInputMessager   rÜ  )ZshowErrorMessager   rÝ  Z
errorTitlerÞ  rS  rÚ  ZpromptTitlerÛ  Úpromptr¥  ZdataValidationr8  rÖ  )r   rz  rÇ  r{  Ú_write_formula_1Ú_write_formula_2r~  )	r"   rœ  r¥  r†  r  Z	row_firstrÏ  Zrow_lastrÐ  r(   r(   r)   r@  Æ  sX   







z Worksheet._write_data_validationc                 C   sd   t |ƒtu r| j|Ž }d| }nzt|ƒ W n ty)   | d¡r'| d¡}Y nw |  d|¡ d S )Nz"%s"rõ   Zformula1)r  rx  r  r   r!   rú   rY  r}  rU  r(   r(   r)   rC    s   



€ýzWorksheet._write_formula_1c                 C   óD   zt |ƒ W n ty   | d¡r| d¡}Y nw |  d|¡ d S )Nrõ   Zformula2©r   r!   rú   rY  r}  rU  r(   r(   r)   rD  "  ó   

€ýzWorksheet._write_formula_2c                 C   s6   t | j ¡ ƒ}|sd S |D ]}|  || j| ¡ qd S r5  )r›  r×   r  Ú_write_conditional_formatting)r"   r  Ú
cond_ranger(   r(   r)   r$  /  s   ÿÿz$Worksheet._write_conditional_formatsc                 C   s8   d|fg}|   d|¡ |D ]}|  |¡ q|  d¡ d S )Nr¥  ZconditionalFormatting)r{  Ú_write_cf_ruler~  )r"   rI  r  r†  Úparamr(   r(   r)   rH  :  s
   
z'Worksheet._write_conditional_formattingc                 C   s  d|d fg}d|v r|d d ur|  d|d f¡ |  d|d f¡ | d¡r-|  d¡ |d dkrg|  d|d	 f¡ |  d
|¡ d|v rYd|v rY|  |d ¡ |  |d ¡ n|  |d ¡ |  d
¡ d S |d dkr©t d|d	 ¡rz|  d¡ t d|d	 ¡r‡|  d¡ t d|d	 ¡r¡t d|d	 ¡}|  d| d¡f¡ |  d
|¡ d S |d dkrÜd	|v r¾|d	 dkr¾|  d¡ d|v rÇ|  d¡ |d pÌd}|  d|f¡ |  d
|¡ d S |d dkrê|  d
|¡ d S |d dkrø|  d
|¡ d S |d d ks|d d!ks|d d"ks|d d#kr:|  d|d	 f¡ |  d$|d f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d&kr^|  d&|d	 f¡ |  d
|¡ |  |d% ¡ |  d
¡ d S |d d'ksz|d d(ksz|d d)ksz|d d*krŽ|  d
|¡ |  |d% ¡ |  d
¡ d S |d d+kr§|  d
|¡ |  	|¡ |  d
¡ d S |d d,krË|  d
|¡ |  
|¡ | d-¡rÄ|  |¡ |  d
¡ d S |d d.kræ|  d
|¡ |  |d	 ¡ |  d
¡ d S |d d/krÿ|  d
|¡ |  |¡ |  d
¡ d S d S )0Nr  r@   ZdxfIdrI  r  )Z
stopIfTruer   r*  rE  rÍ  ZcfRulerÕ  rÖ  r8  r,  Zbelow)r,  r   rì  )ZequalAverager   z[123] std devz([123]) std devrp  r   r1  rA  )rÜ  r   r>  )r2  r   r°  Úrankr-  r/  r?  rK  r@  rA  rŸ  r7  r3  r5  r6  r8  r9  rL  r;  rJ  r<  r=  )rz  r—  r{  Ú_write_formula_elementr~  rý   rG  r  rÇ  Ú_write_color_scaleÚ_write_data_barÚ_write_data_bar_extÚ_write_icon_set)r"   r  r†  rþ   rL  r(   r(   r)   rJ  C  s¢   






ÿ
þ
ý
ÿ
þ
ý



ýzWorksheet._write_cf_rulec                 C   rE  )Nrõ   r7  rF  rU  r(   r(   r)   rM  «  rG  z Worksheet._write_formula_elementc                 C   sœ   |   d¡ |  |d |d ¡ |d d ur|  |d |d ¡ |  |d |d ¡ |  d|d	 ¡ |d
 d ur?|  d|d
 ¡ |  d|d ¡ |  d¡ d S )NrL  r  r  r  r  r  r  r±  r  r  r  )r{  Ú_write_cfvorÌ  r~  )r"   rK  r(   r(   r)   rN  ¸  s   
zWorksheet._write_color_scalec                 C   s¢   g }|  d¡r| d|d f¡ |  d¡r| d|d f¡ |  d¡r(| d¡ |  d|¡ |  |d |d	 ¡ |  |d
 |d ¡ |  d|d ¡ |  d¡ d S )Nr  Ú	minLengthr  Ú	maxLengthr$  ©Z	showValuer   r;  r  r  r  r  r±  r  )r—  rz  r{  rR  rÌ  r~  )r"   rK  r†  r(   r(   r)   rO  Í  s   



zWorksheet._write_data_barc                 C   sp   | j d }t| jƒd }d||f }||d< | j |¡ |  d¡ |  d¡ |  d|¡ |  d¡ |  d¡ d S )Nr   z{DA7ABA51-AAAA-BBBB-%04X-%012X}ÚguidÚextLstz&{B025F937-C7B1-47D3-B67F-A62EFF666E3E}zx14:idÚext)rT   r   rØ   rz  r{  Ú
_write_extr}  r~  )r"   rK  Zworksheet_countZdata_bar_countrV  r(   r(   r)   rP  ä  s   
ÿ


zWorksheet._write_data_bar_extc                 C   sŒ   g }|d dkrd|d fg}|  d¡r| d¡ |  d¡r#| d¡ |  d|¡ t|d ƒD ]}|  |d	 |d
 |d ¡ q/|  d¡ d S )Nr%  rD  r=  r'  rU  r&  )r‡  r   r(  r  r8  rÍ  )r—  rz  r{  ÚreversedrR  r~  )r"   rK  r†  Úiconr(   r(   r)   rQ  ÷  s   



ýzWorksheet._write_icon_setc                 C   s>   d|fg}|d ur|  d|f¡ |r|  d¡ |  d|¡ d S )Nr  rÂ  )Zgter   Zcfvor:  )r"   Zcf_typerÂ  rÍ  r†  r(   r(   r)   rR    s   

zWorksheet._write_cfvoc                 C   s   ||fg}|   d|¡ d S r×  r!  rØ  r(   r(   r)   rÌ    r6  zWorksheet._write_colorc                 C   s   | j D ]}| j|Ž  qd S r5  )rd   Ú_write_selection)r"   Ú	selectionr(   r(   r)   rï  "  s   
ÿzWorksheet._write_selectionsc                 C   sJ   g }|r|  d|f¡ |r|  d|f¡ |r|  d|f¡ |  d|¡ d S )Nr£  Z
activeCellr¥  r]  r:  )r"   r£  r¤  r¥  r†  r(   r(   r)   r\  '  s   zWorksheet._write_selectionc                 C   s:   | j }t|ƒs	d S |d dkr| j|Ž  d S | j|Ž  d S )NrÉ  rc  )rh   r   Ú_write_split_panesÚ_write_freeze_panes)r"   rh   r(   r(   r)   rî  6  s   zWorksheet._write_panesc                 C   sJ  g }|}|}t ||ƒ}	d}
d}d}d}| jr!| jd \}}}g | _|rM|rMd}
t |dƒ}t d|ƒ}| j d||g¡ | j d||g¡ | j d||g¡ n|r[d}
| j d||g¡ nd}
| j d||g¡ |dkrmd}n	|dkrtd}nd	}|r| d
|f¡ |rˆ| d|f¡ | d|	f¡ | d|
f¡ | d|f¡ |  d|¡ d S )NrG   r   ÚbottomRightÚtopRightÚ
bottomLeftÚfrozenr   ZfrozenSplitr/   ÚxSplitÚySplitÚtopLeftCellÚ
activePaneÚstater£  )r   rd   rz  rÇ  )r"   r  r8   r©  rª  r«  r†  Úy_splitÚx_splitÚtop_left_cellri   rh  r¤  r¥  r:   Úrow_cellÚcol_cellr(   r(   r)   r_  B  sH   


zWorksheet._write_freeze_panesc                 C   s¢  g }d}d}d}	d}
|}|}| j r| j d \}}	}
g | _ d}|r(td| d ƒ}|r/|  |¡}||krS||krStd|d d d  ƒ}td|d d d	 d
 d  ƒ}t||ƒ}|s^|}	|}
|rŠ|rŠd}t|dƒ}td|ƒ}| j  d||g¡ | j  d||g¡ | j  d|	|
g¡ n|r˜d}| j  d|	|
g¡ nd}| j  d|	|
g¡ |r®| dd| f¡ |r¹| dd| f¡ | d|f¡ |rÉ| d|f¡ |  d|¡ d S )Nr   rG   r   rM   i,  r  rL   é†  rF   rÉ  rO   r`  ra  rb  rd  r  re  rf  rg  r£  )rd   r    Ú_calculate_x_split_widthr   rz  rÇ  )r"   r  r8   r©  rª  r«  r†  Zhas_selectionri   r¤  r¥  ri  rj  r:   rk  rl  rm  r(   r(   r)   r^  z  sT   
 


zWorksheet._write_split_panesc                 C   sZ   d}d}|dk rt |||  d ƒ}n
t || d ƒ| }|d d }|d }|d }|S )	Nrµ  rÈ  r   r  rF   rÉ  rM   rn  )r    )r"   r¶  r~  r  r€  ZpointsZtwipsr(   r(   r)   ro  Á  s   z"Worksheet._calculate_x_split_widthc                 C   s^   | j }t|ƒ}|sd S d|fg}|  d|¡ |D ]}|  jd7  _|  | j¡ q|  d¡ d S )Nr  Z
tablePartsr   )rÊ   r   r{  r½   Ú_write_table_partr~  )r"   rÊ   r  r†  r:   r(   r(   r)   r2  Ø  s   
zWorksheet._write_table_partsc                 C   s&   dt |ƒ }d|fg}|  d|¡ d S )Nr*  r+  Z	tablePartr<  r>  r(   r(   r)   rp  í  s   
zWorksheet._write_table_partc                 C   sP   t | jƒ}t | jƒ}|s|sd S |  d¡ |r|  ¡  |r!|  ¡  |  d¡ d S )NrW  )r   rØ   rË   r{  Ú_write_ext_list_data_barsÚ_write_ext_list_sparklinesr~  )r"   Zhas_data_barsZhas_sparklinesr(   r(   r)   r3  ö  s   


zWorksheet._write_ext_listc                 C   sB   |   d¡ |  d¡ | jD ]}|  |¡ q|  d¡ |  d¡ d S )Nz&{78C0D931-6437-407d-A8EE-F0AAD7539E65}zx14:conditionalFormattingsrX  )rY  r{  rØ   Ú"_write_conditional_formatting_2010r~  )r"   r:  r(   r(   r)   rq  	  s   



z#Worksheet._write_ext_list_data_barsc                 C   sì   d}d|fg}|   d|¡ |  |¡ |  |¡ |  |d |d ¡ |  |d |d ¡ |d s6|  |d	 ¡ |d
 sA|  |d ¡ |d sP|d sP|  |d ¡ |d dkr]|  |d ¡ |  d¡ |  d¡ |  	d|d ¡ |  d¡ d S )Nú3http://schemas.microsoft.com/office/excel/2006/mainúxmlns:xmzx14:conditionalFormattingrR  r  rT  r  r   r  r  r  r  r  r"  rà  r#  úx14:dataBarú
x14:cfRuleúxm:sqrefrW  )
r{  Ú_write_x14_cf_ruleÚ_write_x14_data_barÚ_write_x14_cfvoÚ_write_x14_border_colorÚ_write_x14_negative_fill_colorÚ _write_x14_negative_border_colorÚ_write_x14_axis_colorr~  r}  )r"   r:  Úxmlns_xmr†  r(   r(   r)   rs    s2   


ÿÿÿ

z,Worksheet._write_conditional_formatting_2010c                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nr;  rV  r  ri  rw  ©r{  )r"   r:  Ú	rule_typerV  r†  r(   r(   r)   ry  D  s   zWorksheet._write_x14_cf_rulec                 C   sÐ   d}d}d|fd|fg}|d s|  d¡ |d r|  d¡ |d	 d
kr)|  d¡ |d	 dkr4|  d¡ |d r=|  d¡ |d sJ|d sJ|  d¡ |d dkrU|  d¡ |d dkr`|  d¡ |  d|¡ d S )Nr   rK   rS  rT  r   )Úborderr   r  )Zgradientr   r!  rÜ  )r>  ZleftToRightrÝ  )r>  rë  r  )ZnegativeBarColorSameAsPositiver   r  )Z$negativeBarBorderColorSameAsPositiver   r"  Úmiddle)ÚaxisPositionr„  rà  )r…  rà  rv  )rz  r{  )r"   r:  r  r  r†  r(   r(   r)   rz  L  s0   þ




ÿ


zWorksheet._write_x14_data_barc                 C   sH   d|fg}|dv r|   d|¡ d S |  d|¡ |  d|¡ |  d¡ d S )Nr  )rM  rN  rQ  rS  zx14:cfvoúxm:f)rÇ  r{  r}  r~  )r"   r‚  r8  r†  r(   r(   r)   r{  q  s   
zWorksheet._write_x14_cfvoc                 C   r5  )Nr±  zx14:borderColorr!  ©r"   r±  r†  r(   r(   r)   r|  |  ó   
z!Worksheet._write_x14_border_colorc                 C   r5  )Nr±  zx14:negativeFillColorr!  r‡  r(   r(   r)   r}    rˆ  z(Worksheet._write_x14_negative_fill_colorc                 C   r5  )Nr±  zx14:negativeBorderColorr!  r‡  r(   r(   r)   r~  †  rˆ  z*Worksheet._write_x14_negative_border_colorc                 C   r5  )Nr±  zx14:axisColorr!  r‡  r(   r(   r)   r  ‹  rˆ  zWorksheet._write_x14_axis_colorc                 C   sÚ   |   d¡ |  ¡  t| jƒD ]R}|  |¡ |  |d ¡ |  |d ¡ |  ¡  |  |d ¡ |  	|d ¡ |  
|d ¡ |  |d ¡ |  |d ¡ |d	 rV|  d
|d	 ¡ |  |¡ |  d¡ q|  d¡ |  d¡ d S )Nz&{05C60535-1F16-4fd2-B633-F4F36F0B64E0}r  r€  r  r‚  rƒ  r„  r…  rŠ  r†  úx14:sparklineGroupúx14:sparklineGroupsrX  )rY  Ú_write_sparkline_groupsrZ  rË   Ú_write_sparkline_groupÚ_write_color_seriesÚ_write_color_negativeÚ_write_color_axisÚ_write_color_markersÚ_write_color_firstÚ_write_color_lastÚ_write_color_highÚ_write_color_lowr}  Ú_write_sparklinesr~  )r"   r  r(   r(   r)   rr    s$   



z$Worksheet._write_ext_list_sparklinesc                 C   sn   |   d¡ t|d ƒD ]$}|d | }|d | }|   d¡ |  d|¡ |  d|¡ |  d¡ q|  d¡ d S )Nzx14:sparklinesr  r  r|  zx14:sparkliner†  rx  )r{  rW  r}  r~  )r"   r  ry  rŸ  r}  r(   r(   r)   r•  ¿  s   

zWorksheet._write_sparklinesc                 C   s,   d}|d }d|fd|fg}|   d|¡ d S )Nz$http://schemas.microsoft.com/office/zspreadsheetml/2009/9/mainz	xmlns:x14ÚurirX  r  )r"   r–  rç  Z	xmlns_x14r†  r(   r(   r)   rY  Ð  s   þzWorksheet._write_extc                 C   s   d}d|fg}|   d|¡ d S )Nrt  ru  rŠ  r  )r"   r€  r†  r(   r(   r)   r‹  Ü  s   
z!Worksheet._write_sparkline_groupsc                 C   sæ  |  d¡}g }|  d¡d ur&|d dkrd|d< n| d|d f¡ d|d< |  d¡d urE|d dkr8d|d< n| d	|d f¡ d|d< |d
 dkrT| d
|d
 f¡ |  d¡rb| d|d f¡ |  d¡rl| d¡ |ru| d|f¡ |  d¡r| d¡ |  d¡r‰| d¡ |  d¡r“| d¡ |  d¡r| d¡ |  d¡r§| d¡ |  d¡r±| d¡ |  d¡r»| d¡ |  d¡rÅ| d ¡ |  d¡rÓ| d!|d f¡ |  d¡rá| d"|d f¡ |  d#¡rë| d$¡ |  d%|¡ d S )&Nr˜  rN  r  Zcust_maxZ	manualMaxrä  rM  Zcust_minZ	manualMinr  rŒ  r‹  Z
lineWeightrŠ  )ZdateAxisr   ZdisplayEmptyCellsAsr~  )r~  r   r’  )r’  r   r“  )r“  r   r•  )r•  r   r–  )r–  r   r”  )r”  r   r†  )ZdisplayXAxisr   re   )ZdisplayHiddenr   ZminAxisTypeZmaxAxisTyper‡  rê  r‰  )r—  rz  r{  )r"   rœ  r˜  r†  r(   r(   r)   rŒ  ä  sV   

























z Worksheet._write_sparkline_groupc                 C   sh   g }|  d¡r| d|d f¡ |  d¡r| d|d f¡ |  d¡r,| d|d f¡ |  ||¡ d S )Nr±  rÃ  Ztint)r—  rz  rÇ  )r"   Úelementr¶  r†  r(   r(   r)   Ú_write_spark_color>  s   


zWorksheet._write_spark_colorc                 C   ó   |   d|¡ d S )Nzx14:colorSeries©r˜  rµ  r(   r(   r)   r  M  ó   zWorksheet._write_color_seriesc                 C   r™  )Nzx14:colorNegativerš  rµ  r(   r(   r)   rŽ  Q  r›  zWorksheet._write_color_negativec                 C   s   |   dddi¡ d S )Nzx14:colorAxisr±  ZFF000000rš  rò   r(   r(   r)   r  U  s   zWorksheet._write_color_axisc                 C   r™  )Nzx14:colorMarkersrš  rµ  r(   r(   r)   r  Y  r›  zWorksheet._write_color_markersc                 C   r™  )Nzx14:colorFirstrš  rµ  r(   r(   r)   r‘  ]  r›  zWorksheet._write_color_firstc                 C   r™  )Nzx14:colorLastrš  rµ  r(   r(   r)   r’  a  r›  zWorksheet._write_color_lastc                 C   r™  )Nzx14:colorHighrš  rµ  r(   r(   r)   r“  e  r›  zWorksheet._write_color_highc                 C   r™  )Nzx14:colorLowrš  rµ  r(   r(   r)   r”  i  r›  zWorksheet._write_color_lowc                 C   s   ddg}|   d|¡ d S )N)ZfontIdÚ0)r  ZnoConversionZ
phoneticPrr!  rð  r(   r(   r)   r!  m  s   þzWorksheet._write_phonetic_prc                 C   sT  | j sd S |  d¡ | j  d¡r| j d }|  d|¡ | j  d¡r,| j d }|  d|¡ | j  d¡r=| j d }|  d|¡ | j  d¡rN| j d }|  d	|¡ | j  d
¡r_| j d
 }|  d|¡ | j  d¡rp| j d }|  d|¡ | j  d¡r| j d }|  d|¡ | j  d¡r’| j d }|  d|¡ | j  d¡r£| j d }|  d|¡ |  d¡ d S )NZignoredErrorsr  ZnumberStoredAsTextr  Z	evalErrorr  r7  r  ZformulaRanger  ZunlockedFormular  ZemptyCellReferencer  ZlistDataValidationr  ZcalculatedColumnr	  ZtwoDigitTextYear)rï   r{  r—  Ú_write_ignored_errorr~  )r"   rW  r(   r(   r)   r-  v  s>   









zWorksheet._write_ignored_errorsc                 C   s    d|f|dfg}|   d|¡ d S )Nr¥  r   ZignoredErrorr!  )r"   r  rW  r†  r(   r(   r)   r  £  s   þzWorksheet._write_ignored_errorr5  )Nr   )Nr   rL  )NNN)F)NF)r   r   r   r   )NNr   )NN)rK   )rG   N)rH   rH   rI   rI   )rG   NN)r   )FF)r   )êr²  Ú
__module__Ú__qualname__Ú__doc__rR   r  r,   r  r	  r   r  r-  r  r4  rù   r9  rû   r5   rQ  rH  rJ  rI  rZ  r  r]  r  ra  rÿ   rq  rp  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  r4  r%  r[  rÂ  r8  rÊ  rË  r<  rÉ  rj  rk  rn  ro  rp  r[  rq  r|  r}  rº  r¾  r”  rÑ  r   r¡  r¤  rs  rœ  rµ  r  ro  r^  rl  r|  rÊ  rË  rÎ  rÍ  rÚ  rÛ  rV  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/  r0  r1  r4  r2  r8  r  r   r9  r.  r;  r/  r0  r1  r%  r@  rC  rD  r$  rH  rJ  rM  rN  rO  rP  rQ  rR  rÌ  rï  r\  rî  r_  r^  ro  r2  rp  r3  rq  rs  ry  rz  r{  r|  r}  r~  r  rr  r•  rY  r‹  rŒ  r˜  r  rŽ  r  r  r‘  r’  r“  r”  r!  r-  r  Ú__classcell__r(   r(   ró   r)   rD   –   sD    W#
V*ÿ)þ *þ.ÿÿg
p.$<#ÿJÿ=ÿ6
;(ÿ mÿ   hÿ  " =
"ÿ3#LL
/+d!(!RbT2:`|@4	8	7
K$	17J(&13x		Gÿÿ0K	h8G	-%/Z	-rD   )3r  r  r˜  rý   r  r  Úcollectionsr   r   Úmathr   r   Úwarningsr   Úcompatibilityr   r	   r
   r   rG   r   r@   r   rÍ   r   rP  r   r   Zutilityr   r   r   r   r   r   r   r   r   r   Ú
exceptionsr   r,   r5   r<   r(  r1  r5  r^  rK  rV  rD   r(   r(   r(   r)   Ú<module>   sT   




ÿ	