ó
    Í>j7
  ã                   ó¢   • S r SSKrSSKJs  Jr  SSKJr  SSK	r	SSK
Jr  SSKJrJrJrJrJrJrJr  S rS rS rS	 rS
 rS rS rS rS rS rg)z1Tests for the Parser ABC and its implementations.é    N)ÚPath)ÚDoclingDocument)ÚDoclingParserÚLegacyDoclingParserÚ
MockParserÚParserÚParseResultÚTunedFinancialParserÚparser_for_presetc                  ó   • [        5       n [        U [        5      o(       Gd+  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U 5      (       a  [
        R                  " U 5      OSS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS ng )Nú5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstanceÚmpr   ©Úpy0Úpy1Úpy2Úpy4)
r   r   r   Ú@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)r   Ú@py_assert3Ú@py_format5s      Ú1/home/mande/repo/quber/tests/core/test_parsers.pyÚ)test_parser_protocol_isinstance_with_mockr      s�   € Ü	‹€BÜ�bœ&Ó!Ð!Ö!×!×!×!×!×!Ñ!Œ:×!×!×!Ñ!Œ:×!×!×!×!×!Ö!�b×!×!×!Ñ!�b×!×!×!×!×!Ö!œ&×!×!×!Ñ!œ&×!×!Õ!Ð!×!×!×!×!×!Ò!ó    c                  ó(  • [        5       n [        U [        5      o(       Gd+  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U 5      (       a  [
        R                  " U 5      OSS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS n[        U [        5      o(       Gd+  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " U 5      (       a  [
        R                  " U 5      OSS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS ng )Nr   r   Údpr   r   r   )r
   r   r   r   r   r   r   r   r   r   r   )r"   r   r   s      r   Ú,test_parser_protocol_isinstance_with_doclingr#      s2  € Ü	Ó	€BÜ�bœ&Ó!Ð!Ö!×!×!×!×!×!Ñ!Œ:×!×!×!Ñ!Œ:×!×!×!×!×!Ö!�b×!×!×!Ñ!�b×!×!×!×!×!Ö!œ&×!×!×!Ñ!œ&×!×!Õ!Ð!×!×!×!×!×!Ñ!Ü�bœ-Ó(Ð(Ö(×(×(×(×(×(Ñ(Œ:×(×(×(Ñ(Œ:×(×(×(×(×(Ö(�b×(×(×(Ñ(�b×(×(×(×(×(Ö(œ-×(×(×(Ñ(œ-×(×(Õ(Ð(×(×(×(×(×(Ò(r    c                  ó€   • [         R                  " [        5         [        5         S S S 5        g ! , (       d  f       g = f)N)ÚpytestÚraisesÚ	TypeErrorr   © r    r   Útest_docling_parser_is_abstractr)      s   € Ü	�Š”yÕ	!ÜŒ÷ 
"×	!Ö	!ús   ›/¯
=c                  ó   • [        5       n U R                  [        S5      5      n[        U[        5      o"(       Gd+  SS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eS nUR                  n[        U[        5      oU(       Gd@  S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      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S	.-  n[        [        R                  " U5      5      eS =pEg )
Nznonexistent.pdfr   r   Úresultr	   r   zSassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.document
}, %(py4)s)
}r   )r   r   Úpy3r   Úpy6)r   Úparser   r   r	   r   r   r   r   r   r   r   Údocumentr   )r   r+   r   r   Ú@py_assert2Ú@py_assert5Ú@py_format7s          r   Ú%test_mock_parser_returns_parse_resultr3   #   sY  € Ü	‹€BØ�X‰X”dÐ,Ó-Ó.€FÜ�fœkÓ*Ð*Ö*×*×*×*×*×*Ñ*Œ:×*×*×*Ñ*Œ:×*×*×*×*×*Ö*�f×*×*×*Ñ*�f×*×*×*×*×*Ö*œk×*×*×*Ñ*œk×*×*Õ*Ð*×*×*×*×*×*Ñ*Ø—o‘oÐ7Œ:�o¤Ó7Ð7Ö7×7×7×7×7×7Ñ7Œ:×7×7×7Ñ7Œ:×7×7×7×7×7Ö7�f×7×7×7Ñ7�f×7×7Õ7�o×7×7×7×7×7Ô7¤×7×7×7Ñ7¤×7×7Õ7Ð7×7×7×7×7×7Ó7r    c            
      ó   • [        [        SS9S9n [        U S9nUR                  nSn[	        U5      oB" U5      oUU L of(       Gd‚  [
        R                  " SU4SXP45      S[        R                  " 5       ;   d  [
        R                  " U5      (       a  [
        R                  " U5      OS[
        R                  " U5      S	[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS	[
        R                  " U5      [
        R                  " U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 =n=n=n=pVg )NÚcustom)Úname)r/   )r+   zx.pdf©Úis)zj%(py9)s
{%(py9)s = %(py2)s
{%(py2)s = %(py0)s.parse
}(%(py7)s
{%(py7)s = %(py3)s(%(py5)s)
})
} is %(py11)sr   r   )r   r   r,   Úpy5Úpy7Úpy9Úpy11zassert %(py13)sÚpy13)r	   r   r   r.   r   r   Ú_call_reprcomparer   r   r   r   r   r   )	r5   r   Ú@py_assert1Ú@py_assert4Ú@py_assert6Ú@py_assert8Ú@py_assert10Ú@py_format12Ú@py_format14s	            r   Ú(test_mock_parser_returns_injected_resultrF   *   sü   € Ü¤/°xÑ"@ÑA€FÜ	˜6Ñ	"€BØ�8‰8Ð,˜Ð,”D˜“MÐ,ˆ8�MÓ"Ð, fÐ,×,×,×,Ó,Ð"×,×,×,×,×,Õ,ˆ2×,×,×,Ñ,ˆ2×,×,Õ,ˆ8×,×,×,×,×,Ô,”D×,×,×,Ñ,”D×,×,Õ,˜×,×,Ó,�M×,×,Ó,Ð"×,×,×,×,×,Ô, f×,×,×,Ñ, f×,×,×,×,×,×,×,Ò,r    c                  óÊ  • [        5       n U R                  nSo!UL o3(       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=p2U R                  nSo!UL o3(       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=p2U R                  nSo!UL o3(       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=p2U R                  nSo!U:H  o3(       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=p2g )NFr7   ©z.%(py2)s
{%(py2)s = %(py0)s.do_ocr
} is %(py5)sr"   ©r   r   r9   úassert %(py7)sr:   T)z:%(py2)s
{%(py2)s = %(py0)s.do_table_structure
} is %(py5)s)z8%(py2)s
{%(py2)s = %(py0)s.do_cell_matching
} is %(py5)sútuned-financial©ú==©z.%(py2)s
{%(py2)s = %(py0)s.preset
} == %(py5)s)r
   Údo_ocrr   r>   r   r   r   r   r   r   Údo_table_structureÚdo_cell_matchingÚpreset©r"   r?   r@   r   Ú@py_format6Ú@py_format8s         r   Ú)test_tuned_financial_parser_init_defaultsrV   0   sÑ  € Ü	Ó	€BØ�9‰9Ð˜Ð˜Ð×××Òˆ9×××××Õˆ2×××Ñˆ2××Õˆ9××Ó˜××××××ÓØ× Ñ Ð( DÐ( DÐ(×(×(×(Ò(Ð ×(×(×(×(×(Õ(ˆ2×(×(×(Ñ(ˆ2×(×(Õ(Ð ×(×(Ó( D×(×(×(×(×(×(Ó(Ø×ÑÐ& $Ð& $Ð&×&×&×&Ò&Ð×&×&×&×&×&Õ&ˆ2×&×&×&Ñ&ˆ2×&×&Õ&Ð×&×&Ó& $×&×&×&×&×&×&Ó&Ø�9‰9Ð)Ð)Ð)Ð)Ñ)×)×)×)Ò)ˆ9×)×)×)×)×)Õ)ˆ2×)×)×)Ñ)ˆ2×)×)Õ)ˆ9×)×)Ó)Ð)×)×)×)×)×)×)Ô)r    c                  ót  • [        5       n U R                  nSo!U:H  o3(       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=p2U R                  nSo!U:H  o3(       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=p2g )
NÚlegacyrL   rN   r"   rI   rJ   r:   Údefault)z5%(py2)s
{%(py2)s = %(py0)s.backend_label
} == %(py5)s)r   rR   r   r>   r   r   r   r   r   r   Úbackend_labelrS   s         r   Útest_legacy_parser_presetr[   8   sì   € Ü	Ó	€BØ�9‰9Ð ˜Ð ˜Ñ × × × Ò ˆ9× × × × × Õ ˆ2× × × Ñ ˆ2× × Õ ˆ9× × Ó ˜× × × × × × Ó Ø×ÑÐ(˜yÐ(˜yÑ(×(×(×(Ò(Ð×(×(×(×(×(Õ(ˆ2×(×(×(Ñ(ˆ2×(×(Õ(Ð×(×(Ó(˜y×(×(×(×(×(×(Ô(r    c            	      ó  • Sn [        U 5      n[        U[        5      o"(       Gd]  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " [         5      (       a  [
        R                  " [         5      OS[
        R                  " U 5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS =n =pSn [        U 5      n[        U[        5      o"(       Gd]  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OSS[        R                  " 5       ;   d  [
        R                  " [         5      (       a  [
        R                  " [         5      OS[
        R                  " U 5      [
        R                  " U5      S[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS =n =pg )	NrK   zSassert %(py8)s
{%(py8)s = %(py0)s(%(py5)s
{%(py5)s = %(py1)s(%(py3)s)
}, %(py6)s)
}r   r   r
   )r   r   r,   r9   r-   Úpy8rX   r   )r   r   r
   r   r   r   r   r   r   r   r   )r0   r@   Ú@py_assert7Ú@py_format9s       r   Ú&test_parser_for_preset_maps_to_classesr`   >   s†  € Ø(9ÐQÔ'Ð(9Ó:ÐQŒ:Ð:Ô<PÓQÐQÖQ×Q×Q×Q×Q×QÑQŒ:×Q×Q×QÑQŒ:×Q×Q×Q×Q×QÖQÔ'×Q×Q×QÑQÔ'×Q×QÕQÐ(9×Q×QÓQÐ:×Q×Q×Q×Q×QÔQÔ<P×Q×Q×QÑQÔ<P×Q×QÕQÐQ×Q×Q×Q×Q×QÔQØ(0ÐGÔ'¨Ó1ÐGŒ:Ð1Ô3FÓGÐGÖG×G×G×G×G×GÑGŒ:×G×G×GÑGŒ:×G×G×G×G×GÖGÔ'×G×G×GÑGÔ'×G×GÕG¨×G×GÓGÐ1×G×G×G×G×GÔGÔ3F×G×G×GÑGÔ3F×G×GÕGÐG×G×G×G×G×GÕGr    c                  ó€   • [         R                  " [        SS9   [        S5        S S S 5        g ! , (       d  f       g = f)NzUnknown parser preset)ÚmatchÚbogus)r%   r&   Ú
ValueErrorr   r(   r    r   Ú&test_parser_for_preset_rejects_unknownre   C   s&   € Ü	�Š”zÐ)@Ó	AÜ˜'Ô"÷ 
B×	AÖ	Aús   š/¯
=c                  óö
  • [        5       R                  5       n [        5       R                  5       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=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=pCUR                  o"R                  oDR                   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      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  n
SSU
0-  n[        [        R                  " U5      5      eS=n=n=n=p˜g)zFThe two presets must produce the configurations they did pre-refactor.Fr7   rH   Úlegacy_optsrI   rJ   r:   N)zA%(py2)s
{%(py2)s = %(py0)s.do_picture_classification
} is %(py5)sTÚ
tuned_opts)z?%(py2)s
{%(py2)s = %(py0)s.generate_picture_images
} is %(py5)sÚACCURATErL   )zs%(py6)s
{%(py6)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.table_structure_options
}.mode
}.name
} == %(py9)s)r   r   r   r-   r;   zassert %(py11)sr<   )r   Úbuild_pipeline_optionsr
   rO   r   r>   r   r   r   r   r   r   Údo_picture_classificationÚgenerate_picture_imagesÚtable_structure_optionsÚmoder6   )rg   rh   r?   r@   r   rT   rU   r1   rB   r^   Ú@py_format10rD   s               r   Ú#test_preset_pipeline_options_differrp   H   s  € ä%Ó'×>Ñ>Ó@€KÜ%Ó'×>Ñ>Ó@€Jð ×ÑÐ& Ð& Ð&×&×&×&Ò&Ð×&×&×&×&×&Õ&ˆ;×&×&×&Ñ&ˆ;×&×&Õ&Ð×&×&Ó& ×&×&×&×&×&×&Ó&Ø×0Ñ0Ð9°EÐ9°EÐ9×9×9×9Ò9Ð0×9×9×9×9×9Õ9ˆ;×9×9×9Ñ9ˆ;×9×9Õ9Ð0×9×9Ó9°E×9×9×9×9×9×9Ó9ð ×ÑÐ$ Ð$ Ð$×$×$×$Ò$Ð×$×$×$×$×$Õ$ˆ:×$×$×$Ñ$ˆ:×$×$Õ$Ð×$×$Ó$ ×$×$×$×$×$×$Ó$Ø×/Ñ/Ð7°4Ð7°4Ð7×7×7×7Ò7Ð/×7×7×7×7×7Õ7ˆ:×7×7×7Ñ7ˆ:×7×7Õ7Ð/×7×7Ó7°4×7×7×7×7×7×7Ó7Ø×-Ñ-Ð5°Ð5°Ð5×5×5×5Ò5Ð-×5×5×5×5×5Õ5ˆ:×5×5×5Ñ5ˆ:×5×5Õ5Ð-×5×5Ó5°×5×5×5×5×5×5Ó5Ø×-Ñ-ÐE×2Ñ2ÐE×7Ñ7ÐE¸:ÐE¸:ÑE×E×E×EÒEÐ7×E×E×E×E×EÕEˆ:×E×E×EÑEˆ:×E×EÕEÐ-×E×EÓEÐ2×E×EÓEÐ7×E×EÓE¸:×E×E×E×E×E×E×EÐEr    )Ú__doc__Úbuiltinsr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter   Úpathlibr   r%   Údocling_core.types.doc.documentr   Úquber.core.parsersr   r   r   r   r	   r
   r   r   r#   r)   r3   rF   rV   r[   r`   re   rp   r(   r    r   Ú<module>ry      sY   ðÙ 7ç  „ Õ ã Ý ;÷÷ ñ ò"ò
)òò
8ò-ò*ò)òHò
#ó
Fr    