Ë
    æØjj"#  ã                  óÚ   — d Z ddlmZ ddlmZ ddlZddlZddlZddlm	Z	 ddlm
Z
 ddlmZ ddlZddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ dd„Zdd„Ze	 G d„ d«      «       Zy)z4Helper functions for writing to terminals and files.é    )Úannotations)ÚSequenceN)Úfinal)ÚLiteral)ÚTextIO)ÚTerminalFormatter)ÚLexer)Ú	DiffLexer)ÚPythonLexeré   )Úassert_neveré   )Úwcswidthc                 óF   — t        j                  d¬«      \  } }| dk  rd} | S )N)éP   é   )Úfallbacké(   r   )ÚshutilÚget_terminal_size)ÚwidthÚ_s     ú\/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/_pytest/_io/terminalwriter.pyÚget_terminal_widthr      s)   € Ü×'Ñ'°Ô:�H€Eˆ1ð ˆr‚zØˆà€Ló    c                ó’  — t         j                  j                  d«      dk(  ryt         j                  j                  d«      dk(  ryt         j                  j                  d«      ryt         j                  j                  d«      ryt        | d«      xr4 | j	                  «       xr" t         j                  j                  d	«      d
k7  S )NÚ	PY_COLORSÚ1TÚ0FÚNO_COLORÚFORCE_COLORÚisattyÚTERMÚdumb)ÚosÚenvironÚgetÚhasattrr"   )Úfiles    r   Úshould_do_markupr*   $   sŠ   € Ü	‡z�z‡~�~�kÓ" cÒ)ØÜ	‡z�z‡~�~�kÓ" cÒ)ØÜ	‡z�z‡~�~�jÔ!ØÜ	‡z�z‡~�~�mÔ$Øä��hÓÒV D§K¡K£MÒV´b·j±j·n±nÀVÓ6LÐPVÑ6Vðr   c                  ój  — e Zd Z ed6i dd“dd“dd“dd“d	d
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd “d!d"“d#d$“d%d&“d'd(“ŽZd;d<d*„Zed=d+„«       Zej                  d>d,„«       Zed=d-„«       Z	d?d.„Z
	 	 d@	 	 	 	 	 	 	 	 	 dAd/„Zd0d1œdBd2„Zd0d1œdCd3„ZdDdEd4„ZdFd5„ZdGdHd7„ZdId8„ZdJd9„Z	 dK	 	 	 	 	 dLd:„Zy))MÚTerminalWriterÚblacké   Úredé   Úgreené    Úyellowé!   Úblueé"   Úpurpleé#   Úcyané$   Úwhiteé%   ÚBlackr   ÚRedé)   ÚGreené*   ÚYellowé+   ÚBlueé,   ÚPurpleé-   ÚCyané.   ÚWhiteé/   Úboldr   Úlightr   Úblinké   Úinverté   Nc                óD  — |€t         j                  }t        |d«      rG|j                  «       r7t         j                  dk(  r$	 dd l}|j                  |«      j                  }|€J ‚|| _	        t        |«      | _        d| _        d | _        d| _        y # t        $ r Y Œ8w xY w)Nr"   Úwin32r   Ú T)ÚsysÚstdoutr(   r"   ÚplatformÚcoloramaÚAnsiToWin32ÚstreamÚImportErrorÚ_filer*   Ú	hasmarkupÚ_current_lineÚ_terminal_widthÚcode_highlight)Úselfr)   rX   s      r   Ú__init__zTerminalWriter.__init__K   s˜   € Øˆ<Ü—:‘:ˆDÜ�4˜Ô" t§{¡{¤}¼¿¹ÈÒ9Pð(Ûð  ×+Ñ+¨DÓ1×8Ñ8�ØÐ'Ð'Ð'ØˆŒ
Ü)¨$Ó/ˆŒØˆÔØ+/ˆÔØ"ˆÕøô ò Ùðús   ÁB Â	BÂBc                óF   — | j                   �| j                   S t        «       S ©N)r_   r   ©ra   s    r   Ú	fullwidthzTerminalWriter.fullwidth\   s#   € à×ÑÐ+Ø×'Ñ'Ð'Ü!Ó#Ð#r   c                ó   — || _         y rd   )r_   )ra   Úvalues     r   rf   zTerminalWriter.fullwidthb   s
   € à$ˆÕr   c                ó,   — t        | j                  «      S )z;Return an estimate of the width so far in the current line.)r   r^   re   s    r   Úwidth_of_current_linez$TerminalWriter.width_of_current_linef   s   € ô ˜×*Ñ*Ó+Ð+r   c                ó  — |D ]  }|| j                   vsŒt        d|›�«      ‚ | j                  rR|j                  «       D ��cg c]  \  }}|sŒ	| j                   |   ‘Œ }}}|rdj	                  d„ |D «       «      |z   dz   }|S c c}}w )Nzunknown markup: rT   c              3  ó(   K  — | ]
  }d |› d�–— Œ y­w)z[ÚmN© )Ú.0Úcods     r   ú	<genexpr>z(TerminalWriter.markup.<locals>.<genexpr>r   s   è ø€ Ò=°#  s e¨1œ~Ñ=ùs   ‚ú[0m)Ú	_esctableÚ
ValueErrorr]   ÚitemsÚjoin)ra   ÚtextÚmarkupÚnameÚonÚescs         r   rx   zTerminalWriter.markupk   s�   € Øò 	>ˆDØ˜4Ÿ>™>Ò)Ü Ð#3°D°8Ð!<Ó=Ð=ð	>ð �>Š>Ø8>¿¹»×M©H¨D°"Ê"�4—>‘> $Ó'ÐMˆCÑMÙØ—w‘wÑ=¸Ô=Ó=ÀÑDÀyÑP�Øˆùó Ns   Á
BÁBc                ó†  — |€| j                   }t        j                  dk(  r|dz  }|�:t        |t	        |«      z
  dz
  dt	        |«      z  z  d«      }||z  }|› d|› d|› �}n||t	        |«      z  z  }t	        |«      t	        |j                  «       «      z   |k  r||j                  «       z  } | j                  |fi |¤Ž y )NrS   r   r   ú )rf   rU   rW   ÚmaxÚlenÚrstripÚline)ra   ÚsepcharÚtitlerf   rx   ÚNÚfillr�   s           r   ÚsepzTerminalWriter.sepu   sÓ   € ð ÐØŸ™ˆIô �<‰<˜7Ò"ð
 ˜‰NˆIØÐô
 �Y¤ U£Ñ+¨aÑ/°Q¼¸W»Ñ5EÑFÈÓJˆAØ˜Q‘;ˆDØ�V˜1˜U˜G 1 T FÐ+‰Dð ˜i¬3¨w«<Ñ7Ñ8ˆDô ˆt‹9”s˜7Ÿ>™>Ó+Ó,Ñ,°	Ò9Ø�G—N‘NÓ$Ñ$ˆDàˆ�	‰	�$Ñ!˜&Ó!r   F©Úflushc               óÂ   — |r]|j                  dd«      d   }d|v r|| _        n| xj                  |z  c_         | j                  |fi |¤Ž}| j                  ||¬«       y y )Nú
r   éÿÿÿÿr‡   )Úrsplitr^   rx   Ú	write_raw)ra   Úmsgrˆ   rx   Úcurrent_lines        r   ÚwritezTerminalWriter.writeš   sd   € ÙØŸ:™: d¨AÓ.¨rÑ2ˆLØ�s‰{Ø%1�Õ"à×"Ò" lÑ2Õ"à�$—+‘+˜cÑ, VÑ,ˆCà�N‰N˜3 eˆNÕ,ð r   c               óö   — 	 | j                   j                  |«       |r| j                  «        y y # t        $ r> |j                  d«      j	                  d«      }| j                   j                  |«       Y ŒZw xY w)Nzunicode-escapeÚascii)r\   r�   ÚUnicodeEncodeErrorÚencodeÚdecoderˆ   )ra   rŽ   rˆ   s      r   r�   zTerminalWriter.write_raw¦   sk   € ð
	"Ø�J‰J×Ñ˜SÔ!ñ Ø�J‰J�Lð øô "ò 	"ð —*‘*Ð-Ó.×5Ñ5°gÓ>ˆCØ�J‰J×Ñ˜SÖ!ð	"ús   ‚1 ±AA8Á7A8c                óL   —  | j                   |fi |¤Ž | j                  d«       y )NrŠ   )r�   )ra   Úsrx   s      r   r�   zTerminalWriter.line¶   s!   € Øˆ�
‰
�1Ñ˜ÒØ�
‰
�4Õr   c                ó8   — | j                   j                  «        y rd   )r\   rˆ   re   s    r   rˆ   zTerminalWriter.flushº   s   € Ø�
‰
×ÑÕr   rn   c                óT  — |r;t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚|sdgt        |«      z  }dj                  |«      }| j                  |«      j	                  «       }t        ||d¬«      D ]  \  }}| j                  ||z   «       Œ y)	aI  Write lines of source code possibly highlighted.

        Keeping this private for now because the API is clunky. We should discuss how
        to evolve the terminal writer so we can have more precise color support, for example
        being able to write part of a line in one color and the rest in another, and so on.
        zindents size (z") should have same size as lines (ú)rT   rŠ   F)ÚstrictN)r   rt   rv   Ú
_highlightÚ
splitlinesÚzipr�   )ra   ÚlinesÚindentsÚsourceÚ	new_linesÚindentÚnew_lines          r   Ú_write_sourcezTerminalWriter._write_source½   s«   € ñ ”s˜7“|¤s¨5£zÒ1ÜØ ¤ W£ Ð.PÔQTÐUZÓQ[ÐP\Ð\]Ð^óð ñ Ø�dœS ›ZÑ'ˆGØ—‘˜5Ó!ˆØ—O‘O FÓ+×6Ñ6Ó8ˆ	ä # G¨Y¸uÔ Eò 	)ÑˆF�HØ�I‰I�f˜xÑ'Õ(ñ	)r   c                óV   — |dk(  r
t        «       S |dk(  r
t        «       S t        |«       y )NÚpythonÚdiff)r   r
   r   )ra   Úlexers     r   Ú_get_pygments_lexerz"TerminalWriter._get_pygments_lexerÐ   s)   € Ø�HÒÜ“=Ð Ø�fŠ_Ü“;Ðä˜Õr   c                ó>  — ddl m} t        j                  d«      }t        j                  dd«      }	 t	        ||¬«      S # t
        j                  j                  $ r} |d|› d�«      |‚d }~wt
        j                  j                  $ r} |d	|› d
�«      |‚d }~ww xY w)Nr   )Ú
UsageErrorÚPYTEST_THEMEÚPYTEST_THEME_MODEÚdark)ÚbgÚstylez9PYTEST_THEME environment variable has an invalid value: 'zC'. Hint: See available pygments styles with `pygmentize -L styles`.z>PYTEST_THEME_MODE environment variable has an invalid value: 'z7'. The allowed values are 'dark' (default) and 'light'.)	Ú_pytest.config.exceptionsr¬   r%   Úgetenvr   ÚpygmentsÚutilÚClassNotFoundÚOptionError)ra   r¬   ÚthemeÚ
theme_modeÚes        r   Ú_get_pygments_formatterz&TerminalWriter._get_pygments_formatterØ   s³   € Ý8ä—	‘	˜.Ó)ˆÜ—Y‘YÐ2°FÓ;ˆ
ð	Ü$¨
¸%Ô@Ð@øÜ�}‰}×*Ñ*ò 	ÙØKÈEÈ7ð SSð Sóð ðûô �}‰}×(Ñ(ò 	ÙØPÐQ[ÐP\ð ]Gð Góð ðûð	ús#   ³A  Á BÁA*Á* BÂ
BÂBc                óâ   — |r| j                   r| j                  s|S | j                  |«      }| j                  «       }t	        j
                  |||«      }|d   dk(  r|d   dk7  r|dd }d|z   }|S )z5Highlight the given source if we have markup support.r‹   rŠ   Nrr   )r]   r`   rª   r»   r´   Ú	highlight)ra   r¡   r©   Úpygments_lexerÚpygments_formatterÚhighlighteds         r   rœ   zTerminalWriter._highlightë   sˆ   € ñ ˜TŸ^š^°4×3FÒ3FØˆMà×1Ñ1°%Ó8ˆØ!×9Ñ9Ó;Ðä#×-Ñ-Ø�NÐ$6ó
ˆð
 �r‰?˜dÒ" v¨b¡z°TÒ'9Ø% c rÐ*ˆKð
   +Ñ-ˆàÐr   rd   )r)   zTextIO | NoneÚreturnÚNone©rÁ   Úint)rh   rÄ   rÁ   rÂ   )rw   Ústrrx   ÚboolrÁ   rÅ   )NN)
r‚   rÅ   rƒ   z
str | Nonerf   z
int | Nonerx   rÆ   rÁ   rÂ   )rŽ   rÅ   rˆ   rÆ   rx   rÆ   rÁ   rÂ   )rŽ   rÅ   rˆ   rÆ   rÁ   rÂ   )rT   )r—   rÅ   rx   rÆ   rÁ   rÂ   )rÁ   rÂ   )rn   )rŸ   úSequence[str]r    rÇ   rÁ   rÂ   )r©   zLiteral['python', 'diff']rÁ   r	   )rÁ   r   )r§   )r¡   rÅ   r©   zLiteral['diff', 'python']rÁ   rÅ   )Ú__name__Ú
__module__Ú__qualname__Údictrs   rb   Úpropertyrf   Úsetterrj   rx   r†   r�   r�   r�   rˆ   r¥   rª   r»   rœ   rn   r   r   r,   r,   2   sª  „ áò Ùðáðñ ðñ ð	ñ
 ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ ðñ  ð!ñ" ð#ñ$ ð%ñ& ð'ñ( ð)€Iô.#ð" ò$ó ð$ð
 ×Ñò%ó ð%ð ò,ó ð,óð !Ø $ð	#"àð#"ð ð#"ð ð	#"ð
 ð#"ð 
ó#"ðJ 05õ 
-ð 49õ ô óô)ó& óð( ?GðØðØ";ðà	ôr   r,   rÃ   )r)   r   rÁ   rÆ   )Ú__doc__Ú
__future__r   Úcollections.abcr   r%   r   rU   Útypingr   r   r   r´   Úpygments.formatters.terminalr   Úpygments.lexerr	   Úpygments.lexers.diffr
   Úpygments.lexers.pythonr   Úcompatr   Úwcwidthr   r   r*   r,   rn   r   r   ú<module>rØ      s[   ðÙ :å "å $Û 	Û Û 
Ý Ý Ý ã Ý :Ý  Ý *Ý .å !Ý óóð ÷Oð Oó ñOr   