ó
    Eñi{6  ã                  ó”  • S r SSKJr  SSKrSSKJr  SSKJr  SSKrSSKrSSK	r	SSK
Jr  SSKrSSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!  S!S jr"S"S jr#S#S jr$ " S S5      r% " S S5      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)(z4Interactive debugging with PDB, the Python Debugger.é    )ÚannotationsN)ÚCallable)Ú	Generator)ÚAny)Úoutcomes)ÚExceptionInfo)ÚCaptureManager)ÚConfig)ÚConftestImportFailure)Úhookimpl)ÚPytestPluginManager)ÚParser)Ú
UsageError)ÚNode)Ú
BaseReport)ÚCallInfoc                óŠ   •  U R                  S5      u  pX4$ ! [         a   n[        R                  " U < S35      UeSnAff = f)z#Validate syntax of --pdbcls option.Ú:z) is not in the format 'modname:classname'N)ÚsplitÚ
ValueErrorÚargparseÚArgumentTypeError)ÚvalueÚmodnameÚ	classnameÚes       ÚN/home/mande/repo/quber/.venv/lib/python3.13/site-packages/_pytest/debugging.pyÚ_validate_usepdb_clsr      sV   € ðØ"Ÿ[™[¨Ó-Ñˆð
 ÐÐøô	 ó Ü×(Ò(Ø‰iÐ@ÐAó
àð	ûðús   ‚ ˜
A¢=½Ac                óœ   • U R                  S5      nUR                  SSSSS9  UR                  SSS	[        S
S9  UR                  SSSSS9  g )NÚgeneralz--pdbÚusepdbÚ
store_truezDStart the interactive Python debugger on errors or KeyboardInterrupt)ÚdestÚactionÚhelpz--pdbclsÚ
usepdb_clszmodulename:classnamez{Specify a custom interactive Python debugger for use with --pdb.For example: --pdbcls=IPython.terminal.debugger:TerminalPdb)r#   ÚmetavarÚtyper%   z--traceÚtracez(Immediately break when running each test)ÚgetgroupÚ	addoptionr   )ÚparserÚgroups     r   Úpytest_addoptionr.   )   sq   € Ø�O‰O˜IÓ&€EØ	‡O�OØØØØSð	 ñ ð 
‡O�OØØØ&Ü!ðFð ñ ð 
‡O�OØØØØ7ð	 ò ó    c                ó"  ^• SS K mU R                  S5      (       a$  U R                  R                  [	        5       S5        U R                  S5      (       a$  U R                  R                  [        5       S5        [        R                  R                  TR                  [        R                  [        R                  45        [        R                  Tl	        U R                  [        l
        U [        l        SU4S jjnU R                  U5        g )Nr   r)   Úpdbtracer!   Ú	pdbinvokec                 óx   >• [         R                  R                  5       u  T l        [         l        [         l        g ©N)Ú	pytestPDBÚ_savedÚpopÚ	set_traceÚ_pluginmanagerÚ_config)Úpdbs   €r   ÚfinÚpytest_configure.<locals>.finR   s-   ø€ ô
 ×Ñ× Ñ Ó"ñ		
ØŒMÜÔ$ÜÕr/   ©ÚreturnÚNone)r;   ÚgetvalueÚpluginmanagerÚregisterÚPdbTraceÚ	PdbInvoker5   r6   Úappendr8   r9   r:   Úadd_cleanup)Úconfigr<   r;   s     @r   Úpytest_configurerI   A   s¼   ø€ Ûà‡��w×ÑØ×Ñ×%Ñ%¤h£j°*Ô=Ø‡��x× Ñ Ø×Ñ×%Ñ%¤i£k°;Ô?ä×Ñ×ÑØ	�‰œ	×0Ñ0´)×2CÑ2CÐDôô ×'Ñ'€C„MØ%×3Ñ3„IÔØ„IÔ÷#ð ×Ñ�sÕr/   c                  ó¶   • \ rS rSr% SrSrS\S'   SrS\S'   / rS\S	'   S
r	Sr
S\S'   \SS j5       r\SS j5       r\SS j5       r\S 5       r\SS j5       rSrg)r5   é\   z'Pseudo PDB that defers to the real pdb.NzPytestPluginManager | Noner9   zConfig | Noner:   zKlist[tuple[Callable[..., None], PytestPluginManager | None, Config | None]]r6   r   z"tuple[type[Any], type[Any]] | NoneÚ_wrapped_pdb_clsc                ó2   • U(       a  UR                  5       $ g)NF)Úis_capturing)ÚclsÚcapmans     r   Ú_is_capturingÚpytestPDB._is_capturingg   s   € æØ×&Ñ&Ó(Ð(Ør/   c                óf  • U R                   (       d  SS KnUR                  $ U R                   R                  S5      nU R                  (       a"  U R                  S   U:X  a  U R                  S   $ U(       aZ  Uu  pE [        U5        [        R                  U   nUR                  S5      n[        XgS   5      nUSS   H  n	[        X‰5      nM     OSS KnUR                  nU R                  X�5      nX<4U l        U$ ! [         a*  n
SR                  XE45      n[        SU< SU
 35      U
eS n
A
ff = f)Nr   r&   é   Ú.r   z--pdbcls: could not import z: )r:   r;   ÚPdbrA   rL   Ú
__import__ÚsysÚmodulesr   ÚgetattrÚ	ExceptionÚjoinr   Ú_get_pdb_wrapper_class)rO   rP   r;   r&   r   r   ÚmodÚpartsÚpdb_clsÚpartÚexcr   Úwrapped_clss                r   Ú_import_pdb_clsÚpytestPDB._import_pdb_clsm   s'  € à�{�{Ûð —7‘7ˆNà—[‘[×)Ñ)¨,Ó7ˆ
à×× C×$8Ñ$8¸Ñ$;¸zÓ$IØ×'Ñ'¨Ñ*Ð*æØ!+ÑˆGðÜ˜7Ô#Ü—k‘k 'Ñ*�ð "Ÿ™¨Ó,�Ü! #¨Q¡xÓ0�Ø! ! "›I�DÜ% gÓ4’Gò &ó à—g‘gˆGà×0Ñ0°ÓAˆØ *Ð8ˆÔØÐøô ó ØŸ™ 'Ð!5Ó6�Ü Ø1°%±¸"¸S¸EÐBóàðûðús   Á<AC< Ã<
D0Ä%D+Ä+D0c                ó8   ^ ^^^• SS K m " UUU U4S jST5      nU$ )Nr   c                  ó~  >^ • \ rS rSr YrSrU U4S jr\"  YS5      (       a   YR                  R                  \l        U UU4S jr	\"  YS5      (       a   YR                  R                  \	l        \	=r
rU U4S jr\"  YS5      (       a   YR                  R                  \l        \r\rU 4S	 jrU 4S
 jrSrU =r$ )Ú:pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapperé˜   Fc                óz   >• T=R                   S-  sl         [        TU ]	  U5      nT=R                   S-  sl         U$ )NrT   )Ú_recursive_debugÚsuperÚdo_debug©ÚselfÚargÚretÚ	__class__rO   s      €€r   rm   ÚCpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_debugœ   s9   ø€ Ø×$Ò$¨Ñ)Õ$Ü‘gÑ& sÓ+�Ø×$Ò$¨Ñ)Õ$Ø�
r/   rm   c                óT  >• [         TU ]  U5      nTR                  S:X  aÃ  TR                  c   eTR                  R                  TR                  5      nUR                  5         U R                  n[        R                  U5      nU(       aE  US:X  a  UR                  SS5        OUR                  SSU S35        Uc   eUR                  5         OUR                  SS5        TR                  c   eTR                  R                  R                  TR                  U S9  S	U l        U$ )
Nr   ÚglobalÚ>z#PDB continue (IO-capturing resumed)z'PDB continue (IO-capturing resumed for Ú)zPDB continue©rH   r;   T)rl   Údo_continuerk   r:   rH   Úcreate_terminal_writerÚlineÚ_pytest_capmanr5   rQ   ÚsepÚresumer9   ÚhookÚpytest_leave_pdbÚ
_continued)	ro   rp   rq   ÚtwrP   Ú	capturingrr   Ú_pytestrO   s	         €€€r   ry   ÚFpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_continue¥   s	  ø€ Ü‘gÑ)¨#Ó.�Ø×'Ñ'¨1Ó,ØŸ;™;Ñ2Ð2Ð2Ø Ÿ™×>Ñ>¸s¿{¹{ÓK�BØ—G‘G”Ià!×0Ñ0�FÜ )× 7Ñ 7¸Ó ?�IÞ Ø$¨Ó0ØŸF™F 3Ð(MÕNàŸF™FØ #Ø"IÈ)ÈÐTUÐ Vôð  &Ñ1Ð1Ð1ØŸ™�àŸ™˜s NÔ3Ø×)Ñ)Ñ5Ð5Ð5Ø×"Ñ"×'Ñ'×8Ñ8ÀÇÁÐQUÐ8ÑVØ"&�”Ø�
r/   ry   c                ór   >• [         TU ]  U5      nTR                  S:X  a  [        R                  " S5        U$ )Nr   úQuitting debugger)rl   Údo_quitrk   r   Úexitrn   s      €€r   rˆ   ÚBpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.do_quitÄ   s3   ø€ ô ‘g‘o cÓ*�à×'Ñ'¨1Ó,Ü—M’MÐ"5Ô6à�
r/   rˆ   c                óª   >• [         TU ]  X5      nU(       d;  U R                  (       a*  U R                  (       a  U R                  R	                  SS9  U$ )z^Suspend on setup().

Needed after do_continue resumed, and entering another
breakpoint again.
T©Úin_)rl   Úsetupr�   r|   Úsuspend_global_capture)ro   ÚfÚtbrq   rr   s       €r   rŽ   Ú@pytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.setup×   sC   ø€ ô ‘g‘m AÓ*�Þ˜tŸŸð ×*×*Ø×+Ñ+×BÑBÀtÐBÑLØ�
r/   c                ó$  >• [         TU ]  X5      u  p4Ucy  [        S[        U5      S-
  5      nU(       aZ  X4   S   R                  R                  SS5      (       a4  US-  nU(       a(  X4   S   R                  R                  SS5      (       a  M4  X44$ )Nr   rT   Ú__tracebackhide__F)rl   Ú	get_stackÚmaxÚlenÚf_localsÚget)ro   r�   ÚtÚstackÚirr   s        €r   r•   ÚDpytestPDB._get_pdb_wrapper_class.<locals>.PytestPdbWrapper.get_stackå   sƒ   ø€ Ü ™7Ñ,¨QÓ2‘�Ø‘9ä˜Aœs 5›z¨A™~Ó.�AÞ ¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈe× TÑ TØ˜Q™˜ö  ¡¨¡× 4Ñ 4× 8Ñ 8Ð9LÈe× TÓ Tà�x�r/   )r�   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r|   r�   rm   ÚhasattrÚ__doc__ry   Údo_cÚdo_contrˆ   Údo_qÚdo_exitrŽ   r•   Ú__static_attributes__Ú__classcell__)rr   r„   rP   rO   r`   s   @€€€€r   ÚPytestPdbWrapperrh   ˜   s¥   ù† Ù#ˆNØˆJöñ ‘w 
×+Ñ+Ù#*×#3Ñ#3×#;Ñ#;�Ô ÷ñ4 ‘w ×.Ñ.Ù&-×&9Ñ&9×&AÑ&A�Ô#à(Ð(ˆD�7öñ ‘w 	×*Ñ*Ù")§/¡/×"9Ñ"9�”àˆDØˆGõ÷ ó  r/   rª   )Ú_pytest.config)rO   r`   rP   rª   r„   s   ``` @r   r]   Ú pytestPDB._get_pdb_wrapper_class”   s#   û€ ã÷T	 ò T	 ˜wô T	 ðl  Ðr/   c                ó   • SSK nU R                  c  SnOU R                  R                  S5      nU(       a  UR                  SS9  U R                  (       aÑ  UR
                  R                  U R                  5      nUR                  5         U R                  S:X  aŒ  UR                  SS5      nUb  UR                  SU5        OdU R                  U5      nUS:X  a  UR                  SS	U S
35        O6U(       a  UR                  SS	U SU S35        OUR                  SS	U 35        U R                  U5      " S0 UD6n	U R                  (       a.  U R                  R                  R                  U R                  U	S9  U	$ )z4Initialize PDB debugging, dropping any IO capturing.r   NÚcapturemanagerTrŒ   Úheaderrv   ru   zPDB z (IO-capturing turned off)z (IO-capturing turned off for rw   rx   © )r«   r9   Ú	getpluginÚsuspendr:   rH   rz   r{   rk   r7   r}   rQ   rd   r   Úpytest_enter_pdb)
rO   ÚmethodÚargsÚkwargsr„   rP   r‚   r¯   rƒ   Ú_pdbs
             r   Ú	_init_pdbÚpytestPDB._init_pdbð   sO  € ó 	à×ÑÑ%Ø,0‰Fà×'Ñ'×1Ñ1Ð2BÓCˆFÞØ�N‰N˜tˆNÑ$à�;�;Ø—‘×6Ñ6°s·{±{ÓCˆBØ�G‰GŒIà×#Ñ# qÓ(àŸ™ H¨dÓ3�ØÑ%Ø—F‘F˜3 Õ'à #× 1Ñ 1°&Ó 9�IØ  HÓ,ØŸ™˜s d¨6¨(Ð2LÐ$MÕNÞ"ØŸ™ØØ" 6 (Ð*HÈÈÐSTÐUõð
 Ÿ™˜s d¨6¨( OÔ4à×"Ñ" 6Ô*Ñ4¨VÑ4ˆà××Ø×Ñ×#Ñ#×4Ñ4¸C¿K¹KÈTÐ4ÑRØˆr/   c                ó�   • [         R                  " 5       R                  nU R                  " S/UQ70 UD6nUR	                  U5        g)zBInvoke debugging via ``Pdb.set_trace``, dropping any IO capturing.r8   N)rX   Ú	_getframeÚf_backr¸   r8   )rO   rµ   r¶   Úframer·   s        r   r8   ÚpytestPDB.set_trace  s9   € ô —’“×&Ñ&ˆØ�}Š}˜[Ð:¨4Ò:°6Ñ:ˆØ�‰�uÕr/   r°   )rP   úCaptureManager | Noner?   z
str | bool)rP   r¿   r>   )rž   rŸ   r    r¡   r£   r9   Ú__annotations__r:   r6   rk   rL   ÚclassmethodrQ   rd   r]   r¸   r8   r¨   r°   r/   r   r5   r5   \   s©   ‡ Ù1à15€NÐ.Ó5Ø!€Gˆ]Ó!ð 	ð ð ó ð ÐØ;?ÐÐ8Ó?àóó ðð
 ó$ó ð$ðL óY ó ðY ðv ñ$ó ð$ðL óó ór/   r5   c                  ó8   • \ rS rSr        SS jrSS jrSrg)rE   i  c                óÌ  • UR                   R                  R                  S5      nU(       a_  UR                  SS9  UR	                  5       u  pV[
        R                  R                  U5        [
        R                  R                  U5        UR                  c   e[        UR                  R                  [        R                  5      (       d  [        XR                  U5        g g )Nr®   TrŒ   )rH   rB   r±   r�   Úread_global_capturerX   ÚstdoutÚwriteÚexcinfoÚ
isinstancer   ÚunittestÚSkipTestÚ
_enter_pdb)ro   ÚnodeÚcallÚreportrP   ÚoutÚerrs          r   Úpytest_exception_interactÚ#PdbInvoke.pytest_exception_interact   s¨   € ð —‘×*Ñ*×4Ñ4Ð5EÓFˆÞØ×)Ñ)¨dÐ)Ñ3Ø×1Ñ1Ó3‰HˆCÜ�J‰J×Ñ˜SÔ!Ü�J‰J×Ñ˜SÔ!Ø�|‰|Ñ'Ð'Ð'ä˜$Ÿ,™,×,Ñ,¬h×.?Ñ.?×@Ñ@Ü�tŸ\™\¨6Õ2ð Ar/   c                ó0   • [        U5      n[        U5        g r4   )Ú_postmortem_exc_or_tbÚpost_mortem)ro   rÇ   Ú	exc_or_tbs      r   Úpytest_internalerrorÚPdbInvoke.pytest_internalerror.  s   € Ü)¨'Ó2ˆ	Ü�IÕr/   r°   N)rÌ   r   rÍ   zCallInfo[Any]rÎ   r   r?   r@   )rÇ   úExceptionInfo[BaseException]r?   r@   )rž   rŸ   r    r¡   rÑ   r×   r¨   r°   r/   r   rE   rE     s,   † ð3Øð3Ø -ð3Ø7Að3à	ô3÷r/   rE   c                  ó0   • \ rS rSr\" SS9SS j5       rSrg)rD   i3  T)Úwrapperc              #  ó(   #   • [        U5        S v •$ 7fr4   )Ú wrap_pytest_function_for_tracing)ro   Ú
pyfuncitems     r   Úpytest_pyfunc_callÚPdbTrace.pytest_pyfunc_call4  s   é € ä(¨Ô4Úˆùs   ‚r°   N)r?   zGenerator[None, object, object])rž   rŸ   r    r¡   r   rß   r¨   r°   r/   r   rD   rD   3  s   † Ù�dÑóó ór/   rD   c                óš   ^^• [         R                  S5      mU R                  m[        R                  " T5      SUU4S jj5       nXl        g)zåChange the Python function object of the given Function item by a
wrapper which actually enters pdb before calling the python function
itself, effectively leaving the user in the pdb prompt in the first
statement of the function.Úruncallc                 ó\   >• [         R                  " T/U Q70 UD6nTR                  U5        g r4   )Ú	functoolsÚpartialrâ   )rµ   r¶   Úfuncr·   Útestfunctions      €€r   rÛ   Ú1wrap_pytest_function_for_tracing.<locals>.wrapperE  s)   ø€ ä× Ò  Ð?°Ò?¸Ñ?ˆØ�‰�TÕr/   Nr>   )r5   r¸   Úobjrä   Úwraps)rÞ   rÛ   r·   rç   s     @@r   rÝ   rÝ   :  sB   ù€ ô
 ×Ñ˜yÓ)€DØ—>‘>€Lô
 ‡_‚_�\Ó"÷ó #ðð …Nr/   c                ó\   • U R                   R                  S5      (       a  [        U 5        gg)z]Wrap the given pytestfunct item for tracing support if --trace was given in
the command line.r)   N)rH   rA   rÝ   )rÞ   s    r   Ú&maybe_wrap_pytest_function_for_tracingrì   M  s(   € ð ×Ñ×!Ñ! '×*Ñ*Ü(¨Õ4ð +r/   c                óX  • U R                   R                  R                  S5      R                  nUR	                  5         U R                   R
                  R                  nSUR                  4SUR                  4SUR                  44 HK  u  pVXES4;   d  M  U(       d  M  UR                  SSU-   5        USS  S	:X  a  US S nUR	                  U5        MM     UR                  SS
5        UR                  U5        UR                  SS5        [        U5      nSUl        [        U5        U$ )NÚterminalreporterrÅ   ÚstderrÚlogÚallrv   z	captured éÿÿÿÿÚ
Ú	tracebackzentering PDBT)rH   rB   r±   Ú_twr{   ÚoptionÚshowcaptureÚ	capstdoutÚ	capstderrÚcaplogr}   Ú
toterminalrÔ   Ú	_pdbshownrÕ   )rÌ   rÇ   Úrepr‚   r÷   ÚsectionnameÚcontentÚ	tb_or_excs           r   rË   rË   T  s	  € ð 
�‰×	"Ñ	"×	,Ñ	,Ð-?Ó	@×	DÑ	D€BØ‡G�G„Ià—+‘+×$Ñ$×0Ñ0€Kð 
�3—=‘=Ð!Ø	�3—=‘=Ð!Ø	�—
‘
Ðó!Ñˆð
 ¨Ð.Õ.·7°7Ø�F‰F�3˜ kÑ1Ô2Ø�r�sˆ|˜tÓ#Ø! # 2˜,�Ø�G‰G�GÖñ!ð ‡F�Fˆ3�ÔØ‡N�N�2ÔØ‡F�Fˆ3�ÔÜ% gÓ.€IØ€C„MÜ�	ÔØ€Jr/   c                óæ  • SSK Jn  [        R                  S:¬  n[	        U R
                  U5      (       a1  U R
                  nU(       a  UR                  S   $ UR                  S   $ [	        U R
                  [        5      (       a:  U R
                  R                  nU(       a  U$ UR                  c   eUR                  $ U R                  c   eU(       a  U R                  S   $ U R                  S   $ )Nr   )ÚUnexpectedException)é   é   rT   é   )Údoctestr  rX   Úversion_inforÈ   r   Úexc_infor   ÚcauseÚ__traceback__Ú_excinfo)rÇ   r  Úget_excÚunderlying_excr	  s        r   rÔ   rÔ   s  sÙ   € õ ,ä×Ñ 'Ñ)€GÜ�'—-‘-Ð!4×5Ñ5ð !Ÿ™ˆÞØ!×*Ñ*¨1Ñ-Ð-à×&Ñ& qÑ)Ð)Ü	�G—M‘MÔ#8×	9Ñ	9ð —‘×#Ñ#ˆÞØˆLà×"Ñ"Ñ.Ð.Ð.Ø×"Ñ"Ð"à×ÑÑ+Ð+Ð+ÞØ×#Ñ# AÑ&Ð&à×Ñ Ñ"Ð"r/   c                óÂ   • [         R                  S5      nUR                  5         UR                  S U 5        UR                  (       a  [
        R                  " S5        g g )NrÕ   r‡   )r5   r¸   ÚresetÚinteractionÚquittingr   r‰   )r   Úps     r   rÕ   rÕ   ’  sB   € Ü×Ñ˜MÓ*€AØ‡G�G„IØ‡M�M�$˜	Ô"Ø‡z‡zÜ�ŠÐ)Õ*ð r/   )r   Ústrr?   ztuple[str, str])r,   r   r?   r@   )rH   r
   r?   r@   r>   )rÌ   r   rÇ   rÙ   rý   r   r?   r   )rÇ   rÙ   r?   ú#types.TracebackType | BaseException)r   r  r?   r@   )-r£   Ú
__future__r   r   Úcollections.abcr   r   rä   rX   ÚtypesÚtypingr   rÉ   r„   r   Ú_pytest._coder   Ú_pytest.capturer	   r«   r
   r   r   r   Ú_pytest.config.argparsingr   Ú_pytest.config.exceptionsr   Ú_pytest.nodesr   Ú_pytest.reportsr   Ú_pytest.runnerr   r   r.   rI   r5   rE   rD   rÝ   rì   rË   rÔ   rÕ   r°   r/   r   Ú<module>r      sÂ   ðñ ;å "ã Ý $Ý %Û Û 
Û Ý Û å Ý 'Ý *Ý !Ý 0Ý #Ý .Ý ,Ý 0Ý Ý &Ý #ô ôô0÷6@ñ @÷Fñ ÷(ñ ôô&5ðØ
ðØ5ðØ<Fðàôð>#Ø)ð#à(ô#õ>+r/   