§
    øÛgV;  ã                   óÚ  — d 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Zddl	Z	ddl
mZ ej        j        Zdddd	œZd
„ Z e	j        d¬¦  «        d„ ¦   «         Z G d„ d¦  «        ZdZe	j        d„ ¦   «         Ze	j        d„ ¦   «         Z G d„ d¦  «        Zd$d„Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d ¦  «        Z G d!„ d"¦  «        Z d#„ Z!dS )%z.
per-test stdout/stderr capturing mechanism.

é    )Úwith_statementN)ÚTemporaryFile)ÚTextIOÚstdinÚstdoutÚstderr)r   é   é   c                 óÌ   — |                       d¦  «        }|                     ddt          t          d¦  «        rdnddg d¢d	¬
¦  «         |                     ddddd¬¦  «         d S )NÚgeneralz	--captureÚstoreÚdupÚfdÚsysÚmethod)r   r   Únoz,per-test capturing method: one of fd|sys|no.)ÚactionÚdefaultÚmetavarÚchoicesÚhelpz-sÚstore_constr   Úcapturezshortcut for --capture=no.)r   ÚconstÚdestr   )ÚgetgroupÚ
_addoptionÚhasattrÚos)ÚparserÚgroups     úE/granary/edev/quantum/lib/python3.11/site-packages/_pytest/capture.pyÚpytest_addoptionr#      s�   € Ø�OŠO˜IÑ&Ô&€EØ	×ÒØ˜GÝ¥ EÑ*Ô*Ð5��°ØÐ"5Ð"5Ð"5Ø;ð	 ñ =ô =ð =ð
 
×ÒØ�]¨$°YØ)ð ñ +ô +ð +ð +ð +ó    T©Úhookwrapperc              #   óæ  K  — t          ¦   «          | j        }| j        }t          |j        ¦  «        }|                     |d¦  «         |                      |j        ¦  «         d„ }|                      |¦  «         |                     ¦   «          d V —}| 	                    ¦   «         \  }}	|j
        �@t          j                             |¦  «         t          j                             |	¦  «         d S d S )NÚcapturemanagerc                  óT   — dt           j        v rdt           j        d         _        d S d S )NÚloggingF)r   ÚmodulesÚraiseExceptions© r$   r"   Úsilence_logging_at_shutdownzBpytest_load_initial_conftests.<locals>.silence_logging_at_shutdown-   s,   € Ø�œÐ#Ð#Ø5:�CŒK˜	Ô"Ô2Ð2Ð2ð $Ð#r$   )Ú_readline_workaroundÚknown_args_namespaceÚpluginmanagerÚCaptureManagerr   ÚregisterÚadd_cleanupÚreset_capturingsÚinit_capturingsÚsuspendcaptureÚexcinfor   r   Úwriter   )
Úearly_configr    ÚargsÚnsr1   Úcapmanr.   ÚoutcomeÚoutÚerrs
             r"   Úpytest_load_initial_conftestsrA   !   sû   è è € åÑÔÐØ	Ô	*€BØ Ô.€MÝ˜BœJÑ'Ô'€FØ×Ò˜6Ð#3Ñ4Ô4Ð4ð ×Ò˜VÔ4Ñ5Ô5Ð5ð;ð ;ð ;ð ×ÒÐ8Ñ9Ô9Ð9ð ×ÒÑÔÐØˆeˆe€GØ×$Ò$Ñ&Ô&�H€CˆØ„Ð"ÝŒ
×Ò˜ÑÔÐÝŒ
×Ò˜ÑÔÐÐÐð #Ð"r$   c                   ó€  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z	d	„ Z
 ej        d
¬¦  «        d„ ¦   «         Z ej        d
¬¦  «        d„ ¦   «         Z ej        d
¬¦  «        d„ ¦   «         Z ej        d
¬¦  «        d„ ¦   «         Z ej        d
¬¦  «        d„ ¦   «         Z ej        d
¬¦  «        d„ ¦   «         Zdd„ZdS )r2   c                 ó   — || _         d S ©N)Ú_method©Úselfr   s     r"   Ú__init__zCaptureManager.__init__<   s   € ØˆŒˆˆr$   c                 óÊ   — |dk    rt          ddt          ¬¦  «        S |dk    rt          ddt          ¬¦  «        S |dk    rt          ddd¬¦  «        S t          d|z  ¦  «        ‚)	Nr   T)r?   r@   ÚCapturer   r   F)r?   r@   Úin_zunknown capturing method: %r)ÚMultiCaptureÚ	FDCaptureÚ
SysCaptureÚ
ValueErrorrF   s     r"   Ú_getcapturezCaptureManager._getcapture?   sp   € Ø�TŠ>ˆ>Ý D¨d½IÐFÑFÔFÐFØ�uŠ_ˆ_Ý D¨d½JÐGÑGÔGÐGØ�tŠ^ˆ^Ý E¨u¸%Ð@Ñ@Ô@Ð@åÐ;¸fÑDÑEÔEÐEr$   c                 óš   — t          | d¦  «        rJ ‚|                      | j        ¦  «        | _        | j                             ¦   «          d S ©NÚ
_capturing)r   rP   rE   rS   Ústart_capturing©rG   s    r"   r6   zCaptureManager.init_capturingsI   sI   € Ý˜4 Ñ.Ô.Ð.Ð.Ð.Ø×*Ò*¨4¬<Ñ8Ô8ˆŒØŒ×'Ò'Ñ)Ô)Ð)Ð)Ð)r$   c                 ó”   — | j                              dd ¦  «        }|�*|                     ¦   «          |                     ¦   «          d S d S rR   )Ú__dict__ÚpopÚpop_outerr_to_origÚstop_capturing©rG   Úcaps     r"   r5   zCaptureManager.reset_capturingsN   sO   € ØŒm×Ò ¨dÑ3Ô3ˆØˆ?Ø×"Ò"Ñ$Ô$Ð$Ø×ÒÑ Ô Ð Ð Ð ð ˆ?r$   c                 ó8   — | j                              ¦   «          d S rD   )rS   Úresume_capturingrU   s    r"   ÚresumecapturezCaptureManager.resumecaptureT   s   € ØŒ×(Ò(Ñ*Ô*Ð*Ð*Ð*r$   Fc                 óæ   — |                       ¦   «          t          | dd ¦  «        }|�I	 |                     ¦   «         }|                     |¬¦  «         n# |                     |¬¦  «         w xY w|S d S )NrS   ©rK   )Údeactivate_funcargsÚgetattrÚ
readouterrÚsuspend_capturing)rG   rK   r\   Úouterrs       r"   r7   zCaptureManager.suspendcaptureW   s�   € Ø× Ò Ñ"Ô"Ð"Ý�d˜L¨$Ñ/Ô/ˆØˆ?ð/ØŸšÑ)Ô)�à×%Ò%¨#Ð%Ñ.Ô.Ð.Ð.ø�×%Ò%¨#Ð%Ñ.Ô.Ð.Ð.øøøØˆMð ˆ?s   ©A ÁA,c                 óz   — |j                              dd ¦  «        }|�|                     ¦   «          || _        d S d S ©NÚ_capfuncarg)rW   rX   Ú_startri   )rG   Ú
pyfuncitemÚ
capfuncargs      r"   Úactivate_funcargsz CaptureManager.activate_funcargsa   sH   € ØÔ(×,Ò,¨]¸DÑAÔAˆ
ØÐ!Ø×ÒÑÔÐØ)ˆDÔÐÐð "Ð!r$   c                 ól   — | j                              dd ¦  «        }|�|                     ¦   «          d S d S rh   )rW   rX   Úclose)rG   rl   s     r"   rb   z"CaptureManager.deactivate_funcargsg   s?   € Ø”]×&Ò& }°dÑ;Ô;ˆ
ØÐ!Ø×ÒÑÔÐÐÐð "Ð!r$   Tr%   c              #   óL  K  — t          |t          j        ¦  «        rƒ|                      ¦   «          d V —}|                      ¦   «         \  }}|                     ¦   «         }|r|j                             d|f¦  «         |r|j                             d|f¦  «         d S d S d V — d S )NzCaptured stdoutzCaptured stderr)Ú
isinstanceÚpytestÚFiler_   r7   Ú
get_resultÚsectionsÚappend)rG   Ú	collectorr>   r?   r@   Úreps         r"   Úpytest_make_collect_reportz)CaptureManager.pytest_make_collect_reportl   sÂ   è è € å�i¥¤Ñ-Ô-ð 
	Ø×ÒÑ Ô Ð Ø�e�eˆGØ×*Ò*Ñ,Ô,‰HˆC�Ø×$Ò$Ñ&Ô&ˆCØð >Ø”×#Ò#Ð%6¸Ð$<Ñ=Ô=Ð=Øð >Ø”×#Ò#Ð%6¸Ð$<Ñ=Ô=Ð=Ð=Ð=ð>ð >ð ˆEˆEˆEˆEˆEr$   c              #   óf   K  — |                       ¦   «          d V — |                      |d¦  «         d S )NÚsetup©r_   Úsuspendcapture_item©rG   Úitems     r"   Úpytest_runtest_setupz#CaptureManager.pytest_runtest_setupz   s=   è è € à×ÒÑÔÐØˆˆˆØ× Ò   wÑ/Ô/Ð/Ð/Ð/r$   c              #   ó�   K  — |                       ¦   «          |                      |¦  «         d V — |                      |d¦  «         d S )NÚcall)r_   rm   r}   r~   s     r"   Úpytest_runtest_callz"CaptureManager.pytest_runtest_call€   sQ   è è € à×ÒÑÔÐØ×Ò˜tÑ$Ô$Ð$Øˆˆˆà× Ò   vÑ.Ô.Ð.Ð.Ð.r$   c              #   óf   K  — |                       ¦   «          d V — |                      |d¦  «         d S )NÚteardownr|   r~   s     r"   Úpytest_runtest_teardownz&CaptureManager.pytest_runtest_teardownˆ   s=   è è € à×ÒÑÔÐØˆˆˆØ× Ò   zÑ2Ô2Ð2Ð2Ð2r$   )Útryfirstc                 ó.   — |                       ¦   «          d S rD   ©r5   ©rG   r8   s     r"   Úpytest_keyboard_interruptz(CaptureManager.pytest_keyboard_interruptŽ   ó   € à×ÒÑÔÐÐÐr$   c                 ó.   — |                       ¦   «          d S rD   r‰   rŠ   s     r"   Úpytest_internalerrorz#CaptureManager.pytest_internalerror’   rŒ   r$   c                 ó”   — |                       |¬¦  «        \  }}|                     |d|¦  «         |                     |d|¦  «         d S )Nra   r   r   )r7   Úadd_report_section)rG   r   ÚwhenrK   r?   r@   s         r"   r}   z"CaptureManager.suspendcapture_item–   sR   € Ø×&Ò&¨3Ð&Ñ/Ô/‰ˆˆSØ×Ò  h°Ñ4Ô4Ð4Ø×Ò  h°Ñ4Ô4Ð4Ð4Ð4r$   N©F)Ú__name__Ú
__module__Ú__qualname__rH   rP   r6   r5   r_   r7   rm   rb   rr   Úhookimplry   r€   rƒ   r†   r‹   rŽ   r}   r-   r$   r"   r2   r2   ;   sª  € € € € € ðð ð ðFð Fð Fð*ð *ð *ð
!ð !ð !ð+ð +ð +ðð ð ð ð*ð *ð *ðð ð ð
 €V„_ Ð&Ñ&Ô&ðð ñ 'Ô&ðð €V„_ Ð&Ñ&Ô&ð0ð 0ñ 'Ô&ð0ð
 €V„_ Ð&Ñ&Ô&ð/ð /ñ 'Ô&ð/ð €V„_ Ð&Ñ&Ô&ð3ð 3ñ 'Ô&ð3ð
 €V„_˜dÐ#Ñ#Ô#ð ð  ñ $Ô#ð ð €V„_˜dÐ#Ñ#Ô#ð ð  ñ $Ô#ð ð5ð 5ð 5ð 5ð 5ð 5r$   r2   z,cannot use capsys and capfd at the same timec                 óŽ   — d| j         v r|                      t          ¦  «        ‚t          t          | ¦  «        x| j        _        }|S )z±Enable capturing of writes to sys.stdout/sys.stderr and make
    captured output available via ``capsys.readouterr()`` method calls
    which return a ``(out, err)`` tuple.
    Úcapfd)ÚfixturenamesÚ
raiseerrorÚerror_capsysfderrorÚCaptureFixturerN   Únoderi   ©ÚrequestÚcs     r"   Úcapsysr¡   ž   sE   € ð �'Ô&Ð&Ð&Ø× Ò Õ!4Ñ5Ô5Ð5Ý#1µ*¸gÑ#FÔ#FÐF€G„LÔ˜qØ€Hr$   c                 óà   — d| j         v r|                      t          ¦  «         t          t          d¦  «        st          j        d¦  «         t          t          | ¦  «        x| j	        _
        }|S )z³Enable capturing of writes to file descriptors 1 and 2 and make
    captured output available via ``capfd.readouterr()`` method calls
    which return a ``(out, err)`` tuple.
    r¡   r   zcapfd funcarg needs os.dup)r™   rš   r›   r   r   rr   Úskiprœ   rM   r�   ri   rž   s     r"   r˜   r˜   ©   sh   € ð �7Ô'Ð'Ð'Ø×ÒÕ.Ñ/Ô/Ð/Ý•2�uÑÔð 2ÝŒÐ0Ñ1Ô1Ð1Ý#1µ)¸WÑ#EÔ#EÐE€G„LÔ˜qØ€Hr$   c                   óF   — e Zd Zd„ Zd„ Zd„ Zd„ Zej        d„ ¦   «         Z	dS )rœ   c                 ó"   — || _         || _        d S rD   )ÚcaptureclassrŸ   )rG   r¦   rŸ   s      r"   rH   zCaptureFixture.__init__¸   s   € Ø(ˆÔØˆŒˆˆr$   c                 ór   — t          ddd| j        ¬¦  «        | _        | j                             ¦   «          d S )NTF)r?   r@   rK   rJ   )rL   r¦   Ú_capturerT   rU   s    r"   rj   zCaptureFixture._start¼   sA   € Ý$¨°4¸UØ-1Ô->ð@ñ @ô @ˆŒàŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r$   c                 óž   — | j                              dd ¦  «        }|�/|                     ¦   «         | _        |                     ¦   «          d S d S )Nr¨   )rW   rX   rY   Ú_outerrrZ   r[   s     r"   ro   zCaptureFixture.closeÁ   sP   € ØŒm×Ò 
¨DÑ1Ô1ˆØˆ?Ø×1Ò1Ñ3Ô3ˆDŒLØ×ÒÑ Ô Ð Ð Ð ð ˆ?r$   c                 ód   — 	 | j                              ¦   «         S # t          $ r
 | j        cY S w xY wrD   )r¨   rd   ÚAttributeErrorrª   rU   s    r"   rd   zCaptureFixture.readouterrÇ   sD   € ð	 Ø”=×+Ò+Ñ-Ô-Ð-øÝð 	 ð 	 ð 	 Ø”<ÐÐÐð	 øøøs   ‚ ›/®/c              #   óú   K  — | j         j        j                             d¦  «        }|                     | j         j        dd¬¦  «         	 d V — |                     ¦   «          d S # |                     ¦   «          w xY w)Nr(   r‚   Tra   )rŸ   Úconfigr1   Ú	getpluginr}   r�   r_   )rG   Ú
capmanagers     r"   ÚdisabledzCaptureFixture.disabledÍ   s€   è è € à”\Ô(Ô6×@Ò@ÐAQÑRÔRˆ
Ø×&Ò& t¤|Ô'8¸&ÀdÐ&ÑKÔKÐKð	'ØˆEˆEˆEà×$Ò$Ñ&Ô&Ð&Ð&Ð&øˆJ×$Ò$Ñ&Ô&Ð&Ð&øøøs   Á
A$ Á$A:N)
r“   r”   r•   rH   rj   ro   rd   Ú
contextlibÚcontextmanagerr±   r-   r$   r"   rœ   rœ   ·   so   € € € € € ðð ð ð(ð (ð (ð
!ð !ð !ð ð  ð  ð Ôð'ð 'ñ Ôð'ð 'ð 'r$   rœ   ÚUTF8c                 óH  — t          | dd¦  «        }	 |                      ¦   «         }t          j        |¦  «        }d|vr|dz  }t          j        ||d¦  «        } n7# t
          $ r* dt          | dd¦  «        vrt          | d¦  «        r| cY S Y nw xY wt          | |p|¦  «        S )za return a open text file object that's a duplicate of f on the
        FD-level if possible.
    ÚencodingNÚbr   ÚmodeÚ )rc   Úfilenor   r   ÚfdopenÚ	Exceptionr   ÚEncodedFile)Úfr¸   Údefault_encodingr¶   r   Únewfds         r"   Úsafe_text_dupfilerÁ   ×   sÃ   € õ �q˜* dÑ+Ô+€Hð
&Ø�XŠX‰ZŒZˆõ ”�r‘
”
ˆØ�dˆ?ˆ?Ø�C‰KˆDÝŒI�e˜T 1Ñ%Ô%ˆˆøõ ð ð ð Ø•g˜a ¨Ñ,Ô,Ð,Ð,µ¸¸JÑ1GÔ1GÐ,àˆHˆHˆHøøðøøøõ �q˜(Ð6Ð&6Ñ7Ô7Ð7s   “A Á/BÂBc                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )r½   Ústrictc                 ó"   — || _         || _        d S rD   )Úbufferr¶   )rG   rÅ   r¶   s      r"   rH   zEncodedFile.__init__ì   s   € ØˆŒØ ˆŒˆˆr$   c                 óš   — t          |t          ¦  «        r|                     | j        d¦  «        }| j                             |¦  «         d S )NÚreplace)rq   ÚunicodeÚencoder¶   rÅ   r9   )rG   Úobjs     r"   r9   zEncodedFile.writeð   sE   € Ý�c�7Ñ#Ô#ð 	7Ø—*’*˜Tœ]¨IÑ6Ô6ˆCØŒ×Ò˜#ÑÔÐÐÐr$   c                 óZ   — d                      |¦  «        }|                      |¦  «         d S )Nr¹   )Újoinr9   )rG   ÚlinelistÚdatas      r"   Ú
writelineszEncodedFile.writelinesõ   s+   € Ø�wŠw�xÑ Ô ˆØ�
Š
�4ÑÔÐÐÐr$   c                 óT   — t          t                               | d¦  «        |¦  «        S )NrÅ   )rc   ÚobjectÚ__getattribute__)rG   Únames     r"   Ú__getattr__zEncodedFile.__getattr__ù   s"   € Ý•v×.Ò.¨t°XÑ>Ô>ÀÑEÔEÐEr$   N)r“   r”   r•   ÚerrorsrH   r9   rÏ   rÔ   r-   r$   r"   r½   r½   ê   sZ   € € € € € Ø€Fð!ð !ð !ðð ð ð
ð ð ðFð Fð Fð Fð Fr$   r½   c                   óH   — e Zd ZdxZxZZdd„Zd„ Zd„ Zdd„Z	d„ Z
d	„ Zd
„ ZdS )rL   NTc                 óv   — |r |d¦  «        | _         |r |d¦  «        | _        |r |d¦  «        | _        d S d S )Nr   r	   r
   )rK   r?   r@   )rG   r?   r@   rK   rJ   s        r"   rH   zMultiCapture.__init__   sU   € Øð 	"Ø�w˜q‘z”zˆDŒHØð 	"Ø�w˜q‘z”zˆDŒHØð 	"Ø�w˜q‘z”zˆDŒHˆHˆHð	"ð 	"r$   c                 óÊ   — | j         r| j                              ¦   «          | j        r| j                             ¦   «          | j        r| j                             ¦   «          d S d S rD   )rK   Ústartr?   r@   rU   s    r"   rT   zMultiCapture.start_capturing  sf   € ØŒ8ð 	ØŒH�NŠNÑÔÐØŒ8ð 	ØŒH�NŠNÑÔÐØŒ8ð 	ØŒH�NŠNÑÔÐÐÐð	ð 	r$   c                 ó¨   — |                       ¦   «         \  }}|r| j                             |¦  «         |r| j                             |¦  «         ||fS )zA pop current snapshot out/err capture and flush to orig streams. )rd   r?   Úwriteorgr@   )rG   r?   r@   s      r"   rY   zMultiCapture.pop_outerr_to_orig  sZ   € à—?’?Ñ$Ô$‰ˆˆSØð 	#ØŒH×Ò˜cÑ"Ô"Ð"Øð 	#ØŒH×Ò˜cÑ"Ô"Ð"Ø�Cˆxˆr$   Fc                 óà   — | j         r| j                              ¦   «          | j        r| j                             ¦   «          |r)| j        r$| j                             ¦   «          d| _        d S d S d S )NT)r?   Úsuspendr@   rK   Ú_in_suspended)rG   rK   s     r"   re   zMultiCapture.suspend_capturing  s…   € ØŒ8ð 	ØŒH×ÒÑÔÐØŒ8ð 	ØŒH×ÒÑÔÐØð 	&�4”8ð 	&ØŒH×ÒÑÔÐØ!%ˆDÔÐÐð	&ð 	&ð 	&ð 	&r$   c                 óà   — | j         r| j                              ¦   «          | j        r| j                             ¦   «          t          | d¦  «        r| j                             ¦   «          | `d S d S )NrÞ   )r?   Úresumer@   r   rK   rÞ   rU   s    r"   r^   zMultiCapture.resume_capturing"  st   € ØŒ8ð 	ØŒH�OŠOÑÔÐØŒ8ð 	ØŒH�OŠOÑÔÐÝ�4˜Ñ)Ô)ð 	#ØŒH�OŠOÑÔÐØÐ"Ð"Ð"ð	#ð 	#r$   c                 ó  — t          | d¦  «        rt          d¦  «        ‚d| _        | j        r| j                             ¦   «          | j        r| j                             ¦   «          | j        r| j                             ¦   «          dS dS )z, stop capturing and reset capturing streams Ú_resetzwas already stoppedTN)r   rO   râ   r?   Údoner@   rK   rU   s    r"   rZ   zMultiCapture.stop_capturing+  sƒ   € å�4˜Ñ"Ô"ð 	4ÝÐ2Ñ3Ô3Ð3ØˆŒØŒ8ð 	ØŒH�MŠM‰OŒOˆOØŒ8ð 	ØŒH�MŠM‰OŒOˆOØŒ8ð 	ØŒH�MŠM‰OŒOˆOˆOˆOð	ð 	r$   c                 óŠ   — | j         �| j                              ¦   «         nd| j        �| j                             ¦   «         ndfS )z< return snapshot unicode value of stdout/stderr capturings. Nr¹   )r?   Úsnapr@   rU   s    r"   rd   zMultiCapture.readouterr7  s>   € à#'¤8Ð#7�”—’‘”�¸RØ#'¤8Ð#7�”—’‘”�¸RðAð 	Ar$   )TTTNr’   )r“   r”   r•   r?   r@   rK   rH   rT   rY   re   r^   rZ   rd   r-   r$   r"   rL   rL   ý   s›   € € € € € ØÐ€CÐˆ#�ð"ð "ð "ð "ðð ð ðð ð ð&ð &ð &ð &ð#ð #ð #ð
ð 
ð 
ðAð Að Að Að Ar$   rL   c                   ó$   — e Zd Zd„ xZxZxZxZZdS )Ú	NoCapturec                  ó   — d S rD   r-   )r;   s    r"   ú<lambda>zNoCapture.<lambda>=  s   € ¸t€ r$   N)r“   r”   r•   rH   rÙ   rã   rÝ   rà   r-   r$   r"   rç   rç   <  s*   € € € € € Ø1CÐ1CÐC€HÐCˆuÐC�tÐC˜g¨¨¨r$   rç   c                   óD   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ ZdS )rM   z5 Capture IO to/from a given os-level filedescriptor. Nc                 ó0  — || _         	 t          j        | j         ¦  «        | _        |dk    r;|r
J d¦   «         ‚t	          t          j        d¦  «        }t          |¦  «        | _        nm|€9t          ¦   «         }|5  t          |d¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |t          v rt          ||¦  «        | _        nt          ¦   «         | _        || _        |                     ¦   «         | _        d S # t          $ r d„ | _        d„ | _        Y d S w xY w)Nr   zcannot set tmpfile with stdinÚrzwb+)r¸   c                  ó   — d S rD   r-   r-   r$   r"   ré   z$FDCapture.__init__.<locals>.<lambda>G  s   €  € r$   c                  ó   — d S rD   r-   r-   r$   r"   ré   z$FDCapture.__init__.<locals>.<lambda>H  s   €  € r$   )Útargetfdr   r   Útargetfd_saveÚopenÚdevnullrN   Ú
syscapturer   rÁ   Úpatchsysdictrç   Útmpfilerº   Ú
tmpfile_fdÚOSErrorrÙ   rã   )rG   rï   rõ   r¾   s       r"   rH   zFDCapture.__init__B  sj  € Ø ˆŒð	/Ý!#¤¨¬Ñ!6Ô!6ˆDÔð
 ˜1Š}ˆ}Ø"ÐCÐCÐ$CÑCÔCÐCÝ�rœz¨3Ñ/Ô/�Ý",¨XÑ"6Ô"6�”�à�?Ý%™œ�AØð Cð CÝ"3°A¸EÐ"BÑ"BÔ"B˜ðCð Cð Cñ Cô Cð Cð Cð Cð Cð Cð Cøøøð Cð Cð Cð Cà�|Ð+Ð+Ý&0°¸7Ñ&CÔ&C�D”O�Oå&/¡k¤k�D”OØ"ˆDŒLØ%ŸnšnÑ.Ô.ˆDŒOˆOˆOøõ% ð 	%ð 	%ð 	%Ø%˜ˆDŒJØ$˜ˆDŒIˆIˆIˆIð	%øøøs#   ‰C7 Á:BÂBÂBÃ7DÄDc                 ó(   — d| j         ›d| j        ›d�S )Nz<FDCapture z oldfd=ú>)rï   rð   rU   s    r"   Ú__repr__zFDCapture.__repr__Z  s   € € Ø,0¬M¨M¨M¸4Ô;MÐ;MÐ;MÐNÐNr$   c                 óô   — 	 t          j        | j        ¦  «         n$# t          t          f$ r t          d¦  «        ‚w xY wt          j        | j        | j        ¦  «         | j	         
                    ¦   «          dS )z6 Start capturing on targetfd using memorized tmpfile. z&saved filedescriptor not valid anymoreN)r   Úfstatrð   r¬   r÷   rO   Údup2rö   rï   ró   rÙ   rU   s    r"   rÙ   zFDCapture.start]  s�   € ð	GÝŒH�TÔ'Ñ(Ô(Ð(Ð(øÝ¥Ð(ð 	Gð 	Gð 	GÝÐEÑFÔFÐFð	Gøøøå
Œ�” ¤Ñ/Ô/Ð/ØŒ×ÒÑÔÐÐÐs   ‚ œ!=c                 óT  — | j         }|                     d¦  «         |                     ¦   «         }|rut          |dd ¦  «        }|r6t	          |t
          ¦  «        r!t          j                             ||d¦  «        }| 	                    d¦  «         |                     d¦  «         |S dS )Nr   r¶   rÇ   r¹   )
rõ   ÚseekÚreadrc   rq   ÚbytesÚpyÚbuiltinÚ_totextÚtruncate)rG   r¾   ÚresÚencs       r"   rå   zFDCapture.snapf  s˜   € ØŒLˆØ	�Šˆq‰	Œ	ˆ	Ø�fŠf‰hŒhˆØð 	Ý˜!˜Z¨Ñ.Ô.ˆCØð >•z #¥uÑ-Ô-ð >Ý”j×(Ò(¨¨c°9Ñ=Ô=�Ø�JŠJ�q‰MŒMˆMØ�FŠF�1‰IŒIˆIØˆJØˆrr$   c                 óú   — | j                              d¦  «        }t          j        || j        ¦  «         t          j        |¦  «         | j                             ¦   «          | j                             ¦   «          dS )za stop capturing, restore streams, return original capture file,
        seeked to position zero. rð   N)	rW   rX   r   rý   rï   ro   ró   rã   rõ   )rG   rð   s     r"   rã   zFDCapture.dones  sk   € ð œ×)Ò)¨/Ñ:Ô:ˆÝ
Œ�˜tœ}Ñ-Ô-Ð-Ý
Œ�ÑÔÐØŒ×ÒÑÔÐØŒ×ÒÑÔÐÐÐr$   c                 óv   — | j                              ¦   «          t          j        | j        | j        ¦  «         d S rD   )ró   rÝ   r   rý   rð   rï   rU   s    r"   rÝ   zFDCapture.suspend|  s3   € ØŒ×ÒÑ!Ô!Ð!Ý
Œ�Ô" D¤MÑ2Ô2Ð2Ð2Ð2r$   c                 óv   — | j                              ¦   «          t          j        | j        | j        ¦  «         d S rD   )ró   rà   r   rý   rö   rï   rU   s    r"   rà   zFDCapture.resume€  s2   € ØŒ×ÒÑ Ô Ð Ý
Œ�” ¤Ñ/Ô/Ð/Ð/Ð/r$   c                 ó¢   — t           j                             |¦  «        r|                     d¦  «        }t	          j        | j        |¦  «         dS )z$ write to original file descriptor. Úutf8N)r  r  Ú_istextrÉ   r   r9   rð   ©rG   rÎ   s     r"   rÛ   zFDCapture.writeorg„  sF   € åŒ:×Ò˜dÑ#Ô#ð 	'Ø—;’;˜vÑ&Ô&ˆDÝ
Œ�Ô# TÑ*Ô*Ð*Ð*Ð*r$   rD   )r“   r”   r•   Ú__doc__rH   rú   rÙ   rå   rã   rÝ   rà   rÛ   r-   r$   r"   rM   rM   ?  sš   € € € € € Ø?Ð?ð/ð /ð /ð /ð0Oð Oð Oð ð  ð  ðð ð ðð ð ð3ð 3ð 3ð0ð 0ð 0ð+ð +ð +ð +ð +r$   rM   c                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )
rN   Nc                 óº   — t           |         }t          t          |¦  «        | _        || _        |€#|dk    rt          ¦   «         }nt          ¦   «         }|| _        d S )Nr   )rô   rc   r   Ú_oldrÓ   ÚDontReadFromInputr   rõ   )rG   r   rõ   rÓ   s       r"   rH   zSysCapture.__init__Œ  sS   € Ý˜BÔˆÝ�C Ñ&Ô&ˆŒ	ØˆŒ	Øˆ?Ø�wŠˆÝ+Ñ-Ô-��å ™(œ(�ØˆŒˆˆr$   c                 óF   — t          t          | j        | j        ¦  «         d S rD   ©Úsetattrr   rÓ   rõ   rU   s    r"   rÙ   zSysCapture.start—  ó   € Ý•�T”Y ¤Ñ-Ô-Ð-Ð-Ð-r$   c                 ó�   — | j         }|                     ¦   «         }|                     d¦  «         |                     d¦  «         |S )Nr   )rõ   Úgetvaluer  rÿ   )rG   r¾   r  s      r"   rå   zSysCapture.snapš  s9   € ØŒLˆØ�jŠj‰lŒlˆØ	�
Š
�1‰ŒˆØ	�Šˆq‰	Œ	ˆ	Øˆ
r$   c                 ó|   — t          t          | j        | j        ¦  «         | `| j                             ¦   «          d S rD   )r  r   rÓ   r  rõ   ro   rU   s    r"   rã   zSysCapture.done¡  s7   € Ý•�T”Y ¤	Ñ*Ô*Ð*ØˆIØŒ×ÒÑÔÐÐÐr$   c                 óF   — t          t          | j        | j        ¦  «         d S rD   )r  r   rÓ   r  rU   s    r"   rÝ   zSysCapture.suspend¦  s   € Ý•�T”Y ¤	Ñ*Ô*Ð*Ð*Ð*r$   c                 óF   — t          t          | j        | j        ¦  «         d S rD   r  rU   s    r"   rà   zSysCapture.resume©  r  r$   c                 ól   — | j                              |¦  «         | j                              ¦   «          d S rD   )r  r9   Úflushr  s     r"   rÛ   zSysCapture.writeorg¬  s.   € ØŒ	�Š˜ÑÔÐØŒ	�ŠÑÔÐÐÐr$   rD   )
r“   r”   r•   rH   rÙ   rå   rã   rÝ   rà   rÛ   r-   r$   r"   rN   rN   ‹  s‚   € € € € € ð	ð 	ð 	ð 	ð.ð .ð .ðð ð ðð ð ð
+ð +ð +ð.ð .ð .ðð ð ð ð r$   rN   c                   óP   — e Zd ZdZdZd„ ZeZeZeZd„ Z	d„ Z
d„ Zed„ ¦   «         ZdS )r  a  Temporary stub class.  Ideally when stdin is accessed, the
    capturing should be turned off, with possibly all data captured
    so far sent to the screen.  This should be configurable, though,
    because in automated test runs it is better to crash than
    hang indefinitely.
    Nc                 ó    — t          d¦  «        ‚)Nz+reading from stdin while output is captured)ÚIOError)rG   r;   s     r"   r   zDontReadFromInput.read»  s   € ÝÐCÑDÔDÐDr$   c                 ó    — t          d¦  «        ‚)Nz/redirected Stdin is pseudofile, has no fileno())rO   rU   s    r"   rº   zDontReadFromInput.filenoÁ  s   € ÝÐJÑKÔKÐKr$   c                 ó   — dS )NFr-   rU   s    r"   ÚisattyzDontReadFromInput.isattyÄ  s   € Øˆur$   c                 ó   — d S rD   r-   rU   s    r"   ro   zDontReadFromInput.closeÇ  s   € Øˆr$   c                 óD   — t           j        dk    r| S t          d¦  «        ‚)N)é   r   z(redirected stdin has no attribute buffer)r   Úversion_infor¬   rU   s    r"   rÅ   zDontReadFromInput.bufferÊ  s$   € åÔ˜uÒ$Ð$ØˆKå Ð!KÑLÔLÐLr$   )r“   r”   r•   r  r¶   r   ÚreadlineÚ	readlinesÚ__iter__rº   r$  ro   ÚpropertyrÅ   r-   r$   r"   r  r  ±  s–   € € € € € ðð ð €HðEð Eð Eà€HØ€IØ€HðLð Lð Lðð ð ðð ð ð ðMð Mñ „XðMð Mð Mr$   r  c                  ót   — t           j                             d¦  «        sdS 	 ddl} dS # t          $ r Y dS w xY w)aF  
    Ensure readline is imported so that it attaches to the correct stdio
    handles on Windows.

    Pdb uses readline support where available--when not running from the Python
    prompt, the readline module is not imported until running the pdb REPL.  If
    running pytest with the --pdb option this means the readline module is not
    imported until after I/O capture has been started.

    This is a problem for pyreadline, which is often used to implement readline
    support on Windows, as it does not attach to the correct handles for stdout
    and/or stdin if they have been redirected by the FDCapture mechanism.  This
    workaround ensures that readline is imported before I/O capture is setup so
    that it can attach to the actual stdin/out for the console.

    See https://github.com/pytest-dev/pytest/pull/1281
    Úwin32Nr   )r   ÚplatformÚ
startswithr)  ÚImportError)r)  s    r"   r/   r/   Ò  sU   € õ& Œ<×"Ò" 7Ñ+Ô+ð ØˆðØˆˆˆˆˆøÝð ð ð Øˆˆðøøøs   £) ©
7¶7)r´   )"r  Ú
__future__r   r²   r   r   Útempfiler   r  rr   Úpy.ior   r  ÚtextrÈ   rô   r#   r–   rA   r2   r›   Úfixturer¡   r˜   rœ   rÁ   rÑ   r½   rL   rç   rM   rN   r  r/   r-   r$   r"   ú<module>r7     s³  ððð ð &Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð Ø 
€
€
€
Ø 	€	€	€	Ø "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€à Ð Ð Ð Ð Ð Ø
Œ*Œ/€à˜x¨HÐ5Ð5€ð	+ð 	+ð 	+ð €„˜TÐ"Ñ"Ô"ðð ñ #Ô"ðð2^5ð ^5ð ^5ð ^5ð ^5ñ ^5ô ^5ð ^5ð@ EÐ ð „ðð ñ „ðð „ð
ð 
ñ „ð
ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð@8ð 8ð 8ð 8ð&Fð Fð Fð Fð F�&ñ Fô Fð Fð&=Að =Að =Að =Að =A�6ñ =Aô =Að =Að~Dð Dð Dð Dð Dñ Dô Dð DðI+ð I+ð I+ð I+ð I+ñ I+ô I+ð I+ðX#ð #ð #ð #ð #ñ #ô #ð #ðLMð Mð Mð Mð Mñ Mô Mð MðBð ð ð ð r$   