ó
    Eñií¦ ã                   óD  • S r SSKJrJr   \" S5      rSSKrSSKJ	r	  SSK
JrJr  SSKJr  SS	KJrJr  SS
KJrJr  SSKrSSKrSSKrSSKrSSKrSSKr SSKrS r/ SQr  SSKJr  Sr!Sr"Sr#Sr$Sr%Sr&Sr'Sr(\SLr)Sr*\	" S/ SQ5      r+\	" S/ SQ5      r,\	" S/ SQ5      r-S r.S r/S r0S r1S  r2S! r3S" r4S# r5S$ r6S% r7SýS& jr8SþS' jr9S( r:S)S*S+S,S-S.S/S0S1S2S3S4S5.r;\;4S6 jr<S7 r=0 S8\-" \+" SS9S:S5      \+" SS9S:S5      S\+" SS9S:S5      \," SS:S5      \," SS:S5      SS;S</S9_S=\-" SSSS\," SS:S5      \," SS:S5      SSS9_S>\-" \+" S?S9S?S?5      \+" S?S@S?S?5      \+" S?S9S?S?5      \+" S?S9S?S?5      \," SASASA5      \," SASASA5      SSS9_SB\-" \+" SCSDSESF5      \+" SGSDSHSI5      \+" SGSDSHSI5      \+" SJSDSKSL5      \," SMSMSM5      \," SMSMSM5      SSS9_SN\-" \+" SOSDSESP5      \+" SGSDSHSI5      \+" SGSDSHSI5      \+" SQSDSKSR5      \," SMSMSM5      \," SMSMSM5      SSS9_SS\-" \+" STSUSVSW5      \+" SXSUSYSZ5      \+" SXSUSYSZ5      \+" S[SUS\S]5      \," S^S^S^5      \," S^S^S^5      SSS9_S_\-" \+" S`SUSaSb5      \+" ScSUSdSe5      \+" SGSDSHSI5      \+" SfSUSgSh5      \," SMSMSM5      \," SMSMSM5      SSS9_Si\-" \+" SjSkSlSm5      \+" SnSkSoSp5      \+" SnSkSoSp5      \+" SqSkSrSs5      \," StStSt5      \," StStSt5      SSS9_Su\-" \+" SvSkSwSx5      \+" SySkSzS{5      \+" SGSDSHSI5      \+" S|SkS}S~5      \," SMSMSM5      \," SMSMSM5      SSS9_S\-" \+" S?S9S?S?5      \3\+" S?S9S?S?5      \+" S?S9S?S?5      \," SASASA5      \," SASASA5      SSS9_S€\-" \+" S?S9S?S?5      \+" S?S@S?S?5      S\+" S?S9S?S?5      \," SASASA5      \," SASASA5      SSS9_S�\-" \+" SCSDSESF5      \+" SGSDSHSI5      S\+" SJSDSKSL5      \," SMSMSM5      \," SMSMSM5      SSS9_S‚\-" \+" SOSDSESP5      \+" SGSDSHSI5      S\+" SQSDSKSR5      \," SMSMSM5      \," SMSMSM5      SSS9_Sƒ\-" \+" STSUSVSW5      \+" SXSUSYSZ5      S\+" S[SUS\S]5      \," S^S^S^5      \," S^S^S^5      SSS9_S„\-" \+" S`SUSaSb5      \+" ScSUSdSe5      S\+" SfSUSgSh5      \," SMSMSM5      \," SMSMSM5      SSS9_S…\-" \+" SjSkSlSm5      \+" SnSkSoSp5      S\+" SqSkSrSs5      \," StStSt5      \," StStSt5      SSS9_S†\-" \+" SvSkSwSx5      \+" SySkSzS{5      S\+" S|SkS}S~5      \," SMSMSM5      \," SMSMSM5      SSS9_0 S‡\-" \+" SAS9SASA5      \+" SAS9SASA5      SS\," SASASA5      \," SASASA5      SS;/S9_Sˆ\-" \1\1SS\," SASASA5      \," SASASA5      SS;/S9_S‰\-" S\+" SAS9S?SA5      SS\," SASASA5      \," SASASA5      SSS9_SŠ\-" SSSS\," S‹S‹S‹5      \," SASASA5      SSS9_SŒ\-" S\+" SS9S?S5      SS\," SSAS5      \," SSAS5      SSS9_S�\-" \+" S?S9S?S?5      \+" S?S9S?S?5      S\+" S?S9S?S?5      \," SASASA5      \," SASASA5      SSS9_SŽ\-" \+" S?S9S?S?5      \+" SAS9S?SA5      S\+" S?S9S?S?5      \," SASASA5      \," SASASA5      SSS9_S�\-" \+" SS@S:S5      \+" SS@S:S5      S\+" SS@S:S5      \," SS:S5      \," SS:S5      SSS9_S�\-" \+" S‘SSS’5      \+" S“SSS5      \+" S“SSS5      \+" S”SSS5      \" \4S•5      \" \4SA5      SSS9_S–\-" SSSS\" \8S‹S—S˜9\" \8S‹5      SSS9_S™\-" SSSS\," SšS›S›5      \," SœS�Sž5      SSS9_SŸ\-" \6SS\+" S SSS5      \" \7S¡S5      \" \7S¢S5      SS;/S9_S£\-" \6SS\+" S SSS5      \" \7S¡S5      \" \7S¢S5      SS;/S9_S¤\-" \9\+" S¥SSS5      S\+" S¦SSS5      \<\<SSS9_S§\-" \9\+" S¥SSS5      S\+" S¦SSS5      \" \<0 S¨9\" \<0 S¨9SSS9_S©\-" \" \9SSª9\+" S«SSS5      S\+" S¬SSS5      \<\<SSS9_S­\-" \" \9SS®9\+" S¯SSS5      S\+" S°SSS5      \<\<SSS9_E\-" SSSS\," SS±S5      \," SS±S5      SSS9\-" SSSS\," S²S³SA5      \5SSS9\-" \" \:S5      SS\+" S´SSS5      \" \:S5      \" \:S5      SS;/S9Sµ.Er>\?" \>R�                  5       5      rA0 S=S=_S8S8_S>S>_SBSB_SNSN_SSSS_S_S__SiSi_SuSu_SS_SˆSˆ_S‰S‰_SŠSŠ_SŒSŒ_S�S�_SŽSŽ_S�S�_S‡S€S�S‚SƒS„S…S†S¶.ErB\R†                  " S·5      rD\R†                  " S¸5      rES¹rF\F Sº3rG\F S»3rH\F S¼3rIS½\G S¾\H S¿\F SÀ\I SÁ\F SÂ\H SÃ\I SÄ3rJ\R†                  " \J\R–                  5      rL\R†                  " \JR›                  SÅ5      \R–                  5      rNSÆrO\R†                  " SÇ5      rPSÈ rQSÉ rRSÊ rSSË rT\U4SÌ jrVSÍ rWSÿSÎ jrXSÏ rYSÐ rZSÑ r[SÒ r\SÓ r]SÔ r^SÕ r_SÖ r`\a4S× jrbSØ rcSÙ rdSÚ re\a4SÛ jrfSÜ rg     GS SÝ jrhSÞ riSÿSß jrjGSSà jrk GSSá jrlSâ rmSã rnSä roSå rpGSSæ jrqS\'\#\$4Sç jrrGSSè jrsSéS8\%\&\(\(\'SSSSSSSSSS\#\$4Sê jrtSë ruSì rvSí rwSî rxSï ryGSSð jrzSñ r{ GSSò jr|Só r}Sô r~ " Sõ Sö\5      r€S÷ r� " Sø Sù\GR                  5      rƒSú r„Sû r…\†Sü:X  a  \„" 5         gg! \ a    Sr G	Nîf = f! \ a    Sr G	N¸f = f! \ a     G	N·f = f(  zPretty-print tabular data.é    )ÚversionÚPackageNotFoundErrorÚtabulateÚunknownN)Ú
namedtuple)ÚIterableÚSized)Úescape)ÚchainÚzip_longest)ÚreduceÚpartialc                 ó6   • [        U [        R                  5      $ ©N)Ú
isinstanceÚioÚIOBase)Úfs    ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/tabulate/__init__.pyÚ_is_filer       s   € Ü�aœŸ™Ó#Ð#ó    )r   Útabulate_formatsÚsimple_separated_formaté   )r   é   FTÚgÚ ÚdefaultÚÚLine)ÚbeginÚhlineÚsepÚendÚDataRow)r!   r#   r$   ÚTableFormat)Ú	lineaboveÚlinebelowheaderÚlinebetweenrowsÚ	linebelowÚ	headerrowÚdatarowÚpaddingÚwith_header_hidec                 ó`   • [        U 5      [        L =(       a    U R                  5       [        :H  $ r   )ÚtypeÚstrÚstripÚSEPARATING_LINE)Úvalues    r   Ú_is_separating_line_valuer5   z   s!   € Ü�‹;œ#Ð×B %§+¡+£-´?Ñ"BÐBr   c                 óö   • [        U 5      nU[        :H  =(       d	    U[        :H  =(       aM    [        U 5      S:¬  =(       a    [	        U S   5      =(       d#    [        U 5      S:¬  =(       a    [	        U S   5      nU$ )Nr   r   r   )r0   Úlistr1   Úlenr5   )ÚrowÚrow_typeÚis_sls      r   Ú_is_separating_liner<   ~   sg   € Ü�C‹y€HØœÑ×0 ¬S¡÷ Ü	ˆS‹�Q‰×	<Ô4°S¸±VÓ<÷ 	AÜ�‹H˜‰M×?Ô7¸¸A¹Ó?ð 
ð
 €Lr   c                 ó|   • UnU S;   a  SUS-
  -  S-   $ U S:X  a  SSUS-
  -  -   S-   $ U S:X  a  SSUS-
  -  -   $ SU-  $ )zzReturn a segment of a horizontal line with optional colons which
indicate column's alignment (as in `pipe` output format).)ÚrightÚdecimalÚ-r   Ú:Úcenterr   Úleft© )ÚalignÚcolwidthÚws      r   Ú_pipe_segment_with_colonsrH   ˆ   sh   € ð 	€AØÐ$Ó$Ø�q˜1‘u‘ Ñ$Ð$Ø	�(Ó	Ø�c˜Q ™U‘mÑ$ sÑ*Ð*Ø	�&‹Ø�c˜Q ™U‘mÑ$Ð$à�Q‰wˆr   c                 ó|   • U(       d  S/[        U 5      -  nSR                  S [        X5       5       5      nSU S3$ )zjReturn a horizontal line with optional colons to indicate column's
alignment (as in `pipe` output format).r   Ú|c              3   ó<   #   • U  H  u  p[        X5      v •  M     g 7fr   )rH   ©Ú.0ÚarG   s      r   Ú	<genexpr>Ú)_pipe_line_with_colons.<locals>.<genexpr>›   ó   é € ð Ú4M©D¨AÔ! !×'Ð'Ò4Mùó   ‚©r8   ÚjoinÚzip©Ú	colwidthsÚ	colalignsÚsegmentss      r   Ú_pipe_line_with_colonsrZ   –   óG   € ö Ø�Dœ3˜y›>Ñ)ˆ	Ø�x‰xñ Ü47¸	Ô4Móó €Hð ˆxˆj˜ˆ?Ðr   c                 ó|   • U nUS:X  a  SUS-
  -  S-   $ US:X  a  SSUS-
  -  -   S-   $ US:X  a  SSUS-
  -  -   $ SU-  $ )zmReturn a segment of a horizontal line with optional colons which indicate
column's alignment in a grid table.r>   Ú=r   rA   rB   r   rC   rD   )rF   rE   Úwidths      r   Ú_grid_segment_with_colonsr_   ¡   sk   € ð €EØ�ÓØ�u˜q‘yÑ! SÑ(Ð(Ø	�(Ó	Ø�c˜U Q™YÑ'Ñ(¨3Ñ.Ð.Ø	�&‹Ø�c˜U Q™YÑ'Ñ(Ð(à�U‰{Ðr   c                 ó|   • U(       d  S/[        U 5      -  nSR                  S [        X5       5       5      nSU S3$ )z]Return a horizontal line with optional colons to indicate column's alignment
in a grid table.r   Ú+c              3   ó<   #   • U  H  u  p[        X!5      v •  M     g 7fr   )r_   rL   s      r   rO   Ú)_grid_line_with_colons.<locals>.<genexpr>´   rQ   rR   rS   rV   s      r   Ú_grid_line_with_colonsrd   ¯   r[   r   c           	      óØ   • SSSSS.n[        X5       VVs/ s H   u  pVSUR                  US5      -   U-   S-   PM"     nnnU S-  nXR                  U5      -   R                  5       $ s  snnf )Nr   zstyle="text-align: right;"| zstyle="text-align: center;"| ©rC   r>   rB   r?   Ú r   )rU   ÚgetrT   Úrstrip)	Ú	separatorÚcell_valuesrW   rX   Ú	alignmentÚcrN   Úvalues_with_attrsÚcolseps	            r   Ú_mediawiki_row_with_attrsrp   º   s�   € àØ/Ø1Ø1ñ	€Iô :=¸[Ô9TôÚ9T±°ˆˆi�m‰m˜A˜rÓ"Ñ" QÑ&¨Ô,Ñ9Tð ñ ð ˜‰]€FØŸ™Ð$5Ó6Ñ6×>Ñ>Ó@Ð@ùó	s   –'A&c                 ó€   ^• U S==   S-  ss'   SSSSS.mSR                  U4S j[        X 5       5       5      nSU S3$ )	Nr   rg   z<.z>.z=.rf   rJ   c              3   óR   >#   • U  H  u  pTR                  US 5      U-   v •  M     g7f)r   N©rh   )rM   rN   Úvrl   s      €r   rO   Ú*_textile_row_with_attrs.<locals>.<genexpr>Í   s%   øé € ÐWÒ;V±4°1�i—m‘m A rÓ*¨QÖ.Ò;Vùs   ƒ$')rT   rU   )rk   rW   rX   Úvaluesrl   s       @r   Ú_textile_row_with_attrsrw   Ê   sF   ø€ Ø�ƒN�cÑƒNØ¨¸ÈÑN€IØ�X‰XÔW¼3¸yÔ;VÓWÓW€FØˆvˆh�aˆ=Ðr   c                 ó   • g)Nz<table>
<tbody>rD   )Úcolwidths_ignoreÚcolaligns_ignores     r   Ú _html_begin_table_without_headerr{   Ñ   s   € àr   c                 ó¾  • SSSSS.nU(       a@  [        X$5       VVs/ s H'  u  pgSR                  XR                  US5      U5      PM)     nnnOH[        X$5       VVs/ s H0  u  pgSR                  XR                  US5      [        U5      5      PM2     nnnSR                  SR	                  U5      R                  5       5      n	U S:X  a  SU	 S	3n	U	$ s  snnf s  snnf )
Nr   z style="text-align: right;"z style="text-align: center;"rf   z<{0}{1}>{2}</{0}>z<tr>{}</tr>Úthz<table>
<thead>
z
</thead>
<tbody>)rU   Úformatrh   Ú
htmlescaperT   ri   )
ÚcelltagÚunsaferk   rW   rX   rl   rm   rN   rn   Úrowhtmls
             r   Ú_html_row_with_attrsrƒ   Ö   sî   € àØ.Ø0Ø0ñ	€Iö ô ˜KÔ3ô
â3‘�ð  ×&Ñ& w·±¸aÀÓ0DÀaÖHÙ3ð 	ñ 
Ðô ˜KÔ3ô
â3‘�ð  ×&Ñ& w·±¸aÀÓ0DÄjÐQRÃmÖTÙ3ð 	ñ 
ð ×"Ñ" 2§7¡7Ð+<Ó#=×#DÑ#DÓ#FÓG€GØ�$ƒØ& w iÐ/BÐCˆØ€Nùó
ùó

s   �.CÁ7Cc                 óÌ   • SSSSS.n[        X5       VVs/ s H,  u  pgSR                  XR                  US5      XF-   U-   5      PM.     nnnSR                  U5      S-   $ s  snnf )Nr   z<style="text-align: right;">z<style="text-align: center;">rf   z{}{} {} ú||)rU   r~   rh   rT   )	r€   rk   rW   rX   Úheaderrl   rm   rN   rn   s	            r   Ú_moin_row_with_attrsr‡   í   sy   € àØ/Ø1Ø1ñ	€Iô ˜Ô/ôâ/‰DˆAð 	×Ñ˜'§=¡=°°BÓ#7¸¹ÀfÑ9LÖMÙ/ð ñ ð �7‰7Ð$Ó%¨Ñ,Ð,ùó	s   –3A c           	      óÜ   • SSSSS.nSR                  U Vs/ s H  oTR                  US5      PM     sn5      nSR                  U(       d  SOSU-   S	-   U(       a  S
/5      $ S/5      $ s  snf )NÚlÚrrm   rf   r   Ú
z\begin{tabular}{z\begin{longtable}{Ú}z\topruleú\hline)rT   rh   )rW   rX   ÚbooktabsÚ	longtablerl   rN   Útabular_columns_fmts          r   Ú_latex_line_begin_tabularr‘   û   s‡   € Ø s°cÀcÑJ€IØŸ'™'Á)Ó"LÂ)¸Q§=¡=°°CÖ#8Á)Ñ"LÓMÐØ�9‰9æ(1Ñ Ð7LØ!ñ"àñö $ˆKð		
óð ð
 *3ð		
óð ùò #Ms   —A)c                 óÎ   • S n[        U5      S:X  a	  U" S/UQ76 $ [        U5      S:X  a1  Uu  p4nSSR                  U5      -   nU (       a  U" SXE5      S-   U-   $ U$ [        S5      e)	z/handle header and data rows for asciidoc formatc                 ó–  • SSSSS.n[        X Vs/ s H  oCU   PM	     sn5      nU VVs/ s H  u  pgU US 3PM     nnnSSR                  U5      -   S-   /n	/ n
U (       a  U
R                  S	5        U
(       a&  SR                  U
5      n
U	R                  S
U
 S35        SR                  SR                  U	5      5      $ s  snf s  snnf )NÚ<Ú>Ú^rf   Údzcols="Ú,Ú"r†   z	options="z
[{}]
|====)rU   rT   Úappendr~   )Ú	is_headerrW   rX   rl   ÚcolalignÚasciidoc_alignmentsr^   rE   Úasciidoc_column_specifiersÚheader_listÚoptions_lists              r   Úmake_header_lineÚ'_asciidoc_row.<locals>.make_header_line  sæ   € ð !¨3¸#È#ÑNˆ	ä!Ø¸IÓFºI° (Ô+¹IÑFó
Ðñ 5Hô&
Ú4G¡L Eˆuˆg�e˜A�YÓÑ4Gð 	#ñ &
ð   3§8¡8Ð,FÓ#GÑHÈ3ÑNÐOˆð ˆæØ×Ñ Ô)æØŸ8™8 LÓ1ˆLØ×Ñ ¨<¨.¸Ð:Ô;ð ×#Ñ# C§H¡H¨[Ó$9Ó:Ð:ùò' Gùó&
s
   ‘C 
«Cr   Fé   rJ   Tr‹   zl_asciidoc_row() requires two (colwidths, colaligns) or three (cell_values, colwidths, colaligns) arguments) )r8   rT   Ú
ValueError)r›   Úargsr¡   rk   rW   rX   Ú	data_lines          r   Ú_asciidoc_rowr§     s…   € ò;ô6 ˆ4ƒy�Aƒ~ñ   Ð-¨Ò-Ð-ä	ˆT‹�a‹ð -1Ñ)ˆ 	Ø˜#Ÿ(™( ;Ó/Ñ/ˆ	æÙ# D¨)Ó?À$ÑFÈÑRÐRàÐô ðIó
ð 	
r   z\&z\%z\$z\#z\_z\^{}z\{z\}z\textasciitilde{}z\textbackslash{}z\ensuremath{<}z\ensuremath{>})Ú&Ú%Ú$Ú#Ú_r–   Ú{rŒ   Ú~Ú\r”   r•   c           	      óž   ^• U4S jnU  Vs/ s H  nSR                  [        XE5      5      PM     nn[        SSS5      n[        Xg5      $ s  snf )Nc                 ó&   >• TR                  X 5      $ r   rs   )rm   Úescruless    €r   Úescape_charÚ_latex_row.<locals>.escape_charO  s   ø€ Ø�|‰|˜AÓ!Ð!r   r   r¨   ú\\)rT   Úmapr%   Ú_build_simple_row)rk   rW   rX   r²   r³   ÚcellÚescaped_valuesÚrowfmts      `    r   Ú
_latex_rowr»   N  sM   ø€ õ"ñ CNÓNÂ+¸$�b—g‘gœc +Ó4Ö5Á+€NÐNÜ�R˜˜fÓ%€FÜ˜^Ó4Ð4ùò Os   Œ$A
c                 óÆ   • S n[        U5      n/ nU(       a  U" US   5      US'   U  H4  n[        U5      nU(       a  U" US   5      US'   UR                  U5        M6     XC4$ )Nc                 óh   • [        U [        [        45      (       a  U R                  5       (       d  gU $ )Nz..)r   r1   Úbytesr2   ©Úvals    r   Úescape_emptyÚ._rst_escape_first_column.<locals>.escape_emptyX  s%   € Ü�cœC¤˜<×(Ñ(°·±·±ØàˆJr   r   )r7   rš   )ÚrowsÚheadersrÁ   Únew_headersÚnew_rowsr9   Únew_rows          r   Ú_rst_escape_first_columnrÈ   W  sk   € òô �w“-€KØ€HÞÙ% g¨a¡jÓ1ˆ�A‰ÛˆÜ�s“)ˆÞÙ% c¨!¡fÓ-ˆG�A‰JØ�‰˜Ö ñ	 ð
 Ð Ð r   Úsimpler@   z  r'   r*   ÚplainÚgridra   r]   rJ   Úsimple_gridu   â”Œu   â”€u   â”¬u   â”�u   â”œu   â”¼u   â”¤u   â””u   â”´u   â”˜u   â”‚Úrounded_gridu   â•­u   â•®u   â•°u   â•¯Ú
heavy_gridu   â”�u   â”�u   â”³u   â”“u   â”£u   â•‹u   â”«u   â”—u   â”»u   â”›u   â”ƒÚ
mixed_gridu   â”�u   â”¯u   â”‘u   â”�u   â”¿u   â”¥u   â”•u   â”·u   â”™Údouble_gridu   â•”u   â•�u   â•¦u   â•—u   â• u   â•¬u   â•£u   â•šu   â•©u   â•�u   â•‘Ú
fancy_gridu   â•’u   â•¤u   â••u   â•žu   â•ªu   â•¡u   â•˜u   â•§u   â•›Ú
colon_gridÚoutlineÚsimple_outlineÚrounded_outlineÚheavy_outlineÚmixed_outlineÚdouble_outlineÚfancy_outlineÚgithubÚpipeÚorgtblÚjirar…   ÚprestoÚprettyÚpsqlÚrstÚ	mediawikiz.{| class="wikitable" style="text-align: left;"z
|+ <!-- caption -->
|-z|-z|}Ú!Úmoinmoinz''')r†   Úyoutrackz|| z || z| z | z |Úhtmlz</tbody>
</table>r}   ÚtdÚ
unsafehtmlÚlatexr�   z\hline
\end{tabular}Ú	latex_raw)r²   Úlatex_booktabs)rŽ   z\midrulez\bottomrule
\end{tabular}Úlatex_longtable)r�   z\hline
\endheadz\hline
\end{longtable}Ú	z|_. z|_.z|====)ÚtsvÚtextileÚasciidoc)rÚ   rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   z
\r|\n|\r\ns   |
|
z\x1bz\[z\]rµ   z.
    (
        # terminal colors, etc
        z°        # CSI
        [\x30-\x3f]*  # parameter bytes
        [\x20-\x2f]*  # intermediate bytes
        [\x40-\x7e]   # final byte
    |
        # terminal hyperlinks
        z„8;        # OSC opening
        (\w+=\w+:?)*    # key=value params list (submatch 2)
        ;               # delimiter
        ([^z5]+)    # URI - anything but ESC (submatch 3)
        z           # ST
        ([^z;]+)    # link text - anything but ESC (submatch 4)
        z8;;z!  # "closing" OSC sequence
    )
Úutf8z[0mz>^(([+-]?[0-9]{1,3})(?:,([0-9]{3}))*)?(?(1)\.[0-9]*|\.[0-9]+)?$c                 óN   • [        SSSS[        SU S5      [        SU S5      SSS9$ )zÊConstruct a simple TableFormat with columns separated by a separator.

>>> tsv = simple_separated_format("\t") ;         tabulate([["foo", 1], ["spam", 23]], tablefmt=tsv) == 'foo \t 1\nspam\t23'
True

Nr   r   )r+   r,   r-   r.   )r&   r%   )rj   s    r   r   r   J  s;   € ô ØØØØÜ˜"˜i¨Ó,Ü˜˜I rÓ*ØØñ	ð 	r   c                 ó˜   •  U R                  5       n [        [        R
                  " [        U 5      5      $ ! [        [        4 a     N6f = f)aT  
>>> _isnumber_with_thousands_separator(".")
False
>>> _isnumber_with_thousands_separator("1")
True
>>> _isnumber_with_thousands_separator("1.")
True
>>> _isnumber_with_thousands_separator(".1")
True
>>> _isnumber_with_thousands_separator("1000")
False
>>> _isnumber_with_thousands_separator("1,000")
True
>>> _isnumber_with_thousands_separator("1,0000")
False
>>> _isnumber_with_thousands_separator("1,000.1234")
True
>>> _isnumber_with_thousands_separator(b"1,000.1234")
True
>>> _isnumber_with_thousands_separator("+1,000.1234")
True
>>> _isnumber_with_thousands_separator("-1,000.1234")
True
)ÚdecodeÚUnicodeDecodeErrorÚAttributeErrorÚboolÚreÚmatchÚ _float_with_thousands_separators©Ústrings    r   Ú"_isnumber_with_thousands_separatorrý   ^  sD   € ð2Ø—‘“ˆô ”—’Ô9¸6ÓBÓCÐCøô ¤Ð/ó Ùðús   ‚6 ¶A	ÁA	c                 óB   •  U " U5        g! [         [        4 a     gf = f)NTF)r¤   Ú	TypeError)Úconvrü   s     r   Ú_isconvertibler    s(   € ðÙˆVŒØøÜœ	Ð"ó Ùðús   ‚ ‹�c                 óz  • [        U 5      [        [        4;   =(       d�    [        [        U 5      =(       a†    [	        U [
        [        45      (       + =(       dd    [        R                  " [        U 5      5      =(       d    [        R                  " [        U 5      5      (       + =(       d    U R                  5       S;   $ )aë  Detects if something *could* be considered a numeric value, vs. just a string.

This promotes types convertible to both int and float to be considered
a float.  Note that, iff *all* values appear to be some form of numeric
value such as eg. "1e2", they would be considered numbers!

The exception is things that appear to be numbers but overflow to
+/-inf, eg. "1e23456"; we'll have to exclude them explicitly.

>>> _isnumber(123)
True
>>> _isnumber(123.45)
True
>>> _isnumber("123.45")
True
>>> _isnumber("123")
True
>>> _isnumber("spam")
False
>>> _isnumber("123e45")
True
>>> _isnumber("123e45678")  # evaluates equal to 'inf', but ... isn't
False
>>> _isnumber("inf")
True
>>> from fractions import Fraction
>>> _isnumber(Fraction(1,3))
True

)Úinfz-infÚnan)r0   ÚfloatÚintr  r   r1   r¾   ÚmathÚisinfÚisnanÚlowerrû   s    r   Ú	_isnumberr  ‡  s„   € ôB 	ˆV‹œ¤˜Ñ$÷ 	
ô œ5 &Ó)÷ 
ô ˜v¬¬U |Ó4Ô4÷ ô Ÿš¤E¨&£MÓ2×O´d·j²jÄÀvÃÓ6OÔP÷ @Ø—|‘|“~Ð)?Ñ?ðr   c                 ó  • [        U 5      UL =(       dx    [        U S5      =(       d    [        U S5      =(       a#    [        [        U 5      5      R                  S5      =(       d(    [	        U [
        [        45      =(       a    [        X5      $ )z3
>>> _isint("123")
True
>>> _isint("123.45")
False
Ú
is_integerÚ	__array__z<class 'numpy.int)r0   Úhasattrr1   Ú
startswithr   r¾   r  )rü   Úinttypes     r   Ú_isintr  »  sm   € ô 	ˆV‹˜Ð÷ 	
ä�V˜\Ó*×J¬g°f¸kÓ.J÷ BÜ”D˜“LÓ!×,Ñ,Ð-@ÓA÷	
ô �v¤¤s˜|Ó,×P´ÀÓ1Pð	r   c                 óv   • [        U 5      [        L =(       d"    [        U [        [        45      =(       a    U S;   $ )zG
>>> _isbool(True)
True
>>> _isbool("False")
True
>>> _isbool(1)
False
)ÚTrueÚFalse)r0   r÷   r   r¾   r1   rû   s    r   Ú_isboolr  Î  s3   € ô �‹<œ4Ð÷ Ü�6œE¤3˜<Ó(×H¨VÐ7HÑ-Hðr   c                 ól  • U(       a&  [        U [        [        45      (       a  [        U 5      n U b"  [        U [        [        45      (       a  U (       d  [	        S5      $ [        U S5      (       a  [        $ [        U 5      (       a  [        $ U(       aA  [        U 5      (       d+  [        U [        5      (       a  [        U 5      (       a  SU ;  a  [        $ U(       a;  [        U 5      (       d%  [        U [        5      (       a  [        U 5      (       a  [        $ [        U [        5      (       a  [        $ [        $ )aÌ  The least generic type (type(None), int, float, str, unicode).

Treats empty string as missing for the purposes of type deduction, so as to not influence
the type of an otherwise complete column; does *not* result in missingval replacement!

>>> _type(None) is type(None)
True
>>> _type("") is type(None)
True
>>> _type("foo") is type("")
True
>>> _type("1") is type(1)
True
>>> _type('[31m42[0m') is type(42)
True
>>> _type('[31m42[0m') is type(42)
True

NÚ	isoformatÚ.)r   r1   r¾   Ú_strip_ansir0   r  r  r÷   r  rý   r  r  r  )rü   Úhas_invisibleÚnumparses      r   Ú_typer  Ü  s×   € ö* œ F¬S´%¨L×9Ñ9Ü˜VÓ$ˆà�~œ* V¬e´S¨\×:Ñ:Æ6Ü�D‹zÐÜ	�˜×	%Ñ	%Üˆ
Ü	��‰ÜˆÞ	Üˆv�‰ä�vœs×#Ñ#Ü2°6×:Ñ:Ø˜6Ó!ô ˆ
Þ	Ü�&×ÑÜ�vœs×#Ñ#Ô(JÈ6×(RÑ(RäˆÜ	�FœE×	"Ñ	"Üˆäˆ
r   c                 ó  • [        U 5      (       d  [        U 5      (       aa  [        U 5      (       a  gU R                  S5      nUS:  a  U R	                  5       R                  S5      OUnUS:¼  a  [        U 5      U-
  S-
  $ gg)zÙSymbols after a decimal point, -1 if the string lacks the decimal point.

>>> _afterpoint("123.45")
2
>>> _afterpoint("1001")
-1
>>> _afterpoint("eggs")
-1
>>> _afterpoint("123e45")
2
>>> _afterpoint("123,456.78")
2

éÿÿÿÿr  r   Úer   )r  rý   r  Úrfindr
  r8   )rü   Úposs     r   Ú_afterpointr#    ss   € ô �×ÑÔ>¸v×FÑFÜ�&�>‰>Øà—,‘,˜sÓ#ˆCØ/2°Q«w�&—,‘,“.×&Ñ& sÔ+¸CˆCØ�a‹xÜ˜6“{ SÑ(¨1Ñ,Ð,ààr   c                 ó.   • SU -  nUR                  U5      $ )u@   Flush right.

>>> _padleft(6, 'Ñ�Ð¹Ñ†Ð°') == '  Ñ�Ð¹Ñ†Ð°'
True

z{0:>%ds}©r~   ©r^   ÚsÚfmts      r   Ú_padleftr)  +  ó   € ð �uÑ
€CØ�:‰:�a‹=Ðr   c                 ó.   • SU -  nUR                  U5      $ )u@   Flush left.

>>> _padright(6, 'Ñ�Ð¹Ñ†Ð°') == 'Ñ�Ð¹Ñ†Ð°  '
True

z{0:<%ds}r%  r&  s      r   Ú	_padrightr,  6  r*  r   c                 ó.   • SU -  nUR                  U5      $ )uB   Center string.

>>> _padboth(6, 'Ñ�Ð¹Ñ†Ð°') == ' Ñ�Ð¹Ñ†Ð° '
True

z{0:^%ds}r%  r&  s      r   Ú_padbothr.  A  r*  r   c                 ó   • U$ r   rD   )Úignore_widthr'  s     r   Ú_padnoner1  L  s   € Ø€Hr   c                 ó„   • [        U [        5      (       a  [        R                  SU 5      $ [        R                  SU 5      $ )a¯  Remove ANSI escape sequences, both CSI (color codes, etc) and OSC hyperlinks.

CSI sequences are simply removed from the output, while OSC hyperlinks are replaced
with the link text. Note: it may be desirable to show the URI instead but this is not
supported.

>>> repr(_strip_ansi('\x1B]8;;https://example.com\x1B\\This is a link\x1B]8;;\x1B\\'))
"'This is a link'"

>>> repr(_strip_ansi('\x1b[31mred\x1b[0m text'))
"'red text'"

z\4)r   r1   Ú_ansi_codesÚsubÚ_ansi_codes_bytes©r'  s    r   r  r  P  s5   € ô �!”S×ÑÜ�‰˜u aÓ(Ð(ä ×$Ñ$ U¨AÓ.Ð.r   c                 óÎ   • [         b  [        (       a  [         R                  nO[        n[	        U [
        [        45      (       a  U" [        U 5      5      $ U" [        U 5      5      $ )zˆVisible width of a printed string. ANSI color codes are removed.

>>> _visible_width('[31mhello[0m'), _visible_width("world")
(5, 5)

)ÚwcwidthÚWIDE_CHARS_MODEÚwcswidthr8   r   r1   r¾   r  )r'  Úlen_fns     r   Ú_visible_widthr<  d  sL   € ô ÑŸšÜ×!Ñ!‰äˆÜ�!”cœ5�\×"Ñ"Ù”k !“nÓ%Ð%á”c˜!“f‹~Ðr   c                 ó¼   • [        U [        5      (       a$  [        [        R                  " [
        U 5      5      $ [        [        R                  " [        U 5      5      $ r   )r   r1   r÷   rø   ÚsearchÚ_multiline_codesÚ_multiline_codes_bytesr6  s    r   Ú_is_multilinerA  v  s=   € Ü�!”S×ÑÜ”B—I’IÔ.°Ó2Ó3Ð3ä”B—I’IÔ4°aÓ8Ó9Ð9r   c           	      óV   • [        [        U[        R                  " SU 5      5      5      $ ©z1Visible width of a potentially multiline content.ú[
])Úmaxr¶   rø   Úsplit©Úmultiline_sÚline_width_fns     r   Ú_multiline_widthrJ  }  s   € äŒs�=¤"§(¢(¨8°[Ó"AÓBÓCÐCr   c                 ó‚   ^• U (       a  [         mOU(       a  [        R                  mO[        mU(       a  U4S jnU$ TnU$ )z2Return a function to calculate visible cell width.c                 ó   >• [        U T5      $ r   )rJ  ©r'  rI  s    €r   Ú<lambda>Ú"_choose_width_fn.<locals>.<lambda>‹  s   ø€ Ô-¨a°Ô?r   ©r<  r8  r:  r8   ©r  Úenable_widecharsÚis_multilineÚwidth_fnrI  s       @r   Ú_choose_width_fnrU  ‚  s9   ø€ æÜ&‰Þ	Ü×(Ñ(‰äˆÞÜ?ˆð €Oð !ˆØ€Or   c                 ó¢  • US:X  a/  U(       d  U  Vs/ s H  oDR                  5       PM     n n[        nX4$ US:X  a/  U(       d  U  Vs/ s H  oDR                  5       PM     n n[        nX4$ US:X  a‚  U(       a%  U  Vs/ s H  n[        [	        U5      5      PM     nnOU  Vs/ s H  n[        U5      PM     nn[        U5      n[        X5       VVs/ s H  u  pHXGU-
  S-  -   PM     n nn[        nX4$ U(       d	  [        nX4$ U(       d  U  Vs/ s H  oDR                  5       PM     n n[        nX4$ s  snf s  snf s  snf s  snf s  snnf s  snf )Nr>   rB   r?   rg   )	r2   r)  r.  r#  r  rE  rU   r1  r,  )	Ústringsrl   r  Úpreserve_whitespacer'  ÚpadfnÚdecimalsÚmaxdecimalsÚdecss	            r   Ú_align_column_choose_padfnr]  ‘  sG  € Ø�GÓÞ"Ù*1Ó2ª' Q—w‘w–y©'ˆGÐ2Üˆð& ˆ>Ðð% 
�hÓ	Þ"Ù*1Ó2ª' Q—w‘w–y©'ˆGÐ2Üˆð ˆ>Ðð 
�iÓ	ÞÙ=DÓEºW¸œ¤K°£NÖ3¹WˆHÐEˆHá07Ó8²¨1œ Až±ˆHÐ8Ü˜(“mˆÜADÀWÔAWÔXÒAW±g°a�1 dÑ*¨cÑ1Ô1ÑAWˆÑXÜˆð ˆ>Ðö Üˆð
 ˆ>Ðö #Ù*1Ó2ª' Q—w‘w–y©'ˆGÐ2ÜˆØˆ>Ðùò) 3ùò 3ùò Fùâ8ùãXùò 3s#   ’D2ÁD7Á<D<Â!EÃEÄEc                 ó‚   ^• U (       a  [         mOU(       a  [        R                  mO[        mU(       a  U4S jnU$ TnU$ )Nc                 ó   >• [        U T5      $ r   )Ú_align_column_multiline_widthrM  s    €r   rN  Ú/_align_column_choose_width_fn.<locals>.<lambda>³  s   ø€ Ô:Øˆ}ô
r   rP  rQ  s       @r   Ú_align_column_choose_width_fnrb  «  s;   ø€ ÞÜ&‰Þ	Ü×(Ñ(‰äˆÞô
ˆð
 €Oð !ˆØ€Or   c           	      óV   • [        [        U[        R                  " SU 5      5      5      $ rC  )r7   r¶   rø   rF  rG  s     r   r`  r`  »  s   € ä”�M¤2§8¢8¨H°kÓ#BÓCÓDÐDr   c                 óŽ   • / nU  H<  n[        U[        5      (       a  UR                  U5        M+  UR                  U5        M>     U$ r   )r   r7   Úextendrš   )Únested_listÚretÚitems      r   Ú
_flat_listri  À  s=   € Ø
€CÛˆÜ�dœD×!Ñ!Ø�J‰J�tÖà�J‰J�tÖñ	 ð
 €Jr   c                 ó   • [        XX65      u  p[        X4U5      n[        [        X€5      5      n	[	        [	        [        U	5      5      U5      n
U(       GaX  U(       dP  U(       dI  U  VVs/ s H8  nSR                  UR                  5        Vs/ s H
  oÇ" X¬5      PM     sn5      PM:     nnnU$ U  VVs/ s H4  n[        R                  " SU5       Vs/ s H  n[        U5      PM     snPM6     nnn[        Xž5       VVVVs/ s H.  u  nn[        UU5       VVs/ s H  u  nnU
UU-
  -
  PM     snnPM0     nnnnn[        U U5       VVVVs/ s HT  u  p¿SR                  [        UR                  5       =(       d    UU5       VVs/ s H  u  nnU" UU5      PM     snn5      PMV     nnnnn U$ U(       d   U(       d  U  Vs/ s H
  oÇ" X¬5      PM     nnU$ [        [        [        U 5      5      n[        Xž5       VVs/ s H  u  nnU
UU-
  -
  PM     nnn[        U U5       VVs/ s H  u  nnU" UU5      PM     nnnU$ s  snf s  snnf s  snf s  snnf s  snnf s  snnnnf s  snnf s  snnnnf s  snf s  snnf s  snnf )z[string] -> [padded_string]r‹   rD  )r]  rb  r7   r¶   rE  ri  rT   Ú
splitlinesrø   rF  r8   rU   )rW  rl   Úminwidthr  rR  rS  rX  rY  rT  Ús_widthsÚmaxwidthÚmsr'  Úpadded_stringsÚs_lensÚmwÚmlrG   r‰   Úvisible_widthss                       r   Ú_align_columnru  Ê  s]  € ô 0Ø˜Mó�N€Gô -Ø¨ó€Hô ”C˜Ó*Ó+€HÜ”3”z (Ó+Ó,¨hÓ7€HçÞ®ñ "ôâ!�Bð —	‘	°r·}±}´ÓG²°!˜5 Ö-±ÑGÖHÙ!ð ñ ð6 Ðñ+ JQÔQÊÀ2¤r§x¢x°¸"Ô'=Ó>Ò'= !”s˜1–vÑ'=Ô>ÉˆFÑQô " (Ô3öâ3‘F�B˜ô 14°B¸´Ô<²©¨¨1�˜Q ™UÔ#±Õ<Ù3ð ó ô " '¨>Ô:öâ:‘F�Bð —	‘	´3¸¿¹»×8MÈ2ÐPRÔ3SÔTÒ3S©4¨1¨a™5  Až;Ñ3SÒTÖUÙ:ð ó ˆNð Ðö  ®Ù:AÓBº'°Q˜e HÖ0¹'ˆNÐBð Ðô œ#œc 7Ó+Ó,ˆFÜ=@ÀÔ=RÔSÒ=R±T°Q¸˜h¨!¨a©%Ô0Ñ=RˆNÑSô 7:¸'À>Ô6RÔSÒ6R©d¨a°™e A qžkÑ6RˆNÑSØÐùò5 Hùóùò ?ùÓQùã<ùõùó Uùõùò Cùó Tùó Tsr   Á(#IÂH=ÂIÂ1IÃIÃ%IÃ?I
ÄIÄ,I
Å
9I'
ÆI!ÆI'
Æ?I/Ç;I4È"I:È=IÉIÉI
É!I'
c                 ó  • [        S 5      S[        S[        S[        S[        S[
        S0n[
        [        [        [        [        [        S 5      S.n[        UR                  U S5      UR                  US5      5      nX4   $ )Nr   r   r   r£   é   é   )rx  rw  r£   r   r   r   )r0   r÷   r  r  r¾   r1   rE  rh   )Útype1Útype2ÚtypesÚinvtypesÚmoregenerics        r   Ú_more_genericr~  þ  sw   € äˆT‹
�AÜˆaÜˆQÜˆqÜˆqÜˆQð€Eô ÜÜÜÜÜ�‹:ñ€Hô �e—i‘i  qÓ)¨5¯9©9°U¸AÓ+>Ó?€KØÑ Ð r   c                 ón   • U  Vs/ s H  n[        X1U5      PM     nn[        [        U[        5      $ s  snf )uá  The least generic type all column values are convertible to.

>>> _column_type([True, False]) is bool
True
>>> _column_type(["1", "2"]) is int
True
>>> _column_type(["1", "2.3"]) is float
True
>>> _column_type(["1", "2.3", "four"]) is str
True
>>> _column_type(["four", 'Ð¿Ñ�Ñ‚ÑŒ']) is str
True
>>> _column_type([None, "brux"]) is str
True
>>> _column_type([1, 2, None]) is int
True
>>> import datetime as dt
>>> _column_type([dt.datetime(1991,2,19), dt.time(17,35)]) is str
True

)r  r   r~  r÷   )rW  r  r  r'  r{  s        r   Ú_column_typer€    s5   € ñ, 9@Ó@º°1ŒU�1 XÖ.¹€EÐ@Ü”- ¬Ó-Ð-ùò As   …2c                 ó˜  • U c  U$ [        U [        [        45      (       a  U (       d  gU[        L a  U  $ U[        L aþ  [        U [        5      (       aÞ  U R	                  S5      R                  S5      n[        R                  " SU5      nU(       až  [        UR                  5       5      nUS:X  a  UR                  S5      n	U	R                  5       (       aY  UR                  S5      [        [        U	5      U5      -   UR                  S5      -   n
U
R	                  S5      R                  S5      n Sn[        X5      $ U[        L a   [        U S5      $ U[        L a›  U=(       a    [        U [        [        45      nU(       a2  [!        U 5      n [        [        U5      U5      nU R%                  XÍ5      $ [        U [        5      (       a  S	U ;   a  U R%                  S	S5      n  [        [        U 5      U5      $ U  $ ! [        [        4 a    [        U 5      s $ f = f! ["        [        4 a    U  s $ f = f! ["        [        4 a    U  s $ f = f)
u¶  Format a value according to its deduced type.  Empty values are deemed valid for any type.

Unicode is supported:

>>> hrow = ['Ð±ÑƒÐºÐ²Ð°', 'Ñ†Ð¸Ñ„Ñ€Ð°'] ;         tbl = [['Ð°Ð·', 2], ['Ð±ÑƒÐºÐ¸', 4]] ;         good_result = '\u0431\u0443\u043a\u0432\u0430      \u0446\u0438\u0444\u0440\u0430\n-------  -------\n\u0430\u0437             2\n\u0431\u0443\u043a\u0438           4' ;         tabulate(tbl, headers=hrow) == good_result
True

r   Úunicode_escapezutf-8z/(\\[xX]+[0-9a-fA-F]+\[\d+[mM]+)([0-9.]+)(\\.*)$r£   r   r   Úasciir˜   )r   r¾   r1   r  Úencoderô   rø   r>  r8   ÚgroupsÚgroupÚisdigitr~   rÿ   rõ   r  r  r¤   Úreplace)rÀ   ÚvaltypeÚfloatfmtÚintfmtÚ
missingvalr  Úval_stripedÚcoloredÚtotal_groupsÚdigitsÚval_newÚis_a_colored_numberÚraw_valÚformatted_vals                 r   Ú_formatr•  -  s  € ð �{ØÐÜ�#œœs�|×$Ñ$®SØà”#‚~Ø�ˆØ	”CŠÜ�cœ3×ÑØŸ*™*Ð%5Ó6×=Ñ=¸gÓFˆKÜ—i’iØBÀKóˆGö Ü" 7§>¡>Ó#3Ó4�Ø 1Ó$Ø$Ÿ]™]¨1Ó-�FØ—~‘~×'Ñ'à#ŸM™M¨!Ó,Ü$¤S¨£[°&Ó9ñ:à%Ÿm™m¨AÓ.ñ/ð  ð
 &Ÿn™n¨WÓ5×<Ñ<Ð=MÓN˜ØˆFÜ�cÓ"Ð"Ø	”EÒ	ð	Ü�s˜GÓ$Ð$ð 
”EÒ	Ø+×M´
¸3ÄÄeÀÓ0MÐÞÜ! #Ó&ˆGð Ü &¤u¨W£~°xÓ @�ð —;‘;˜wÓ6Ð6ä˜#œs×#Ñ#¨¨s«
Ø—k‘k # rÓ*�ð Üœe C›j¨(Ó3Ð3ð �ˆøô' Ô-Ð.ó 	Ü�s“8ŠOð	ûô ¤	Ð*ó  Ø˜’ð ûô ¤	Ð*ó  Ø˜’ð ús6   ÅG9 ÆH Ç!H3 Ç9HÈHÈH0È/H0È3I	ÉI	c                 óH  • U(       aN  [         R                  " [        U 5      nU Vs/ s H  n[        XqX%" U5      5      PM     nnSR	                  U5      $ [        U 5      U-
  n	X)-  nUS:X  a  [        X 5      $ US:X  a  [        X 5      $ U(       d  U  $ [        X 5      $ s  snf )zIPad string header to width chars given known visible_width of the header.r‹   rC   rB   )	rø   rF  r?  Ú_align_headerrT   r8   r,  r.  r)  )
r†   rl   r^   Úvisible_widthrS  rT  Úheader_linesÚhÚpadded_linesÚ
ninvisibles
             r   r—  r—  l  s©   € ö Ü—x’xÔ 0°&Ó9ˆáEQó
ÚEQÀŒM˜!¨¨x¸«{Ö;Á\ð 	ð 
ð �y‰y˜Ó&Ð&ä�V“˜}Ñ,€JØ	Ñ€EØ�FÓÜ˜Ó'Ð'Ø	�hÓ	Ü˜Ó&Ð&ÞØ�Ðä˜Ó&Ð&ùò
s   §Bc                 óÒ   • [        U [        5      (       aO  / n/ n[        U 5       H9  u  p4[        U5      (       a  UR	                  U5        M(  UR	                  U5        M;     X!4$ U S 4$ r   )r   r7   Ú	enumerater<   rš   )rÃ   Úseparating_linesÚ	sans_rowsÚindexr9   s        r   Ú_remove_separating_linesr¢  ƒ  sf   € Ü�$œ×ÑØÐØˆ	Ü# Dž/‰JˆEÜ" 3×'Ñ'Ø ×'Ñ'¨Ö.à× Ñ  Ö%ñ	 *ð
 Ð*Ð*à�TˆzÐr   c                 óR   • U(       a   U H  nU R                  U[        5        M     g g r   )Úinsertr3   )rÃ   rŸ  r¡  s      r   Ú_reinsert_separating_linesr¥  ‘  s"   € ÞÛ%ˆEØ�K‰K˜œÖ/ò &ð r   c           	      ór  • Ub  USL a  U $ [        U[        5      (       a>  [        U5      [        U 5      :w  a&  [        SS[        U5       S[        U 5       3-   5      e[	        U 5      u  p#/ n[        U5      nU H,  n[        U5      nUR                  U/[        U5      -   5        M.     Un [        X5        U $ )zAdd a left-most index column.Fz2index must be as long as the number of data rows: zlen(index)=z len(rows)=)
r   r	   r8   r¤   r¢  ÚiterÚnextrš   r7   r¥  )rÃ   r¡  r   rŸ  rÆ   Ú
index_iterr9   Úindex_vs           r   Ú_prepend_row_indexr«  —  s·   € à�}˜ šØˆÜ�%œ×Ñ¤C¨£J´#°d³)Ó$;ÜØ@ØœC ›J˜< {´3°t³9°+Ð>ñ?ó
ð 	
ô #;¸4Ó"@Ñ€IØ€HÜ�e“€JÛˆÜ�zÓ"ˆØ�‰˜˜	¤D¨£IÑ-Ö.ñ ð €DÜ˜tÔ6Ø€Kr   c                 ó:   •  [        U 5      $ ! [         a     gf = f)zDA wrapper around standard bool() which doesn't throw on NumPy arraysF)r÷   r¤   r¿   s    r   Ú_boolr­  «  s#   € ðÜ�C‹yÐøÜó Ùðús   ‚
 �
™c                 óX  •  [        U5        SnSn[        U S5      (       Ga\  [        U S5      (       GaJ  [	        U R
                  5      (       a1  U R                  5       n [        [        U R                  5       6 5      nOÞ[        U S5      (       aÂ  [        U 5      nUS;   at  U R                  R                  b]  [        U R                  R                  [        5      (       a  U R                  R                  USS& OU R                  R                  /USS& U R
                  n[        U R                  5      nU Vs/ s H  n[        U5      PM     nnO[        S5      eUS:X  a  [        [        [        U5      5      nGOë [        U 5      nUS:X  a  U(       d  / nGOÎUS:X  aD  [        U S	5      (       a3  U R                  R                  (       a  U R                  R                  nGO„US:X  ac  [!        U5      S:”  aT  [        US   ["        5      (       a<  [        US   S
5      (       a(  [        [        [        US   R$                  5      5      nGO[!        U5      S:”  GaÁ  [        US   S5      (       Ga¬  [        US   S5      (       Ga—  ['        5       n	/ nUS:X  aK  [!        U5      S:”  a  US   O0 n
UR)                  U
R                  5       5        U	R+                  U5        USS nU HC  nUR                  5        H,  nX¹;  d  M
  UR-                  U5        U	R/                  U5        M.     ME     US:X  a  UnO´[        U[0        5      (       a:  U Vs/ s H  o±R3                  X»5      PM     nn[        [        [        U5      5      nOeUS:X  aM  [!        U5      S:”  a;  U Vs/ s H  nW
R3                  X»5      PM     nn[        [        [        U5      5      nO/ nOU(       a  [        S5      eU VVs/ s H#  o… Vs/ s H  o¸R3                  U5      PM     snPM%     nnnGOJUS:X  aR  [        U S5      (       aA  [        U S5      (       a0  [        U S5      (       a  U R4                   Vs/ s H  oÌS   PM	     nnOò[6        b¨  [!        U5      S:”  a™  [6        R8                  " US   5      (       a{  [6        R:                  " US   5       Vs/ s H  oÝR                  PM     nnUS:X  a  UnU VVs/ s H1  n[=        U5      (       d  U Vs/ s H  n[?        X�5      PM     snOUPM3     nnnOCUS:X  a=  [!        U5      S:”  a.  [        [        [        [A        [!        US   5      5      5      5      nUS:X  aQ  [!        U5      S:”  aB  Ub  US   /[        US   5      -   nUSS nOUS   n[        [        [        U5      5      nUSS nOUS:X  a  / n[        [        [        U5      5      n[        [        S U5      5      n[C        U5      [        [D        4;   nUS:X  a  Ub  [G        Xd5      nOÁ[        U[H        5      (       a  U(       d  [G        U[        U5      5      nO�[        U[J        5      (       a  U(       d  [G        Xb5      nOgUS:X  d  [M        U5      (       a3  U(       d,  Uc  [        [A        [!        U5      5      5      n[G        Xd5      nOUS:X  d  [M        U5      (       d  U(       d   SnU(       a<  [!        U5      S:”  a-  [O        S[!        US   5      [!        U5      -
  5      nS/U-  U-   nXaU4$ ! [         a    [        U5      n GN:f = f! [         a    [        U5      ef = fs  snf ! [         a    [        U5      ef = fs  snf s  snf s  snf s  snnf s  snf s  snf s  snf s  snnf )aÌ  Transform a supported data type to a list of lists, and a list of headers,
with headers padding.

Supported tabular data types:

* list-of-lists or another iterable of iterables

* list of named tuples (usually used with headers="keys")

* list of dicts (usually used with headers="keys")

* list of OrderedDicts (usually used with headers="keys")

* list of dataclasses (usually used with headers="keys")

* 2D NumPy arrays

* NumPy record arrays (usually used with headers="keys")

* dict of iterables (usually used with headers="keys")

* pandas.DataFrame (usually used with headers="keys")

The first row can be used as headers if headers="firstrow",
column indices can be used as headers if headers="keys".

If showindex="default", show row indices of the pandas.DataFrame.
If showindex="always", show row indices for all types of data.
If showindex="never", don't show row indices for all types of data.
If showindex is an iterable, show its values as row indices.

z‘

To build a table python-tabulate requires two-dimensional data like a list of lists or similar.
Did you forget a pair of extra [] or ',' in ()?NÚkeysrv   r¡  )r   ÚalwaysTr   z7tabular data doesn't appear to be a dict or a DataFrameÚdtypeÚ_fieldsÚfirstrowr   z6headers for a list of dicts is not a dict or a keywordÚdescriptionÚfetchoneÚrowcountc                 ó<   • [        U 5      (       a  U $ [        U 5      $ r   )r<   r7   )rŠ   s    r   rN  Ú)_normalize_tabular_data.<locals>.<lambda>h  s   € Ô#6°q×#9Ñ#9˜aÐF¼tÀA»wÐFr   r   r°  Úneverr   )(r÷   r¤   r7   r  Úcallablerv   r¯  Úizip_longestrÿ   r¡  Únamer   r¶   r1   r±  Únamesr8   Útupler²  Úsetre  Úupdaterš   ÚaddÚdictrh   r´  ÚdataclassesÚis_dataclassÚfieldsr<   ÚgetattrÚranger0   r¾   r«  r	   r   r­  rE  )Útabular_datarÄ   Ú	showindexÚerr_msgr¡  r¯  rÃ   Úvalsr9   Ú	uniq_keysÚ	firstdictÚkÚcolumnÚfieldÚfield_namesr   Úshowindex_is_a_strÚheaders_pads                     r   Ú_normalize_tabular_datarÔ  ³  sÂ  € ðD ÜˆWŒð
	<ð ð
 €EÜˆ|˜V×$Ò$¬°¸x×)HÒ)Hä�L×'Ñ'×(Ñ(à×$Ñ$Ó&ˆDð)ÜÜ  ,×"5Ñ"5Ó"7Ð8ó‘ô �\ 7×+Ñ+ä˜Ó%ˆDàÐ8Ó8Ø ×&Ñ&×+Ñ+Ñ7ä˜l×0Ñ0×5Ñ5´t×<Ñ<Ø+×1Ñ1×6Ñ6�D˜˜!‘Hà ,× 2Ñ 2× 7Ñ 7Ð8�D˜˜!�HØ×&Ñ&ˆDä˜×+Ñ+Ó,ˆEÙ)-Ó.ª #”D˜–I©ˆDÐ.ˆDäÐVÓWÐWà�fÓÜœ3œs D›>Ó*ˆGùð	%Ü˜Ó%ˆDð �fÓ¦TàŠGà�vÓÜ˜ g×.Ñ.Ø×"Ñ"×(×(ð #×(Ñ(×.Ñ.ŠGà�vÓÜ�D“	˜A“Ü˜4 ™7¤E×*Ñ*Ü˜˜Q™ ×+Ñ+ô œ3œs D¨¡G§O¡OÓ4Ó5ŠGÜ�‹Y˜Œ]œw t¨A¡w°×7Ò7¼GÀDÈÁGÈX×<VÒ<Vä›ˆIØˆDØ˜*Ó$Ü'*¨4£y°1£}˜D šG¸"�	Ø—‘˜IŸN™NÓ,Ô-Ø× Ñ  Ô&Ø˜A˜B�x�Û�ØŸ™ž�AàÕ)ØŸ™ AœØ!Ÿ™ aÖ(ó	 $ñ ð ˜&Ó Ø‘Ü˜G¤T×*Ñ*á6:Ó;²d°Ÿ;™; qÖ,±d�Ð;Üœs¤3¨Ó0Ó1‘Ø˜JÓ&Ü�t“9˜q“=Ù<@ÓAºD°q˜yŸ}™}¨QÖ2¹D�GÐAÜ"¤3¤s¨GÓ#4Ó5‘Gà ‘GÞÜ ØLóð ñ ;?Ô?º$°3¨Ó.ª A—W‘W˜Q–Z©Ô.¹$ˆDÑ?‰Dð �vÓÜ˜ m×4Ñ4Ü˜ j×1Ñ1Ü˜ j×1Ñ1ð 0<×/GÒ/GÓHÒ/G V˜a”yÑ/GˆGÐHˆGô Ñ#Ü�D“	˜A“Ü×(Ò(¨¨a©×1Ñ1ô 4?×3EÒ3EÀdÈ1ÁgÔ3NÓOÒ3N¨%Ÿ:œ:Ñ3NˆKÐOØ˜&Ó Ø%�ñ  ôò  �Cô /¨s×3Ñ3ñ /:Ó:ªk¨”W˜S–_©kÒ:àòñ  ð ñ ˆDð ˜Ó¤3 t£9¨q£=äœ3œs¤E¬#¨d°1©g«,Ó$7Ó8Ó9ˆGð �*Ó¤ T£¨Q£ØÑØ˜Q‘x�j¤4¨¨Q©£=Ñ0ˆGØ˜!˜"�I‰Eà˜1‘gˆGÜ”sœ3 Ó(Ó)ˆØ�A�Bˆx‰Ø	�JÓ	Øˆä”3”s˜GÓ$Ó%€Gä”ÑFÈÓMÓN€Dô ˜i›¬S´%¨LÑ8ÐØ�IÓ %Ñ"3Ü! $Ó.‰Ü	�Iœu×	%Ñ	%Ö.@Ü! $¬¨Y«Ó8‰Ü	�Iœx×	(Ñ	(Ö1CÜ! $Ó2‰Ø	�hÓ	¤5¨×#3Ñ#3Ö<NØ‰=Üœœs 4›yÓ)Ó*ˆEÜ! $Ó.‰Ø	�gÓ	¤e¨I×&6Ñ&6Ö?QØð €KÞ”3�t“9˜q“=Ü˜!œS  a¡›\¬C°«LÑ8Ó9ˆØ�$˜Ñ$ wÑ.ˆà˜+Ð%Ð%øôQ ó  Ü�w“-‹ð ûô$ ó )Ü Ó(Ð(ð)üò" /øô ó 	%Ü˜GÓ$Ð$ð	%üòP <ùò Bùò /ùÓ?ùò Iùò Pùò
 ;ùósw   ‚\/ Á ] Ä;]$Æ ]) Í^Î ^Ï1	^Ï:^Ð^Ñ'^Ó^Ó+^&Ô^!Ô	^&Ü/]Ý]Ý]!Ý)]?Þ^Þ!^&c           
      óØ  • [        U 5      (       a  [        U S   5      nOSn[        X&S5      n/ nU  GH.  n/ n	[        X�U5       GH  u  p«n[        U
5      (       a  U(       a  U	R	                  U
5        M1  UbÁ  [        UUUS9nU
c  UO:U
S:X  d  [        U
5      (       a  [        U
5      O[        [        X¬5      " U
5      5      nUR                  5        Vs/ s H9  nUR                  5       S:w  d  M  SR                  UR                  U5      5      PM;     nnU	R	                  SR                  U5      5        Mõ  U	R	                  U
5        GM	     UR	                  U	5        GM1     U$ s  snf )Nr   T)r^   Úbreak_long_wordsÚbreak_on_hyphensr   r‹   )r8   Ú_expand_iterablerU   r  rš   Ú_CustomTextWrapr1   r  rk  r2   rT   Úwrap)Úlist_of_listsrW   Ú	numparsesrŒ  rÖ  r×  Únum_colsÚresultr9   rÇ   r¸   r^   r  ÚwrapperÚcasted_cellÚlineÚwrappeds                    r   Ú_wrap_text_to_colwidthsrã  ‚  sW  € ô ˆ=×ÑÜ�} QÑ'Ó(‰àˆÜ  °dÓ;€Ià€FäˆØˆÜ%(¨¸×%CÑ!ˆD˜Ü˜�‰¦8Ø—‘˜tÔ$ÙàÑ Ü)ØØ%5Ø%5ñ�ð ‘|ñ ð   2›:¬°4¯©ô ˜Dœ	ä ¤ tÔ!6°tÓ!<Ó=ð ð !,× 6Ñ 6Ô 8óâ 8˜Ø—z‘z“| rÑ)ó 2�D—I‘I˜gŸl™l¨4Ó0Ö1Ù 8ð ð ð
 —‘˜tŸy™y¨Ó1Ö2à—‘˜t×$ñ? &Dð@ 	�‰�g×ñE ðH €Mùòs   ÃE'Ã1$E'c                 ó`   • [        U [        5      (       a  U R                  XS9$ [        U 5      $ )aõ  
A type safe wrapper for converting a bytestring to str. This is essentially just
a wrapper around .decode() intended for use with things like map(), but with some
specific behavior:

1. if the given parameter is not a bytestring, it is returned unmodified
2. decode() is called for the given parameter and assumes utf8 encoding, but the
   default error behavior is changed from 'strict' to 'ignore'

>>> repr(_to_str(b'foo'))
"'foo'"

>>> repr(_to_str('foo'))
"'foo'"

>>> repr(_to_str(42))
"'42'"

)ÚencodingÚerrors)r   r¾   rô   r1   )r'  rå  ræ  s      r   Ú_to_strrç  ¹  s+   € ô( �!”U×ÑØ�x‰x ˆxÐ9Ð9Üˆq‹6€Mr   rD   c                 óD  ^9• U c  / n [        XUS9u  nnn[        U5      u  nnUbˆ  [        U5      [        L a  [	        U5      n[        U5      (       a  [        US   5      nOSn[        U[        5      (       a  [        UUU5      nO[        UUS5      n[        U	U5      n[        UUUUUUS9nUbn  U(       a  [        US   5      O
[        U5      n[        U[        5      (       a  [        UUU5      nO[        UUS5      n[        U	U5      n[        U/UUUUUS9S   nUS:X  a  [        UU5      u  nn[        nUS:X  a!  SnSn	U[        :X  a  SOUnU[        :X  a  SOUnOU[        :X  a  S	OUnU[        :X  a  S
OUnUS:X  a  S
n
S
nSR                  [        [!        ["        U5      [        R$                  " S U 5       5      5      5      n[&        R)                  U5      SLn[*        SL=(       a    [,        n[        U[.        5      (       d2  U[0        ;   a(  [3        U5      (       a  [0        R5                  X"5      nSnOSn[7        UUU5      m9[	        [9        U6 5      n[        U	[        U5      5      n[;        UU5       VV s/ s H  u  nn [=        UU S9PM     n!nn [        U[>        5      (       a  [        U5      U/-  n"OQ[	        U5      n"[        U"5      [        U5      :  a.  U"RA                  [        U5      [        U"5      -
  [B        /-  5        [        U[>        5      (       a  [        U5      U/-  n#OQ[	        U5      n#[        U#5      [        U5      :  a.  U#RA                  [        U5      [        U#5      -
  [D        /-  5        [        U[>        5      (       a  [        U5      U/-  n$OQ[	        U5      n$[        U$5      [        U5      :  a.  U$RA                  [        U5      [        U$5      -
  [F        /-  5        [;        UU!U"U#U$5       V%V&V'V(V)V*s/ s H*  u  n%n&n'n(n)U% V*s/ s H  n*[I        U*U&U'U(U)U5      PM     sn*PM,     nn)n(n'n&n%n*U
b  U
/[        U5      -  n+O$U! V&s/ s H  n&U&[        [J        4;   a  UOUPM     n+n&Ub�  [        U[L        5      (       d   e[        U[>        5      (       a0  [N        RP                  " SU V%s/ s H  n%U%PM     sn% SU SU S3SS9  [S        U5       H$  u  n,n-U,[        U+5      :  d    OU-S:w  d  M  U-U+U,'   M&     U(       a  U V.s/ s H  n.T9" U.5      U-   PM     sn.OS/[        U5      -  n/U+RU                  5       n0US:X  a  S
/[        U5      -  n0[;        UU0U/5       V%V1V2s/ s H  u  n%n1n2[W        U%U1U2UUUU5      PM     nn1n%n2Sn3U(       Gaƒ  U=(       d    S//[        U5      -  n4Ub  U/[        U45      -  n3OU+=(       d    U/[        U5      -  n3Ub³  [        U[L        5      (       d   e[        U[>        5      (       a0  [N        RP                  " SU V%s/ s H  n%U%PM     sn% SU SU S3SS9  [S        U5       HH  u  n,n-UU,-   n5U5[        U35      :  d    O0U-S:X  a  U5[        U+5      :  a
  U+U5   U3U5'   M;  U-S:w  d  MC  U-U3U5'   MJ     [;        U/U45       V2V%s/ s H%  u  n2n%[Y        U2[Y        U94S jU% 5       5      5      PM'     n/n2n%[;        UU3U/5       V.V1V2s/ s H  u  n.n1n2[[        U.U1U2T9" U.5      UT95      PM     nn1n.n2[	        [;        U6 5      n6O6U V%s/ s H  n%[Y        U94S jU% 5       5      PM     n/n%[	        [;        U6 5      n6[        U[.        5      (       d  [\        R5                  U[\        S   5      n[        U[>        5      (       a  UOSn7[        U[        U65      U75      n8[_        U6U5        [a        UUU3U6U/U+UU8S9$ s  sn nf s  sn*f s  sn*n)n(n'n&n%f s  sn&f s  sn%f s  sn.f s  sn2n1n%f s  sn%f s  sn%n2f s  sn2n1n.f s  sn%f ) uÑK  Format a fixed width table for pretty printing.

>>> print(tabulate([[1, 2.34], [-56, "8.999"], ["2", "10001"]]))
---  ---------
  1      2.34
-56      8.999
  2  10001
---  ---------

The first required argument (`tabular_data`) can be a
list-of-lists (or another iterable of iterables), a list of named
tuples, a dictionary of iterables, an iterable of dictionaries,
an iterable of dataclasses, a two-dimensional NumPy array,
NumPy record array, or a Pandas' dataframe.


Table headers
-------------

To print nice column headers, supply the second argument (`headers`):

  - `headers` can be an explicit list of column headers
  - if `headers="firstrow"`, then the first row of data is used
  - if `headers="keys"`, then dictionary keys or column indices are used

Otherwise a headerless table is produced.

If the number of headers is less than the number of columns, they
are supposed to be names of the last columns. This is consistent
with the plain-text format of R and Pandas' dataframes.

>>> print(tabulate([["sex","age"],["Alice","F",24],["Bob","M",19]],
...       headers="firstrow"))
       sex      age
-----  -----  -----
Alice  F         24
Bob    M         19

By default, pandas.DataFrame data have an additional column called
row index. To add a similar column to all other types of data,
use `showindex="always"` or `showindex=True`. To suppress row indices
for all types of data, pass `showindex="never" or `showindex=False`.
To add a custom row index column, pass `showindex=some_iterable`.

>>> print(tabulate([["F",24],["M",19]], showindex="always"))
-  -  --
0  F  24
1  M  19
-  -  --


Column and Headers alignment
----------------------------

`tabulate` tries to detect column types automatically, and aligns
the values properly. By default it aligns decimal points of the
numbers (or flushes integer numbers to the right), and flushes
everything else to the left. Possible column alignments
(`numalign`, `stralign`) are: "right", "center", "left", "decimal"
(only for `numalign`), and None (to disable alignment).

`colglobalalign` allows for global alignment of columns, before any
    specific override from `colalign`. Possible values are: None
    (defaults according to coltype), "right", "center", "decimal",
    "left".
`colalign` allows for column-wise override starting from left-most
    column. Possible values are: "global" (no override), "right",
    "center", "decimal", "left".
`headersglobalalign` allows for global headers alignment, before any
    specific override from `headersalign`. Possible values are: None
    (follow columns alignment), "right", "center", "left".
`headersalign` allows for header-wise override starting from left-most
    given header. Possible values are: "global" (no override), "same"
    (follow column alignment), "right", "center", "left".

Note on intended behaviour: If there is no `tabular_data`, any column
    alignment argument is ignored. Hence, in this case, header
    alignment cannot be inferred from column alignment.

Table formats
-------------

`intfmt` is a format specification used for columns which
contain numeric data without a decimal point. This can also be
a list or tuple of format strings, one per column.

`floatfmt` is a format specification used for columns which
contain numeric data with a decimal point. This can also be
a list or tuple of format strings, one per column.

`None` values are replaced with a `missingval` string (like
`floatfmt`, this can also be a list of values for different
columns):

>>> print(tabulate([["spam", 1, None],
...                 ["eggs", 42, 3.14],
...                 ["other", None, 2.7]], missingval="?"))
-----  --  ----
spam    1  ?
eggs   42  3.14
other   ?  2.7
-----  --  ----

Various plain-text table formats (`tablefmt`) are supported:
'plain', 'simple', 'grid', 'pipe', 'orgtbl', 'rst', 'mediawiki',
'latex', 'latex_raw', 'latex_booktabs', 'latex_longtable' and tsv.
Variable `tabulate_formats`contains the list of currently supported formats.

"plain" format doesn't use any pseudographics to draw tables,
it separates columns with a double space:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                 ["strings", "numbers"], "plain"))
strings      numbers
spam         41.9999
eggs        451

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="plain"))
spam   41.9999
eggs  451

"simple" format is like Pandoc simple_tables:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                 ["strings", "numbers"], "simple"))
strings      numbers
---------  ---------
spam         41.9999
eggs        451

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="simple"))
----  --------
spam   41.9999
eggs  451
----  --------

"grid" is similar to tables produced by Emacs table.el package or
Pandoc grid_tables:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "grid"))
+-----------+-----------+
| strings   |   numbers |
+===========+===========+
| spam      |   41.9999 |
+-----------+-----------+
| eggs      |  451      |
+-----------+-----------+

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="grid"))
+------+----------+
| spam |  41.9999 |
+------+----------+
| eggs | 451      |
+------+----------+

"simple_grid" draws a grid using single-line box-drawing
characters:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "simple_grid"))
â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
â”‚ strings   â”‚   numbers â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ spam      â”‚   41.9999 â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ eggs      â”‚  451      â”‚
â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

"rounded_grid" draws a grid using single-line box-drawing
characters with rounded corners:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "rounded_grid"))
â•­â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•®
â”‚ strings   â”‚   numbers â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ spam      â”‚   41.9999 â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ eggs      â”‚  451      â”‚
â•°â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•¯

"heavy_grid" draws a grid using bold (thick) single-line box-drawing
characters:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "heavy_grid"))
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”³â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”“
â”ƒ strings   â”ƒ   numbers â”ƒ
â”£â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â•‹â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”«
â”ƒ spam      â”ƒ   41.9999 â”ƒ
â”£â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â•‹â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”«
â”ƒ eggs      â”ƒ  451      â”ƒ
â”—â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”»â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”›

"mixed_grid" draws a grid using a mix of light (thin) and heavy (thick) lines
box-drawing characters:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "mixed_grid"))
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¯â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”‘
â”‚ strings   â”‚   numbers â”‚
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¿â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¥
â”‚ spam      â”‚   41.9999 â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ eggs      â”‚  451      â”‚
â”•â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”·â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”™

"double_grid" draws a grid using double-line box-drawing
characters:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "double_grid"))
â•”â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¦â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•—
â•‘ strings   â•‘   numbers â•‘
â• â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¬â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•£
â•‘ spam      â•‘   41.9999 â•‘
â• â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¬â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•£
â•‘ eggs      â•‘  451      â•‘
â•šâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•©â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�

"fancy_grid" draws a grid using a mix of single and
double-line box-drawing characters:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "fancy_grid"))
â•’â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¤â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â••
â”‚ strings   â”‚   numbers â”‚
â•žâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¡
â”‚ spam      â”‚   41.9999 â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ eggs      â”‚  451      â”‚
â•˜â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•§â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•›

"colon_grid" is similar to "grid" but uses colons only to define
columnwise content alignment, without whitespace padding,
similar to the alignment specification of Pandoc `grid_tables`:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "colon_grid"))
+-----------+-----------+
| strings   | numbers   |
+:==========+:==========+
| spam      | 41.9999   |
+-----------+-----------+
| eggs      | 451       |
+-----------+-----------+

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "colon_grid",
...                colalign=["right", "left"]))
+-----------+-----------+
| strings   | numbers   |
+==========:+:==========+
| spam      | 41.9999   |
+-----------+-----------+
| eggs      | 451       |
+-----------+-----------+

"outline" is the same as the "grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "outline"))
+-----------+-----------+
| strings   |   numbers |
+===========+===========+
| spam      |   41.9999 |
| eggs      |  451      |
+-----------+-----------+

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="outline"))
+------+----------+
| spam |  41.9999 |
| eggs | 451      |
+------+----------+

"simple_outline" is the same as the "simple_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "simple_outline"))
â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
â”‚ strings   â”‚   numbers â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ spam      â”‚   41.9999 â”‚
â”‚ eggs      â”‚  451      â”‚
â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

"rounded_outline" is the same as the "rounded_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "rounded_outline"))
â•­â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•®
â”‚ strings   â”‚   numbers â”‚
â”œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¤
â”‚ spam      â”‚   41.9999 â”‚
â”‚ eggs      â”‚  451      â”‚
â•°â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”´â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•¯

"heavy_outline" is the same as the "heavy_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "heavy_outline"))
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”³â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”“
â”ƒ strings   â”ƒ   numbers â”ƒ
â”£â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â•‹â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”«
â”ƒ spam      â”ƒ   41.9999 â”ƒ
â”ƒ eggs      â”ƒ  451      â”ƒ
â”—â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”»â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”›

"mixed_outline" is the same as the "mixed_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "mixed_outline"))
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¯â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”‘
â”‚ strings   â”‚   numbers â”‚
â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¿â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”¥
â”‚ spam      â”‚   41.9999 â”‚
â”‚ eggs      â”‚  451      â”‚
â”•â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”·â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”�â”™

"double_outline" is the same as the "double_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "double_outline"))
â•”â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¦â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•—
â•‘ strings   â•‘   numbers â•‘
â• â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¬â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•£
â•‘ spam      â•‘   41.9999 â•‘
â•‘ eggs      â•‘  451      â•‘
â•šâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•©â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�

"fancy_outline" is the same as the "fancy_grid" format but doesn't draw lines between rows:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "fancy_outline"))
â•’â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¤â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â••
â”‚ strings   â”‚   numbers â”‚
â•žâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•ªâ•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•¡
â”‚ spam      â”‚   41.9999 â”‚
â”‚ eggs      â”‚  451      â”‚
â•˜â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•§â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•�â•›

"pipe" is like tables in PHP Markdown Extra extension or Pandoc
pipe_tables:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "pipe"))
| strings   |   numbers |
|:----------|----------:|
| spam      |   41.9999 |
| eggs      |  451      |

"presto" is like tables produce by the Presto CLI:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "presto"))
 strings   |   numbers
-----------+-----------
 spam      |   41.9999
 eggs      |  451

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="pipe"))
|:-----|---------:|
| spam |  41.9999 |
| eggs | 451      |

"orgtbl" is like tables in Emacs org-mode and orgtbl-mode. They
are slightly different from "pipe" format by not using colons to
define column alignment, and using a "+" sign to indicate line
intersections:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "orgtbl"))
| strings   |   numbers |
|-----------+-----------|
| spam      |   41.9999 |
| eggs      |  451      |


>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="orgtbl"))
| spam |  41.9999 |
| eggs | 451      |

"rst" is like a simple table format from reStructuredText; please
note that reStructuredText accepts also "grid" tables:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]],
...                ["strings", "numbers"], "rst"))
=========  =========
strings      numbers
=========  =========
spam         41.9999
eggs        451
=========  =========

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="rst"))
====  ========
spam   41.9999
eggs  451
====  ========

"mediawiki" produces a table markup used in Wikipedia and on other
MediaWiki-based sites:

>>> print(tabulate([["strings", "numbers"], ["spam", 41.9999], ["eggs", "451.0"]],
...                headers="firstrow", tablefmt="mediawiki"))
{| class="wikitable" style="text-align: left;"
|+ <!-- caption -->
|-
! strings   !! style="text-align: right;"|   numbers
|-
| spam      || style="text-align: right;"|   41.9999
|-
| eggs      || style="text-align: right;"|  451
|}

"html" produces HTML markup as an html.escape'd str
with a ._repr_html_ method so that Jupyter Lab and Notebook display the HTML
and a .str property so that the raw HTML remains accessible
the unsafehtml table format can be used if an unescaped HTML format is required:

>>> print(tabulate([["strings", "numbers"], ["spam", 41.9999], ["eggs", "451.0"]],
...                headers="firstrow", tablefmt="html"))
<table>
<thead>
<tr><th>strings  </th><th style="text-align: right;">  numbers</th></tr>
</thead>
<tbody>
<tr><td>spam     </td><td style="text-align: right;">  41.9999</td></tr>
<tr><td>eggs     </td><td style="text-align: right;"> 451     </td></tr>
</tbody>
</table>

"latex" produces a tabular environment of LaTeX document markup:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex"))
\begin{tabular}{lr}
\hline
 spam &  41.9999 \\
 eggs & 451      \\
\hline
\end{tabular}

"latex_raw" is similar to "latex", but doesn't escape special characters,
such as backslash and underscore, so LaTeX commands may embedded into
cells' values:

>>> print(tabulate([["spam$_9$", 41.9999], ["\\emph{eggs}", "451.0"]], tablefmt="latex_raw"))
\begin{tabular}{lr}
\hline
 spam$_9$    &  41.9999 \\
 \emph{eggs} & 451      \\
\hline
\end{tabular}

"latex_booktabs" produces a tabular environment of LaTeX document markup
using the booktabs.sty package:

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex_booktabs"))
\begin{tabular}{lr}
\toprule
 spam &  41.9999 \\
 eggs & 451      \\
\bottomrule
\end{tabular}

"latex_longtable" produces a tabular environment that can stretch along
multiple pages, using the longtable package for LaTeX.

>>> print(tabulate([["spam", 41.9999], ["eggs", "451.0"]], tablefmt="latex_longtable"))
\begin{longtable}{lr}
\hline
 spam &  41.9999 \\
 eggs & 451      \\
\hline
\end{longtable}


Number parsing
--------------
By default, anything which can be parsed as a number is a number.
This ensures numbers represented as strings are aligned properly.
This can lead to weird results for particular strings such as
specific git SHAs e.g. "42992e1" will be parsed into the number
429920 and aligned as such.

To completely disable number parsing (and alignment), use
`disable_numparse=True`. For more fine grained control, a list column
indices is used to disable number parsing only on those columns
e.g. `disable_numparse=[0, 2]` would disable number parsing only on the
first and third columns.

Column Widths and Auto Line Wrapping
------------------------------------
Tabulate will, by default, set the width of each column to the length of the
longest element in that column. However, in situations where fields are expected
to reasonably be too long to look good as a single line, tabulate can help automate
word wrapping long fields for you. Use the parameter `maxcolwidths` to provide a
list of maximal column widths:

>>> print(tabulate(           [('1', 'John Smith',             'This is a rather long description that might look better if it is wrapped a bit')],           headers=("Issue Id", "Author", "Description"),           maxcolwidths=[None, None, 30],           tablefmt="grid"          ))
+------------+------------+-------------------------------+
|   Issue Id | Author     | Description                   |
+============+============+===============================+
|          1 | John Smith | This is a rather long         |
|            |            | description that might look   |
|            |            | better if it is wrapped a bit |
+------------+------------+-------------------------------+

Header column width can be specified in a similar way using `maxheadercolwidths`.

N)rÉ  r   )rÜ  rŒ  rÖ  r×  rá   rß   TrB   r?   rC   rÒ   rí   c              3   óB   #   • U  H  n[        [        U5      v •  M     g 7fr   )r¶   rç  )rM   r9   s     r   rO   Útabulate.<locals>.<genexpr>E	  s   é € ÐKº]°c¤¤G¨S× 1Ð 1º]ùs   ‚F)r  z*As a string, `colalign` is interpreted as z". Did you mean `colglobalalign = "z"` or `colalign = ("z",)`?r   )Ú
stacklevelÚglobalr   z.As a string, `headersalign` is interpreted as z&. Did you mean `headersglobalalign = "z"` or `headersalign = ("Úsamec              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr   rD   ©rM   ÚclrT  s     €r   rO   rê  ½	  s   øé € Ð3²¨2™( 2Ÿ,˜,²ùó   ƒc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr   rD   rï  s     €r   rO   rê  Æ	  s   øé € Ð2²¨"™ "Ÿ˜²ùrñ  rÉ   )Ú	rowaligns)1rÔ  r¢  r0   r¾  r7   r8   r   r  rØ  Ú_expand_numparserã  rÈ   ÚMIN_PADDINGÚ_DEFAULT_ALIGNrT   r   r¶   rç  Úfrom_iterabler3  r>  r8  r9  r&   Úmultiline_formatsrA  rh   rU  r»  rU   r€  r1   re  Ú_DEFAULT_FLOATFMTÚ_DEFAULT_INTFMTÚ_DEFAULT_MISSINGVALr•  r  r   ÚwarningsÚwarnrž  Úcopyru  rE  r—  Ú_table_formatsr¥  Ú_format_table):rÈ  rÄ   ÚtablefmtrŠ  r‹  ÚnumalignÚstralignrŒ  rÉ  Údisable_numparseÚcolglobalalignrœ   rX  ÚmaxcolwidthsÚheadersglobalalignÚheadersalignÚrowalignÚmaxheadercolwidthsrÖ  r×  rÛ  rÓ  rŸ  rÝ  rÜ  Úmin_paddingÚ
plain_textr  rR  rS  ÚcolsÚcolÚnpÚcoltypesÚfloat_formatsÚint_formatsÚmissing_valsrm   ÚctÚfl_fmtÚint_fmtÚmiss_vrt   ÚalignsÚidxrE   rš  Ú	minwidthsÚaligns_copyrN   ÚminwÚaligns_headersÚt_colsÚhidxrÃ   Ú
ra_defaultró  rT  s:                                                            @r   r   r   Ò  se  ø€ ðz ÑØˆä*AØ¨ñ+Ñ'€M�7˜Kô '?¸}Ó&MÑ#€MÐ#àÑÜ�Ó¤Ò&Ü Ó-ˆLÜˆ}×ÑÜ˜=¨Ñ+Ó,‰HàˆHÜ�l¤C×(Ñ(Ü+¨L¸(ÀLÓQ‰Lä+¨L¸(ÀDÓIˆLä$Ð%5°xÓ@ˆ	Ü/ØØØØ!Ø-Ø-ñ
ˆð Ñ%Þ,9”3�} QÑ'Ô(¼sÀ7»|ˆÜÐ(¬#×.Ñ.Ü!1Ø" HÐ.@ó"Ñô "2Ð2DÀhÐPTÓ!UÐä$Ð%5°xÓ@ˆ	Ü)ØˆIØØØ!Ø-Ø-ñ
ð ñˆð �5ÓÜ!9¸-ÈÓ!QÑˆ�wô €KØ�8ÓØˆØÐØ'¬>Ó9‘8¸xˆØ'¬>Ó9‘8¸x‰à (¬NÓ :‘9ÀˆØ%¬Ó7‘6¸Xˆð
 �<ÓØˆØ#Ðð —‘Üä”˜Ó!ô ×ÒÑK¹]ÓKÓKó	
ó€Jô  ×&Ñ& zÓ2¸$Ð>€Mä dÐ*×>¬Ðä�x¤×-Ñ-ØÔ)Ó)Ü˜*×%Ñ%ä$×(Ñ(¨Ó<ˆØ‰àˆÜ Ð/?ÀÓN€Hô ”˜mÐ,Ó-€DÜ Ð!1´3°t³9Ó=€IÜ>AÀ$È	Ô>RÔSÒ>R±7°3¸”˜S¨2Ô.Ñ>R€HÑSÜ�(œC× Ñ Ü˜D›	Øð%
ñ 
‰ô ˜X›ˆÜˆ}Ó¤ D£	Ó)Ø× Ñ ¤# d£)¬c°-Ó.@Ñ"@ÔEVÐDWÑ!WÔXÜ�&œ#×ÑÜ˜$“iØð#
ñ 
‰ô ˜6“lˆÜˆ{Óœc $›iÓ'Ø×Ñ¤ D£	¬C°Ó,<Ñ <ÄÐ@QÑQÔRÜ�*œc×"Ñ"Ü˜4“y J <Ñ/‰ä˜JÓ'ˆÜˆ|Óœs 4›yÓ(Ø×Ñ¤ T£¬S°Ó->Ñ!>ÔCVÐBWÑ WÔXô /2Ø�(˜M¨;¸ô/
÷ð ò/
Ñ*ˆAˆr�6˜7 Fñ JKÓKÊÀAŒ��B˜ ¨°Ö	?ÉÔKñ/
ð 	õ ð Ñ!Ø Ð!¤C¨£IÑ-‰áIQÓRÊÀ2˜b¤S¬% LÓ0‘(°hÒ>ÉˆÐRàÑÜ˜(¤H×-Ñ-Ð-Ð-Ü�h¤×$Ñ$Ü�MŠMØ<ÉÓ=RÊÀA»aÉÑ=RÐ<Sð T3Ø3;°*Ð<PÐQYÐPZÐZ_ðaàòô
 $ HÖ-‰JˆC�Øœ˜V›Ó$ÙØ˜(Õ"Ø#��s“ñ	 .ö 9@©GÓ4ªG q‰�!‹�{Ô	"©GÒ4ÀaÀSÌ3ÈtË9Á_ð ð —+‘+“-€Kð �<ÓØ�h¤ T£Ñ*ˆô ˜d K°Ô;õò <‰JˆAˆq�$ô 	ØØØØØØØö	
ñ <ð 	ò ð €Nßà×.˜2˜$˜¤# g£,Ñ.ˆàÑ)Ø0Ð1´C¸³KÑ?‰Nà#×@¨ z´C¸³LÑ'@ˆNàÑ#Ü˜l¬H×5Ñ5Ð5Ð5Ü˜,¬×,Ñ,Ü—’ØDÑQ]ÓE^ÒQ]ÈAÃaÑQ]ÑE^ÐD_ð `;Ø;G¸.ð I,Ø,8¨>¸ð@ð  !ò	ô (¨Ö5‘
��UØ" SÑ(�Øœc .Ó1Ó1ÙØ˜f“_¨´°F³Ó);Ø+1°$©<�N 4Ó(Ø˜hÕ&Ø+0�N 4Ó(ñ 6ô ˜y¨&Ô1ô
â1‘��aô �”cÔ3±Ó3Ó3Ö4Ù1ð 	ñ 
ô " '¨>¸9ÔEõ
âE‘
��1�dô ˜!˜Q ¡h¨q£k°<ÀÖJÙEð 	ò 
ô ”C˜�JÓ‰á<@ÓAºD°q”SÔ2±Ó2Ö2¹Dˆ	ÐAÜ”C˜�JÓˆä�h¤×,Ñ,Ü!×%Ñ% h´¸xÑ0HÓIˆä'¨´#×6Ñ6‘¸D€JÜ  ¬3¨t«9°jÓA€IÜ˜tÐ%5Ô6äØØØØØØØØñ	ð 	ùóm Tùò0 	Lù÷ùò Sùò >Sùò 	5ùôùò6 F_ùó
ùô
ùò BsN   Ê_ Ð_+Ð$_&Ð>_+Ñ#_5Ó_:
Ô _?Õ=`Ø2`
Ú3,`Û3$`Ü1`ß&_+c                 ól   • [        U [        5      (       a  S/U-  nU  H  nSX#'   M	     U$ U (       + /U-  $ )a*  
Return a list of bools of length `column_count` which indicates whether
number parsing should be used on each column.
If `disable_numparse` is a list of indices, each of those indices are False,
and everything else is True.
If `disable_numparse` is a bool, then the returned list is all the same.
TF)r   r   )r  Úcolumn_countrÜ  r¡  s       r   rô  rô  Ü	  sG   € ô Ð"¤H×-Ñ-Ø�F˜\Ñ)ˆ	Û%ˆEØ$ˆIÓñ &àÐà$Ô$Ð%¨Ñ4Ð4r   c                 óŠ   • [        U [        5      (       a)  [        U [        5      (       d  X/U[        U 5      -
  -  -   $ U/U-  $ )aA  
Expands the `original` argument to return a return a list of
length `num_desired`. If `original` is shorter than `num_desired`, it will
be padded with the value in `default`.
If `original` is not a list to begin with (i.e. scalar value) a list of
length `num_desired` completely populated with `default will be returned
)r   r   r1   r8   )ÚoriginalÚnum_desiredr   s      r   rØ  rØ  í	  sC   € ô �(œH×%Ñ%¬j¸Ä3×.GÑ.GØ˜) {´S¸³]Ñ'BÑCÑCÐCàˆy˜;Ñ&Ð&r   c                 óz   • U (       a.  U [         :X  a  [         $ SU-  nU  Vs/ s H
  o2U-   U-   PM     nnU$ U $ s  snf )Nrg   )r3   )Úcellsr-   Úpadr¸   Úpadded_cellss        r   Ú_pad_rowr*  û	  sG   € ÞØ”OÓ#Ü"Ð"Ø�G‰mˆÙ5:Ó;²U¨T˜d™
 SÔ(±UˆÐ;ØÐàˆùò <s   ¡8c                 óT   • Uu  p#nX#R                  U 5      -   U-   R                  5       $ )z7Format row according to DataRow format without padding.)rT   ri   )r)  rº   r!   r#   r$   s        r   r·   r·   
  s+   € à�O€E�Ø—H‘H˜\Ó*Ñ*¨SÑ0×8Ñ8Ó:Ð:r   c                 óZ   • U(       d  g[        U5      (       a	  U" XU5      $ [        X5      $ )z5Return a string which represents a row of data cells.N©rº  r·   )r)  rW   rX   rº   s       r   Ú
_build_rowr.  
  s+   € æØÜ�×ÑÙ�l¨yÓ9Ð9ä  Ó6Ð6r   c                 ó<   • U R                  [        XX45      5        U $ r   )rš   r.  )Úlinesr)  rW   rX   rº   r	  s         r   Ú_append_basic_rowr1  
  s   € à	‡L�L”˜L°YÓGÔHØ€Lr   c                 óˆ   • U[        U 5      -
  nSU-  /nUS:X  a  XT-  U -   $ US:X  a  US-  nXF-
  nXe-  U -   Xu-  -   $ XU-  -   $ )Nrg   ÚbottomrB   r   )r8   )Ú
text_linesÚ	num_linesÚcolumn_widthÚrow_alignmentÚdelta_linesÚblankÚ	top_deltaÚbottom_deltas           r   Ú_align_cell_veriticallyr<  
  sq   € Øœc *›oÑ-€KØ�<ÑÐ €EØ˜Ó ØÑ" ZÑ/Ð/Ø	˜(Ó	"Ø 1Ñ$ˆ	Ø"Ñ.ˆØÑ  :Ñ-°Ñ0DÑDÐDà KÑ/Ñ/Ð/r   c           
      óÎ  • U Vs/ s H
  owSU-  -
  PM     nnU V	s/ s H  o™R                  5       PM     n
n	[        [        [        U
5      5      n[	        X¨5       VVs/ s H  u  pÇ[        XËXv5      PM     n
nn[        U5       VVs/ s H  oÚ Vs/ s H  oÌU   PM	     snPM     nnnU H  n[        Xõ5      n[        U UXƒU5        M     U $ s  snf s  sn	f s  snnf s  snf s  snnf )Nr   )	rk  rE  r¶   r8   rU   r<  rÇ  r*  r1  )r0  Úpadded_multiline_cellsÚpadded_widthsrX   rº   r(  r	  rG   rW   rm   Úcells_linesÚnlinesrð  ÚiÚlines_cellsÚlnÚ	padded_lns                    r   Ú_append_multiline_rowrF  )
  sã   € ñ '4Ó4¢m �Q˜‘W”¡m€IÐ4Ù+AÓBÒ+A a—<‘<–>Ñ+A€KÐBÜ””S˜+Ó&Ó'€Fô ˜Ô0ôâ0‰EˆBô 	  ¨AÖ8Ù0ð ñ ô ;@À¼-ÔHº-°Q KÓ0¢K˜b�q”E¡KÔ0¹-€KÑHÛˆÜ˜RÓ%ˆ	Ü˜% ¨IÀ&ÖIñ ð €Lùò! 5ùÚBùóùò 1ùÓHs(   …CœCÁCÂ	C!ÂCÂC!ÃC!c                 ó˜   • U(       d  g[        U5      (       a  U" X5      $ Uu  p4pVU  Vs/ s H  otU-  PM	     nn[        XƒXV45      $ s  snf )z3Return a string which represents a horizontal line.Nr-  )	rW   rX   Úlinefmtr!   Úfillr#   r$   rG   r'  s	            r   Ú_build_linerJ  ?
  sS   € æØÜ�×ÑÙ�yÓ,Ð,à 'Ñˆ�SÙ#,Ó-¢9˜a˜”¡9ˆÐ-Ü  °Ð(9Ó:Ð:ùò .s   ªAc                 ó<   • U R                  [        XU5      5        U $ r   )rš   rJ  )r0  rW   rX   rH  s       r   Ú_append_linerL  K
  s   € Ø	‡L�L”˜Y°7Ó;Ô<Ø€Lr   c                   ó.   • \ rS rSrSrS r\S 5       rSrg)ÚJupyterHTMLStriP
  zQWrap the string with a _repr_html_ method so that Jupyter
displays the HTML tablec                 ó   • U $ r   rD   ©Úselfs    r   Ú_repr_html_ÚJupyterHTMLStr._repr_html_T
  s   € Øˆr   c                 ó   • U $ )z>add a .str property so that the raw string is still accessiblerD   rP  s    r   r1   ÚJupyterHTMLStr.strW
  s	   € ð ˆr   rD   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rR  Úpropertyr1   Ú__static_attributes__rD   r   r   rN  rN  P
  s    † ñòð ñó ór   rN  c           
      ó.  • / nU(       a  U R                   (       a  U R                   O/ n	U R                  n
U R                  nU Vs/ s H
  oÌSU
-  -   PM     nnU(       a  S n[        [        U
S9nO[
        n[        nU" X5      nU R                  (       a  SU	;  a  [        X�XPR                  5        U(       a8  U" UUXÒU5        U R                  (       a  SU	;  a  [        X�XPR                  5        U(       a�  U R                  (       a~  SU	;  ax  [        USS U5       HB  u  nnU[        :w  a  U" UU" UU
5      UUU R                  US	9  [        X�XPR                  5        MD     U" UU" US   U
5      UUU R                  US   S	9  O�U R                  =(       dG    U R                  =(       d4    U R                  =(       d!    U R                  =(       d    [        S
S
S
S
5      nU H=  n[!        U5      (       a  [        X�UU5        M"  U" XŽ" UU
5      XÕU R                  5        M?     U R                  (       a  SU	;  a  [        X�XPR                  5        U(       d  U(       a2  SR#                  U5      nU R                  [$        :X  a  ['        U5      $ U$ g
s  snf )z1Produce a plain-text representation of the table.r   c                 ó   • U $ r   rD   )r9   r¬   s     r   rN  Ú_format_table.<locals>.<lambda>i
  s   € ™3r   )r(  r'   r(   r)   Nr  )r	  r   r*   r‹   )r.   r-   r+   r   rF  r*  r1  r'   rL  r(   r)   rU   r3   r,   r*   r    r<   rT   r{   rN  )r(  rÄ   ÚheadersalignsrÃ   rW   rX   rS  ró  r0  Úhiddenr(  r+   rG   r?  Úpad_rowÚ
append_rowÚpadded_headersr9   ÚralignÚseparating_lineÚoutputs                        r   r   r   ]
  sI  € ð €EÞ&-°#×2F×2FˆS×!Ò!ÈR€FØ
�+‰+€CØ—‘€Iá,5Ó6ªI q˜!˜c™'”k©I€MÐ6Þáð 	ô Ô2¸Ñ<‰
äˆÜ&ˆ
á˜WÓ*€Nà
‡}‡}˜¨FÓ2Ü�U¨9·m±mÔDæÙ�5˜.¨-È	ÔRØ××Ð#4¸FÓ#BÜ˜¨y×:MÑ:MÔNæ�×#×#Ð(9ÀÓ(Gä˜t C R˜y¨)Ö4‰KˆC�Ø”oÓ%ÙØÙ˜C Ó%Ø!ØØ—K‘KØ#òô ˜¨y×:MÑ:MÖNñ 5ñ 	ØÙ�D˜‘H˜cÓ"ØØØ�K‰KØ˜r‘]ó	
ð ×Ñ÷ $Ø×"Ñ"÷$à�}‰}÷$ð �}‰}÷$ô �B˜˜B Ó#ð 	ó ˆCô # 3×'Ñ'Ü˜U°9¸oÖNáØ˜7 3¨Ó,¨mÈÏÉöñ ð ‡}‡}˜¨FÓ2Ü�U¨9·m±mÔDæ–$Ø—‘˜5Ó!ˆØ�=‰=Ô<Ó<Ü! &Ó)Ð)àˆMàùòM 7s   ÁJc                   ó@   • \ rS rSrSrS r\S 5       rS rS r	S r
Srg	)
rÙ  i¯
  aG  A custom implementation of CPython's textwrap.TextWrapper. This supports
both wide characters (Korea, Japanese, Chinese)  - including mixed string.
For the most part, the `_handle_long_word` and `_wrap_chunks` functions were
copy pasted out of the CPython baseline, and updated with our custom length
and line appending logic.
c                 óh   • / U l         S U l        [        R                  R                  " U /UQ70 UD6  g r   )Ú_active_codesÚ	max_linesÚtextwrapÚTextWrapperÚ__init__)rQ  r¥   Úkwargss      r   rn  Ú_CustomTextWrap.__init__·
  s/   € ØˆÔØˆŒÜ×Ñ×%Ò% dÐ<¨TÒ<°VÓ<r   c                 óp   • [        U 5      n[        (       a  [        R                  " U5      $ [        U5      $ )ziCustom len that gets console column width for wide
and non-wide characters as well as ignores color codes)r  r8  r:  r8   )rh  Ústrippeds     r   Ú_lenÚ_CustomTextWrap._len¼
  s.   € ô ˜tÓ$ˆßŠ7Ü×#Ò# HÓ-Ð-ä�x“=Ð r   c                 óð  • [         R                  U5       Vs/ s H  o3PM     nnU Vs/ s H3  oUR                  UR                  5       S   UR                  5       S    PM5     nnSR	                  U R
                  5      U-   nU H1  nU[        :w  a  U R
                  R                  U5        M*  / U l        M3     [        U R
                  5      S:”  a	  U[        -   nUR                  U5        gs  snf s  snf )zøAdds a new line to the list of lines the text is being wrapped into
This function will also track any ANSI color codes in this string as well
as add any colors from previous lines order to preserve the same formatting
as a single unwrapped string.
r   r   r   N)	r3  Úfinditerrü   ÚspanrT   rj  Ú_ansi_color_reset_coderš   r8   )rQ  r0  Únew_lineÚxÚcode_matchesÚcodeÚcolor_codess          r   Ú_update_linesÚ_CustomTextWrap._update_linesÆ
  sß   € ô $/×#7Ñ#7¸Ô#AÓBÒ#A˜ašÑ#AˆÐBáEQó
ÚEQ¸T�K‰K˜Ÿ	™	› A™¨¯©«°Q©Ó8Á\ð 	ð 
ð
 —7‘7˜4×-Ñ-Ó.°Ñ9ˆãˆDØÔ-Ó-Ø×"Ñ"×)Ñ)¨$Ö/à%'�Ö"ñ	  ô ˆt×!Ñ!Ó" QÓ&ØÔ"8Ñ8ˆHà�‰�XÕùò' Cùò
s
   ˜C.©:C3c                 óÄ  • US:  a  SnOXC-
  nU R                   (       Ga  US:”  Ga  US   nSn[        U5      nU[        U5      ::  aF  U R                  USU 5      U::  a.  US-   nU[        U5      ::  a  U R                  USU 5      U::  a  M.  Sn	Sn
[        R                  U5      bk  [        R                  U5       HR  u  n    n[        U5      nUXjXy-   U-   S-
   ;   d  M%  X�-  n	[        R                  XjS 5      nX®R                  5       -  n
MT     UR                  USXy-   S-
   5        XgU	-   S-
  S US'   gU(       d   UR                  UR                  5       5        gg)zá_handle_long_word(chunks : [string],
                     cur_line : [string],
                     cur_len : int, width : int)
Handle a chunk of text (most likely a word, not whitespace) that
is too long to fit in any line.
r   r   r  N)
rÖ  r  r8   rs  r3  r>  Úfindallr$   rš   Úpop)rQ  Úreversed_chunksÚcur_lineÚcur_lenr^   Ú
space_leftÚchunkrB  Ústripped_chunkÚtotal_escape_lenÚ
last_groupr†  r¬   Ú
escape_lenÚfounds                  r   Ú_handle_long_wordÚ!_CustomTextWrap._handle_long_wordá
  sƒ  € ð �1‹9Ø‰Jà™ˆJð × × Ð  Z°!¤^ð $ BÑ'ˆEØˆAä(¨Ó/ˆNà”S˜Ó(Ó(¨T¯Y©Y°~ÀbÀqÐ7IÓ-JÈjÓ-Xà˜‘E�ð ”S˜Ó(Ó(¨T¯Y©Y°~ÀbÀqÐ7IÓ-JÈjÕ-Xð  !ÐØˆJÜ×!Ñ! %Ó(Ñ4Ü&1×&9Ñ&9¸%Ö&@‘N�E˜1˜a Ü!$ U£�JàØ ¨aÑ.BÀZÑ.OÐRSÑ.SÐTõUð )Ñ6Ð(Ü +× 2Ñ 2°5¸Ð3EÓ F˜Ø"§i¡i£kÑ1š
ñ 'Að �O‰O˜EÐ"< AÑ$8¸1Ñ$<Ð=Ô>Ø"'Ð,<Ñ(<¸qÑ(@Ð(BÐ"CˆO˜BÒö
 Ø�O‰O˜O×/Ñ/Ó1Õ2ð r   c                 ó  • / nU R                   S::  a  [        SU R                   -  5      eU R                  b}  U R                  S:”  a  U R                  nOU R                  nU R                  U5      U R                  U R                  R                  5       5      -   U R                   :”  a  [        S5      eUR                  5         U(       Ga=  / nSnU(       a  U R                  nOU R                  nU R                   U R                  U5      -
  nU R                  (       a!  US   R                  5       S:X  a
  U(       a  US	 U(       aJ  U R                  US   5      nXW-   U::  a$  UR                  UR                  5       5        XW-  nOO	U(       a  MJ  U(       aI  U R                  US   5      U:”  a1  U R                  XXV5        [        [        U R
                  U5      5      nU R                  (       a7  U(       a0  US   R                  5       S:X  a  XPR                  US   5      -  nUS	 U(       GaÎ  U R                  b`  [!        U5      S-   U R                  :  dD  U(       a8  U R                  (       aQ  [!        U5      S:X  aB  US   R                  5       (       d*  XV::  a%  U R#                  X#SR%                  U5      -   5        GO<U(       a�  US   R                  5       (       ac  XPR                  U R                  5      -   U::  aB  UR                  U R                  5        U R#                  X#SR%                  U5      -   5          U$ XPR                  US   5      -  nUS	 U(       a  M�  U(       ab  US   R'                  5       nU R                  U5      U R                  U R                  5      -   U R                   ::  a  X€R                  -   US'    U$ U R#                  X#U R                  R                  5       -   5         U$ U(       a  GM=  U$ )aN  _wrap_chunks(chunks : [string]) -> [string]
Wrap a sequence of text chunks and return a list of lines of
length 'self.width' or less.  (If 'break_long_words' is false,
some lines may be longer than this.)  Chunks correspond roughly
to words and the whitespace between them: each chunk is
indivisible (modulo 'break_long_words'), but a line break can
come between any two chunks.  Chunks should not have internal
whitespace; ie. a chunk is either all whitespace or a "word".
Whitespace chunks will be removed from the beginning and end of
lines, but apart from that whitespace is preserved.
r   zinvalid width %r (must be > 0)r   z#placeholder too large for max widthr  r   )r^   r¤   rk  Úsubsequent_indentÚinitial_indentrs  ÚplaceholderÚlstripÚreverseÚdrop_whitespacer2   rš   r‚  r�  Úsumr¶   r8   r~  rT   ri   )	rQ  Úchunksr0  Úindentr„  r…  r^   Ú	chunk_lenÚ	prev_lines	            r   Ú_wrap_chunksÚ_CustomTextWrap._wrap_chunks  sh  € ð ˆØ�:‰:˜‹?ÜÐ=ÀÇ
Á
ÑJÓKÐKØ�>‰>Ñ%Ø�~‰~ Ó!Ø×/Ñ/‘à×,Ñ,�Ø�y‰y˜Ó  4§9¡9¨T×-=Ñ-=×-DÑ-DÓ-FÓ#GÑGÈ$Ï*É*ÓTÜ Ð!FÓGÐGð 	�‰Ôçð ˆHØˆGö Ø×/Ñ/‘à×,Ñ,�ð —J‘J §¡¨6Ó!2Ñ2ˆEð ×#×#¨¨r©
×(8Ñ(8Ó(:¸bÓ(@ÆUØ˜2�JæØ ŸI™I f¨R¡jÓ1�	ð Ñ&¨%Ó/Ø—O‘O F§J¡J£LÔ1ØÑ(‘Gð ÷ �&ö ˜$Ÿ)™) F¨2¡JÓ/°%Ó7Ø×&Ñ& v¸ÔHÜœc $§)¡)¨XÓ6Ó7�ð ×#×#®°X¸b±\×5GÑ5GÓ5IÈRÓ5OØŸ9™9 X¨b¡\Ó2Ñ2�Ø˜R�Lçà—N‘NÑ*Ü˜5“z A‘~¨¯©Ó6æ"Ø×/×/Ü ›K¨1Ó,Ø & q¡	§¡× 1Ñ 1àÓ(ð ×&Ñ& u°r·w±w¸xÓ7HÑ.HÖIæ"à$ R™L×.Ñ.×0Ñ0Ø '¯)©)°D×4DÑ4DÓ*EÑ EÈÓ Nà$ŸO™O¨D×,<Ñ,<Ô=Ø ×.Ñ.¨u¸r¿w¹wÀxÓ?PÑ6PÔQØ!ð àˆð  §9¡9¨X°b©\Ó#:Ñ:˜Ø$ R˜L÷ #˜(ö !Ø(-¨b©	×(8Ñ(8Ó(:˜Ià $§	¡	¨)Ó 4°t·y±yÀ×AQÑAQÓ7RÑ RØ#'§:¡:ó!.ð -6×8HÑ8HÑ,H  b¡	Ø %ð ˆð ×*Ñ*¨5¸4×;KÑ;K×;RÑ;RÓ;TÑ2TÔUØàˆ÷e ‰fðd ˆr   )rj  rk  N)rV  rW  rX  rY  rZ  rn  Ústaticmethodrs  r~  r�  r›  r\  rD   r   r   rÙ  rÙ  ¯
  s1   † ñò=ð
 ñ!ó ð!òò6/3õnmr   rÙ  c                  ó‚  • SSK n [        R                  " [        R                  5      n U R                  [
        R                  SS S/ SQ5      u  p#/ n[        n[        nSnSn	Sn
S	nW H»  u  pÍUS
;   a  SnM  US;   a  UnM  US;   a  UnM#  US;   a  UnM-  US;   a  UR                  5       nME  US;   a=  U[        ;  a/  [        SU-  5        [        U5        [
        R                  " S5        Un	Mˆ  US;   a  Un
M’  US;   d  Mš  [        U5        [
        R                  " S5        M½     W(       d  [
        R                  /OUnUS	:X  a  [
        R                  O[!        US5       nU H_  nUS	:X  a  [
        R                  n[#        U5      (       a  [%        UUU	U
UUUUS9  M;  [!        U5       n[%        UUU	U
UUUUS9  SSS5        Ma     SSS5        g! U R                   a7  n[        U5        [        U5        [
        R                  " S5         SnAGNÄSnAff = f! , (       d  f       MÅ  = f! , (       d  f       g= f)aÌ  Usage: tabulate [options] [FILE ...]

Pretty-print tabular data.
See also https://github.com/astanin/python-tabulate

FILE                      a filename of the file with tabular data;
                          if "-" or missing, read data from stdin.

Options:

-h, --help                show this message
-1, --header              use the first row of data as a table header
-o FILE, --output FILE    print table to FILE (default: stdout)
-s REGEXP, --sep REGEXP   use a custom column separator (default: whitespace)
-F FPFMT, --float FPFMT   floating point number format (default: g)
-I INTFMT, --int INTFMT   integer point number format (default: "")
-f FMT, --format FMT      set output table format; supported formats:
                          plain, simple, grid, fancy_grid, pipe, orgtbl,
                          rst, mediawiki, html, latex, latex_raw,
                          latex_booktabs, latex_longtable, tsv
                          (default: simple)
r   Nr   zh1o:s:F:I:f:)Úhelpr†   zoutput=zsep=zfloat=zint=z	colalign=zformat=r   rÉ   z\s+r@   )z-1z--headerr³  )z-oz--output)z-Fz--float)z-Iz--int)z-Cz
--colalign)z-fz--formatz"%s is not a supported table formatr£   )z-sz--sep)z-hz--helprG   )rÄ   r  r#   rŠ  r‹  Úfilerœ   )Úgetoptrl  ÚdedentÚ_mainrZ  ÚsysÚargvÚGetoptErrorÚprintÚexitrù  rú  rF  r   ÚstdinÚstdoutÚopenr   Ú_pprint_file)r¡  ÚusageÚoptsr¥   r   rÄ   rŠ  r‹  rœ   r  r#   ÚoutfileÚoptr4   ÚfilesÚoutr   Úfobjs                     r   r£  r£  ˆ  s  € ó0 ä�OŠOœEŸM™MÓ*€EðØ—]‘]Ü�H‰H�Q�RˆLØò	ó
‰
ˆð$ €GÜ €HÜ€FØ€HØ€HØ
€CØ€GÛ‰
ˆØÐ$Ó$Ø ŠGØÐ&Ó&ØŠGØÐ%Ó%ØŠHØ�OÓ#ØŠFØÐ(Ó(Ø—{‘{“}ŠHØÐ&Ó&ØÔ,Ó,ÜÐ:¸UÑBÔCÜ�e”Ü—’˜”ØŠHØ�OÓ#ØŠCØÐ$Õ$Ü�%ŒLÜ�HŠH�QŽKñ+ ö,  $ŒS�Y‰Y‰K¨€EØ #“~Œ�Š¬4°¸Ó+=Ð	=ÀÛˆAØ�C‹xÜ—I‘I�Ü˜�{‰{ÜØØ#Ø%ØØ%Ø!ØØ%ô	ô ˜!”W Ü ØØ 'Ø!)ØØ!)Ø%Ø Ø!)ò	÷ ‘Wñ ÷ 
>Ð	=øðE ×Ñó ÜˆaŒÜˆeŒÜ�Š��Šûðú÷d –Wú÷! 
>Õ	=ús<   ª(G Å%A	H0Æ.HÆ?H0ÇHÇ$,HÈHÈ
H-È(H0È0
H>c                 óî   • U R                  5       nU V	s/ s H=  o™R                  5       (       d  M  [        R                  " X9R	                  5       5      PM?     n
n	[        [        U
UUUUUS9US9  g s  sn	f )N)rŠ  r‹  rœ   )r   )Ú	readlinesr2   rø   rF  ri   r§  r   )ÚfobjectrÄ   r  r#   rŠ  r‹  r   rœ   rÃ   rŠ   Útables              r   r¬  r¬  ñ  si   € Ø×ÑÓ€DÙ04ÓB²¨1¿¹¿	Ó&ŒR�XŠX�cŸ8™8›:Ö&±€EÐBÜ	ÜØØØØØØñ	
ð ó
ùò Cs
   •A2±(A2Ú__main__)r   )FF)TT)r   TFFF)r   T)FN)r   )rñ   Úignorer   )‡rZ  Úimportlib.metadatar   Ú_versionr   Ú_PackageNotFoundErrorÚ__version__rü  Úcollectionsr   Úcollections.abcr   r	   ræ   r
   r   Ú	itertoolsr   r   r»  Ú	functoolsr   r   r   rø   r  rl  rÃ  r¤  r8  ÚImportErrorr   Ú__all__rõ  ÚPRESERVE_WHITESPACEÚ_BREAK_LONG_WORDSÚ_BREAK_ON_HYPHENSrù  rú  rû  rö  r9  r3   r    r%   r&   r5   r<   rH   rZ   r_   rd   rp   rw   r{   rƒ   r‡   r‘   r§   ÚLATEX_ESCAPE_RULESr»   rÈ   rÿ  Úsortedr¯  r   rø  Úcompiler?  r@  Ú_escÚ_csiÚ_oscÚ_stÚ_ansi_escape_patÚVERBOSEr3  r„  r5  rx  rú   r   rý   r  r  r  r  r  r  r#  r)  r,  r.  r1  r  r<  rA  r8   rJ  rU  r]  rb  r`  ri  ru  r~  r€  r•  r—  r¢  r¥  r«  r­  rÔ  rã  rç  r   rô  rØ  r*  r·   r.  r1  r<  rF  rJ  rL  r1   rN  r   rm  rÙ  r£  r¬  rV  rD   r   r   Ú<module>rÐ     s˜  ðÙ  ÷ð
Ù˜:Ó&€Kó Ý "ß +Ý %ß 8ß %Û 	Û 	Û Û Û Û 
ðÛò
$ò F€ð	Ý/ð €ð Ð ð Ð àÐ ð Ð Ø€ØÐ ð €ð  Ð%€ð €á�&Ò:Ó;€ñ �YÒ 7Ó
8€ñD Øò	ó€òCòòòòòòAò òò
ô.-ô
ò3
ðn Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
ñÐ ð  <Nô 5ò!ð&xØ‰kÙ�r˜3  bÓ)Ù˜R  d¨BÓ/ØÙ�r˜3  bÓ)Ù˜"˜d BÓ'Ù˜˜D "Ó%ØØ% {Ð3ñ	ðxð ‰[ØØØØÙ˜"˜d BÓ'Ù˜˜D "Ó%ØØñ	ðxð* ‰KÙ�s˜C  cÓ*Ù˜S # s¨CÓ0Ù˜S # s¨CÓ0Ù�s˜C  cÓ*Ù˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ð+xð> ‘;Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ð?xðR ‘KÙ�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðSxðf ‘+Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðgxðz ‘+Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ð{xðN ‘;Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðOxðb ‘+Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8Ù˜U E¨5°%Ó8Ù�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðcxðv ‘+Ù�s˜C  cÓ*Ø.Ù˜S # s¨CÓ0Ù�s˜C  cÓ*Ù˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ðwxðJ ‰{Ù�s˜C  cÓ*Ù˜S # s¨CÓ0ØÙ�s˜C  cÓ*Ù˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ðKxð^ ‘kÙ�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ð_xðr ‘{Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðsxðF ‘[Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðGxðZ ‘[Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ð[xðn ‘kÙ�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ðoxðB ‘[Ù�u˜e U¨EÓ2Ù˜U E¨5°%Ó8ØÙ�u˜e U¨EÓ2Ù˜% ¨Ó.Ù˜˜u eÓ,ØØñ	ñCxðV ‰kÙ�s˜C  cÓ*Ù˜S # s¨CÓ0ØØÙ˜#˜s CÓ(Ù˜˜S #Ó&ØØ%˜ñ	ðWxðj ‰KØ(Ø.ØØÙ˜#˜s CÓ(Ù˜˜S #Ó&ØØ%˜ñ	ðkxð~ ‰kØÙ˜S # s¨CÓ0ØØÙ˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ðxðR ‰KØØØØÙ˜$  dÓ+Ù˜˜S #Ó&ØØñ	ðSxðf ‰kØÙ˜R  c¨2Ó.ØØÙ˜"˜c 2Ó&Ù˜˜C Ó$ØØñ	ðgxðz ‰kÙ�s˜C  cÓ*Ù˜S # s¨CÓ0ØÙ�s˜C  cÓ*Ù˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ð{xðN ‰KÙ�s˜C  cÓ*Ù˜S # s¨CÓ0ØÙ�s˜C  cÓ*Ù˜#˜s CÓ(Ù˜˜S #Ó&ØØñ	ðOxðb 
‰;Ù�r˜3  bÓ)Ù˜R  d¨BÓ/ØÙ�r˜3  bÓ)Ù˜"˜d BÓ'Ù˜˜D "Ó%ØØñ	ðcxðv ‘ÙØ<ØØØ'ó	
ñ ˜T 2 r¨2Ó.Ù˜T 2 r¨2Ó.Ù�t˜R  RÓ(ÙÐ3°SÓ9ÙÐ1°3Ó7ØØñðwxðT ‘ØØØØÙÐ.°¸UÑCÙÐ,¨dÓ3ØØñ	ðUxðh ‘ØØØØÙ˜% ¨Ó0Ù˜˜e TÓ*ØØñ	ðixð| ‰KØ2ØØÙÐ+¨R°°RÓ8ÙÐ.°°eÓ<ÙÐ,¨d°EÓ:ØØ%˜ñ	ð}xðP	 ‘+Ø2ØØÙÐ+¨R°°RÓ8ÙÐ.°°dÓ;ÙÐ,¨d°DÓ9ØØ%˜ñ	ðQ	xðd	 ‰[Ø+Ù˜Y¨¨B°Ó3ØÙÐ0°"°b¸"Ó=ØØØØñ	ðe	xðx	 ‘Ø+Ù˜Y¨¨B°Ó3ØÙÐ0°"°b¸"Ó=Ù˜*¨rÑ2Ù˜
¨RÑ0ØØñ	ðy	xðL
 ‘kÙÐ3¸dÑCÙ˜[¨"¨b°"Ó5ØÙÐ5°r¸2¸rÓBØØØØñ	ðM
xð`
 ‘{ÙÐ3¸tÑDÙÐ1°2°r¸2Ó>ØÙÐ2°B¸¸BÓ?ØØØØñ	ña
xñt
 ØØØØÙ˜"˜d BÓ'Ù˜˜D "Ó%ØØñ	ñ ØØØØÙ˜& %¨Ó-Ø'ØØñ	ñ Ù˜-¨Ó/ØØÙ�w  B¨Ó+Ù˜-¨Ó.Ù˜ uÓ-ØØ%˜ñ	ò]x€ñv ˜.×-Ñ-Ó/Ó0Ð ð
ØˆWðàˆhðð ˆFðð �=ð	ð
 �Nðð �,ðð �,ðð �=ðð �,ðð �,ðð ˆFðð ˆhðð ˆFðð ˆhðð ˆhðð  ˆFð!ð" 
ˆ5ð#ð$ ØØ&Ø(Ø$Ø$Ø&Ø$ò3Ð ðL —:’:˜mÓ,Ð ØŸš MÓ2Ð ð2 €Øˆ&�€|€Øˆ&�€|€Ø
ˆˆr€l€ð	ð 
ˆð 	ð 
ˆð ð ˆ6ð 	Ø	ˆð Øˆ6ð 	Ø	ˆˆc�#�ð ðÐ ð$ �jŠjÐ)¨2¯:©:Ó6€Ø—J’JÐ/×6Ñ6°vÓ>ÀÇ
Á
ÓKÐ Ø"Ð à#%§:¢:ØEó$Ð  ò
ò(DòBò1ðh ô ò&ô/òdò:òòòò/ò(ò$:ð 14ô Dò
òò4ð  >Aô Eò
ð ØØØØõ1òh!ô*.õ4<ð@ KOõ'ò.ò0òò(õL&ðd Ø"Ø&Ø&ô4õnð6 ØØØØØØ"ØØØØØØØØØØØ&Ø&ô)GòT5ò"'òò;ò7õò
0ð TXõò,	;òô

�Sô 
òOôdV�h×*Ò*ô VòrfòRð  ˆzÓÙ	…Gð øðo_ ó ØƒKðûð$ ó ØƒGðûð ó 	Úð	ús5   Œg7 Áh Á!h ç7hèhèhèhèhèh