o
    ^g=                     @   s  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	m
Z
 i Z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/d0i d1d2d3d2d4d0d5dd6dd7d0d8d0d9dd:d	d;d2d<dd=d>d?dd@ddAd2dBddCd2i dDddEddFd0dGd0dHd.dId2dJddKddLd	dMddNd	dOddPddQddRddSd2dTdi dUd2dVd2dWd	dXddYd2dZdd[dd\dd]dd^d>d_d2d`d2dad2dbd2dcd	dddded	d2dddddd	dd	ddf
ZdgZedhZediZedjZedke dNZedle dNZedmZednZedoZddqdrZdsdt ZddudvZdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dS )    Nunpack)warn   )UndefinedImageSizeUnsupportedImageFormat    !   "   #   $%   &
   '()*+,   -./0123456789:;<=>?@   A	   B   CDEFGHIJKLM   NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst)
uvwxyz{|}~uC  ©®‼⁉™ℹ↔-↙↩↪⌚⌛⌨⏏⏩-⏳⏸-⏺Ⓜ▪▫▶◀◻-◾☀-☄☎☑☔☕☘☝☠☢☣☦☪☮☯☸-☺♀♂♈-♓♟♠♣♥♦♨♻♾♿⚒-⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱⚽⚾⛄⛅⛈⛎⛏⛑⛓⛔⛩⛪⛰-⛵⛷-⛺⛽✂✅✈-✍✏✒✔✖✝✡✨✳✴❄❇❌❎❓-❕❗❣❤➕-➗➡➰➿⤴⤵⬅-⬇⬛⬜⭐⭕〰〽㊗㊙🀄🃏🅰🅱🅾🅿🆎🆑-🆚🇦-🇿🈁🈂🈚🈯🈲-🈺🉐🉑🌀-🌡🌤-🎓🎖🎗🎙-🎛🎞-🏰🏳-🏵🏷-📽📿-🔽🕉-🕎🕐-🕧🕯🕰🕳-🕺🖇🖊-🖍🖐🖕🖖🖤🖥🖨🖱🖲🖼🗂-🗄🗑-🗓🗜-🗞🗡🗣🗨🗯🗳🗺-🙏🚀-🛅🛋-🛒🛕-🛗🛜-🛥🛩🛫🛬🛰🛳-🛼🟠-🟫🟰🤌-🤺🤼-🥅🥇-🧿🩰-🩼🪀-🪈🪐-🪽🪿-🫅🫎-🫛🫠-🫨🫰-🫸z^\sz\s$z(\$?)([A-Z]{1,3})(\$?)(\d+)z[^\w\.z^[\d\.z^([A-Z]{1,3}\d+)$z^R(\d+)z	^R?C(\d+)Fc                 C   sf   | dk rt d|  d dS |dk rt d| d dS | d7 } |r$dnd}t||}|| t|  S )	aU  
    Convert a zero indexed row and column cell reference to a A1 style string.

    Args:
       row:     The cell row.    Int.
       col:     The cell column. Int.
       row_abs: Optional flag to make the row absolute.    Bool.
       col_abs: Optional flag to make the column absolute. Bool.

    Returns:
        A1 style string.

    r   zRow number '' must be >= 0NCol number 'r   r    )r   xl_col_to_namestr)rowcolrow_abscol_abscol_str r|   l/var/www/eduai.edurigo.com/doc_train/edurigo_ai/Puru/venv/lib/python3.10/site-packages/xlsxwriter/utility.pyxl_rowcol_to_cell   s   
r~   c                 C   s2   |t v r	t | }nt|}|t |< |t| d  S )z
    Optimized version of the xl_rowcol_to_cell function. Only used internally.

    Args:
       row: The cell row.    Int.
       col: The cell column. Int.

    Returns:
        A1 style string.

    r   )	COL_NAMESru   rv   )rw   rx   r{   r|   r|   r}   xl_rowcol_to_cell_fast   s
   
r   c                 C   s   | }|dk rt d| d dS |d7 }d}|rdnd}|r@|d }|dkr(d}ttd	| d }|| }t|d d }|s|| S )
z
    Convert a zero indexed column cell reference to a string.

    Args:
       col:     The cell column. Int.
       col_abs: Optional flag to make the column absolute. Bool.

    Returns:
        Column style string.

    r   rs   rr   Nr   rt   r      r1   )r   chrordint)rx   rz   col_numr{   	remainder
col_letterr|   r|   r}   ru      s    ru   c                 C   s   | sdS t | }|d}|d}d}d}t|D ]}|t|td d d|  7 }|d7 }qt|d }|d8 }||fS )z
    Convert a cell reference in A1 notation to a zero indexed row and column.

    Args:
       cell_str:  A1 style string.

    Returns:
        row, col: Zero indexed cell row and column indices.

    )r   r      r   r   r1   r   r   )RE_RANGE_PARTSmatchgroupreversedr   r   )cell_strr   r{   row_strexpnrx   charrw   r|   r|   r}   xl_cell_to_rowcol   s   


 
r   c           
      C   s   | sdS t | }t|d}|d}t|d}|d}d}d}t|D ]}|t|td d d|  7 }|d7 }q)t|d }	|d8 }|	|||fS )	a!  
    Convert an absolute cell reference in A1 notation to a zero indexed
    row and column, with True/False values for absolute rows or columns.

    Args:
       cell_str: A1 style string.

    Returns:
        row, col, row_abs, col_abs:  Zero indexed cell row and column indices.

    )r   r   FFr   r   r	   r   r   r1   r   )r   r   boolr   r   r   r   )
r   r   rz   r{   ry   r   r   rx   r   rw   r|   r|   r}   xl_cell_to_rowcol_abs  s   


 
r   c                 C   sH   t | |}t ||}|du s|du rtd dS ||kr|S |d | S )aG  
    Convert zero indexed row and col cell references to a A1:B1 range string.

    Args:
       first_row: The first cell row.    Int.
       first_col: The first cell column. Int.
       last_row:  The last cell row.     Int.
       last_col:  The last cell column.  Int.

    Returns:
        A1:B1 style range string.

    N#Row and column numbers must be >= 0r)   r~   r   	first_row	first_collast_rowlast_colrange1range2r|   r|   r}   xl_range+  s   

r   c                 C   sP   t | |dd}t ||dd}|du s|du rtd dS ||kr"|S |d | S )a\  
    Convert zero indexed row and col cell references to a $A$1:$B$1 absolute
    range string.

    Args:
       first_row: The first cell row.    Int.
       first_col: The first cell column. Int.
       last_row:  The last cell row.     Int.
       last_col:  The last cell column.  Int.

    Returns:
        $A$1:$B$1 style range string.

    TNr   r)   r   r   r|   r|   r}   xl_range_absF  s   r   c                 C   s"   t ||||}t| } | d | S )a  
    Convert worksheet name and zero indexed row and col cell references to
    a Sheet1!A1:B1 range formula string.

    Args:
       sheetname: The worksheet name.    String.
       first_row: The first cell row.    Int.
       first_col: The first cell column. Int.
       last_row:  The last cell row.     Int.
       last_col:  The last cell column.  Int.

    Returns:
        A1:B1 style range string.

    r
   )r   quote_sheetname)	sheetnamer   r   r   r   
cell_ranger|   r|   r}   xl_range_formulab  s   r   c           	      C   sJ  |   }d}d}d}| dst| rd}n~t| rd}nvt|rOt|}|d}t|\}}d|  kr>|k rNn nUd|  krJ|k rNn nId}nFt	|rot	|}t
|d}d|  k rj|krnn n)d}n&t|rt|}t
|d}d|  k r|krn n	d}n|dv rd}|r| dd	} d|  d} | S )
a,  
    Sheetnames used in references should be quoted if they contain any spaces,
    special characters or if they look like a A1 or RC cell reference. The rules
    are shown inline below.

    Args:
       sheetname: The worksheet name. String.

    Returns:
        A quoted worksheet string.

    Fi @  i   r   Tr   r   )rE   r5   RCz'')upper
startswithRE_QUOTE_RULE1searchRE_QUOTE_RULE2RE_QUOTE_RULE3r   r   r   RE_QUOTE_RULE4_ROWr   RE_QUOTE_RULE4_COLUMNreplace)	r   uppercase_sheetnamerequires_quotingcol_maxrow_maxr   cellrw   rx   r|   r|   r}   r   x  sD   





0



r   c                 C   s    | rt | dkr
dS t| d S )z
    Calculate the width required to auto-fit a string in a cell.

    Args:
       string: The string to calculate the cell width for. String.

    Returns:
        The string autofit width in pixels. Returns 0 if the string is empty.

    r   r   )lenxl_pixel_widthstringr|   r|   r}   cell_autofit_width  s   r   c                 C   s"   d}| D ]
}|t |d7 }q|S )a}  
    Get the pixel width of a string based on individual character widths taken
    from Excel. UTF8 characters, and other unhandled characters, are given a
    default width of 8.

    Args:
       string: The string to calculate the width for. String.

    Returns:
        The string width in pixels. Note, Excel adds an additional 7 pixels of
        padding in the cell.

    r   r4   )CHAR_WIDTHSget)r   lengthr   r|   r|   r}   r     s   r   c                 C   s   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}| | | } td | sFtd!|  d" d#| d$  S )%Nblackz#000000bluez#0000FFbrownz#800000cyanz#00FFFFgrayz#808080greenz#008000limez#00FF00magentaz#FF00FFnavyz#000080orangez#FF6600pinkpurplez#800080redz#FF0000silverz#C0C0C0whitez#FFFFFFyellowz#FFFF00z#[0-9a-fA-F]{6}zColor 'z' isn't a valid Excel colorFFr   )r   rer   r   lstripr   )colornamed_colorsr|   r|   r}   	_xl_color  sJ   	
r   c                 C   s   t | }tdd|}|S )Nz^FFrt   )r   r   sub)r   	rgb_colorr|   r|   r}   _get_rgb_color  s   r   c              
   C   s(  g dddddidddddddddddiddiddddddidddddddddddiddiddddddidddddddddddiddidddddd	idddddddddddiddidd	dddd
id	ddd	ddd	dddd	idd	idd
ddddid
ddd
ddd
dddd
idd
iddddddidddddddddddiddi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i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
i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iddddddddddddddddddiddiddddddddddddddddddiddiddddddddddddddddddidd	idddddddddddddddddd	idd
id	ddd	ddd	ddd	ddd	ddddd
iddid
ddd
ddd
ddd
ddd
dddddi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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	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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dddddddddddddddddddddiddiddiddiddiddiddidddiddiddiddiddiddiddidddiddiddiddiddiddiddidddiddiddiddiddiddiddidddiddiddiddiddiddiddidddiddiddidd iddiddiddiddd!idd"idd#idd$idd%idd&idd'iddd(idd)iddidd*idd*idd(idd)iddd+iddidd
iddiddiddidd	idddiddidd
iddiddiddidd	id}||  S ),Nr#   z-0.499984740745262)themetintr   r$   z0.39997558519241921)seriesnegativemarkersfirstlasthighlowr%   r&   r'   r(   z-0.249977111117893r   z0.79998168889431442r    z0.499984740745262z0.249977111117893z0.34998626667073579rgbFF323232FFD00000FF000000FF0070C0FF376092FF5F5F5FFFFFB620FFD70077FF5687C2FF359CEBFF56BE79FFFF5055FF777777FFC6EFCEFFFFC7CEFF8CADD6FFFFDC47FFFFEB9CFF60D276FFFF5367FF00B050FFFF0000FFFFC000r"   r|   )style_idstylesr|   r|   r}   _get_sparkline_style!  s  &/8AJS\enw  
      %  .  7  @  I  R  [  d  m  v     	            $    -    6    ?    H    Rr   c                 C   s   t | tjtjtjtjfS N)
isinstancedatetimedatetime	timedelta)dtr|   r|   r}   _supported_datetimeu  s   r   c                 C   s&   |r
| j d d} | S | jrtd| S )N)tzinfozExcel doesn't support timezones in datetimes. Set the tzinfo in the datetime/time object to None or use the 'remove_timezone' Workbook() option)r   r   	TypeError)dt_objremove_timezoner|   r|   r}   _remove_datetime_timezone|  s   	r  c                 C   s  | }d}|rt  ddd}nt  ddd}t| t j r%t| |} | | }n9t| t jr8t j |  } | | }n&t| t jrOt j || } t| |} | | }nt| t jrZd}| }nt	d|j
t|jt|jd	  d
  }t|t j r|  dkr|d8 }|s|s|dkr|d7 }|S )NFip  r   ik  r@      Tz$Unknown or unsupported datetime typeg    .AiQ )il  r   r   ;   )r   r   r  r   fromordinal	toordinalr   combiner   r   daysfloatsecondsmicrosecondsisocalendar)r  	date_1904r  	date_typeis_timedeltaepochdelta
excel_timer|   r|   r}   _datetime_to_excel_datetime  s8   




r  c                 C   s   t | p	t| S r   )RE_LEADING_WHITESPACEr   RE_TRAILING_WHITESPACEr   r|   r|   r}   _preserve_whitespace  s   r  c                 C   s  d}d}d}d}|s$t | d}| }W d    n1 sw   Y  n| }t| }tj| }	t	d|dd d }
t	d|d d d }t	d	|d d d }t	d
|d d d }t	d|dd d }t	d|d d d }d}d}d}d}|
|krt
|\}}}}}nO|dkrt|\}}}}}nA||krt|\}}}n5|dkrt|\}}}}}n'|dkr||krt|\}}}}}n||krt|\}}}}}nt|  d|r|st|  d|s|  |dkrd}|dkrd}||||	|||fS )Nr   `   rb3sr   r   >Hr   2s<L4s(   ,   s   PNGs   BMs    EMFs   GIF8i  l   M5 z+: Unknown or unsupported image file format.z#: no size data found in image file.)openreadgetvaluehashlibsha256	hexdigestospathbasenamer   _process_png_process_jpg_process_bmp_process_wmf_process_emf_process_gifr   r   close)filename
image_dataheightwidthx_dpiy_dpifhdatadigest
image_namemarker1marker2marker3marker4marker5marker6
png_marker
bmp_marker
emf_marker
gif_marker
image_typer|   r|   r}   _get_image_properties  s\   
rF  c                 C   sj  d}t | }d}d}d}d}d}|s||k rtd| |d |d  d }td| |d |d  d }	|	dkrVtd| |d |d	  d }td| |d	 |d
  d }|	dkrtd| |d |d	  d }
td| |d	 |d
  d }td| |d
 |d  d }|dkr|
dkr|dkr|
d }|d }|	dkrd}q|| d	 }|s||k sd||||fS )Nr4   Fr   r  z>Ir   r  s   IHDRr@      s   pHYsrU      r   g
F%u?s   IENDTpngr   r   )r8  offsetdata_length
end_markerr4  r3  r5  r6  r   marker	x_density	y_densityunitsr|   r|   r}   r*    s4   r*  c                 C   s  d}t | }d}d}d}d}d}|s||k rtd| |d |d  d }td| |d |d  d }	|d@ dkrd|d	krd|d
krd|dkrdtd| |d |d  d }td| |d |d  d }|dkrtd| |d |d  d }
td| |d |d  d }td| |d |d  d }|
dkr|}|}|
dkr|d }|d }|dkrd}|dkrd}|dkrd}q||	 d }|s||k sd||||fS )Nr   Fr   r  r  r   i  i  i  i  i  r   r   r2   i  rU   r   r@      rG  r   gRQ@i  TjpegrJ  )r8  rK  rL  rM  r4  r3  r5  r6  rN  r   rQ  rO  rP  r|   r|   r}   r+  9  sH   )r+  c                 C   sB   d}d}t d| dd d }t d| dd d }d||||fS )Nr  <hr   r4   r   r   gifr   )r8  r5  r6  r4  r3  r|   r|   r}   r/  p  s
   r/  c                 C   s6   t d| dd d }t d| dd d }d||fS )Nr        r   r   bmpr   )r8  r4  r3  r|   r|   r}   r,  {  s   
r,  c           
      C   s   d}d}t d| dd d }t d| dd d }t d| dd d }t d| dd d }t d	| dd
 d }t|| | | }t|| | | }	d||	||fS )Nr  rT  r   r4   r   r   r@   rR  z<HrG  wmf)r   r
  )
r8  r5  r6  x1y1x2y2inchr4  r3  r|   r|   r}   r-    s   r-  c                 C   s  t d| dd d }t d| dd d }t d| dd d }t d| dd d }|| }|| }t d| dd d }t d| dd	 d }t d| d	d
 d }	t d| d
d d }
d|	|  }d|
|  }|d | }|d | }|d7 }|d7 }d||||fS )Nz<lr4   r@   r   rG               $   r  g{Gz?gffffff9@r   emfr   )r8  bound_x1bound_y1bound_x2bound_y2r4  r3  frame_x1frame_y1frame_x2frame_y2width_mm	height_mmr5  r6  r|   r|   r}   r.    s"   r.  )FF)F)0r   r$  r'  r   structr   warningsr   
exceptionsr   r   r   r   EMOJIScompiler  r  r   r   r   r   r   r   r~   r   ru   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rF  r*  r+  r/  r,  r-  r.  r|   r|   r|   r}   <module>   s  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVk







( $X 
  V6H(7