ó
    6Þ©jF  ã                  óô   • S r SSKJr  SSKrSSKJs  Jr  SSK	r	SSK
JrJr  SSKJrJr  SSKJrJrJrJr  SSKJr  SSKJrJrJr  SS	KJr  S
u  rrSrSr  " S S\5      r!SS jr"SS jr#SS jr$SS jr%SS jr&g)zPHeading review: the per-occurrence relabel of a running header the layout split.é    )ÚannotationsN)ÚListÚOptional)ÚBoundingBoxÚCoordOrigin)ÚDoclingDocumentÚPageItemÚProvenanceItemÚSize)ÚDocItemLabel)ÚHeadingVerdictÚLLMHeadingReviewÚMockLLMClient)Úreview_headings)g      ƒ@g     Àˆ@zWKKR Real Estate Finance Trust Inc. Notes to Condensed Consolidated Financial Statementsz"KKR Real Estate Finance Trust Inc.c                  ó"   • \ rS rSrSrSS jrSrg)ÚReviewé   zPA review that calls the long banner a running header and keeps the company name.c           	   ƒ  óT   #   • [        [        [        SSS9[        [        SSS9/S9$ 7f)NÚrunning_headerzfixed position on every page©ÚtextÚverdictÚreasonÚsection_headingzvarying positions©Úverdicts)r   r   ÚRUNNINGÚCOMPANY©ÚselfÚ	nominateds     Ú8/home/mande/repo/quber/tests/core/test_heading_review.pyr   ÚReview.review_headings   s3   é € Üä¤GÐ5EÐNlÑmÜ¤GÐ5FÐObÑcðñ
ð 	
ùs   ‚&(© N©r!   ÚstrÚreturnzOptional[LLMHeadingReview])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   Ú__static_attributes__r$   ó    r"   r   r      s
   † ÙZ÷
r.   r   c                óœ   • [         SU-
  -  n[        SSXDS-
  [        R                  S9nU R	                  U[        X%S[        U5      4S9S9  g )	Ng      ð?g      Y@g     @@g      $@)ÚlÚrÚtÚbÚcoord_originr   )Úpage_noÚbboxÚcharspan)r   Úprov)ÚPAGE_Hr   r   Ú
BOTTOMLEFTÚadd_headingr
   Úlen)Údocr   ÚpageÚ	top_shareÚtop_ptr6   s         r"   Ú_headingrA       sO   € Ü�s˜Y‘Ñ'€FÜ˜ %¨6¸d±]ÔQ\×QgÑQgÑh€DØ‡O�O˜¤N¸4ÐVWÔY\Ð]aÓYbÐUcÑ$d€OÒer.   c            	     ó&  • [        SS9n [        SS5       H*  n[        U[        [        [
        S9S9U R                  U'   M,     S H  n[        U [        US5        M     [        U [        S	S
5        [        U [        SS5        [        U SSS5        U $ )NÚ	synthetic)Únameé   é   )ÚwidthÚheight)r5   Úsize)rE   é   é   g¸…ëQ¸ž?é   g333333Ó?é   ú$Note 3. Commercial Real Estate Loansé   gš™™™™™¹?)
r   Úranger	   r   ÚPAGE_Wr9   ÚpagesrA   r   r   )r=   Úps     r"   Ú	_documentrT   &   sƒ   € Ü
˜{Ñ
+€CÜ�1�aŽ[ˆÜ¨´¼6Ì&Ñ0QÑRˆ�	‰	�!‹ñ ó ˆÜ�”g˜q $Ö'ñ ô ˆS”'˜1˜dÔ#ÜˆS”'˜1˜dÔ#ÜˆSÐ8¸!¸TÔBØ€Jr.   c                ó´   • U R                    Vs/ s H<  oR                  S   R                  UR                  UR                  R
                  4PM>     sn$ s  snf )Nr   )Útextsr8   r5   r   ÚlabelÚvalue)r=   r2   s     r"   Ú_labelsrY   5   s=   € Ø@CÇ	Â	ÓJÂ	¸1�V‰V�A‰Y×Ñ §¡¨¯©¯©Ó6Á	ÑJÐJùÒJs   �AAc                 óš  • [        5       n [        R                  " [        U [	        5       S5      5      n[        U 5      nS[        [        R                  R                  4o3U;   oD(       d¥  [        R                  " SU4SX24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 =p4S	[        [        R$                  R                  4o3U;   oD(       d¥  [        R                  " SU4SX24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 =p4S
S[        R$                  R                  4o3U;   oD(       d¥  [        R                  " SU4SX24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 =p4S U 5       n['        U5      oˆ(       d¢  SS[        R                  " 5       ;   d  [        R                  " [&        5      (       a  [        R                  " [&        5      OS[        R                  " U5      [        R                  " U5      S.-  n	[!        [        R"                  " U	5      5      eS =pxU V
s/ s H  oªR(                  [        :X  d  M  U
PM     nn
/ n[+        U5      nSnXÍ:H  oîo>(       aJ  US   nUR,                  nSnUU:H  nUnU(       a)  Sn/ nUS   nUR.                  nUnU(       d  SnUnUU;   nUnU(       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UR1                  U5        U(       GaZ  [        R                  " SW4SWW45      [        R                  " W5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  nUR1                  U5        U(       aÜ  S[        R                  " W5      [        R                  " W5      S .-  nWR1                  U5        U(       d,  S!S"[        R                  " W5      0-  nUR1                  U5        [        R2                  " US5      0 -  n [        R                  " SW4S#WW45      [        R                  " U5      U S$.-  n!S%S&U!0-  n"UR1                  U"5        [        R2                  " US5      0 -  n#S'S(U#0-  n$[!        [        R"                  " U$5      5      eS =n=n=n=n=n=n=n=n=n=n=n=n=n=n=nng s  sn
f ))Núdoc.pdfrM   )Úin)z%(py1)s in %(py3)sÚlabels)Úpy1Úpy3úassert %(py5)sÚpy5rL   rO   rN   c              3  óx   #   • U  H0  u  po2[         :X  d  M  U[        R                  R                  :H  v •  M2     g 7f©N)r   r   ÚPAGE_HEADERrX   )Ú.0rS   r   rW   s       r"   Ú	<genexpr>ÚStest_split_running_header_demoted_by_position_only_where_it_sits.<locals>.<genexpr>A   s.   é € ÐgÊV¹>¸1ÀEÔ_fÑWfÓ6ˆuœ×0Ñ0×6Ñ6Ö6ÊVùs   ‚:–$:ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall©Úpy0Úpy2Úpy4rE   r   z first half of the running headerÚ ©ú==)z0%(py5)s
{%(py5)s = %(py2)s(%(py3)s)
} == %(py8)sr<   Úsplit)rl   r_   ra   Úpy8z%(py10)sÚpy10)z0%(py15)s
{%(py15)s = %(py13)s.page
} == %(py18)s)Úpy13Úpy15Úpy18z%(py20)sÚpy20z$%(py30)s
{%(py30)s = %(py28)s.note
})Úpy28Úpy30z%(py33)sÚpy33)z%(py23)s in (%(py36)s))Úpy23Úpy36z%(py38)sÚpy38zassert %(py41)sÚpy41)rT   ÚasyncioÚrunr   r   rY   r   r   rd   rX   Ú
@pytest_arÚ_call_reprcompareÚ	_safereprÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚAssertionErrorÚ_format_explanationÚSECTION_HEADERri   r   r<   r>   ÚnoteÚappendÚ_format_boolop)%r=   Úflagsr]   Ú@py_assert0Ú@py_assert2Ú@py_format4Ú@py_format6Ú@py_assert1Ú@py_assert3Ú@py_format5Úfrq   Ú@py_assert4Ú@py_assert7Ú@py_assert6Ú@py_assert12Ú@py_assert14Ú@py_assert17Ú@py_assert16Ú@py_assert22Ú@py_assert26Ú@py_assert27Ú@py_assert29Ú@py_assert25Ú@py_assert32Ú@py_assert24Ú@py_format9Ú@py_format11Ú@py_format19Ú@py_format21Ú@py_format31Ú@py_format34Ú@py_format35Ú@py_format37Ú@py_format39Ú@py_format40Ú@py_format42s%                                        r"   Ú@test_split_running_header_demoted_by_position_only_where_it_sitsr¯   9   så  € Ü
‹+€CÜ�KŠKœ¨¬V«X°yÓAÓB€Eä�S‹\€FØŒwœ×0Ñ0×6Ñ6Ð7ÐA¸6ÑA×A×A×AÒAÐ7×A×AÔAÐ7×A×A×A×A×AÔA¸6×A×A×AÑA¸6×A×A×A×A×A×AÓAØŒwœ×3Ñ3×9Ñ9Ð:ÐD¸fÑD×D×D×DÒDÐ:×D×DÔDÐ:×D×D×D×D×DÔD¸f×D×D×DÑD¸f×D×D×D×D×D×DÓDØÐ5´|×7RÑ7R×7XÑ7XÐYÐcÐ]cÑc×c×c×cÒcÐY×c×cÔcÐY×c×c×c×c×cÔcÐ]c×c×c×cÑcÐ]c×c×c×c×c×c×cÓcÙgÉVÓgÐgŒ3ÐgÓgÐgÕg×g×g×g×g×gÑgŒ3×g×g×gÑgŒ3×g×gÕgÐg×g×gÓgÐg×g×g×g×g×gÒgáÓ3š�1§¡¬7Ñ!2�Q™€EÐ3ñÜˆE‹
ðØðØ‰÷Ø! !™HðØ$ŸM™MðØ-.ðØ)¨QÑ.÷ñ Ø3UòØZ_Ð`aÑZbðØZb×ZgÑZgðØZgðÞZgÐkmðØkmðØ3UðÙ3n÷÷ ïé ôØ÷ò ïé ÷õ ïé ðÜ÷ö ïé ðÜ÷ó ïé ÷õ ïé ðØ÷ö ïé ðØ÷ò ïé ðØ÷ð ïé ðØ÷÷ ð ïé ðì÷ô ïé ôØ)¨Q÷ñ ïé ðØ$÷ð ïé ðØ)÷ð ïé ðØ-.÷÷ ð ïé ðì÷ô ïé ðØZb÷ð ïé ðØZg÷ñ ïé ðìö [höïé ðØkm÷ð ïé ðìôïé ÷÷ ïé ôØ3U÷ò ïé ðØ3U÷÷ ñ ïé ðìôïé ÷÷ ÷ ó ïé ÷÷ ÷ ÷ ÷ ó ùò 4s   Í7[Î[c                 óx  •  " S S[         5      n [        5       n[        R                  " [	        X" 5       S5      5      n/ 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      S.-  nSS	U0-  n[        [
        R                  " U5      5      eS =pCS
 [        U5       5       n[        U5      ow(       d¢  SS[        R                  " 5       ;   d  [
        R                  " [        5      (       a  [
        R                  " [        5      OS[
        R                  " U5      [
        R                  " U5      S.-  n[        [
        R                  " U5      5      eS =pGg )Nc                  ó   • \ rS rSrSS jrSrg)ÚFtest_no_running_header_demoted_means_no_split_relabel.<locals>.KeepAlléJ   c              “  ó8   #   • [        [        [        SSS9/S9$ 7f)Nr   Úkeptr   r   )r   r   r   r   s     r"   r   ÚVtest_no_running_header_demoted_means_no_split_relabel.<locals>.KeepAll.review_headingsK   s#   é € Ü#Ü(¬gÐ?PÐY_Ñ`Ðañð ùs   ‚r$   Nr%   )r(   r)   r*   r+   r   r-   r$   r.   r"   ÚKeepAllr²   J   s   † ÷	r.   r·   r[   ro   )z%(py0)s == %(py3)sr�   )rk   r_   r`   ra   c              3  ó`   #   • U  H$  u  po3[         R                  R                  :H  v •  M&     g 7frc   )r   r‰   rX   )re   Ú_pÚ_trW   s       r"   rf   ÚHtest_no_running_header_demoted_means_no_split_relabel.<locals>.<genexpr>S   s#   é € Ð\Ê|¹m¸bÀeœ×3Ñ3×9Ñ9Ö9Ê|ùs   ‚,.rh   ri   rj   )r   rT   r   r€   r   r�   r‚   r„   r…   r†   rƒ   r‡   rˆ   rY   ri   )	r·   r=   r�   r�   r’   r�   r‘   r“   r”   s	            r"   Ú5test_no_running_header_demoted_means_no_split_relabelr¼   I   sô   € ô”-ô ô ‹+€CÜ�KŠKœ¨¨W«Y¸	ÓBÓC€EØÐ�B‰;×××Òˆ5×××××Õˆ5×××Ñˆ5××Õ�B××××××ÑÙ\ÌwÐWZÌ|Ó\Ð\Œ3Ð\Ó\Ð\Õ\×\×\×\×\×\Ñ\Œ3×\×\×\Ñ\Œ3×\×\Õ\Ð\×\×\Ó\Ð\×\×\×\×\×\Ó\r.   )
r=   r   r   r&   r>   Úintr?   Úfloatr'   ÚNone)r'   r   )r=   r   r'   zList[tuple[int, str, str]])r'   r¿   )'r,   Ú
__future__r   Úbuiltinsr„   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter�   r   Útypingr   r   Údocling_core.types.doc.baser   r   Údocling_core.types.doc.documentr   r	   r
   r   Údocling_core.types.doc.labelsr   Úquber.agents.llm_clientr   r   r   Ú quber.core.fusion.heading_reviewr   rQ   r9   r   r   r   rA   rT   rY   r¯   r¼   r$   r.   r"   Ú<module>rË      se   ðÙ Vå "ç  „ ƒß !ç @ß [Ó [Ý 6ç SÑ SÝ <à�€ˆØ
c€Ø
.€ô	
ˆ]ô 	
ôfôôKôõ 
]r.   