ó
    –VèhW8  ã                   ó  • S r SSKrSSKJs  Jr  SSKrSSKJr  SSK	J
r
  SSKJrJrJr  SSKrSSKJrJrJrJr   " S S5      r " S	 S
5      r " S S5      r " S S5      r " S S5      r " S S5      r " S S5      rg)z<Tests for table inference processor (non-LLM functionality).é    N)Údatetime)ÚPath)Ú	MagicMockÚ	mock_openÚpatch)ÚExecutiveSummaryÚTableContextÚTableInferenceProcessorÚ	TableInfoc                   ó$   • \ rS rSrSrS rS rSrg)ÚTestTableContexté   zTests for TableContext model.c                 óä  • [        SSSS/SSSSS	S
9nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nSS/o2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nS	o2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCg)z&Test creating a TableContext instance.zTest summaryz
Test TableÚHeader1ÚHeader2zTable descriptionz| A | B |
|---|---|
| 1 | 2 |zSome text beforezPage contexté   )Úexecutive_summaryÚprocedural_titleÚheadersÚdescriptive_textÚtable_previewÚpreceding_textÚpage_contextÚpage_number©ú==)z9%(py2)s
{%(py2)s = %(py0)s.executive_summary
} == %(py5)sÚcontext©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7N)z8%(py2)s
{%(py2)s = %(py0)s.procedural_title
} == %(py5)s)z/%(py2)s
{%(py2)s = %(py0)s.headers
} == %(py5)s)z3%(py2)s
{%(py2)s = %(py0)s.page_number
} == %(py5)s)r	   r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationr   r   r   ©Úselfr   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s          Ú3/workspace/tests/processors/test_table_inference.pyÚtest_table_context_creationÚ,TestTableContext.test_table_context_creation   sú  € äØ,Ø)Ø 	Ð*Ø0Ø;Ø-Ø'Øñ	
ˆð ×(Ñ(Ð:¨NÐ:¨NÑ:×:×:×:Ò:Ð(×:×:×:×:×:Õ:ˆw×:×:×:Ñ:ˆw×:×:Õ:Ð(×:×:Ó:¨N×:×:×:×:×:×:Ó:Ø×'Ñ'Ð7¨<Ð7¨<Ñ7×7×7×7Ò7Ð'×7×7×7×7×7Õ7ˆw×7×7×7Ñ7ˆw×7×7Õ7Ð'×7×7Ó7¨<×7×7×7×7×7×7Ó7Ø�‰Ð8 9¨iÐ"8Ð8Ð"8Ñ8×8×8×8Ò8ˆ×8×8×8×8×8Õ8ˆw×8×8×8Ñ8ˆw×8×8Õ8ˆ×8×8Ó8Ð"8×8×8×8×8×8×8Ó8Ø×"Ñ"Ð' aÐ' aÑ'×'×'×'Ò'Ð"×'×'×'×'×'Õ'ˆw×'×'×'Ñ'ˆw×'×'Õ'Ð"×'×'Ó' a×'×'×'×'×'×'Ô'ó    c                 ó"  • [        SS/ SSS9nUR                  nSo2UL oD(       dº  [        R                  " SU4SX#45      S	[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nSo2UL oD(       dº  [        R                  " SU4SX#45      S	[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCUR                  nSo2UL oD(       dº  [        R                  " SU4SX#45      S	[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pCg)z/Test TableContext with optional fields as None.ÚSummaryÚTitleÚPreviewr   ©r   r   r   r   r   N©Úis)z8%(py2)s
{%(py2)s = %(py0)s.descriptive_text
} is %(py5)sr   r   r"   r#   )z6%(py2)s
{%(py2)s = %(py0)s.preceding_text
} is %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.page_context
} is %(py5)s)r	   r   r$   r%   r&   r'   r(   r)   r*   r+   r   r   r,   s          r3   Ú"test_table_context_optional_fieldsÚ3TestTableContext.test_table_context_optional_fields'   sv  € äØ'Ø$ØØ#Øñ
ˆð ×'Ñ'Ð/¨4Ð/¨4Ð/×/×/×/Ò/Ð'×/×/×/×/×/Õ/ˆw×/×/×/Ñ/ˆw×/×/Õ/Ð'×/×/Ó/¨4×/×/×/×/×/×/Ó/Ø×%Ñ%Ð-¨Ð-¨Ð-×-×-×-Ò-Ð%×-×-×-×-×-Õ-ˆw×-×-×-Ñ-ˆw×-×-Õ-Ð%×-×-Ó-¨×-×-×-×-×-×-Ó-Ø×#Ñ#Ð+ tÐ+ tÐ+×+×+×+Ò+Ð#×+×+×+×+×+Õ+ˆw×+×+×+Ñ+ˆw×+×+Õ+Ð#×+×+Ó+ t×+×+×+×+×+×+Ô+r6   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r4   r>   Ú__static_attributes__r@   r6   r3   r   r      s   † Ù'ò(õ$,r6   r   c                   ó   • \ rS rSrSrS rSrg)ÚTestTableInfoé6   zTests for TableInfo model.c                 ót  • [        SSS9nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=pCg
)z#Test creating a TableInfo instance.úFinancial DatazQuarterly revenue breakdown)ÚtitleÚdescriptionr   )z-%(py2)s
{%(py2)s = %(py0)s.title
} == %(py5)sÚinfor   r"   r#   N)z3%(py2)s
{%(py2)s = %(py0)s.description
} == %(py5)s)r   rL   r$   r%   r&   r'   r(   r)   r*   r+   rM   )r-   rN   r.   r/   r0   r1   r2   s          r3   Útest_table_info_creationÚ&TestTableInfo.test_table_info_creation9   sø   € äÐ/Ð=ZÑ[ˆà�z‰zÐ-Ð-Ð-Ð-Ñ-×-×-×-Ò-ˆz×-×-×-×-×-Õ-ˆt×-×-×-Ñ-ˆt×-×-Õ-ˆz×-×-Ó-Ð-×-×-×-×-×-×-Ó-Ø×ÑÐ@Ð#@Ð@Ð#@Ñ@×@×@×@Ò@Ð×@×@×@×@×@Õ@ˆt×@×@×@Ñ@ˆt×@×@Õ@Ð×@×@Ó@Ð#@×@×@×@×@×@×@Ô@r6   r@   N)rA   rB   rC   rD   rE   rO   rF   r@   r6   r3   rH   rH   6   s   † Ù$õAr6   rH   c                   ó   • \ rS rSrSrS rSrg)ÚTestExecutiveSummaryéA   z!Tests for ExecutiveSummary model.c                 óÄ  • [        SS9nUR                  nSo2U:H  oD(       dº  [        R                  " SU4SX#45      S[        R
                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCg	)
z+Test creating an ExecutiveSummary instance.z'This is a test summary of the document.)Úsummaryr   )z/%(py2)s
{%(py2)s = %(py0)s.summary
} == %(py5)srU   r   r"   r#   N)
r   rU   r$   r%   r&   r'   r(   r)   r*   r+   )r-   rU   r.   r/   r0   r1   r2   s          r3   Útest_executive_summary_creationÚ4TestExecutiveSummary.test_executive_summary_creationD   s   € ä"Ð+TÑUˆà�‰ÐKÐ"KÐKÐ"KÑK×K×K×KÒKˆ×K×K×K×K×KÕKˆw×K×K×KÑKˆw×K×KÕKˆ×K×KÓKÐ"K×K×K×K×K×K×KÔKr6   r@   N)rA   rB   rC   rD   rE   rV   rF   r@   r6   r3   rR   rR   A   s   † Ù+õLr6   rR   c                   ó¾   • \ rS rSrSr\" S5      \" S5      \" S5      \" S5      S 5       5       5       5       r\" S5      \" S5      \" S5      S 5       5       5       rS	rg
)ÚTestTableInferenceProcessorInitéK   z1Tests for TableInferenceProcessor initialization.ú.quber.processors.table_inference.setup_loggingú,quber.processors.table_inference.load_promptú-quber.processors.table_inference.AgentFactoryú'quber.processors.table_inference.Configc                 óD  • [        5       nSUl        SUl        XQR                  l        SUl        [        5       nXbl        [        5       nUR                  oˆU:H  o™(       dð  [        R                  " SU	4SX…45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  n
S	S
U
0-  n[        [        R                  " U5      5      eS=p‰UR                  nSoÈUL o™(       dº  [        R                  " SU	4SXŒ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pœUR                   nSoÈUL o™(       dº  [        R                  " SU	4SXŒ45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=pœUR#                  5         UR%                  SS5        g)z,Test initialization with default parameters.FÚINFOúSystem promptr   ©z.%(py2)s
{%(py2)s = %(py0)s.config
} == %(py4)sÚ	processorÚmock_config©r   r    Úpy4úassert %(py6)sÚpy6Nr<   )z0%(py2)s
{%(py2)s = %(py0)s.provider
} is %(py5)sr   r"   r#   )z-%(py2)s
{%(py2)s = %(py0)s.model
} is %(py5)sÚtable_inferenceÚsystem)r   Úenable_logfireÚ	log_levelÚloadÚreturn_valuer
   Úconfigr$   r%   r&   r'   r(   r)   r*   r+   ÚproviderÚmodelÚassert_called_onceÚassert_called_once_with)r-   Úmock_config_classÚmock_agent_factoryÚmock_load_promptÚmock_setup_loggingrd   Úmock_factoryrc   r.   r0   Ú@py_format5Ú@py_format7r/   r1   r2   s                  r3   Útest_init_with_defaultsÚ7TestTableInferenceProcessorInit.test_init_with_defaultsN   sÉ  € ô  “kˆØ%*ˆÔ"Ø &ˆÔØ.9×ÑÔ+à(7ÐÔ%ä “{ˆØ*6Ô'ä+Ó-ˆ	à×ÑÐ. ;Ñ.×.×.×.Ò.Ð×.×.×.×.×.Õ.ˆy×.×.×.Ñ.ˆy×.×.Õ.Ð×.×.×.×.×.Ô. ;×.×.×.Ñ. ;×.×.×.×.×.×.Ó.Ø×!Ñ!Ð) TÐ) TÐ)×)×)×)Ò)Ð!×)×)×)×)×)Õ)ˆy×)×)×)Ñ)ˆy×)×)Õ)Ð!×)×)Ó) T×)×)×)×)×)×)Ó)Ø�‰Ð& $Ð& $Ð&×&×&×&Ò&ˆ×&×&×&×&×&Õ&ˆy×&×&×&Ñ&ˆy×&×&Õ&ˆ×&×&Ó& $×&×&×&×&×&×&Ó&Ø×-Ñ-Ô/Ø×0Ñ0Ð1BÀHÕMr6   c                 ó°  • SSK Jn  [        5       nSUl        SUl        SUl        [        5       nXal        [        UR                  SUS9nUR                  o„R                  o˜U	:H  oª(       Gd  [        R                  " SU
4S	X‰45      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U	5      S.-  nSSU0-  n[        [        R                   " U5      5      eS=n=p©UR"                  nSoØU:H  oª(       dº  [        R                  " SU
4SX�45      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                   " U5      5      eS=n=p­UR$                  oˆU:H  oª(       dð  [        R                  " SU
4SX…45      S
[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS
[        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                   " U5      5      eS=pŠg)z+Test initialization with custom parameters.r   )ÚModelProviderTÚDEBUGra   úclaude-3-5-sonnet-20241022)rp   rq   ro   r   )zO%(py2)s
{%(py2)s = %(py0)s.provider
} == %(py6)s
{%(py6)s = %(py4)s.ANTHROPIC
}rc   r~   )r   r    rf   rh   úassert %(py8)sÚpy8N)z-%(py2)s
{%(py2)s = %(py0)s.model
} == %(py5)sr   r"   r#   rb   rd   re   rg   rh   )Úquber.agents.factoryr~   r   rk   rl   rn   r
   Ú	ANTHROPICrp   r$   r%   r&   r'   r(   r)   r*   r+   rq   ro   )r-   ru   rv   rw   r~   rd   rx   rc   r.   Ú@py_assert5r0   rz   Ú@py_format9r/   r1   r2   ry   s                    r3   Ú test_init_with_custom_parametersÚ@TestTableInferenceProcessorInit.test_init_with_custom_parametersf   sá  € õ
 	7ä“kˆØ%)ˆÔ"Ø 'ˆÔà(7ÐÔ%Ü “{ˆØ*6Ô'ä+Ø"×,Ñ,Ð4PÐYdñ
ˆ	ð ×!Ñ!Ð<×%<Ñ%<Ð<Ð%<Ñ<×<×<×<Ó<Ð!×<×<×<×<×<Õ<ˆy×<×<×<Ñ<ˆy×<×<Õ<Ð!×<×<×<×<×<Ô< ]×<×<×<Ñ< ]×<×<Õ<Ð%<×<×<×<×<×<×<Ó<Ø�‰Ð>Ð">Ð>Ð">Ñ>×>×>×>Ò>ˆ×>×>×>×>×>Õ>ˆy×>×>×>Ñ>ˆy×>×>Õ>ˆ×>×>Ó>Ð">×>×>×>×>×>×>Ó>Ø×ÑÐ. ;Ñ.×.×.×.Ò.Ð×.×.×.×.×.Õ.ˆy×.×.×.Ñ.ˆy×.×.Õ.Ð×.×.×.×.×.Ô. ;×.×.×.Ñ. ;×.×.×.×.×.×.Ô.r6   r@   N)	rA   rB   rC   rD   rE   r   r{   r‡   rF   r@   r6   r3   rY   rY   K   s   † Ù;á
Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñNó 6ó <ó ;ó =ðNñ( Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;ñ/ó <ó ;ó =ó/r6   rY   c                   ó2  • \ rS rSrSr\" S5      \" S5      \" S5      \" S5      S 5       5       5       5       r\" S5      \" S5      \" S5      \" S5      S 5       5       5       5       r\" S5      \" S5      \" S5      \" S5      S	 5       5       5       5       rS
r	g)Ú"TestTableInferenceProcessorHelpersé~   zTests for helper methods.r[   r\   r]   r^   c                 ó¾  • [        5       nSUl        SUl        XQR                  l        SUl        [        5       n[        SSSS/SS	S
9nUR                  U5      nSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS=pšSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS=pšSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS=pšSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS=pšSo™U;   oª(       d¥  [        R                  " SU
4SX˜45      [        R                  " U	5      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSSU0-  n[        [        R                  " U5      5      eS=pšg)zTest _format_prompt method.Fr`   ra   zDocument summaryúTable 1ÚCol1ÚCol2ú| A | B |
| 1 | 2 |r   r;   ©Úin©z%(py1)s in %(py3)sÚprompt©Úpy1Úpy3úassert %(py5)sr!   Nz
Col1, Col2zpage 1z	| A | B |)r   rk   rl   rm   rn   r
   r	   Ú_format_promptr$   r%   r)   r&   r'   r(   r*   r+   )r-   rt   ru   rv   rw   rd   rc   r   r”   Ú@py_assert0Ú@py_assert2Ú@py_format4r1   s                r3   Útest_format_promptÚ5TestTableInferenceProcessorHelpers.test_format_prompt�   s1  € ô  “kˆØ%*ˆÔ"Ø &ˆÔØ.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	äØ0Ø&Ø˜VÐ$Ø0Øñ
ˆð ×)Ñ)¨'Ó2ˆà!Ð+ VÑ+×+×+×+Ò+Ð!×+×+Ô+Ð!×+×+×+×+×+Ô+ V×+×+×+Ñ+ V×+×+×+×+×+×+Ó+ØÐ"˜FÑ"×"×"×"Ò"ˆy×"×"Ô"ˆy×"×"×"×"×"Ô"˜F×"×"×"Ñ"˜F×"×"×"×"×"×"Ó"ØÐ%˜vÑ%×%×%×%Ò%ˆ|×%×%Ô%ˆ|×%×%×%×%×%Ô%˜v×%×%×%Ñ%˜v×%×%×%×%×%×%Ó%ØÐ!˜6Ñ!×!×!×!Ò!ˆx×!×!Ô!ˆx×!×!×!×!×!Ô!˜6×!×!×!Ñ!˜6×!×!×!×!×!×!Ó!ØÐ$˜fÑ$×$×$×$Ò$ˆ{×$×$Ô$ˆ{×$×$×$×$×$Ô$˜f×$×$×$Ñ$˜f×$×$×$×$×$×$Ô$r6   c                 ó  • [        5       nSUl        XQR                  l        SUl        [	        5       nSnUR                  USS9nUR                  S5      n	[        U	5      n
SoºU:*  oÌ(       Gd  [        R                  " SU4S	X«45      S
[        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS
S[        R                  " 5       ;   d  [        R                  " U	5      (       a  [        R                  " U	5      OS[        R                  " U
5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n
=pËg)zTest _get_table_preview method.Fra   z5| A | B |
| --- | --- |
| 1 | 2 |
| 3 | 4 |
| 5 | 6 |é   )Úmax_rowsÚ
é   )ú<=)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)sÚlenÚlines)r   r–   r—   rh   r�   r‚   N)r   rk   rm   rn   r
   Ú_get_table_previewÚsplitr¥   r$   r%   r&   r'   r(   r)   r*   r+   )r-   rt   ru   rv   rw   rd   rc   ÚmarkdownÚpreviewr¦   r›   r…   r/   rz   r†   s                  r3   Útest_get_table_previewÚ9TestTableInferenceProcessorHelpers.test_get_table_previewŸ   sê   € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	àNˆØ×.Ñ.¨xÀ!Ð.ÐDˆð —‘˜dÓ#ˆÜ�5‹zÐ˜QÐ˜Q‰×××Óˆz×××××ÕŒs×××ÑŒs×××××Ö�5×××Ñ�5××Õˆz××Ó˜Q××××××Ôr6   c                 ó|  • [        5       nSUl        XQR                  l        SUl        [	        5       nUR                  S5      nSo‡U:H  o™(       d¥  [        R                  " SU	4SXx45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n
S	S
U
0-  n[        [        R                  " U5      5      eS=p˜UR                  S5      nSo‡U:H  o™(       d¥  [        R                  " SU	4SXx45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U5      S.-  n
S	S
U
0-  n[        [        R                  " U5      5      eS=p˜g)z,Test _get_table_preview with empty markdown.Fra   NzNo table content availabler   ©z%(py0)s == %(py3)srª   ©r   r—   r˜   r!   Ú )r   rk   rm   rn   r
   r§   r$   r%   r&   r'   r(   r)   r*   r+   )r-   rt   ru   rv   rw   rd   rc   rª   r›   r.   rœ   r1   s               r3   Útest_get_table_preview_emptyÚ?TestTableInferenceProcessorHelpers.test_get_table_preview_empty³   s
  € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	à×.Ñ.¨tÓ4ˆØ6Ð6Ð6Ñ6×6×6×6Ò6ˆw×6×6×6×6×6Õ6ˆw×6×6×6Ñ6ˆw×6×6Õ6Ð6×6×6×6×6×6×6Ñ6à×.Ñ.¨rÓ2ˆØ6Ð6Ð6Ñ6×6×6×6Ò6ˆw×6×6×6×6×6Õ6ˆw×6×6×6Ñ6ˆw×6×6Õ6Ð6×6×6×6×6×6×6Ò6r6   r@   N)
rA   rB   rC   rD   rE   r   r�   r«   r±   rF   r@   r6   r3   rŠ   rŠ   ~   sÏ   † Ù#á
Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñ%ó 6ó <ó ;ó =ð%ñ4 Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñó 6ó <ó ;ó =ðñ  Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñ7ó 6ó <ó ;ó =ó7r6   rŠ   c            	       ón  • \ rS rSrSr\" S5      \" S5      \" S5      \" S5      \" S\S9S	 5       5       5       5       5       r\" S5      \" S5      \" S5      \" S5      \" S\S9S
 5       5       5       5       5       r\" S5      \" S5      \" S5      \" S5      \" S\S9S 5       5       5       5       5       r	Sr
g)Ú&TestTableInferenceProcessorSaveMethodséÇ   zTests for save methods.r[   r\   r]   r^   zbuiltins.open)Únew_callablec                 ój  • [        5       nSUl        XbR                  l        SUl        [	        5       nSSS.nUR                  US5        UR                  SSSS	9  U" 5       n	S
R                  S U	R                  R                   5       5      n
/ nSoÌU
;   oÝoí(       d  U	R                  oÿR                  nUnU(       Gdj  [        R                  " SU4SXÊ45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                   " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  nUR#                  U5        U(       dŒ  SS[        R                  " 5       ;   d  [        R                   " U	5      (       a  [        R                  " U	5      OS[        R                  " W5      [        R                  " W5      S.-  nUR#                  U5        [        R$                  " US5      0 -  nSSU0-  n['        [        R(                  " U5      5      eS=n=n=n=n=nng)zTest save_json method.Fra   útest.pdfr    )ÚdocumentÚtotal_tablesz/output/test.jsonÚwúutf-8©Úencodingr°   c              3   ó>   #   • U  H  oR                   S    v •  M     g7f)r   N)Úargs)Ú.0Úcalls     r3   Ú	<genexpr>ÚHTestTableInferenceProcessorSaveMethods.test_save_json.<locals>.<genexpr>Þ   s   é € Ð!WÒ;V°4§)¡)¨A¦,Ò;Vùs   ‚r‘   ©z%(py3)s in %(py5)sÚwritten_content©r—   r!   ú%(py7)sr#   zB%(py13)s
{%(py13)s = %(py11)s
{%(py11)s = %(py9)s.write
}.called
}Úhandle)Úpy9Úpy11Úpy13r   zassert %(py16)sÚpy16N)r   rk   rm   rn   r
   Ú	save_jsonrs   ÚjoinÚwriteÚcall_args_listÚcalledr$   r%   r)   r&   r'   r(   ÚappendÚ_format_boolopr*   r+   )r-   Ú	mock_filert   ru   rv   rw   rd   rc   ÚdatarÉ   rÆ   r.   r›   r/   rš   Ú@py_assert10Ú@py_assert12r1   r2   Ú@py_format14Ú@py_format15Ú@py_format17s                         r3   Útest_save_jsonÚ5TestTableInferenceProcessorSaveMethods.test_save_jsonÊ   sU  € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	à&¸Ñ:ˆØ×Ñ˜DÐ"5Ô6à×)Ñ)Ð*=¸sÈWÐ)ÑUá“ˆØŸ'™'Ñ!W¸6¿<¹<×;VÒ;VÓ!WÓWˆáCˆzÐC˜_Ñ,×C°·±ÐC×0CÑ0CÐCÐ0C×C×C×CÔCˆz×C×CÔCˆz×C×C×C×C×CÔC˜_×C×C×CÑC˜_×C×C×C×C×C×C×C×C×C×CÓC°×C×C×CÑC°×C×CÕC°×C×CÓCÐ0C×C×C×C×C×C×C×C×C×C×C×C×CÖCr6   c                 ód  • [        5       nSUl        XbR                  l        SUl        [	        5       nSSSSSSSS	S
S/SSSSSSSS.S.	/S.nUR                  US5        UR                  SSSS9  U" 5       n	U	R                  oªR                  o»(       dš  SS[        R                  " 5       ;   d  [        R                  " U	5      (       a  [        R                  " U	5      OS[        R                  " U
5      [        R                  " U5      S.-  n[        [        R                  " U5      5      eS=p«g)zTest save_summary method.Fra   r¸   ú
2024-01-01Ú	anthropicr€   r   r   r�   rŽ   r�   zTest descriptionrK   zQuarterly revenuer�   r    ÚA)ÚrowsÚcolsÚ
first_cell)	Útable_idÚpager   r   r   Ú	llm_titleÚllm_descriptionÚtable_markdownÚmetadata©r¹   Úextraction_dateÚmodel_providerrq   rº   Útablesz/output/test_summary.mdr»   r¼   r½   zEassert %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.write
}.called
}rÉ   re   N)r   rk   rm   rn   r
   Úsave_summaryrs   rÐ   rÒ   r&   r'   r$   r(   r)   r*   r+   )r-   rÕ   rt   ru   rv   rw   rd   rc   rÖ   rÉ   r.   r0   ry   s                r3   Útest_save_summaryÚ8TestTableInferenceProcessorSaveMethods.test_save_summaryâ   s  € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	ð #Ø+Ø)Ø1Øð !"ØØ(1Ø &¨Ð/Ø(:Ø!1Ø':Ø&<Ø)*°AÀSÑ Iñ
ðñ
ˆð* 	×Ñ˜tÐ%>Ô?à×)Ñ)Ð*CÀSÐSZÐ)Ñ[Ù“ˆà�|‰|Ð"×"Ñ"Ð"Õ"×"×"×"×"×"Ñ"ˆv×"×"×"Ñ"ˆv×"×"Õ"ˆ|×"×"Ó"Ð"×"×"×"×"×"Ó"r6   c                 óÄ  ^• [        5       nSUl        XbR                  l        SUl        [	        5       nSSSSSSSS	S
SSSSS.S./S.n/ mU4S jn	X‘" 5       R
                  l        UR                  US5        SR                  T5      n
So»U
;   oÌ(       d¥  [        R                  " SU4SXº45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  n[        [        R                   " U5      5      eS=p¼/ nS	oÌU
;   nUnU(       d	  S
nUU
;   nUnU(       Gdv  [        R                  " SU4SXÊ45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS.-  nSSU0-  nUR#                  U5        U(       d˜  [        R                  " SW4SWU
45      [        R                  " U5      S[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OSS .-  nS!S"U0-  nUR#                  U5        [        R$                  " US5      0 -  nS#S$U0-  n[        [        R                   " U5      5      eS=n=n=n=n=nng)%z,Test save_summary generates correct content.Fra   r¸   rß   rà   r€   r   r   r�   rK   zRevenue breakdownz| Q1 | Q2 |
| 100 | 200 |r    )râ   rã   )rå   ræ   r   rç   rè   ré   rê   rë   c                 ó(   >• TR                  U 5        g )N)rÓ   )ÚcontentÚwritten_liness    €r3   Úwrite_side_effectÚ[TestTableInferenceProcessorSaveMethods.test_save_summary_content.<locals>.write_side_effect0  s   ø€ Ø× Ñ  Õ)r6   z/output/summary.mdr°   r‘   r“   rÆ   r•   r˜   r!   NrÅ   rÇ   rÈ   r#   ©z%(py10)s in %(py12)s©Úpy10Úpy12ú%(py14)sÚpy14úassert %(py17)sÚpy17)r   rk   rm   rn   r
   rÐ   Úside_effectrï   rÏ   r$   r%   r)   r&   r'   r(   r*   r+   rÓ   rÔ   )r-   rÕ   rt   ru   rv   rw   rd   rc   rÖ   rö   rÆ   rš   r›   rœ   r1   r.   r/   Ú@py_assert9Ú@py_assert11r2   Ú@py_format13rÚ   Ú@py_format16Ú@py_format18rõ   s                           @r3   Útest_save_summary_contentÚ@TestTableInferenceProcessorSaveMethods.test_save_summary_content  sÚ  ø€ ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	ð #Ø+Ø)Ø1Øð !"ØØ(1Ø!1Ø':Ø&BØ)*°AÑ 6ñð
ñ
ˆð( ˆõ	*ð ):ˆ	‹×ÑÔ%à×Ñ˜tÐ%9Ô:àŸ'™' -Ó0ˆð Ð,˜_Ñ,×,×,×,Ò,ˆz×,×,Ô,ˆz×,×,×,×,×,Ô,˜_×,×,×,Ñ,˜_×,×,×,×,×,×,Ó,ÙRˆyÐR˜OÑ+×RÑRÐ/?ÐRÐ/?À?Ñ/R×R×R×RÖRˆy×R×RÔRˆy×R×R×R×R×RÔR˜O×R×R×RÑR˜O×R×R×R×R×R×R×RÕRÐ/?À?×R×RÔRÐ/?×R×R×R×R×RÔRÀ?×R×R×RÑRÀ?×R×R×R×R×R×R×R×R×R×R×R×R×R×Rr6   r@   N)rA   rB   rC   rD   rE   r   r   rÜ   rð   r  rF   r@   r6   r3   r´   r´   Ç   s  † Ù!á
Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5Ù
ˆ?¨Ñ3ñDó 4ó 6ó <ó ;ó =ð
Dñ& Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5Ù
ˆ?¨Ñ3ñ##ó 4ó 6ó <ó ;ó =ð
##ñJ Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5Ù
ˆ?¨Ñ3ñ*Só 4ó 6ó <ó ;ó =ó
*Sr6   r´   c                   óÔ   • \ rS rSrSr\" S5      \" S5      \" S5      \" S5      S 5       5       5       5       r\" S5      \" S5      \" S5      \" S5      S 5       5       5       5       rS	rg
)ÚTestExtractPageContexti>  z'Tests for _extract_page_context method.r[   r\   r]   r^   c                 óp  • [        5       nSUl        XQR                  l        SUl        [	        5       n[        5       nSUl        SUl        SUl        [        5       nSUl        SUl        [        5       n	Xx/U	R                  l        UR                  U	SS9n
/ nSoÌU
;   oÝoí(       d  SoÿU
;   nUnU(       Gdv  [        R                  " SU4S	XÊ45      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OS
S.-  nSSU0-  nUR!                  U5        U(       d˜  [        R                  " SW4SWU
45      [        R                  " U5      S
[        R                  " 5       ;   d  [        R                  " U
5      (       a  [        R                  " U
5      OS
S.-  nSSU0-  nUR!                  U5        [        R"                  " US5      0 -  nSSU0-  n[%        [        R&                  " U5      5      eS=n=n=n=n=nng)z"Test _extract_page_context method.Fra   r   zHeader textr   z	Body text©r   r‘   rÅ   r   rÇ   rÈ   r#   rø   rù   rü   rý   rþ   rÿ   N)r   rk   rm   rn   r
   Ú_pageÚtextÚlevelÚiterate_itemsÚ_extract_page_contextr$   r%   r)   r&   r'   r(   rÓ   rÔ   r*   r+   )r-   rt   ru   rv   rw   rd   rc   Úmock_element1Úmock_element2Úmock_documentr   r.   r›   r/   rš   r  r  r1   r2   r  rÚ   r  r  s                          r3   Útest_extract_page_contextÚ0TestExtractPageContext.test_extract_page_contextA  s]  € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	ô "›ˆØˆÔØ*ˆÔØˆÔä!›ˆØˆÔØ(ˆÔä!›ˆØ4AÐ3Qˆ×#Ñ#Ô0à×1Ñ1°-ÈQÐ1ÐOˆáAˆ}ÐA Ñ'×A¨;ÐA¸'Ñ+A×A×A×AÖAˆ}×A×AÔAˆ}×A×A×A×A×AÔA ×A×A×AÑA ×A×A×A×A×A×A×AÕA¨;¸'×A×AÔA¨;×A×A×A×A×AÔA¸'×A×A×AÑA¸'×A×A×A×A×A×A×A×A×A×A×A×A×A×Ar6   c                 ó&  • [        5       nSUl        XQR                  l        SUl        [	        5       n[        5       n/ UR
                  l        UR                  USS9nSo˜U	:H  oª(       d¥  [        R                  " SU
4SX‰45      S[        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS[        R                  " U	5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS=p©g)z+Test _extract_page_context with no content.Fra   r   r  zNo page context availabler   r®   r   r¯   r˜   r!   N)r   rk   rm   rn   r
   r  r  r$   r%   r&   r'   r(   r)   r*   r+   )r-   rt   ru   rv   rw   rd   rc   r  r   r›   r.   rœ   r1   s                r3   Ú$test_extract_page_context_no_contentÚ;TestExtractPageContext.test_extract_page_context_no_content_  s·   € ô  “kˆØ%*ˆÔ"Ø.9×ÑÔ+Ø(7ÐÔ%ä+Ó-ˆ	ä!›ˆØ35ˆ×#Ñ#Ô0à×1Ñ1°-ÈQÐ1ÐOˆà5Ð5Ð5Ñ5×5×5×5Ò5ˆw×5×5×5×5×5Õ5ˆw×5×5×5Ñ5ˆw×5×5Õ5Ð5×5×5×5×5×5×5Ò5r6   r@   N)	rA   rB   rC   rD   rE   r   r  r  rF   r@   r6   r3   r	  r	  >  s�   † Ù1á
Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñBó 6ó <ó ;ó =ðBñ4 Ð;Ó<Ù
Ð9Ó:Ù
Ð:Ó;Ù
Ð4Ó5ñ6ó 6ó <ó ;ó =ó6r6   r	  )rE   Úbuiltinsr&   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter$   Újsonr   Úpathlibr   Úunittest.mockr   r   r   ÚpytestÚ quber.processors.table_inferencer   r	   r
   r   r   rH   rR   rY   rŠ   r´   r	  r@   r6   r3   Ú<module>r"     s|   ðÙ Bç  „ ƒÝ Ý ß 5Ñ 5ã ÷ó ÷!,ñ !,÷HAñ A÷Lñ L÷0/ñ 0/÷fF7ñ F7÷RtSñ tS÷n36ò 36r6   