§
    øÛgl  ã                   óf   — d Z ddlZddlZddlZddlZd„ Z G d„ d¦  «        Z G d„ de¦  «        ZdS )z¨
    ForkedFunc provides a way to run a function in a forked process
    and get at its return value, stdout and stderr output as well
    as signals and exitstatusus.
é    Nc                 óî   ‡— t          t          |¦  «        d¦  «        Š| ‰                     ¦   «         k    r't          j        ‰                     ¦   «         | ¦  «          G ˆfd„d¦  «        } |¦   «         S )NÚwc                   ó$   •— e Zd Zˆ fd„Zˆ fd„ZdS )ú$get_unbuffered_io.<locals>.AutoFlushc                 óZ   •— ‰                      |¦  «         ‰                     ¦   «          d S ©N)ÚwriteÚflush)ÚselfÚdataÚfs     €úL/granary/edev/quantum/lib/python3.11/site-packages/py/_process/forkedfunc.pyr	   z*get_unbuffered_io.<locals>.AutoFlush.write   s#   ø€ Ø�GŠG�D‰MŒMˆMØ�GŠG‰IŒIˆIˆIˆIó    c                 ó$   •— t          ‰|¦  «        S r   )Úgetattr)r   Únamer   s     €r   Ú__getattr__z0get_unbuffered_io.<locals>.AutoFlush.__getattr__   s   ø€ Ý˜1˜dÑ#Ô#Ð#r   N)Ú__name__Ú
__module__Ú__qualname__r	   r   )r   s   €r   Ú	AutoFlushr      sG   ø€ € € € € ð	ð 	ð 	ð 	ð 	ð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$r   r   )ÚopenÚstrÚfilenoÚosÚdup2)ÚfdÚfilenamer   r   s      @r   Úget_unbuffered_ior      s…   ø€ Ý�S�‰]Œ]˜CÑ Ô €AØ	ˆQ�XŠX‰ZŒZÒÐÝ
Œ�—’‘
”
˜BÑÔÐð$ð $ð $ð $ð $ð $ð $ñ $ô $ð $ð ˆ9‰;Œ;Ðr   c                   óD   — e Zd ZdZ	 	 d	d„Zd„ Zej        fd„Zd„ Z	d„ Z
dS )
Ú
ForkedFuncé   Nr   c                 ó¨  — |€g }|€i }|| _         || _        || _        t          j        j                             ¦   «         x| _        }|                     d¦  «        | _	        |                     d¦  «        | _
        |                     d¦  «        | _        t          j        ¦   «         }|r	|| _        d S d | _        |                      |||¦  «         d S )NÚretvalÚstdoutÚstderr)ÚfunÚargsÚkwargsÚpyÚpathÚlocalÚmkdtempÚtempdirÚensureÚRETVALÚSTDOUTÚSTDERRr   ÚforkÚpidÚ_child)	r   r'   r(   r)   Ú
nice_levelÚchild_on_startÚchild_on_exitr.   r4   s	            r   Ú__init__zForkedFunc.__init__   sÂ   € àˆ<ØˆDØˆ>ØˆFØˆŒØˆŒ	ØˆŒÝ!#¤¤×!6Ò!6Ñ!8Ô!8Ð8ˆŒ�wØ—n’n XÑ.Ô.ˆŒØ—n’n XÑ.Ô.ˆŒØ—n’n XÑ.Ô.ˆŒåŒg‰iŒiˆØð 	CØˆDŒHˆHˆHàˆDŒHØ�KŠK˜
 N°MÑBÔBÐBÐBÐBr   c                 óÔ  — t          d| j        ¦  «        xt          _        }t          d| j        ¦  «        xt          _        }| j                             d¦  «        }d}	 |rt          j	        |¦  «         	 |�
 |¦   «           | j
        | j        i | j        ¤Ž}|                     t          j        |¦  «        ¦  «         |�
 |¦   «          n`#  t           j                             ¦   «         }	|                     t'          |	                     ¦   «         ¦  «        ¦  «         | j        }Y nxY w|                     ¦   «          |                     ¦   «          |                     ¦   «          nA# |                     ¦   «          |                     ¦   «          |                     ¦   «          w xY wt          j        d¦  «         t          j        d¦  «         t          j        |¦  «         d S )Né   é   Úwbr   )r   r1   Úsysr%   r2   r&   r0   r   r   Únicer'   r(   r)   r	   ÚmarshalÚdumpsr*   ÚcodeÚExceptionInfor   Ú_getreprcrashÚEXITSTATUS_EXCEPTIONÚcloseÚ_exit)
r   r6   r7   r8   r%   r&   ÚretvalfÚ
EXITSTATUSr$   Úexcinfos
             r   r5   zForkedFunc._child4   s¢  € õ 0°°4´;Ñ?Ô?Ð?�Œ
�VÝ/°°4´;Ñ?Ô?Ð?�Œ
�VØ”+×"Ò" 4Ñ(Ô(ˆØˆ
ð	Øð $Ý”˜
Ñ#Ô#Ð#ð
7Ø!Ð-Ø"�NÑ$Ô$Ð$Ø!˜œ 4¤9Ð<°´Ð<Ð<�Ø—’�gœm¨FÑ3Ô3Ñ4Ô4Ð4Ø Ð,Ø!�M‘O”O�Oøøð7Ýœ'×/Ò/Ñ1Ô1�Ø—’�S ×!6Ò!6Ñ!8Ô!8Ñ9Ô9Ñ:Ô:Ð:Ø!Ô6�
�
�
øøøà�LŠL‰NŒNˆNØ�LŠL‰NŒNˆNØ�MŠM‰OŒOˆOˆOøð �LŠL‰NŒNˆNØ�LŠL‰NŒNˆNØ�MŠM‰OŒOˆOˆOøøøÝ
Œ�‰ŒˆÝ
Œ�‰ŒˆÝ
Œ�ÑÔÐÐÐs&   Á E+ Á7AC ÃE+ ÃAD+Ä)E+ Å+>F)c                 ó`  —  || j         d¦  «        \  }}|rAt          j        |¦  «        rt          j        |¦  «        dz   }nt          j        |¦  «        }nd}|dz  }|st|sr| j                             d¦  «        }	 |                     ¦   «         }|                     ¦   «          n# |                     ¦   «          w xY wt          j
        |¦  «        }nd }| j                             ¦   «         }| j                             ¦   «         }	|                      ¦   «          t          |||||	¦  «        S )Nr   é€   é   Úrb)r4   r   ÚWIFSIGNALEDÚWTERMSIGÚWEXITSTATUSr0   r   ÚreadrF   r@   Úloadsr1   r2   Ú_removetempÚResult)
r   Úwaiterr4   ÚsystemstatusÚ
exitstatusÚsignalr$   Úretval_datar%   r&   s
             r   Ú
waitfinishzForkedFunc.waitfinishQ   s%  € Ø"˜F 4¤8¨QÑ/Ô/Ñˆˆ\Øð 	ÝŒ~˜lÑ+Ô+ð :Ýœ[¨Ñ6Ô6¸Ñ<�
�
åœ^¨LÑ9Ô9�
�
àˆJØ Ñ$ˆØð 	 &ð 	Ø”[×%Ò% dÑ+Ô+ˆFðØ$Ÿkšk™mœm�à—’‘”��ø�—’‘”��øøøÝ”] ;Ñ/Ô/ˆFˆFàˆFØ”×!Ò!Ñ#Ô#ˆØ”×!Ò!Ñ#Ô#ˆØ×ÒÑÔÐÝ�j &¨&°&¸&ÑAÔAÐAs   Á>B' Â'B=c                 ón   — | j                              ¦   «         r| j                              ¦   «          d S d S r   )r.   ÚcheckÚremove©r   s    r   rT   zForkedFunc._removetempi   s<   € ØŒ<×ÒÑÔð 	"ØŒL×ÒÑ!Ô!Ð!Ð!Ð!ð	"ð 	"r   c                 ó@   — | j         �|                      ¦   «          d S d S r   )r4   rT   r_   s    r   Ú__del__zForkedFunc.__del__m   s*   € ØŒ8ÐØ×ÒÑÔÐÐÐð  Ðr   )NNr   NN)r   r   r   rE   r9   r5   r   Úwaitpidr[   rT   ra   © r   r   r!   r!      sˆ   € € € € € ØÐð @AØ48ðCð Cð Cð Cð*ð ð ð: !#¤
ð Bð Bð Bð Bð0"ð "ð "ðð ð ð ð r   r!   c                   ó   — e Zd Zd„ ZdS )rU   c                 óL   — || _         || _        || _        || _        || _        d S r   )rX   rY   r$   ÚoutÚerr)r   rX   rY   r$   r%   r&   s         r   r9   zResult.__init__s   s)   € Ø$ˆŒØˆŒØˆŒØˆŒØˆŒˆˆr   N)r   r   r   r9   rc   r   r   rU   rU   r   s#   € € € € € ðð ð ð ð r   rU   )	Ú__doc__r*   r   r>   r@   r   r!   ÚobjectrU   rc   r   r   ú<module>rj      s©   ððð ð 
€	€	€	Ø 	€	€	€	Ø 
€
€
€
Ø €€€ð
ð 
ð 
ðTð Tð Tð Tð Tñ Tô Tð Tðnð ð ð ð ˆVñ ô ð ð ð r   