§
    áàÉj³>  ã                   óX  — d Z ddlZddlZddlZddlZddlZg d¢Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
Zd„ Zd„ Z ej        d¦  «        Z ej        d¦  «        Z ej        d¦  «        Z ej        d¦  «        Z ej        d¦  «        Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!dS )u%  AI åŠ©æ‰‹ã€Œå¤§ç»“æžœé›†å›¾è¡¨ç²¾ç‚¼ + Excel å¯¼å‡ºã€�å�Žç«¯ç¡®å®šæ€§æž„å»ºã€‚

äº§å“�å�£å¾„ï¼ˆç”¨æˆ·å·²æ‹�æ�¿ï¼Œå‹¿è‡ªä½œä¸»å¼ ï¼‰ï¼š
1. å…ˆæœ‰æ±‡æ€»è¡¨ï¼ˆç­”æ¡ˆé‡Œçš„ markdown è¡¨ï¼‰ï¼Œå†�æ�®è¡¨é€‰å›¾ â€”â€” å›¾è¡¨æ•°æ�® 100% æ�¥è‡ªè¯¥è¡¨ï¼Œä¸�è°ƒ LLMã€�ä¸�ç¼–æ•°å­—ã€‚
2. ä»…åœ¨ç”¨æˆ·æ˜¾å¼�è¦�æ±‚å›¾è¡¨æ—¶æ‰�å‡ºå›¾ï¼ˆå…³é”®è¯�è§� CHART_INTENT_KEYWORDSï¼‰ï¼›ä¸�å¸¦è¿™ç±»è¯�çš„æ��é—®è¡Œä¸ºå®Œå…¨ä¸�å�˜ã€‚
3. æŠ¥å‘Šå½¢æ€� = Excel å¯¼å‡ºï¼ˆçœŸ .xlsxï¼Œå�Žç«¯ç«¯ç‚¹ç”Ÿæˆ�ï¼‰ã€‚
4. å›¾è¡¨å½¢æ€�ç¡®å®šæ€§é€‰æ‹©ï¼š
     è¡¨å†…æœ‰æ—¶åº�åˆ—ï¼ˆå¹´/å­£/æœˆ/å‘¨/æ—¥ï¼‰â†’ æŠ˜çº¿ line
     å�ªæœ‰ä¸€ä¸ªå�¯åŠ æ€»æ•°å€¼åˆ—        â†’ çŽ¯å½¢ donut
     å…¶ä½™                        â†’ æŸ±çŠ¶ bar
   æ— å�¯ç”¨æ•°å€¼åˆ— â†’ type='table'ï¼ˆå�ªç»™è¡¨ + å¯¼å‡ºæŒ‰é’®ï¼‰ã€‚

è¯¥æ¨¡å�—ä¸�ä¾�èµ– ai_chatï¼Œå�¯ç‹¬ç«‹å�•æµ‹ã€‚
é    N)%u	   ç”¨å›¾è¡¨u   ç”¨ä¸ªå›¾è¡¨u	   ä¸Šå›¾è¡¨u   å›¾è¡¨u   ç”»å›¾u	   ç”»ä¸ªå›¾u   ç”»ä¸€å¼ å›¾u	   ç”»å¼ å›¾u	   å�¯è§†åŒ–u   å›¾å½¢å±•ç¤ºu	   å›¾å½¢åŒ–õ   å›¾å½¢å‘ˆçŽ°u   å�¯è§†åŒ–å±•ç¤ºu   å�¯è§†åŒ–å‘ˆçŽ°r   u   ç»™æˆ‘çœ‹è¶‹åŠ¿u	   çœ‹è¶‹åŠ¿u   çœ‹ä¸‹è¶‹åŠ¿u   çœ‹çœ‹è¶‹åŠ¿u	   è¶‹åŠ¿å›¾u	   æŠ˜çº¿å›¾u   æŠ˜çº¿u	   æŸ±çŠ¶å›¾u	   æŸ±å½¢å›¾u	   æ�¡å½¢å›¾u	   çŽ¯å½¢å›¾u	   åœ†çŽ¯å›¾u   ç”œç”œåœˆå›¾u   é¥¼å›¾u	   æ‰‡å½¢å›¾u	   å‡ºä¸ªå›¾u	   æ�¥ä¸ªå›¾u	   ä¸Šä¸ªå›¾u   å±•ç¤ºæˆ�å›¾u   ç”¨å›¾æ˜¾ç¤ºu   ç”¨å›¾å±•ç¤ºu   å‡ºå›¾c                 óx   ‡— | pd                      ¦   «         Š‰sdS t          ˆfd„t          D ¦   «         ¦  «        S )NÚ Fc              3   ó    •K  — | ]}|‰v V — Œ	d S ©N© )Ú.0ÚkÚqs     €õC   /Users/liuxinyuan/Desktop/Hermesè¾“å‡º-å·¥ä½œç±»/è„šæœ¬/ai_chart.pyú	<genexpr>z#has_chart_intent.<locals>.<genexpr>&   s'   øè è € Ð5Ð5˜!ˆq�AˆvÐ5Ð5Ð5Ð5Ð5Ð5ó    )ÚstripÚanyÚCHART_INTENT_KEYWORDS)Úquestionr   s    @r   Úhas_chart_intentr   "   sI   ø€ Ø	ˆ�R×ÒÑ Ô €AØð ØˆuÝÐ5Ð5Ð5Ð5Õ4Ð5Ñ5Ô5Ñ5Ô5Ð5r   c                 ó"  — | pd                      ¦   «         }d|vrdS |                     d¦  «        r
|dd…         }|                     d¦  «        r
|dd…         }d„ |                     d¦  «        D ¦   «         }t	          |¦  «        dk     rdS |S )uT   æŠŠä¸€è¡Œæ‹†æˆ�å�•å…ƒæ ¼ï¼›ä¸�æ˜¯å�¯æˆ�è¡¨çš„è¡Œï¼ˆæ—  | æˆ– <2 åˆ—ï¼‰è¿”å›ž Noneã€‚r   ú|Né   éÿÿÿÿc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r   )r   ©r	   Úcs     r   ú
<listcomp>z_row_cells.<locals>.<listcomp>3   s    € Ð-Ð-Ð-˜1ˆQ�WŠW‰YŒYÐ-Ð-Ð-r   é   )r   Ú
startswithÚendswithÚsplitÚlen)ÚlineÚtÚcellss      r   Ú
_row_cellsr$   *   s›   € à	ˆ�×ÒÑÔ€AØ
�!€|€|ØˆtØ‡|‚|�CÑÔð ØˆaˆbˆbŒEˆØ‡z‚z�#�„ð ØˆcˆrˆcŒFˆØ-Ð- §¢¨¡¤Ð-Ñ-Ô-€EÝ
ˆ5�z„z�A‚~€~ØˆtØ€Lr   c                 ó>   — t          | ¦  «        }t          |¦  «        S )u8   åˆ¤æ–­æ˜¯å�¦ä¸º markdown è¡¨æ ¼åˆ†éš”è¡Œï¼ˆ---|---ï¼‰ã€‚)r$   Ú_is_sep_cells)r!   r#   s     r   Ú_is_sep_rowr'   9   s   € å�tÑÔ€EÝ˜ÑÔÐr   c                 ó\   — | sdS d„ | D ¦   «         }|sdS t          d„ |D ¦   «         ¦  «        S )NFc                 ó   — g | ]
}|d k    ¯|‘ŒS ©r   r   r   s     r   r   z!_is_sep_cells.<locals>.<listcomp>B   s   € Ð(Ð(Ð(�!  R¢ ˆA   r   c              3   ó@   K  — | ]}t          j        d |¦  «        V — ŒdS )z	:?-{1,}:?N)ÚreÚ	fullmatchr   s     r   r   z _is_sep_cells.<locals>.<genexpr>E   s.   è è € Ð;Ð;°�rŒ|˜L¨!Ñ,Ô,Ð;Ð;Ð;Ð;Ð;Ð;r   ©Úall)r#   Úbodys     r   r&   r&   ?   sL   € Øð ØˆuØ(Ð(�uÐ(Ñ(Ô(€DØð ØˆuÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;r   c                 ó$   — t          | ¦  «        pg S r   )r$   )r!   s    r   Ú
_split_rowr2   H   s   € Ý�dÑÔÐ!˜rÐ!r   c           	      ó  ‡— ddl m} g }| pd                     d¦  «        }t          |¦  «        }d}||k     �rTt	          ||         ¦  «        }|��0|}g }||k     r8t	          ||         ¦  «        }	|	€n |                     |	¦  «         |dz  }||k     °8d„ |D ¦   «         }
t          |
¦  «        dk    rÌ |d	„ |
D ¦   «         ¦  «        }|                     d¦  «        d         \  Š}‰dk    r“|t          dt          t          |
¦  «        d
z  dz   ¦  «        ¦  «        k    r_ˆfd„|
D ¦   «         }
t          |
d         ¦  «        }d„ |
dd…         D ¦   «         }d„ |D ¦   «         }|r|r|                     ||dœ¦  «         |}n|dz  }||k     �°T|S )u:  æŠ½å‡ºç­”æ¡ˆé‡Œçš„æ‰€æœ‰ç®¡é�“è¡¨ï¼ˆmarkdown æˆ– LLM å¸¸è§�çš„â€œæ— å‰�å�Žç«–çº¿â€�å�˜ä½“ï¼‰ã€‚

    è§„åˆ™ï¼šè¿žç»­ >=2 è¡Œï¼Œæ¯�è¡Œå�« '|' ä¸” >=2 åˆ—ï¼›åˆ—æ•°å�–ä¼—æ•°ã€�å¤šæ•°è¡Œé¡»ä¸€è‡´ï¼›
    çº¯ç ´æŠ˜å�·åˆ†éš”è¡Œï¼ˆmarkdown åˆ†éš”è¡Œï¼‰è‡ªåŠ¨å‰”é™¤ã€‚
    è¿”å›ž [{'headers':[...], 'rows':[[...]]}]ã€‚
    r   )ÚCounterr   ú
Nr   c                 ó0   — g | ]}t          |¦  «        °|‘ŒS r   )r&   r   s     r   r   z#parse_md_tables.<locals>.<listcomp>c   s%   € Ð=Ð=Ð=˜!­M¸!Ñ,<Ô,<Ð=�AÐ=Ð=Ð=r   r   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   ©r    r   s     r   r   z"parse_md_tables.<locals>.<genexpr>e   s(   è è € Ð3Ð3¨�c !™fœfÐ3Ð3Ð3Ð3Ð3Ð3r   ç333333ã?ç+‡ÙÎ÷ï?c                 ó:   •— g | ]}t          |¦  «        ‰k    ¯|‘ŒS r   r8   )r	   r   Ú	mode_colss     €r   r   z#parse_md_tables.<locals>.<listcomp>h   s)   ø€ ÐCÐCÐC !­s°1©v¬v¸Ò/BÐ/B˜AÐ/BÐ/BÐ/Br   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©Úlist©r	   Úrs     r   r   z#parse_md_tables.<locals>.<listcomp>j   s   € Ð6Ð6Ð6¨�D ™GœGÐ6Ð6Ð6r   c                 óD   — g | ]}t          d „ |D ¦   «         ¦  «        ¯|‘ŒS )c              3   ó"   K  — | ]
}|d k    V — ŒdS )r   Nr   r   s     r   r   z-parse_md_tables.<locals>.<listcomp>.<genexpr>k   s&   è è € Ð2FÐ2F¸q°1¸²7Ð2FÐ2FÐ2FÐ2FÐ2FÐ2Fr   )r   r@   s     r   r   z#parse_md_tables.<locals>.<listcomp>k   s4   € ÐGÐGÐG !­sÐ2FÐ2FÀAÐ2FÑ2FÔ2FÑ/FÔ/FÐG˜AÐGÐGÐGr   ©ÚheadersÚrows)
Úcollectionsr4   r   r    r$   ÚappendÚmost_commonÚmaxÚintr?   )Útextr4   ÚtablesÚlinesÚnÚir#   ÚjÚblockr   ÚdataÚcntÚmode_nrE   rF   r<   s                  @r   Úparse_md_tablesrV   L   sæ  ø€ ð $Ð#Ð#Ð#Ð#Ð#Ø€FØˆZ�R×Ò˜tÑ$Ô$€EÝˆE‰
Œ
€AØ	€AØ
ˆaŠ%‰%Ý˜5 œ8Ñ$Ô$ˆØÑØˆAØˆEØ�a’%�%Ý˜u QœxÑ(Ô(�Ø�9ØØ—’˜Q‘”�Ø�Q‘�ð �a’%�%ð >Ð=˜uÐ=Ñ=Ô=ˆDÝ�4‰yŒy˜AŠ~ˆ~Ø�gÐ3Ð3¨dÐ3Ñ3Ô3Ñ3Ô3�Ø$'§O¢O°AÑ$6Ô$6°qÔ$9Ñ!�	˜6Ø ’>�> fµ°Aµs½3¸t¹9¼9Às¹?ÈUÑ;RÑ7SÔ7SÑ0TÔ0TÒ&TÐ&TØCÐCÐCÐC tÐCÑCÔC�DÝ" 4¨¤7™mœm�GØ6Ð6¨T°!°"°"¬XÐ6Ñ6Ô6�DØGÐG tÐGÑGÔG�DØð J 4ð JØŸš°'À4Ð&HÐ&HÑIÔIÐIØˆAˆAà�‰FˆAð1 ˆaŠ%‰%ð2 €Mr   )u   å…ƒu   ä¸ªu   æ¬¡u   æ�¡u   ç¬”u   å®¶u   å�°u   ä»¶u   äººu   å¤©u   å°�æ—¶ÚhÚkgÚgÚmlÚLu   å¥—u   ä»½u   å�•õ   ä¸‡õ   äº¿c                 óÂ  — | €dS t          | ¦  «                             ¦   «         }|dk    s|dv rdS |                     dd¦  «                             dd¦  «        }dD ]}|                     |d¦  «        }Œd}|                     d¦  «        rd	}|dd
…         }n!|                     d¦  «        rd}|dd
…         }|                     d¦  «        r
|dd
…         }t	          d¦  «        D ]A}t
          D ]5}|                     |¦  «        r|dvr|dt          |¦  «         …         } nŒ6 nŒB|dk    s|dk    rdS 	 t          |¦  «        }n# t          $ r Y dS w xY w||z  S )ug   æŠŠå�•å…ƒæ ¼æ–‡æœ¬è§£æž�ä¸ºæ•°å­—ï¼ˆæ”¯æŒ�å�ƒåˆ†ä½�ã€�è´§å¸�ç¬¦ã€�%ã€�ä¸‡/äº¿ï¼‰ï¼Œå¤±è´¥è¿”å›ž Noneã€‚Nr   )	ú-u   â€”z--ú/zN/AÚNAÚnullÚNoneu   æ— ú,u   ï¼Œ)õ   Â¥u   ï¿¥ú$ú u   ã€€g      ð?r]   g    „×—Ar   r\   g     ˆÃ@ú%r   )r\   r]   r_   )	Ústrr   Úreplacer   ÚrangeÚ
_NUM_UNITSr    ÚfloatÚ	Exception)ÚcellÚsÚchÚmultÚ_ÚuÚvs          r   Ú
_to_numberrv   y   s­  € à€|ØˆtÝˆD‰	Œ	�ŠÑÔ€AØˆB‚w€w�!ÐRÐRÐRØˆtØ	�	Š	�#�rÑÔ×"Ò" 5¨"Ñ-Ô-€AØ/ð ð ˆØ�IŠI�b˜"ÑÔˆˆØ€DØ‡z‚z�%ÑÔð ØˆØˆcˆrˆcŒFˆˆØ	
�Š�EÑ	Ô	ð ØˆØˆcˆrˆcŒFˆØ‡z‚z�#�„ð ØˆcˆrˆcŒFˆå�1‰XŒXð ð ˆÝð 	ð 	ˆAØ�zŠz˜!‰}Œ}ð  ¨.Ð!8Ð!8Ø�h�˜A™œ�w�h”K�Ø�øàˆEð ð 	ˆB‚w€w�!�s’(�(ØˆtðÝ�!‰HŒHˆˆøÝð ð ð Øˆtˆtðøøøàˆt‰8€Os   Ä;E Å
EÅEc                 ór   ‡— ˆfd„| D ¦   «         }d„ |D ¦   «         }|sdS t          d„ |D ¦   «         ¦  «        S )Nc                 óJ   •— g | ]}‰t          |¦  «        k     r|‰         nd ‘Œ S r*   r8   ©r	   rA   r   s     €r   r   z#_col_is_numeric.<locals>.<listcomp>ž   s/   ø€ Ð7Ð7Ð7¨Q�Q�˜Q™œ’Z�ZˆQˆqŒTˆT RÐ7Ð7Ð7r   c                 ó\   — g | ])}t          |¦  «                             ¦   «         d k    ¯'|‘Œ*S r*   ©ri   r   ©r	   ru   s     r   r   z#_col_is_numeric.<locals>.<listcomp>Ÿ   s0   € Ð9Ð9Ð9�q¥C¨¡F¤F§L¢L¡N¤N°bÒ$8Ð$8�Ð$8Ð$8Ð$8r   Fc              3   ó8   K  — | ]}t          |¦  «        d uV — Œd S r   )rv   r|   s     r   r   z"_col_is_numeric.<locals>.<genexpr>¢   s-   è è € Ð<Ð<¨Q�z˜!‰}Œ} DÐ(Ð<Ð<Ð<Ð<Ð<Ð<r   r.   )rF   r   ÚvalsÚ	non_emptys    `  r   Ú_col_is_numericr€   �   sY   ø€ Ø7Ð7Ð7Ð7°$Ð7Ñ7Ô7€DØ9Ð9˜DÐ9Ñ9Ô9€IØð ØˆuÝÐ<Ð<°)Ð<Ñ<Ô<Ñ<Ô<Ð<r   u   ^\s*\d{4}\s*å¹´?\s*$u]   ^\s*\d{1,2}\s*æœˆ\s*$|^\s*\d{4}\s*[-/å¹´]\s*\d{1,2}\s*æœˆ?\s*$|^\s*\d{4}\s*[-/]\s*\d{1,2}\s*$uV   ^\s*\d{4}\s*[-/]\s*\d{1,2}\s*[-/]\s*\d{1,2}\s*$|^\s*\d{1,2}\s*æœˆ\s*\d{1,2}\s*æ—¥?\s*$ug   ç¬¬\s*\d{1,2}\s*å‘¨|^\s*\d{4}\s*[-/]?\s*[Ww]\s*\d{1,2}\s*$|^\s*[Ww]\s*\d{1,2}\s*$|^\s*\d{1,2}\s*å‘¨\s*$uQ   ^\s*(\d{4}\s*å¹´?\s*)?[Qq]?[1-4]\s*å­£åº¦\s*$|^\s*(\d{4}\s*å¹´?\s*)?[Qq][1-4]\s*$c           
      óP  ‡— d„ | D ¦   «         }t          |¦  «        dk     rd S dt          fdt          fdt          fdt          fdt
          ffD ]X\  }Št          ˆfd„|D ¦   «         ¦  «        }|t          dt          t          |¦  «        d	z  d
z   ¦  «        ¦  «        k    r|c S ŒYd S )Nc                 óš   — g | ]H}t          |¦  «                             ¦   «         d k    ¯'t          |¦  «                             ¦   «         ‘ŒIS r*   r{   ©r	   Úxs     r   r   z%_time_series_kind.<locals>.<listcomp>®   s>   € ÐCÐCÐC˜q­c°!©f¬f¯lªl©n¬nÀÒ.BÐ.B�C�‰FŒF�LŠL‰NŒNÐ.BÐ.BÐ.Br   r   ÚdayÚweekÚmonthÚquarterÚyearc              3   óF   •K  — | ]}‰                      |¦  «        ¯d V — ŒdS )r   N)Úsearch)r	   r„   Úrxs     €r   r   z$_time_series_kind.<locals>.<genexpr>³   s2   øè è € Ð2Ð2˜ R§Y¢Y¨q¡\¤\Ð2�!Ð2Ð2Ð2Ð2Ð2Ð2r   r9   r:   )	r    Ú_DAYÚ_WEEKÚ_MONTHÚ_QUARTERÚ_YEARÚsumrJ   rK   )ÚlabelsÚlabsÚkindÚhitrŒ   s       @r   Ú_time_series_kindr—   ­   sÂ   ø€ ØCÐC FÐCÑCÔC€DÝ
ˆ4�y„y�1‚}€}ØˆtØ�T�] V­U O°g½vÐ5FØ¥Ð*¨VµU¨Oð=ð ð ‰ˆˆbåÐ2Ð2Ð2Ð2˜TÐ2Ñ2Ô2Ñ2Ô2ˆØ•#�a��S ™YœY¨™_¨uÑ4Ñ5Ô5Ñ6Ô6Ò6Ð6ØˆKˆKˆKð 7àˆ4r   c                 ó¼  — | pd                      ¦   «         }|sdS dD ]`\  }}||v rW||v rS|                     |¦  «        }|                     ||¦  «        }||k    r|d|…         ||dz   d…         z   }nn||v r||v °SŒadD ]R}|                     |¦  «        r;t          |¦  «        t          |¦  «        z
  dk    r|dt          |¦  «         …         }ŒSd}|r…d}d	D ]~}|                     |¦  «        rgt          |¦  «        t          |¦  «        z
  dk    rD|d
k    r$t          |¦  «        t          |¦  «        z
  dk     rŒd|dt          |¦  «         …         }d}Œ|°…|S )ub   å®¢æˆ·æ ¸å¿ƒè¯�å½’ä¸€ï¼ˆä¸Ž ai_chat._cust_core å�£å¾„ä¸€è‡´ï¼›æ­¤å¤„å†…è�”é�¿å…�å¾ªçŽ¯ä¾�èµ–ï¼‰ã€‚r   ))u   ï¼ˆu   ï¼‰)ú(ú)Nr   )u   è‚¡ä»½æœ‰é™�å…¬å�¸u   æœ‰é™�è´£ä»»å…¬å�¸u   æœ‰é™�å…¬å�¸u   å…¬å�¸u   é›†å›¢r   TF)
u   ç§‘æŠ€u   åŒ»ç–—u   åŒ»è�¯u   åŒ»å­¦u   æŠ€æœ¯u   åˆ¶è�¯u   å·¥ç¨‹u   è¯Šæ–­u   æ£€æµ‹õ   ç”Ÿç‰©r›   é   )r   Úfindr   r    )Únamerp   ÚlbÚrbrP   rQ   ÚsufÚchangeds           r   Ú_corer£   º   sž  € à	ˆ�×ÒÑÔ€AØð ØˆrØ.ð ð ‰ˆˆBØ�Aˆgˆg˜" ˜'˜'Ø—’�r‘
”
ˆAØ—’�r˜1‘”ˆAØ�1ŠuˆuØ�b�q�b”E˜A˜a !™e˜f˜fœIÑ%��àð �Aˆgˆg˜" ˜'˜'øð `ð ð ˆØ�:Š:�c‰?Œ?ð 	�s 1™vœv­¨C©¬Ñ0°AÒ5Ð5Ø�*•C˜‘H”H�9�*”ˆAøØ€GØ
ð ØˆØwð 	ð 	ˆCØ�zŠz˜#‰Œð ¥3 q¡6¤6­C°©H¬HÑ#4¸Ò#9Ð#9Ø˜(’?�?¥s¨1¡v¤vµ°C±´Ñ'8¸1Ò'<Ð'<ØØ�j�˜C™œ�y�j”M�Ø�øð ð ð €Hr   c                 ó¨   — |r|€| dfS g d}}| D ]@}t          |r|d         nd¦  «        }|r||v r
||vr|dz  }Œ+|                     |¦  «         ŒA||fS )u_   å�ªä¿�ç•™è¯¥ç”¨æˆ·å�¯è§�çš„è¡Œï¼šé¦–åˆ—å‘½ä¸­å®¢æˆ·å��ä¸”æ ¸å¿ƒè¯�ä¸�åœ¨å�¯è§�é›† â†’ ä¸¢å¼ƒã€‚Nr   r   r   )r£   rH   )rF   Ú	all_coresÚvisible_coresÚkeptÚdroppedrA   Úfirsts          r   Ú_perm_filter_rowsrª   Ö   s�   € àð ˜Ð-Ø�QˆwˆØ˜ˆ'€DØð ð ˆÝ˜aÐ'�a˜”d�d RÑ(Ô(ˆØð 	�U˜iÐ'Ð'¨E¸Ð,FÐ,FØ�q‰LˆGØØ�Š�A‰ŒˆˆØ�ˆ=Ðr   c                 óV   ‡— ˆfd„t          dt          | ¦  «        ¦  «        D ¦   «         S )Nc                 ó4   •— g | ]}t          ‰|¦  «        ¯|‘ŒS r   )r€   )r	   r   rF   s     €r   r   z _series_cols.<locals>.<listcomp>æ   s(   ø€ ÐJÐJÐJ�!µÀÀqÑ1IÔ1IÐJˆAÐJÐJÐJr   r   )rk   r    rD   s    `r   Ú_series_colsr­   å   s-   ø€ ØJÐJÐJÐJ•u˜Q¥ G¡¤Ñ-Ô-ÐJÑJÔJÐJr   c                 óÜ  — | pd                      d¦  «        }d}t          |¦  «        D ]$\  }}t          |¦  «        }||d         k    r|} nŒ%|€dS t          |dz
  t	          d|dz
  ¦  «        d¦  «        D ]t}||         pd                     ¦   «         }|rd	|v rŒ%t          j        d
d|¦  «        }t          j        dd|¦  «        }|                     d¦  «        }|sŒi|dd…         c S dS )u7   å�–è¡¨æ ¼ä¸Šæ–¹æœ€è¿‘çš„æ ‡é¢˜/æ­£æ–‡è¡Œä½œä¸ºå›¾é¢˜ã€‚r   r5   NrE   õ   æ•°æ�®æ±‡æ€»r   r   é   r   z
^#{1,6}\s*z^\*\*(.*?)\*\*$z\1u
   *#ï¼š: ã€€é(   )r   Ú	enumerater$   rk   rJ   r   r,   Úsub)	ÚanswerÚtablerN   ÚidxrP   Úlnr   r
   r"   s	            r   Ú_find_titler¸   é   s!  € àˆ\�r× Ò  Ñ&Ô&€EØ
€CÝ˜5Ñ!Ô!ð ð ‰ˆˆ2Ý�r‰NŒNˆØ��iÔ Ò Ð ØˆCØˆEð !ð €{Øˆ~Ý�3˜‘7�C  C¨!¡GÑ,Ô,¨bÑ1Ô1ð 	ð 	ˆØ�1ŒXˆ^˜×"Ò"Ñ$Ô$ˆØð 	�C˜1�H�HØÝŒF�= " aÑ(Ô(ˆÝŒFÐ% u¨aÑ0Ô0ˆØ�GŠG�OÑ$Ô$ˆØð 	ØØ��"�ŒvˆˆˆØˆ>r   c                 ó  ‡— t          | ¦  «        sdS t          |¦  «        }|sdS d}|D ]X}t          |d         ¦  «        dk    r=t          |d         ¦  «        dk    r$t          |d         |d         ¦  «        r|} n|€|}ŒY|€|d         }|d         }t	          |d         ||¦  «        \  }}	d„ |D ¦   «         }
t          ||¦  «        }t          |
¦  «        }|r|rd}nt          |¦  «        dk    rd	}n|rd
}nd}g }|D ],Š|                     |‰         ˆfd„|D ¦   «         dœ¦  «         Œ-|t          ||¦  «        d„ |
D ¦   «         |t          |¦  «        d„ |D ¦   «         dœ|r|d         nd|r|d         d         nd|	|pdddœ
}|S )uC   äº§å‡ºç¡®å®šæ€§å›¾è¡¨ç»“æž„ï¼›æ— æ„�å›¾/æ— å�¯è§£æž�è¡¨ â†’ Noneã€‚NrF   r   rE   r   c                 ó&   — g | ]}|r|d          nd‘ŒS )r   r   r   r@   s     r   r   zbuild_chart.<locals>.<listcomp>  s%   € Ð0Ð0Ð0 a�qÐ ˆq�Œtˆt˜bÐ0Ð0Ð0r   r!   r   ÚdonutÚbarrµ   c                 ód   •— g | ],}t          ‰t          |¦  «        k     r|‰         nd ¦  «        ‘Œ-S r*   )rv   r    ry   s     €r   r   zbuild_chart.<locals>.<listcomp>)  s7   ø€ ÐLÐLÐLÀ!•z¨!­c°!©f¬fª*¨* ! A¤$ $¸"Ñ=Ô=ÐLÐLÐLr   )rž   Úvaluesc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   ©ri   rƒ   s     r   r   zbuild_chart.<locals>.<listcomp>/  s   € Ð*Ð*Ð*˜a•3�q‘6”6Ð*Ð*Ð*r   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   r>   r@   s     r   r   zbuild_chart.<locals>.<listcomp>1  s   € Ð4KÐ4KÐ4KÀµT¸!±W´WÐ4KÐ4KÐ4Kr   rD   r   rž   Úanswer_markdown_table)
ÚtypeÚtitler“   Úseriesrµ   Úx_titleÚy_titleÚdropped_rowsÚ	time_kindÚsource)	r   rV   r    r­   rª   r—   rH   r¸   r?   )r   r´   r¥   r¦   rM   Úchosenr"   rE   rF   r¨   r“   Úsercolsr•   ÚctyperÅ   Úpayloadr   s                   @r   Úbuild_chartrÏ     s'  ø€ å˜HÑ%Ô%ð ØˆtÝ˜VÑ$Ô$€FØð Øˆtð €FØð ð ˆÝˆq�Œy‰>Œ>˜QÒÐ¥3 q¨¤|Ñ#4Ô#4¸Ò#9Ð#9Ý˜A˜iœL¨!¨F¬)Ñ4Ô4ð Ø�Ø�Øˆ~Ø�øØ€~Ø˜”ˆà�YÔ€GÝ% f¨V¤n°iÀÑOÔO�M€Dˆ'à0Ð0¨4Ð0Ñ0Ô0€FÝ˜7 DÑ)Ô)€GÝ˜VÑ$Ô$€Dàð �4ð ØˆˆÝ	ˆW‰Œ˜Ò	Ð	ØˆˆØ	ð Øˆˆàˆà€FØð ð ˆØ�ŠØ˜A”JØLÐLÐLÐLÀtÐLÑLÔLð
ð 
ñ 	ô 	ð 	ð 	ð Ý˜V VÑ,Ô,Ø*Ð* 6Ð*Ñ*Ô*ØÝ! '™]œ]Ð4KÐ4KÀdÐ4KÑ4KÔ4KÐLÐLØ!(Ð0�7˜1”:�:¨bØ(.Ð6�6˜!”9˜VÔ$Ð$°BØØ�Z˜RØ)ðð €Gð €Nr   c                 ón   — t          j        dd| pd¦  «                             ¦   «         pd}|d d…         S )Nz[\\/:*?"<>|\r\n\t]+rs   r¯   é<   )r,   r³   r   )rž   rp   s     r   Ú_safe_filenamerÒ   <  s:   € Ý
ŒÐ% s¨TÐ-C°^ÑEÔE×KÒKÑMÔMÐ_ÐQ_€AØˆSˆbˆSŒ6€Mr   c                 óè  — d„ |pg D ¦   «         }|pg }t          | pd¦  «        dd…         pd}	 ddl}ddlm}m}m} |                     ¦   «         }|j        }	||	_        |	 	                    |¦  «         t          dt          |¦  «        dz   ¦  «        D ]O}
|	                     d|
¬¦  «        } |d	d
¬¦  «        |_         |dd¬¦  «        |_         |dd¬¦  «        |_        ŒP|D ]c}g }t!          |¦  «        D ]:\  }}t#          |¦  «        }| 	                    |�|nt%          |¦  «        ¦  «         Œ;|	 	                    |¦  «         Œdt          dt          |¦  «        dz   ¦  «        D ],}
d|	j        |j                             |
¦  «                 _        Œ-t/          j        ¦   «         }|                     |¦  «         |                     ¦   «         S # t6          $ r t9          |||¦  «        cY S w xY w)u\   ç”Ÿæˆ�çœŸ .xlsx å­—èŠ‚æµ�ã€‚é¦–è¡Œ == è¡¨å¤´ï¼Œè¡Œæ•° == len(rows)+1ï¼ˆä¾›éªŒæ”¶æ ¸å¯¹ï¼‰ã€‚c                 ó,   — g | ]}t          |¦  «        ‘ŒS r   rÀ   )r	   rW   s     r   r   zbuild_xlsx.<locals>.<listcomp>C  s   € Ð/Ð/Ð/˜!�s�1‰vŒvÐ/Ð/Ð/r   r¯   Né   r   )ÚFontÚPatternFillÚ	Alignmentr   )ÚrowÚcolumnTÚFFFFFF)ÚboldÚcolorÚsolidÚ1A56DB)ÚfgColorÚcenter)Ú
horizontalÚverticalé   )rÒ   ÚopenpyxlÚopenpyxl.stylesrÖ   r×   rØ   ÚWorkbookÚactiverÄ   rH   rk   r    ro   ÚfontÚfillÚ	alignmentr²   rv   ri   Úcolumn_dimensionsÚutilsÚget_column_letterÚwidthÚioÚBytesIOÚsaveÚgetvaluern   Ú_build_xlsx_minimal)rÄ   rE   rF   Úsheetrå   rÖ   r×   rØ   ÚwbÚwsr   ro   rA   ÚoutrP   ru   ÚnumÚbufs                     r   Ú
build_xlsxrû   A  s.  € à/Ð/  ¨2Ð/Ñ/Ô/€GØˆ:�2€DÝ˜5Ð2 NÑ3Ô3°C°R°CÔ8ÐJ¸N€Eð9ØˆˆˆØ@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø×ÒÑ Ô ˆØŒYˆØˆŒØ
�	Š	�'ÑÔÐÝ�q�#˜g™,œ,¨Ñ*Ñ+Ô+ð 	Oð 	OˆAØ—7’7˜q¨�7Ñ+Ô+ˆDØ˜ $¨hÐ7Ñ7Ô7ˆDŒIØ#˜ G°XÐ>Ñ>Ô>ˆDŒIØ&˜Y°(ÀXÐNÑNÔNˆDŒNˆNØð 	ð 	ˆAØˆCÝ! !™œð ?ð ?‘��1Ý  ‘m”m�Ø—
’
 # /˜3˜3µs¸1±v´vÑ>Ô>Ð>Ð>Ø�IŠI�c‰NŒNˆNˆNÝ�q�#˜g™,œ,¨Ñ*Ñ+Ô+ð 	Qð 	QˆAØNPˆBÔ  ¤×!AÒ!AÀ!Ñ!DÔ!DÔEÔKÐKÝŒj‰lŒlˆØ
�Š�‰ŒˆØ�|Š|‰~Œ~ÐøÝð 9ð 9ð 9Ý" 7¨D°%Ñ8Ô8Ð8Ð8Ð8ð9øøøs   ¯F#G ÇG1Ç0G1c                 óÀ   — t          | ¦  «                             dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «        S )	Nú&z&amp;ú<z&lt;ú>z&gt;ú"z&quot;)ri   rj   )rp   s    r   Ú_xml_escr  a  sM   € Ý�‰FŒF�NŠN˜3 Ñ(Ô(×0Ò0°°fÑ=Ô=×EÒEÀcÈ6ÑRÔRßŠW�S˜(Ñ#Ô#ð%r   c                 óx   — d}| dk    r1t          | dz
  d¦  «        \  } }t          d|z   ¦  «        |z   }| dk    °1|S )Nr   r   r   é   éA   )ÚdivmodÚchr)rO   rp   rA   s      r   Ú_col_letterr  f  sL   € Ø
€AØ
ˆaŠ%ˆ%Ý�a˜!‘e˜RÑ Ô ‰ˆˆ1Ý��Q‘‰KŒK˜!‰Oˆð ˆaŠ%ˆ%ð €Hr   c                 ó–  ‡— d„ Šˆfd„} |d| ¦  «        g}t          |¦  «        D ]'\  }}|                      ||dz   |¦  «        ¦  «         Œ(dd                     |¦  «        z  }d}d}	d	t          |¦  «        z  }
d
}t	          j        ¦   «         }t          j        |dt          j        ¦  «        5 }| 	                    d|¦  «         | 	                    d|	¦  «         | 	                    d|
¦  «         | 	                    d|¦  «         | 	                    d|¦  «         ddd¦  «         n# 1 swxY w Y   | 
                    ¦   «         S )uK   æ—  openpyxl æ—¶çš„å…œåº•ï¼šæ‰‹å†™æœ€å°� OOXMLï¼ˆä»… inlineStr/æ•°å€¼ï¼‰ã€‚c                 óª   — t          |¦  «        }|�-d| ›dt          |t          ¦  «        rt          |¦  «        n|›d�S d| ›dt	          |¦  «        ›d�S )Nz<c r="z"><v>z</v></c>z," t="inlineStr"><is><t xml:space="preserve">z</t></is></c>)rv   Ú
isinstancerm   Úreprr  )ÚrefÚvalrù   s      r   Úcell_xmlz%_build_xlsx_minimal.<locals>.cell_xmlp  sj   € Ý˜‰oŒoˆØˆ?ˆ?Ø03°°Å*ÈSÕRWÑBXÔBXÐ5aµT¸#±Y´Y°YÐ^aÐ5aÐ5aÐbÐbð àX[ÐX[ÐX[Õ]eÐfiÑ]jÔ]jÐ]jÐ]jÐkÐkr   c                 ór   •‡ — d                      ˆˆ fd„t          |¦  «        D ¦   «         ¦  «        }d‰ |fz  S )Nr   c              3   ó`   •K  — | ](\  }} ‰d t          |dz   ¦  «        ‰fz  |¦  «        V — Œ)dS )z%s%dr   N)r  )r	   rP   ru   r  Úridxs      €€r   r   z7_build_xlsx_minimal.<locals>.row_xml.<locals>.<genexpr>w  sJ   øè è € ÐeÐeÉTÈQÐPQ˜˜ ­;°q¸1±uÑ+=Ô+=¸tÐ*DÑ!DÀaÑHÔHÐeÐeÐeÐeÐeÐer   z<row r="%d">%s</row>)Újoinr²   )r  r~   r#   r  s   `  €r   Úrow_xmlz$_build_xlsx_minimal.<locals>.row_xmlv  sF   øø€ Ø—’ÐeÐeÐeÐeÐeÕU^Ð_cÑUdÔUdÐeÑeÔeÑeÔeˆØ%¨¨u¨Ñ5Ð5r   r   r   z©<?xml version="1.0" encoding="UTF-8" standalone="yes"?><worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><sheetData>%s</sheetData></worksheet>r   a-  <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/></Types>a'  <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/></Relationships>a  <?xml version="1.0" encoding="UTF-8" standalone="yes"?><workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><sheets><sheet name="%s" sheetId="1" r:id="rId1"/></sheets></workbook>a(  <?xml version="1.0" encoding="UTF-8" standalone="yes"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/></Relationships>Úwz[Content_Types].xmlz_rels/.relszxl/workbook.xmlzxl/_rels/workbook.xml.relszxl/worksheets/sheet1.xmlN)r²   rH   r  r  rð   rñ   ÚzipfileÚZipFileÚZIP_DEFLATEDÚwritestrró   )rE   rF   rõ   r  Ú
sheet_rowsrP   rA   Ú	sheet_xmlÚctÚrelsrö   Úwbrelsrú   Úzr  s                 @r   rô   rô   n  sÁ  ø€ ðlð lð lð6ð 6ð 6ð 6ð 6ð �'˜!˜WÑ%Ô%Ð&€JÝ˜$‘”ð -ð -‰ˆˆ1Ø×Ò˜'˜' ! a¡%¨Ñ+Ô+Ñ,Ô,Ð,Ð,ð9à;=¿7º7À:Ñ;NÔ;NñO€Ið€Bð€DðSõ V^Ð^cÑUdÔUdñe€Bð!€Fõ Œ*‰,Œ,€CÝ	Œ˜˜c¥7Ô#7Ñ	8Ô	8ð :¸AØ	�
Š
Ð(¨"Ñ-Ô-Ð-Ø	�
Š
�= $Ñ'Ô'Ð'Ø	�
Š
Ð$ bÑ)Ô)Ð)Ø	�
Š
Ð/°Ñ8Ô8Ð8Ø	�
Š
Ð-¨yÑ9Ô9Ð9ð:ð :ð :ñ :ô :ð :ð :ð :ð :ð :ð :øøøð :ð :ð :ð :ð �<Š<‰>Œ>Ðs   Â1A/D,Ä,D0Ä3D0c                 óŽ   — t           j                              ¦   «                              d¦  «        }t          | ¦  «        ›d|›d�S )Nz%Y%m%drs   z.xlsx)ÚdatetimeÚnowÚstrftimerÒ   )rÄ   Úds     r   Úexport_filenamer$  �  sA   € ÝÔ×ÒÑÔ×(Ò(¨Ñ2Ô2€AÝ)¨%Ñ0Ô0Ð0Ð0°!°!°!Ð4Ð4r   )NN)"Ú__doc__rð   Úosr,   r   r  r   r   r$   r'   r&   r2   rV   rl   rv   r€   Úcompiler‘   r�   r�   rŽ   r�   r—   r£   rª   r­   r¸   rÏ   rÒ   rû   r  r  rô   r$  r   r   r   ú<module>r(     s÷  ððð ð 
€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€ð
ð ð Ð ð6ð 6ð 6ðð ð ð ð  ð  ð<ð <ð <ð"ð "ð "ð%ð %ð %ðRL€
ð!ð !ð !ðH=ð =ð =ð 	ˆŒ
Ð*Ñ+Ô+€Ø	ˆŒÐtÑ	uÔ	u€Ø€r„zÐkÑlÔl€ØˆŒ
Ð}Ñ~Ô~€Øˆ2Œ:ÐjÑkÔk€ð	ð 	ð 	ðð ð ð8ð ð ðKð Kð Kðð ð ð07ð 7ð 7ð 7ðvð ð ð
9ð 9ð 9ð@%ð %ð %ð
ð ð ð,ð ,ð ,ð^5ð 5ð 5ð 5ð 5r   