ó
    á³j4  ã                   ó(  • S r SSKrSSKJs  Jr  SSKrSSKJ	r	J
r
Jr  SSKJrJr  \R                  " SS9S\R                   4S j5       rSS	 jrSS
 jrS rS rS rS rS\R                   4S jrS\R                   4S jrS\R                   4S jrg)zßPure logic of the Jev ranker: how `Ranking.order` applies the cut, breaks
ties and places failed chunks, and what the TypeSafe settings default to.
Nothing here calls the API, so nothing here is evidence that ranking works.é    N)Ú
ChunkScoreÚ	PageScoreÚRanking)ÚPlaygroundSettingsÚTypeSafeSettingsT)ÚautouseÚmonkeypatchc                 ó&   • U R                  U5        g)ztSettings read `.env` from the working directory; an empty one keeps the
developer's real file out of these defaults.N)Úchdir)r	   Útmp_paths     Ú7/home/mande/repo/quber/tests/playground/test_ranking.pyÚ	no_dotenvr      s   € ð ×Ñ�hÕó    c           	      ó"   • [        U SU  3SS XS9$ )NÚcr   )ÚindexÚchunk_idÚpageÚgradeÚscoreÚerror)r   )r   r   r   s      r   Úchunkr      s   € Ü˜E¨a°¨w¨K¸aÀtÐSXÑfÐfr   c                 ó(   • [        [        SSS9/XS9$ )Nr   T)r   Úrelevant)ÚpagesÚscoresÚ	grade_cut)r   r   )r   Úcuts     r   Úrankingr      s   € Üœ)¨°TÑ:Ð;ÀFÑZÐZr   c            	      óF  • [        [        SS5      [        SS5      [        SS5      [        SS5      /5      n U R                  o" 5       n/ S	Q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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pCU R                  o" 5       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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pCg )Nr   gÍÌÌÌÌÌì?é   gÍÌÌÌÌÌ @é   çffffffö?é   gš™™™™™@)r$   r!   r"   ©ú==©zD%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.order
}()
} == %(py7)sÚr©Úpy0Úpy2Úpy4Úpy7úassert %(py9)sÚpy9©zF%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.cleared
}()
} == %(py7)s©r   r   ÚorderÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚcleared©r(   Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10s          r   Ú9test_order_keeps_chunks_at_or_above_the_cut_highest_firstrC      s/  € Ü”�q˜#“¤ a¨£¬u°Q¸«}¼eÀAÀs»mÐLÓM€AØ�7‰7Ð!ˆ7‹9Ð!š	Ð!˜	Ñ!×!×!×!Ò!ˆ9×!×!×!×!×!Õ!ˆ1×!×!×!Ñ!ˆ1×!×!Õ!ˆ7×!×!Ó!ˆ9×!×!Ó!˜	×!×!×!×!×!×!Õ!Ø�9‰9Ðˆ9‹;Ð˜!Ð˜!Ñ×××Òˆ;×××××Õˆ1×××Ñˆ1××Õˆ9××Óˆ;××Ó˜!××××××Ör   c                  óH  • [        [        SS5      [        SS5      [        SS5      /5      n U R                  o" 5       n/ SQ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      [        R                  " U5      S	.-  nS
SU0-  n[        [        R                  " U5      5      eS =n=n=pCg )Nr   g       @r!   r"   )r   r!   r"   r%   r'   r(   r)   r.   r/   ©r   r   r2   r3   r4   r5   r6   r7   r8   r9   r:   r<   s          r   Ú(test_order_keeps_candidate_order_on_tiesrF       s¦   € Ü”�q˜#“¤ a¨£¬u°Q¸«}Ð=Ó>€AØ�7‰7Ð!ˆ7‹9Ð!š	Ð!˜	Ñ!×!×!×!Ò!ˆ9×!×!×!×!×!Õ!ˆ1×!×!×!Ñ!ˆ1×!×!Õ!ˆ7×!×!Ó!ˆ9×!×!Ó!˜	×!×!×!×!×!×!Ö!r   c            	      ó>  • [        [        SSS9[        SS5      [        SSS9[        SS	5      /5      n U R                  o" 5       n/ S
Q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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pCU R                  o" 5       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      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS =n=n=pCg )Nr   z	503: boom)r   r!   g      @r"   zModelAPIError: xr$   g      ð?)r!   r   r"   r%   r'   r(   r)   r.   r/   r0   r1   r<   s          r   Ú<test_failed_chunks_follow_the_graded_ones_in_candidate_orderrH   %   s;  € ÜÜ	ˆq˜Ñ	$¤e¨A¨s£m´U¸1ÐDVÑ5WÔY^Ð_`ÐbeÓYfÐgó	€Að �7‰7Ð!ˆ7‹9Ð!š	Ð!˜	Ñ!×!×!×!Ò!ˆ9×!×!×!×!×!Õ!ˆ1×!×!×!Ñ!ˆ1×!×!Õ!ˆ7×!×!Ó!ˆ9×!×!Ó!˜	×!×!×!×!×!×!Õ!Ø�9‰9Ðˆ9‹;Ð˜!Ð˜!Ñ×××Òˆ;×××××Õˆ1×××Ñˆ1××Õˆ9××Óˆ;××Ó˜!××××××Ör   c                  ó.  • [        [        SS5      [        SS5      /5      n U R                  o" 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      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=pCg )Nr   gš™™™™™É?r!   g=
×£p=ö?r%   r'   r(   r)   r.   r/   rE   r<   s          r   Ú0test_nothing_clears_the_cut_gives_an_empty_orderrJ   -   s�   € Ü”�q˜#“¤ a¨£Ð/Ó0€AØ�7‰7Ðˆ7‹9Ð˜Ð˜‰?×××Òˆ9×××××Õˆ1×××Ñˆ1××Õˆ7××Óˆ9××Ó˜××××××Ör   c                 ó\
  • S H  nU R                  USS9  M     [        5       nUR                  nS oCUL oU(       dº  [        R                  " SU4SX44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=pTUR                  nS
oCU:H  oU(       dº  [        R                  " SU4SX44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=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX44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=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX44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=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX44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=pTUR                  nSoCU:H  oU(       dº  [        R                  " SU4SX44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=pTg )N)ÚTYPESAFE_API_KEYÚQUBER_TYPESAFE_MODELÚQUBER_TYPESAFE_GRADE_CUTÚQUBER_TYPESAFE_CONCURRENCYF©Úraising)Úis)z/%(py2)s
{%(py2)s = %(py0)s.api_key
} is %(py5)sÚts©r*   r+   Úpy5úassert %(py7)sr-   z
jev-1.13.0r%   )z-%(py2)s
{%(py2)s = %(py0)s.model
} == %(py5)sr#   ©z1%(py2)s
{%(py2)s = %(py0)s.grade_cut
} == %(py5)sé    )z3%(py2)s
{%(py2)s = %(py0)s.concurrency
} == %(py5)sr"   )z3%(py2)s
{%(py2)s = %(py0)s.max_retries
} == %(py5)sg      N@)z7%(py2)s
{%(py2)s = %(py0)s.timeout_seconds
} == %(py5)s)Údelenvr   Úapi_keyr3   r4   r5   r6   r7   r8   r9   r:   Úmodelr   ÚconcurrencyÚmax_retriesÚtimeout_seconds)r	   ÚvarrS   r=   Ú@py_assert4r>   Ú@py_format6rA   s           r   Útest_typesafe_settings_defaultsrb   2   sË  € óˆð 	×Ñ˜3¨ÐÓ.ñô 
Ó	€BØ�:‰:Ð˜Ð˜Ð×××Òˆ:×××××Õˆ2×××Ñˆ2××Õˆ:××Ó˜××××××ÓØ�8‰8Ð#�|Ð#�|Ñ#×#×#×#Ò#ˆ8×#×#×#×#×#Õ#ˆ2×#×#×#Ñ#ˆ2×#×#Õ#ˆ8×#×#Ó#�|×#×#×#×#×#×#Ó#Ø�<‰<Ð˜3Ð˜3Ñ×××Òˆ<×××××Õˆ2×××Ñˆ2××Õˆ<××Ó˜3××××××ÓØ�>‰>Ð˜RÐ˜RÑ×××Òˆ>×××××Õˆ2×××Ñˆ2××Õˆ>××Ó˜R××××××ÓØ�>‰>Ð˜QÐ˜QÑ×××Òˆ>×××××Õˆ2×××Ñˆ2××Õˆ>××Ó˜Q××××××ÓØ×ÑÐ% Ð% Ñ%×%×%×%Ò%Ð×%×%×%×%×%Õ%ˆ2×%×%×%Ñ%ˆ2×%×%Õ%Ð×%×%Ó% ×%×%×%×%×%×%Ô%r   c                 ó¼  • U R                  SS5        U R                  SS5        [        5       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 )NrL   ÚkrN   z1.5r%   )z/%(py2)s
{%(py2)s = %(py0)s.api_key
} == %(py5)srS   rT   rV   r-   g      ø?rW   )Úsetenvr   rZ   r3   r4   r5   r6   r7   r8   r9   r:   r   )r	   rS   r=   r`   r>   ra   rA   s          r   Ú+test_typesafe_settings_read_the_environmentrf   C   s
  € Ø×ÑÐ)¨3Ô/Ø×ÑÐ1°5Ô9Ü	Ó	€BØ�:‰:Ð˜Ð˜Ñ×××Òˆ:×××××Õˆ2×××Ñˆ2××Õˆ:××Ó˜××××××ÓØ�<‰<Ð˜3Ð˜3Ñ×××Òˆ<×××××Õˆ2×××Ñˆ2××Õˆ<××Ó˜3××××××Ôr   c                 óä  • U R                  SSS9  [        5       oR                  nSo2U:H  oD(       d×  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=pCU R                  SS5        [        5       oR                  nSo2U:H  oD(       d×  [        R                  " SU4SX#45      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS =n=n=pCU R                  SS5        [        R                  " [        5         [        5         S S S 5        g ! , (       d  f       g = f)NÚQUBER_PLAYGROUND_RANKERFrP   Úhaikur%   )zE%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s()
}.ranker
} == %(py7)sr   r)   r.   r/   ÚjevÚsonnet)rY   r   Úrankerr3   r4   r5   r6   r7   r8   r9   r:   re   ÚpytestÚraisesÚ
ValueError)r	   r=   r>   r?   r@   rA   rB   s          r   Ú5test_ranker_defaults_to_haiku_and_refuses_other_namesrp   K   sd  € Ø×ÑÐ0¸%ÐÑ@ÜÓÐ1×&Ñ&Ð1¨'Ð1¨'Ñ1×1×1×1Ò1Ð&×1×1×1×1×1Õ1Ô×1×1×1Ñ1Ô×1×1Õ1Ð×1×1Ó1Ð&×1×1Ó1¨'×1×1×1×1×1×1Õ1Ø×ÑÐ0°%Ô8ÜÓÐ/×&Ñ&Ð/¨%Ð/¨%Ñ/×/×/×/Ò/Ð&×/×/×/×/×/Õ/Ô×/×/×/Ñ/Ô×/×/Õ/Ð×/×/Ó/Ð&×/×/Ó/¨%×/×/×/×/×/×/Õ/Ø×ÑÐ0°(Ô;Ü	�Š”zÕ	"ÜÔ÷ 
#×	"Ö	"ús   ÉI!É!
I/)NN)r#   )Ú__doc__Úbuiltinsr5   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter3   rm   Úquber.playground.rankingr   r   r   Úquber.settingsr   r   ÚfixtureÚMonkeyPatchr   r   r   rC   rF   rH   rJ   rb   rf   rp   © r   r   Ú<module>r{      s�   ðñO÷ „ ƒç CÑ Cß ?ð ‡‚˜Ñð ˜6×-Ñ-ó  ó ð ôgô[òò"ò
òð
&°×1CÑ1Cô &ð"¸V×=OÑ=Oô ðÀv×GYÑGYõ r   