ó
    Ð]jO  ã                  óØ   • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
  SSKJr  Sr\R                  R                  r\R"                  r " S S\5      r " S	 S
5      rSS jrg)z>Monkey-patching to add multiprocessing support for coverage.pyé    )ÚannotationsN)ÚAny)ÚDebugControlz_coverage$patchedc                  ó   • \ rS rSrSrS rSrg)ÚProcessWithCoverageé   z<A replacement for multiprocess.Process that starts coverage.c                ó¼  • Sn SSK Jn  U" SSS9nSUl        UR                  5         UR                  nUc   eUR                  S5      (       a  UnU(       a  UR                  S5         [        U /UQ70 UD6U(       a  UR                  S5         UR                  5         UR!                  5         U(       a  UR                  S5        $ $ ! [         aZ    [        S	[        R                  S
9  [        R                  " [        R                  S
9  [        R                  R                  5         e f = f! [         a  nU(       a  UR                  SUS9  e SnAff = f! U(       a  UR                  S5         UR                  5         UR!                  5         O*! [         a  nU(       a  UR                  SUS9  e SnAff = fU(       a  UR                  S5        f f = f)z,Wrapper around _bootstrap to start coverage.Nr   )ÚCoverageT)Údata_suffixÚ	auto_dataFÚ	multiprocz!Calling multiprocessing bootstrapz0Exception during multiprocessing bootstrap init:)Úfilez"Finished multiprocessing bootstrapz2Exception during multiprocessing bootstrap cleanup)ÚexczSaved multiprocessing data)Úcoverager
   Ú_warn_preimported_sourceÚstartÚ_debugÚshouldÚwriteÚ	ExceptionÚprintÚsysÚstderrÚ	tracebackÚ	print_excÚflushÚoriginal_bootstrapÚstopÚsave)ÚselfÚargsÚkwargsÚdebugr
   Úcovr   r   s           ÚO/home/mande/repo/quber/.venv/lib/python3.13/site-packages/coverage/multiproc.pyÚ
_bootstrapÚProcessWithCoverage._bootstrap   s‘  € à%)ˆð	Ý)á t°tÑ<ˆCØ+0ˆCÔ(Ø�I‰IŒKØ—Z‘ZˆFØÑ%Ð%Ð%Ø�}‰}˜[×)Ñ)Ø�ÞØ—‘Ð?Ô@ð	:Ü% dÐ<¨TÒ<°VÑ<æØ—‘Ð@ÔAðØ—‘”
Ø—‘”
ö
 Ø—‘Ð8Õ9ð øô# ó 	ÜÐDÌ3Ï:É:ÒVÜ×Ò¤S§Z¡ZÒ0Ü�J‰J×ÑÔØð		ûô ó ÞØ—K‘KÐ TÐZ]�KÑ^Øûðûö Ø—‘Ð@ÔAðØ—‘”
Ø—‘•
øÜó ÞØ—K‘KÐ TÐZ]�KÑ^Øûðúö Ø—‘Ð8Õ9ð úsU   „A%C Á*E Â D2ÃA$D/Ä2
EÄ<EÅEÅGÅ6 FÆGÆ
F>Æ!F9Æ9F>Æ>G© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r&   Ú__static_attributes__r(   ó    r%   r   r      s
   † ÙFõ!:r/   r   c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)ÚStowawayéB   zLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.c                ó   • Xl         g )N©Úrcfile)r    r5   s     r%   Ú__init__ÚStowaway.__init__E   s   € Ø�r/   c                ó   • SU R                   0$ ©Nr5   r4   )r    s    r%   Ú__getstate__ÚStowaway.__getstate__H   s   € Ø˜$Ÿ+™+Ð&Ð&r/   c                ó    • [        US   5        g r9   )Úpatch_multiprocessing)r    Ústates     r%   Ú__setstate__ÚStowaway.__setstate__K   s   € Ü˜e H™oÕ.r/   r4   N©r5   ÚstrÚreturnÚNone)rC   údict[str, str])r>   rE   rC   rD   )	r)   r*   r+   r,   r-   r6   r:   r?   r.   r(   r/   r%   r1   r1   B   s   † ÙVôô'÷/r/   r1   c                óh  ^ ^• [        [        [        5      (       a  g[        R                  [
        l        [        R                  R                  T 5      [        R                  S'    SSKJ
n  UR                  mSUU 4S jjnX!l        [        [        [        S5        g! [        [        4 a     N(f = f)zÐMonkey-patch the multiprocessing module.

This enables coverage measurement of processes started by multiprocessing.
This involves aggressive monkey-patching.

`rcfile` is the path to the rcfile being used.

NÚCOVERAGE_RCFILEr   )Úspawnc                ó4   >• T" U 5      n[        T5      US'   U$ )z@Get the original preparation data, and also insert our stowaway.Ústowaway)r1   )ÚnameÚdÚoriginal_get_preparation_datar5   s     €€r%   Ú"get_preparation_data_with_stowawayÚApatch_multiprocessing.<locals>.get_preparation_data_with_stowawayp   s    ø€ á-¨dÓ3ˆAÜ$ VÓ,ˆAˆj‰MØˆHr/   T)rK   rB   rC   zdict[str, Any])ÚhasattrÚmultiprocessingÚPATCHED_MARKERr   r&   ÚOriginalProcessÚosÚpathÚabspathÚenvironrH   Úget_preparation_dataÚImportErrorÚAttributeErrorÚsetattr)r5   rH   rN   rM   s   `  @r%   r=   r=   O   sŽ   ù€ ô Œ¤×/Ñ/Øä!4×!?Ñ!?„OÔô %'§G¡G§O¡O°FÓ$;„B‡J�JÐ Ñ!ðHÝ)à(-×(BÑ(BÐ%÷
	ð 	ð &HÔ"äŒOœ^¨TÕ2øô œÐ(ó Ùðús   Á'B ÂB1Â0B1rA   )r-   Ú
__future__r   rQ   Úmultiprocessing.processrT   Úos.pathr   r   Útypingr   Úcoverage.debugr   rR   ÚprocessÚBaseProcessrS   r&   r   r   r1   r=   r(   r/   r%   Ú<module>rc      sh   ðñ Eå "ã Û Û 	Û Û 
Û Ý å 'ð %€ð "×)Ñ)×5Ñ5€Ø$×/Ñ/Ð ô$:˜/ô $:÷N
/ñ 
/õ)3r/   