Ë
    oPêjO  ã                  óÖ   — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
 ddlmZ dZej                  j                  Zej"                  Z G d„ de«      Z G d	„ d
«      Zdd„Zy)z>Monkey-patching to add multiprocessing support for coverage.pyé    )ÚannotationsN)ÚAny)ÚDebugControlz_coverage$patchedc                  ó   — e Zd ZdZd„ Zy)ÚProcessWithCoveragez<A replacement for multiprocess.Process that starts coverage.c                ó€  — d}	 ddl m}  |dd¬«      }d|_        |j                  «        |j                  }|€J ‚|j                  d«      r|}|r|j                  d«       	 t        | g|¢­i |¤Ž|r|j                  d«       	 |j                  «        |j!                  «        |r|j                  d«       S S # t        $ r_ t        d	t        j                  ¬
«       t        j                  t        j                  ¬
«       t        j                  j                  «        ‚ w xY w# t        $ r}|r|j                  d|¬«       ‚ d}~ww xY w# |r|j                  d«       	 |j                  «        |j!                  «        n'# t        $ r}|r|j                  d|¬«       ‚ d}~ww xY w|r|j                  d«       w w xY w)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           úW/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/coverage/multiproc.pyÚ
_bootstrapz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B9 Á"E Â D$Â9A(D!Ä$	EÄ-EÅEÅF=Å  FÆ F=Æ	F%Æ
F Æ F%Æ%F=N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   © ó    r$   r   r      s
   „ ÙFó!:r+   r   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚStowawayzLAn object to pickle, so when it is unpickled, it can apply the monkey-patch.c                ó   — || _         y )N©Úrcfile)r   r0   s     r$   Ú__init__zStowaway.__init__E   s	   € Øˆ�r+   c                ó   — d| j                   iS ©Nr0   r/   )r   s    r$   Ú__getstate__zStowaway.__getstate__H   s   € Ø˜$Ÿ+™+Ð&Ð&r+   c                ó    — t        |d   «       y r3   )Úpatch_multiprocessing)r   Ústates     r$   Ú__setstate__zStowaway.__setstate__K   s   € Ü˜e H™oÕ.r+   N©r0   ÚstrÚreturnÚNone)r;   údict[str, str])r7   r=   r;   r<   )r&   r'   r(   r)   r1   r4   r8   r*   r+   r$   r-   r-   B   s   „ ÙVóó'ô/r+   r-   c                óZ  ‡ ‡— t        t        t        «      ryt        j                  t
        _        t        j                  j                  ‰ «      t        j                  d<   	 ddlm
} |j                  Šdˆˆ fd„}||_        t        t        t        d«       y# t        t        f$ r Y Œ'w xY w)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        ‰«      |d<   |S )z@Get the original preparation data, and also insert our stowaway.Ústowaway)r-   )ÚnameÚdÚoriginal_get_preparation_datar0   s     €€r$   Ú"get_preparation_data_with_stowawayzApatch_multiprocessing.<locals>.get_preparation_data_with_stowawayp   s    ø€ á-¨dÓ3ˆAÜ$ VÓ,ˆAˆj‰MØˆHr+   T)rC   r:   r;   zdict[str, Any])ÚhasattrÚmultiprocessingÚPATCHED_MARKERr   r%   ÚOriginalProcessÚosÚpathÚabspathÚenvironr@   Úget_preparation_dataÚImportErrorÚAttributeErrorÚsetattr)r0   r@   rF   rE   s   `  @r$   r6   r6   O   sˆ   ù€ ô Œ¤Ô/Øä!4×!?Ñ!?„OÔô %'§G¡G§O¡O°FÓ$;„B‡J�JÐ Ñ!ðHÝ)à(-×(BÑ(BÐ%ö
	ð &HˆÔ"äŒOœ^¨TÕ2øô œÐ(ò Ùðús   Á"B ÂB*Â)B*r9   )r)   Ú
__future__r   rH   Úmultiprocessing.processrK   Úos.pathr   r   Útypingr   Úcoverage.debugr   rI   ÚprocessÚBaseProcessrJ   r%   r   r   r-   r6   r*   r+   r$   ú<module>rZ      sh   ðñ Eå "ã Û Û 	Û Û 
Û Ý å 'ð %€ð "×)Ñ)×5Ñ5€Ø$×/Ñ/Ð ô$:˜/ô $:÷N
/ñ 
/ô)3r+   