ó
    Ñ]jŠ5  ã                   óü   • S 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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JrJrJr  SSKJr  SSKJr  SS	KJrJrJrJr  SS
KJr  S r " S S\ 5      r!\ " S S\5      5       r"g)z5Magic functions for running cells in various scripts.é    N)Úgetincrementaldecoder)ÚCalledProcessError)ÚThread)ÚAnyÚDictÚListÚdefault)Úmagic_arguments)Ú_AsyncIOProxy)ÚMagicsÚ
cell_magicÚ
line_magicÚmagics_class)Ú	arg_splitc                 ó  • [         R                  " S[        SS9[         R                  " S[        SS9[         R                  " SSSS	9[         R                  " S
[        SS9[         R                  " SSSSS9/nU H  nU" U 5      n M     U $ )z'single decorator for adding script argsz--outzÙThe variable in which to store stdout from the script.
            If the script is backgrounded, this will be the stdout *pipe*,
            instead of the stderr text itself and will not be auto closed.
            )ÚtypeÚhelpz--errzØThe variable in which to store stderr from the script.
            If the script is backgrounded, this will be the stderr *pipe*,
            instead of the stderr text itself and will not be autoclosed.
            z--bgÚ
store_truezœWhether to run the script in the background.
            If given, the only way to see the output of the command is
            with --out/err.
            )Úactionr   z--procztThe variable in which to store Popen instance.
            This is used only when --bg option is given.
            z--no-raise-errorÚstore_falseÚraise_errorz„Whether you should raise an error message in addition to
            a stream on stderr if you get a nonzero exit code.
            )r   Údestr   )r
   ÚargumentÚstr)ÚfÚargsÚargs      ÚW/home/mande/repo/quber/.venv/lib/python3.13/site-packages/IPython/core/magics/script.pyÚscript_argsr      s¨   € ô 	× Ò Øœ#ðñ	
ô 	× Ò Øœ#ðñ	
ô 	× Ò Ø˜<ðñ	
ô 	× Ò Øœ3ðñ	
ô 	× Ò Ø }¸=ðñ	
ð9"€DóF ˆÙ�‹FŠñ à€Hó    c                   ó   • \ rS rSrSrg)ÚRaiseAfterInterruptéG   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r$   r    r   r"   r"   G   s   † Úr    r"   c                   ój  ^ • \ rS rSr% Sr\" SS9r\" SS9R                  SS9r	\\
S'   \" S5      S	 5       r\" S
S9R                  SS9rSU 4S jjrS rS rS r\R&                  " 5       \\" S5      S 5       5       5       r\R0                  S:g  \l        S r\" S5      SS j5       rS rS rSrU =r $ )ÚScriptMagicséK   zÎMagics for talking to scripts

This defines a base `%%script` cell magic for running a cell
with a program in a subprocess, and registers a few top-level
magics that call %%script with common interpreters.
zé
        The event loop on which to run subprocesses

        Not the main event loop,
        because we want to be able to make blocking calls
        and have certain requirements we don't want to impose on the main loop.
        )r   zêExtra script cell magics to define
        
        This generates simple wrappers of `%%script foo` as `%%foo`.
        
        If you want to add script magics that aren't on your path,
        specify them in script_paths
        T)ÚconfigÚscript_magicsc                 óZ   • / SQn[         R                  S:X  a  UR                  S/5        U$ )z$default to a common list of programs)ÚshÚbashÚperlÚrubyÚpythonÚpython2Úpython3ÚpypyÚntÚcmd)ÚosÚnameÚextend)ÚselfÚdefaultss     r   Ú_script_magics_defaultÚ#ScriptMagics._script_magics_defaulth   s1   € ò	
ˆô �7‰7�d‹?Ø�O‰OØðô ð ˆr    zÕDict mapping short 'ruby' names to full paths, such as '/opt/secret/bin/ruby'
        
        Only necessary for items in script_magics where the default path will not
        find the right interpreter.
        c                 ó–   >• [         [        U ]  US9  U R                  5         / U l        [
        R                  " U R                  5        g )N)Úshell)Úsuperr+   Ú__init__Ú_generate_script_magicsÚbg_processesÚatexitÚregisterÚkill_bg_processes)r=   rB   Ú	__class__s     €r   rD   ÚScriptMagics.__init__…   s;   ø€ ÜŒl˜DÑ*°Ð*Ñ7Ø×$Ñ$Ô&ØˆÔÜ�Š˜×.Ñ.Õ/r    c                 ó$   • U R                  5         g ©N)rI   )r=   s    r   Ú__del__ÚScriptMagics.__del__‹   s   € Ø×ÑÕ r    c                 ón   • U R                   S   nU R                   H  nU R                  U5      X'   M     g )NÚcell)Úmagicsr.   Ú_make_script_magic)r=   Úcell_magicsr;   s      r   rE   Ú$ScriptMagics._generate_script_magicsŽ   s3   € Ø—k‘k &Ñ)ˆØ×&Ô&ˆDØ $× 7Ñ 7¸Ó =ˆKÓò 'r    c                 óÎ   ^ ^• T R                   R                  X5      m[        R                  " 5       [        UU 4S j5       5       nSR                  " S0 [        5       D6Ul        U$ )zAmake a named magic, that calls %%script with a particular programc                 óL   >• U (       a
  T< SU < 3n OTn TR                  X5      $ )NÚ )Úshebang)ÚlinerQ   Úscriptr=   s     €€r   Únamed_script_magicÚ;ScriptMagics._make_script_magic.<locals>.named_script_magic˜   s&   ø€ ö Û"(ª$Ð/‘à�Ø—<‘< Ó+Ð+r    z”%%{name} script magic
        
        Run cells with {script} in a subprocess.
        
        This is a shortcut for `%%script {script}`
        r$   )Úscript_pathsÚgetr
   r   ÚformatÚlocalsÚ__doc__)r=   r;   r\   r[   s   `  @r   rS   ÚScriptMagics._make_script_magic“   sp   ù€ ð ×"Ñ"×&Ñ& tÓ2ˆä	×	(Ò	(Ó	*Ü	õ	,ó 
ó 
+ð	,ð	÷
 ‰Fð	ñ 	ô
 “Xñ	ð 	Ô"ð "Ð!r    r[   c           	      ó¬  ^ ^^^^^^^• T R                   cy  [        R                  S:X  a$  [        R                  " 5       R                  5       mO[        R
                  " 5       mTT l         [        TR                  SS9nUR                  5         OT R                   mU4S jnS mUU 4S jmUU4S jn[        U[        R                  R                  S	5      (       + S
9nT R                  R                  R                  U5      u  mnTR                  (       a#  ST R                  R                   TR                  '   TR"                  (       a#  ST R                  R                   TR"                  '    U" [        R$                  " U[        R&                  R(                  [        R&                  R(                  [        R&                  R(                  S.65      mTR3                  S5      (       d  TS-  mTR5                  SS5      mTR6                  (       Ga„  T R8                  R;                  T5        T R=                  5         / mTR                  (       a8  [?        TR@                  T5      T R                  R                   TR                  '   OTR;                  TR@                  5        TR"                  (       a8  [?        TRB                  T5      T R                  R                   TR"                  '   OTR;                  TRB                  5        TRE                  UUU U4S j5        TRF                  (       ae  [?        TT5      n	[?        TR@                  T5      U	l         [?        TRB                  T5      U	l!        U	T R                  R                   TRF                  '   g U" U" TT5      5        TRV                  (       a2  TRT                  S:w  a!  TRT                  =(       d    Sn
[c        U
T5      egg! [*         a:  nUR,                  [,        R.                  :X  a  [1        SUS   -  5         SnAge SnAff = f! [H         Ga•     TRK                  [L        RN                  5        U" [        RP                  " TRS                  5       SS95        TRT                  b(  [1        S5        TRV                  (       a
  [Y        5       e gTR[                  5         U" [        RP                  " TRS                  5       SS95        TRT                  b(  [1        S5        TRV                  (       a
  [Y        5       e gTR]                  5         [1        S5        TRV                  (       a
  [Y        5       eOG! [X         a     O;[*         a     O0[^         a$  n[1        STR`                  U4-  5         SnAOSnAff = fTRV                  (       a  [c        TRT                  T5      Se gf = f)aà  Run a cell via a shell command

The `%%script` line is like the #! line of script,
specifying a program (bash, perl, ruby, etc.) with which to run.

The rest of the cell is run by that program.

.. versionchanged:: 9.0
  Interrupting the script executed without `--bg` will end in
  raising an exception (unless `--no-raise-error` is passed).

Examples
--------
::

    In [1]: %%script bash
       ...: for i in 1 2 3; do
       ...:   echo $i
       ...: done
    1
    2
    3
NÚwin32T)ÚtargetÚdaemonc                 óN   >• [         R                  " U T5      R                  5       $ )z&Call a coroutine on the asyncio thread)ÚasyncioÚrun_coroutine_threadsafeÚresult)ÚcoroÚ
event_loops    €r   Ú	in_threadÚ'ScriptMagics.shebang.<locals>.in_threadÚ   s   ø€ ä×3Ò3°D¸*ÓE×LÑLÓNÐNr    c              “   óD  #   •  U R                  S5      I S h  v•N $  N! [        R                  R                   a  nUR                  s S nA$ S nAf[        R                  R
                   a.  nU R                  UR                  5      I S h  v•N  s S nA$ S nAff = f7f)Néd   )Úreadri   Ú
exceptionsÚIncompleteReadErrorÚpartialÚLimitOverrunErrorÚconsumed)ÚstreamÚes     r   Ú
_readchunkÚ(ScriptMagics.shebang.<locals>._readchunkÞ   sr   é € ð5Ø#Ÿ[™[¨Ó-×-Ð-Ñ-øÜ×%Ñ%×9Ñ9ó !Ø—y‘yÕ ûÜ×%Ñ%×7Ñ7ó 5Ø#Ÿ[™[¨¯©Ó4×4Ð4Õ4ûð5üs`   ‚B „ ˜™ œB � ŸB½AÁBÁ	B Á!BÁ/BÂBÂBÂBÂB ÂBÂB c              “   ó*  >#   • Sn[        S5      " SS9n UR                  T" U 5      I S h  v•N 5      nU(       d  g U(       a"  TR                  R                  U==   U-  ss'   O!UR	                  U5        UR                  5         U(       a  g M{   Nd7f)NFzutf-8Úreplace)Úerrors)r   ÚdecoderB   Úuser_nsÚwriteÚflush)rx   Ú
stream_argÚfile_objectÚshould_breakÚdecoderÚchunkrz   r=   s         €€r   Ú_handle_streamÚ,ScriptMagics.shebang.<locals>._handle_streamæ   s€   øé € Ø ˆLÜ+¨GÔ4¸IÑFˆGØØŸ™©Z¸Ó-?×'?Ó@�ÞØö Ø—J‘J×&Ñ& zÓ2°eÑ;Ô2à×%Ñ% eÔ,Ø×%Ñ%Ô'ÞØñ Ù'?ùs   ƒ)B¬B­A%Bc              “   óî  >#   • U R                   R                  U5        U R                   R                  5         [        R                  " T" U R
                  TR                  [        R
                  5      5      n[        R                  " T" U R                  TR                  [        R                  5      5      n[        R                  " X#/5      I S h  v•N   U R                  5       I S h  v•N   g  N N7frM   )Ústdinr�   Úcloseri   Úcreate_taskÚstdoutÚoutÚsysÚstderrÚerrÚwait)ÚprocessrQ   Ústdout_taskÚstderr_taskrˆ   r   s       €€r   Ú_stream_communicateÚ1ScriptMagics.shebang.<locals>._stream_communicate÷   s¨   øé € Ø�M‰M×Ñ Ô%Ø�M‰M×ÑÔ!Ü!×-Ò-Ù˜wŸ~™~¨t¯x©x¼¿¹ÓDóˆKô "×-Ò-Ù˜wŸ~™~¨t¯x©x¼¿¹ÓDóˆKô —,’, Ð9Ó:×:Ð:Ø—,‘,“.× Ñ ñ ;Ù ùs$   ƒCC5ÃC1ÃC5Ã+C3Ã,C5Ã3C5Úwin)ÚposixÚ )rŽ   r‘   r‹   zCouldn't find program: %rr   Ú
Úutf8r}   c                  óR   >• [         R                  " TR                  TT T5      5      $ rM   )ri   ÚTaskÚ_run_script)rQ   Úpr=   Úto_closes   €€€€r   Ú<lambda>Ú&ScriptMagics.shebang.<locals>.<lambda>+  s   ø€ œŸš T×%5Ñ%5°a¸¸xÓ%HÔIr    çš™™™™™¹?)ÚtimeoutzProcess was interrupted.zProcess was terminated.zProcess was killed.z/Error while terminating subprocess (pid=%i): %si÷ÿÿÿ)2rm   r�   Úplatformri   ÚWindowsProactorEventLoopPolicyÚnew_event_loopr   Úrun_foreverÚstartr   Ú
startswithrY   ÚparserÚparse_known_argsr�   rB   r€   r’   Úcreate_subprocess_execÚ
subprocessÚPIPEÚOSErrorÚerrnoÚENOENTÚprintÚendswithÚencodeÚbgrF   ÚappendÚ_gc_bg_processesr   rŽ   r‘   Úcall_soon_threadsafeÚprocÚKeyboardInterruptÚsend_signalÚsignalÚSIGINTÚwait_forr“   Ú
returncoder   r"   Ú	terminateÚkillÚ	ExceptionÚpidr   )r=   rZ   rQ   Úasyncio_threadrn   r—   Úargvr9   ry   Ú
proc_proxyÚrcrˆ   rz   r   rm   r¡   r¢   s   ` `        @@@@@@r   rY   ÚScriptMagics.shebang­   sO  ÿ€ ð< �?‰?Ñ"Ü�|‰|˜wÓ&ô %×CÒCÓE×TÑTÓV‘
ä$×3Ò3Ó5�
Ø(ˆDŒOô $¨:×+AÑ+AÈ$ÑOˆNØ× Ñ Õ"àŸ™ˆJõ	Oò	5ö	ö"
	!ô ˜¬¯©×)@Ñ)@ÀÓ)GÔ%GÑHˆØ—L‘L×'Ñ'×8Ñ8¸Ó>‰	ˆˆcà�8�8Ø+-ˆD�J‰J×Ñ˜tŸx™xÑ(Ø�8�8Ø+-ˆD�J‰J×Ñ˜tŸx™xÑ(ð	ÙÜ×.Ò.ØÜ"×-Ñ-×2Ñ2Ü"×-Ñ-×2Ñ2Ü!×,Ñ,×1Ñ1ò	óˆAð �}‰}˜T×"Ñ"Ø�D‰LˆDØ�{‰{˜6 9Ó-ˆØ�7�7ˆ7Ø×Ñ×$Ñ$ QÔ'Ø×!Ñ!Ô#ØˆHØ�x�xÜ/<¸Q¿X¹XÀzÓ/R�—
‘
×"Ñ" 4§8¡8Ò,à—‘ §¡Ô)Ø�x�xÜ/<¸Q¿X¹XÀzÓ/R�—
‘
×"Ñ" 4§8¡8Ò,à—‘ §¡Ô)Ø×+Ñ+ßIôð �y�yÜ*¨1¨jÓ9�
Ü$1°!·(±(¸JÓ$G�
Ô!Ü$1°!·(±(¸JÓ$G�
Ô!Ø0:�—
‘
×"Ñ" 4§9¡9Ñ-Øð!	ÙÑ)¨!¨TÓ2Ô3ðD ×× §¡°Ó 1ð —‘×# ˆBÜ$ R¨Ó.Ð.ð !2ÐøôG ó 	Ø�w‰wœ%Ÿ,™,Ó&ÜÐ1°C¸±FÑ:Ô;Üàûð	ûôD !ô 	ðVØ—‘œfŸm™mÔ,Ùœ'×*Ò*¨1¯6©6«8¸SÑAÔBØ—<‘<Ñ+ÜÐ4Ô5Ø×'×'Ü1Ó3Ð3áØ—‘”Ùœ'×*Ò*¨1¯6©6«8¸SÑAÔBØ—<‘<Ñ+ÜÐ3Ô4Ø×'×'Ü1Ó3Ð3áØ—‘”ÜÐ+Ô,Ø×#×#Ü-Ó/Ð/ð $øä&ó ÙÜó ÙÜó VÜÐGÈ1Ï5É5ÐRSÈ*ÑT×UÑUûðVúà××Ü(¨¯©°tÓ<À$ÐFáð?	ús�   Å/A&O, ÎP3 Ï,
P0Ï6/P+Ð*P+Ð+P0Ð3WÐ?A;U!Ò<A,U!Ô*6U!Õ WÕ!
V%Õ+WÕ-	V%Õ6WÕ8	V%ÖV ÖWÖ V%Ö%+W×Wrš   c              ƒ   ó   #   • UR                   R                  U5        UR                   R                  5       I Sh  v•N   UR                   R                  5         UR                   R	                  5       I Sh  v•N   UR                  5       I Sh  v•N   U H  nUR                  5       I Sh  v•N   M     U R                  5         g NŠ NP N: N7f)z1callback for running the script in the backgroundN)r‹   r�   ÚdrainrŒ   Úwait_closedr“   rr   rº   )r=   r¡   rQ   r¢   Úss        r   r    ÚScriptMagics._run_script`  s�   é € ð 	
�‰�‰�dÔØ�g‰g�m‰m‹o×ÐØ	�‰�‰ŒØ�g‰g×!Ñ!Ó#×#Ð#Ø�f‰f‹h�ˆó ˆAØ—&‘&“(�NŠNñ à×ÑÕñ 	á#Ùñ ùsE   ‚9C»C¼;CÁ7CÁ8CÂC
ÂCÂ,CÂ-CÃCÃ
CÃCÚkillbgscriptsc                 ó:   • U R                  5         [        S5        g)z9Kill all BG processes started by %%script and its family.z%All background processes were killed.N)rI   rµ   )r=   Ú_nouse_s     r   rÑ   ÚScriptMagics.killbgscriptsn  s   € ð 	×ÑÔ ÜÐ5Õ6r    c                 óª  • U R                   (       d  gU R                    H2  nUR                  b  M   UR                  [        R                  5        M4     [
        R                  " S5        U R                  5         U R                   (       d  gU R                    H#  nUR                  b  M   UR                  5         M%     [
        R                  " S5        U R                  5         U R                   (       d  gU R                    H#  nUR                  b  M   UR                  5         M%     U R                  5         g!    GM#  = f!    M±  = f!    MN  = f)z.Kill all BG processes which are still running.Nr¥   )
rF   rÂ   r¾   r¿   rÀ   ÚtimeÚsleeprº   rÃ   rÄ   ©r=   r¡   s     r   rI   ÚScriptMagics.kill_bg_processest  s  € à× × ØØ×"Ô"ˆAØ�|‰|Ó#ðØ—M‘M¤&§-¡-Ö0ñ #ô 	�
Š
�3ŒØ×ÑÔØ× × ØØ×"Ô"ˆAØ�|‰|Ó#ðØ—K‘K–Mñ #ô 	�
Š
�3ŒØ×ÑÔØ× × ØØ×"Ô"ˆAØ�|‰|Ó#ðØ—F‘F–Hñ #ð 	×ÑÕøð-ÛûðÚûðÚús#   ²D<Â,EÄEÄ<EÅE
ÅEc                 ón   • U R                    Vs/ s H  oR                  b  M  UPM     snU l         g s  snf rM   )rF   rÂ   rØ   s     r   rº   ÚScriptMagics._gc_bg_processes”  s(   € Ø(,×(9Ò(9ÓRÒ(9 1¿\¹\ŸQÑ(9ÑRˆÕùÒRs   �2£2)rF   rm   rM   )r›   )!r%   r&   r'   r(   rb   r   rm   r   Útagr.   Ú__annotations__r	   r?   r   r^   rD   rN   rE   rS   r
   r   r   rY   r:   r;   Ú__skip_doctest__r    r   rÑ   rI   rº   r)   Ú__classcell__)rJ   s   @r   r+   r+   K   s	  ø‡ ññ ðñ€Jñ ðñ÷ 
�c�€cÐð �4ó ñ ˆ_Óñó ðñ( ðñ÷ 
�c�€cÐð ÷0ò!ò>ò
"ð4 ×$Ò$Ó&ØÙ�Óñl/ó ó ó 'ðl/ð\  "Ÿw™w¨'Ñ1€GÔò ñ �Ó ó7ó !ð7ò
 ÷@Sð Sr    r+   )#rb   ri   Úasyncio.exceptionsrG   r³   r:   r¿   r�   rÖ   Úcodecsr   r°   r   Ú	threadingr   Ú	traitletsr   r   r   r	   ÚIPython.corer
   ÚIPython.core.async_helpersr   ÚIPython.core.magicr   r   r   r   ÚIPython.utils.processr   r   rÅ   r"   r+   r$   r    r   Ú<module>rè      ss   ðÙ ;ó
 Û Û Û Û 	Û Û 
Û Ý (Ý )Ý ç .Ó .å (Ý 4ß KÓ KÝ +ò'ôT	˜)ô 	ð ôIS�6ó ISó ñISr    