§
    øyIf44  ã                   óŒ  — d 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dl
mZmZmZmZ ej        dk    rddl
mZ nddlmZ ddlmZ dd	lmZ  ed
¦  «        Z ed¦  «        Z ed¦  «        Zej        Z ej        d¬¦  «         G d„ d¦  «        ¦   «         Zededefd„¦   «         Zde dee ef         fd„Z!de dede fd„Z"de dee ee         f         fd„Z#de de de fd„Z$de dee ee         f         fd„Z%de dee ee         f         fd„Z&de dee         de fd„Z'dej(        deej)                 fd „Z*d!eej(                 dee          fd"„Z+ ej        d¬¦  «         G d#„ d$¦  «        ¦   «         Z, G d%„ d&ej-        ¦  «        Z. ej        d¬¦  «         G d'„ d(¦  «        ¦   «         Z/ G d)„ d*ej-        ¦  «        Z0dS )+z)Functions to process IPython magics with.é    N)Ú	lru_cache)Ú	find_spec)ÚDictÚListÚOptionalÚTuple)é   é
   )Ú	TypeGuard)Úout)ÚNothingChanged)zget_ipython().run_cell_magiczget_ipython().systemzget_ipython().getoutputzget_ipython().run_line_magic)Ú	ENDMARKERÚNLÚNEWLINEÚCOMMENTÚDEDENTÚUNIMPORTANT_WSÚ
ESCAPED_NL)ÚcaptureÚprunÚpypyÚpythonÚpython3ÚtimeÚtimeitT)Úfrozenc                   ó$   — e Zd ZU eed<   eed<   dS )ÚReplacementÚmaskÚsrcN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__© ó    úM/var/www/piapp/venv/lib/python3.11/site-packages/black/handle_ipynb_magics.pyr   r   /   s"   € € € € € € à
€I€I�IØ	€H€H�H€H€Hr'   r   ÚwarnÚreturnc                 ót   — t          d¦  «        d uot          d¦  «        d u}|s| rd}t          |¦  «         |S )NÚtokenize_rtÚIPythonz}Skipping .ipynb files as Jupyter dependencies are not installed.
You can fix this by running ``pip install "black[jupyter]"``)r   r   )r)   Ú	installedÚmsgs      r(   Ú"jupyter_dependencies_are_installedr0   5   sZ   € õ 	�-Ñ Ô ¨Ð,ÐQµ¸9Ñ1EÔ1EÈTÐ1Qð ð ð ˜ð ðKð 	õ 	ˆC‰ŒˆØÐr'   r    c                 óÌ   — ddl m}m}m}  || ¦  «        }d} ||¦  «        D ]/\  }}|j        t
          v rŒ|j        dk    r|j        dk    r||= d} |s| dfS  ||¦  «        dfS )a€  Remove trailing semicolon from Jupyter notebook cell.

    For example,

        fig, ax = plt.subplots()
        ax.plot(x_data, y_data);  # plot data

    would become

        fig, ax = plt.subplots()
        ax.plot(x_data, y_data)  # plot data

    Mirrors the logic in `quiet` from `IPython.core.displayhook`, but uses
    ``tokenize_rt`` so that round-tripping works fine.
    r   ©Úreversed_enumerateÚsrc_to_tokensÚtokens_to_srcFÚOPú;T)r,   r3   r4   r5   ÚnameÚTOKENS_TO_IGNOREr    )r    r3   r4   r5   ÚtokensÚtrailing_semicolonÚidxÚtokens           r(   Úremove_trailing_semicolonr>   C   s·   € ð  MÐLÐLÐLÐLÐLÐLÐLÐLÐLàˆ]˜3ÑÔ€FØÐØ(Ð(¨Ñ0Ô0ð ð ‰
ˆˆUØŒ:Õ)Ð)Ð)ØØŒ:˜ÒÐ %¤)¨sÒ"2Ð"2Ø�s�Ø!%ÐØØð Ø�EˆzÐØˆ=˜Ñ Ô  $Ð&Ð&r'   Úhas_trailing_semicolonc                 ó  — |s| S ddl m}m}m}  || ¦  «        } ||¦  «        D ]6\  }}|j        t
          v rŒ|                     |j        dz   ¬¦  «        ||<    nt          d¦  «        d‚t           ||¦  «        ¦  «        S )z¾Put trailing semicolon back if cell originally had it.

    Mirrors the logic in `quiet` from `IPython.core.displayhook`, but uses
    ``tokenize_rt`` so that round-tripping works fine.
    r   r2   r7   )r    z{INTERNAL ERROR: Was not able to reinstate trailing semicolon. Please report a bug on https://github.com/psf/black/issues.  N)
r,   r3   r4   r5   r8   r9   Ú_replacer    ÚAssertionErrorr$   )r    r?   r3   r4   r5   r:   r<   r=   s           r(   Úput_trailing_semicolon_backrC   c   sÆ   € ð "ð Øˆ
ØLÐLÐLÐLÐLÐLÐLÐLÐLÐLàˆ]˜3ÑÔ€FØ(Ð(¨Ñ0Ô0ð 	ð 	‰
ˆˆUØŒ:Õ)Ð)Ð)ØØ—n’n¨¬°S©�nÑ9Ô9ˆˆs‰ØˆåðLñ
ô 
ð ð	õ ˆ}ˆ}˜VÑ$Ô$Ñ%Ô%Ð%r'   c                 óÆ  — g }	 t          j        | ¦  «         | |fS # t          $ r Y nw xY wddlm}  |¦   «         }|                     | ¦  «        }t          |¦  «        \  }}||z  }|                     |¦  «        }t          |¦  «        \  }}t          | 	                    ¦   «         ¦  «        t          |  	                    ¦   «         ¦  «        k    rt          ‚||z  }||fS )zúMask IPython magics so content becomes parseable Python code.

    For example,

        %matplotlib inline
        'foo'

    becomes

        "25716f358c32750e"
        'foo'

    The replacements are returned, along with the transformed code.
    r   )ÚTransformerManager)ÚastÚparseÚSyntaxErrorÚIPython.core.inputtransformer2rE   Útransform_cellÚreplace_cell_magicsÚreplace_magicsÚlenÚ
splitlinesr   )r    ÚreplacementsrE   Útransformer_managerÚtransformedÚcell_magic_replacementsÚmagic_replacementss          r(   Ú	mask_cellrT   {   s  € ð ')€Lð!ÝŒ	�#‰Œˆð �LÐ Ð øõ ð ð ð àˆðøøøð BÐAÐAÐAÐAÐAà,Ð,Ñ.Ô.ÐØ%×4Ò4°SÑ9Ô9€KÝ+>¸{Ñ+KÔ+KÑ(€KÐ(ØÐ+Ñ+€LØ%×4Ò4°[ÑAÔA€KÝ&4°[Ñ&AÔ&AÑ#€KÐ#Ý
ˆ;×!Ò!Ñ#Ô#Ñ$Ô$­¨C¯NªNÑ,<Ô,<Ñ(=Ô(=Ò=Ð=åÐØÐ&Ñ&€LØ˜Ð$Ð$s   „ œ
)¨)Úmagicc                 ó8  — |sJ ‚t          t          |¦  «        dz  dz
  d¦  «        }t          |¦  «        }d}|| v r1t          |¦  «        }|dz  }|dk    rt          d|› �¦  «        d‚|| v °1t          |¦  «        dz   t          |¦  «        k     r|› d�}d|› d�S )	aD  Return randomly generated token to mask IPython magic with.

    For example, if 'magic' was `%matplotlib inline`, then a possible
    token to mask it with would be `"43fdd17f7e5ddc83"`. The token
    will be the same length as the magic, and we make sure that it was
    not already present anywhere else in the cell.
    é   é   r   éd   z–INTERNAL ERROR: Black was not able to replace IPython magic. Please report a bug on https://github.com/psf/black/issues.  The magic might be helpful: Nú.ú")ÚmaxrM   Ú	TOKEN_HEXrB   )r    rU   Únbytesr=   Úcounters        r(   Ú	get_tokenr`   £   sÏ   € ð €L€L€LÝ•�U‘”˜q‘ 1Ñ$ aÑ(Ô(€FÝ�fÑÔ€EØ€GØ
�3ˆ,ˆ,Ý˜&Ñ!Ô!ˆØ�1‰ˆØ�SŠ=ˆ=Ý ð7à/4ð7ð 7ñô ð ð	ð	 �3ˆ,ˆ,õ ˆ5�z„z�A�~�˜E™
œ
Ò"Ð"Ø���ˆØˆuˆ<ˆ<ˆ<Ðr'   c                 ó0  — g }t          j        | ¦  «        }t          ¦   «         }|                     |¦  «         |j        €| |fS |j        j        }t          | |¦  «        }|                     t          ||¬¦  «        ¦  «         |› d|j        j	        › �|fS )aN  Replace cell magic with token.

    Note that 'src' will already have been processed by IPython's
    TransformerManager().transform_cell.

    Example,

        get_ipython().run_cell_magic('t', '-n1', 'ls =!ls\n')

    becomes

        "a794."
        ls =!ls

    The replacement, along with the transformed code, is returned.
    N©r   r    ú
)
rF   rG   ÚCellMagicFinderÚvisitÚ
cell_magicÚheaderr`   Úappendr   Úbody)r    rO   ÚtreeÚcell_magic_finderrg   r   s         r(   rK   rK   ½   s¥   € ð" ')€LåŒ9�S‰>Œ>€Då'Ñ)Ô)ÐØ×Ò˜DÑ!Ô!Ð!ØÔ#Ð+Ø�LÐ Ð ØÔ)Ô0€FÝ�S˜&Ñ!Ô!€DØ×Ò�¨°6Ð:Ñ:Ô:Ñ;Ô;Ð;ØÐ9Ð9Ð'Ô2Ô7Ð9Ð9¸<ÐGÐGr'   c                 óL  — g }t          ¦   «         }|                     t          j        | ¦  «        ¦  «         g }t	          |                      ¦   «         d¬¦  «        D ]±\  }}||j        v rŽ|j        |         }t          |¦  «        dk    rt          d|› d�¦  «        ‚|d         j	        |d         j
        }}t          | |¦  «        }	|                     t          |	|¬¦  «        ¦  «         |d|…         |	z   }|                     |¦  «         Œ²d                     |¦  «        |fS )	ao  Replace magics within body of cell.

    Note that 'src' will already have been processed by IPython's
    TransformerManager().transform_cell.

    Example, this

        get_ipython().run_line_magic('matplotlib', 'inline')
        'foo'

    becomes

        "5e67db56d490fd39"
        'foo'

    The replacement, along with the transformed code, are returned.
    rX   )Ústartz#Expecting one magic per line, got: z<
Please report a bug on https://github.com/psf/black/issues.r   rb   Nrc   )ÚMagicFinderre   rF   rG   Ú	enumeraterN   ÚmagicsrM   rB   Ú
col_offsetrU   r`   rh   r   Újoin)
r    rO   Úmagic_finderÚnew_srcsÚiÚlineÚoffsets_and_magicsrq   rU   r   s
             r(   rL   rL   Ü   sJ  € ð$ €LÝ‘=”=€LØ×Ò•s”y ‘~”~Ñ&Ô&Ð&Ø€HÝ˜SŸ^š^Ñ-Ô-°QÐ7Ñ7Ô7ð ð ‰ˆˆ4Ø�Ô#Ð#Ð#Ø!-Ô!4°QÔ!7ÐÝÐ%Ñ&Ô&¨!Ò+Ð+Ý$ðRÐ:Lð Rð Rð Rñô ð ð
 # 1Ô%Ô0Ø" 1Ô%Ô+ð ˆJõ ˜S %Ñ(Ô(ˆDØ×Ò¥°¸5Ð AÑ AÔ AÑBÔBÐBØ˜˜˜Ô$ tÑ+ˆDØ�Š˜ÑÔÐÐØ�9Š9�XÑÔ Ð,Ð,r'   rO   c                 óP   — |D ]"}|                       |j        |j        ¦  «        } Œ#| S )z…Remove replacements from cell.

    For example

        "9b20"
        foo = bar

    becomes

        %%time
        foo = bar
    )Úreplacer   r    )r    rO   Úreplacements      r(   Úunmask_cellr{     s2   € ð $ð =ð =ˆØ�kŠk˜+Ô*¨K¬OÑ<Ô<ˆˆØ€Jr'   Únodec                 óæ   — t          | t          j        ¦  «        oWt          | j        t          j        ¦  «        o8t          | j        j        t          j        ¦  «        o| j        j        j        dk    S )zºCheck if attribute is IPython magic.

    Note that the source of the abstract syntax tree
    will already have been processed by IPython's
    TransformerManager().transform_cell.
    Úget_ipython)Ú
isinstancerF   Ú	AttributeÚvalueÚCallÚfuncÚNameÚid)r|   s    r(   Ú_is_ipython_magicr†     s\   € õ 	�4�œÑ'Ô'ð 	0Ý�t”z¥3¤8Ñ,Ô,ð	0å�t”z”­¬Ñ1Ô1ð	0ð ŒJŒOÔ -Ò/ð	r'   Úargsc                 ó€   — g }| D ]8}t          |t          j        ¦  «        sJ ‚|                     |j        ¦  «         Œ9|S ©N)r   rF   ÚStrrh   Ús)r‡   Ústr_argsÚargs      r(   Ú_get_str_argsrŽ   &  sJ   € Ø€HØð ð ˆÝ˜#�sœwÑ'Ô'Ð'Ð'Ð'Ø�Š˜œÑÔÐÐØ€Or'   c                   óV   — e Zd ZU eed<   ee         ed<   eed<   edefd„¦   «         ZdS )Ú	CellMagicr8   Úparamsri   r*   c                 óH   — | j         rd| j        › d| j         › �S d| j        › �S )Nz%%ú )r‘   r8   ©Úselfs    r(   rg   zCellMagic.header4  s6   € àŒ;ð 	2Ø1˜œ	Ð1Ð1 D¤KÐ1Ð1Ð1Ø�D”IÐÐÐr'   N)r!   r"   r#   r$   r%   r   Úpropertyrg   r&   r'   r(   r�   r�   .  s]   € € € € € € à
€I€I�IØ�SŒMÐÐÑØ
€I€I�Iàð ˜ð  ð  ð  ñ „Xð ð  ð  r'   r�   c                   óJ   — e Zd ZdZddee         ddfd„Zdej        ddfd„Z	dS )	rd   ag  Find cell magics.

    Note that the source of the abstract syntax tree
    will already have been processed by IPython's
    TransformerManager().transform_cell.

    For example,

        %%time

        foo()

    would have been transformed to

        get_ipython().run_cell_magic('time', '', 'foo()\n')

    and we look for instances of the latter.
    Nrf   r*   c                 ó   — || _         d S r‰   )rf   )r•   rf   s     r(   Ú__init__zCellMagicFinder.__init__O  s   € Ø$ˆŒˆˆr'   r|   c                 óN  — t          |j        t          j        ¦  «        rpt	          |j        j        ¦  «        rW|j        j        j        dk    rBt          |j        j        ¦  «        }t          |d         |d         |d         ¬¦  «        | _
        |                      |¦  «         dS )z)Find cell magic, extract header and body.Úrun_cell_magicr   rX   rW   )r8   r‘   ri   N)r   r�   rF   r‚   r†   rƒ   ÚattrrŽ   r‡   r�   rf   Úgeneric_visit)r•   r|   r‡   s      r(   Ú
visit_ExprzCellMagicFinder.visit_ExprR  s“   € õ �t”z¥3¤8Ñ,Ô,ð	Tå! $¤*¤/Ñ2Ô2ð	Tð ”
”Ô$Ð(8Ò8Ð8å  ¤¤Ñ1Ô1ˆDÝ'¨T°!¬W¸TÀ!¼WÈ4ÐPQÌ7ÐSÑSÔSˆDŒOØ×Ò˜4Ñ Ô Ð Ð Ð r'   r‰   )
r!   r"   r#   Ú__doc__r   r�   r™   rF   ÚExprrž   r&   r'   r(   rd   rd   <  sn   € € € € € ðð ð$%ð % 8¨IÔ#6ð %À$ð %ð %ð %ð %ð	!˜sœxð 	!¨Dð 	!ð 	!ð 	!ð 	!ð 	!ð 	!r'   rd   c                   ó$   — e Zd ZU eed<   eed<   dS )ÚOffsetAndMagicrq   rU   N)r!   r"   r#   Úintr%   r$   r&   r'   r(   r¢   r¢   ^  s"   € € € € € € à€O€O�OØ€J€J�J€J€Jr'   r¢   c                   óN   — e Zd ZdZdd„Zdej        ddfd„Zdej        ddfd„Z	dS )	rn   aª  Visit cell to look for get_ipython calls.

    Note that the source of the abstract syntax tree
    will already have been processed by IPython's
    TransformerManager().transform_cell.

    For example,

        %matplotlib inline

    would have been transformed to

        get_ipython().run_line_magic('matplotlib', 'inline')

    and we look for instances of the latter (and likewise for other
    types of magics).
    r*   Nc                 óB   — t          j        t          ¦  «        | _        d S r‰   )ÚcollectionsÚdefaultdictÚlistrp   r”   s    r(   r™   zMagicFinder.__init__y  s   € Ý7BÔ7NÍtÑ7TÔ7TˆŒˆˆr'   r|   c                 óL  — t          |j        t          j        ¦  «        rït	          |j        j        ¦  «        rÖt          |j        j        ¦  «        }|j        j        j        dk    rd|d         › �}nZ|j        j        j        dk    r"d|d         › �}|d         r|d|d         › �z  }n#t          d|j        j        j        ›d	�¦  «        d
‚| j
        |j        j                                      t          |j        j        |¦  «        ¦  «         |                      |¦  «         d
S )a{  Look for system assign magics.

        For example,

            black_version = !black --version
            env = %env var

        would have been (respectively) transformed to

            black_version = get_ipython().getoutput('black --version')
            env = get_ipython().run_line_magic('env', 'var')

        and we look for instances of any of the latter.
        Ú	getoutputú!r   Úrun_line_magicú%rX   r“   zUnexpected IPython magic zC found. Please report a bug on https://github.com/psf/black/issues.N)r   r�   rF   r‚   r†   rƒ   rŽ   r‡   rœ   rB   rp   Úlinenorh   r¢   rq   r�   ©r•   r|   r‡   r    s       r(   Úvisit_AssignzMagicFinder.visit_Assign|  s1  € õ �d”j¥#¤(Ñ+Ô+ð 	Õ0AÀ$Ä*Ä/Ñ0RÔ0Rð 	Ý  ¤¤Ñ1Ô1ˆDØŒzŒÔ# {Ò2Ð2Ø#˜$˜qœ'�m�m��Ø””Ô%Ð)9Ò9Ð9Ø#˜$˜qœ'�m�m�Ø˜”7ð )Ø˜=˜t Aœw˜=˜=Ñ(�Cøå$ðR°´
´Ô0Dð Rð Rð Rñô ð ðð ŒK˜œ
Ô)Ô*×1Ò1Ý˜tœzÔ4°cÑ:Ô:ñô ð ð 	×Ò˜4Ñ Ô Ð Ð Ð r'   c                 óº  — t          |j        t          j        ¦  «        �r%t	          |j        j        ¦  «        �rt          |j        j        ¦  «        }|j        j        j        dk    rR|d         dk    rd|d         › �}nƒ|d         dk    rd|d         › �}nkd|d         › �}|d         r|d	|d         › �z  }nI|j        j        j        d
k    rd|d         › �}n(|j        j        j        dk    rd|d         › �}nt          ‚| j
        |j        j                                      t          |j        j        |¦  «        ¦  «         |                      |¦  «         dS )a°  Look for magics in body of cell.

        For examples,

            !ls
            !!ls
            ?ls
            ??ls

        would (respectively) get transformed to

            get_ipython().system('ls')
            get_ipython().getoutput('ls')
            get_ipython().run_line_magic('pinfo', 'ls')
            get_ipython().run_line_magic('pinfo2', 'ls')

        and we look for instances of any of the latter.
        r¬   r   Úpinfoú?rX   Úpinfo2z??r­   r“   Úsystemr«   rª   z!!N)r   r�   rF   r‚   r†   rƒ   rŽ   r‡   rœ   r   rp   r®   rh   r¢   rq   r�   r¯   s       r(   rž   zMagicFinder.visit_Expr�  s`  € õ& �d”j¥#¤(Ñ+Ô+ñ 	Õ0AÀ$Ä*Ä/Ñ0RÔ0Rñ 	Ý  ¤¤Ñ1Ô1ˆDØŒzŒÔ#Ð'7Ò7Ð7Ø˜”7˜gÒ%Ð%Ø'˜d 1œg˜-˜-�C�CØ˜!”W Ò(Ð(Ø(˜t Aœw˜.˜.�C�Cà'˜d 1œg˜-˜-�CØ˜A”wð -Ø˜} 4¨¤7˜}˜}Ñ,˜øØ””Ô%¨Ò1Ð1Ø#˜$˜qœ'�m�m��Ø””Ô%¨Ò4Ð4Ø$˜4 œ7�n�n��å$Ð$ØŒK˜œ
Ô)Ô*×1Ò1Ý˜tœzÔ4°cÑ:Ô:ñô ð ð 	×Ò˜4Ñ Ô Ð Ð Ð r'   )r*   N)
r!   r"   r#   rŸ   r™   rF   ÚAssignr°   r    rž   r&   r'   r(   rn   rn   f  s   € € € € € ðð ð$Uð Uð Uð Uð! ¤ð !°ð !ð !ð !ð !ðB'!˜sœxð '!¨Dð '!ð '!ð '!ð '!ð '!ð '!r'   rn   )1rŸ   rF   r¦   ÚdataclassesÚsecretsÚsysÚ	functoolsr   Úimportlib.utilr   Útypingr   r   r   r   Úversion_infor   Útyping_extensionsÚblack.outputr   Úblack.reportr   Ú	frozensetÚTRANSFORMED_MAGICSr9   ÚPYTHON_CELL_MAGICSÚ	token_hexr]   Ú	dataclassr   Úboolr0   r$   r>   rC   rT   r`   rK   rL   r{   Úexprr€   r†   rŽ   r�   ÚNodeVisitorrd   r¢   rn   r&   r'   r(   ú<module>rÉ      s:  ðØ /Ð /à 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .àÔ�wÒÐØ Ð Ð Ð Ð Ð Ð à+Ð+Ð+Ð+Ð+Ð+à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à�Yð  ñ ô Ð ð �9ð ñ ô Ð ð �Yð  ñ ô Ð ð Ô€	ð €Ô˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð
 ð
°ð 
¸ð 
ð 
ð 
ñ „ð
ð' 3ð '¨5°°d°Ô+;ð 'ð 'ð 'ð 'ð@& Sð &À$ð &È3ð &ð &ð &ð &ð0%%�3ð %%˜5  d¨;Ô&7Ð!7Ô8ð %%ð %%ð %%ð %%ðP�3ð ˜sð  sð ð ð ð ð4H˜Sð H U¨3°°[Ô0AÐ+AÔ%Bð Hð Hð Hð Hð>&-˜ð &-  c¨4°Ô+<Ð&<Ô =ð &-ð &-ð &-ð &-ðR�Sð ¨¨[Ô(9ð ¸cð ð ð ð ð$˜CœHð ¨°3´=Ô)Að ð ð ð ð˜˜SœXœð ¨4°¬9ð ð ð ð ð €Ô˜dÐ#Ñ#Ô#ð	 ð 	 ð 	 ð 	 ð 	 ñ 	 ô 	 ñ $Ô#ð	 ð!ð !ð !ð !ð !�c”oñ !ô !ð !ðD €Ô˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð^!ð ^!ð ^!ð ^!ð ^!�#”/ñ ^!ô ^!ð ^!ð ^!ð ^!r'   