ó
    Ñ]jq&  ã                   ó„  • S 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
  \R                  " S5      r\ " S S	\R                  5      5       r " S
 S\R                  5      rS rSS.S jrS r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r/ SQrg) a›  A decorator-based method of constructing IPython magics with `argparse`
option handling.

New magic functions can be defined like so::

    from IPython.core.magic_arguments import (argument, magic_arguments,
        parse_argstring)

    @magic_arguments()
    @argument('-o', '--option', help='An optional argument.')
    @argument('arg', type=int, help='An integer positional argument.')
    def magic_cool(self, arg):
        """ A really cool magic command.

    """
        args = parse_argstring(magic_cool, arg)
        ...

The `@magic_arguments` decorator marks the function as having argparse arguments.
The `@argument` decorator adds an argument using the same syntax as argparse's
`add_argument()` method. More sophisticated uses may also require the
`@argument_group` or `@kwds` decorator to customize the formatting and the
parsing.

Help text for the magic is automatically generated from the docstring and the
arguments::

    In[1]: %cool?
        %cool [-o OPTION] arg

        A really cool magic command.

        positional arguments:
          arg                   An integer positional argument.

        optional arguments:
          -o OPTION, --option OPTION
                                An optional argument.

Here is an elaborated example that uses default parameters in `argument` and calls the `args` in the cell magic::

    from IPython.core.magic import register_cell_magic
    from IPython.core.magic_arguments import (argument, magic_arguments,
                                            parse_argstring)


    @magic_arguments()
    @argument(
        "--option",
        "-o",
        help=("Add an option here"),
    )
    @argument(
        "--style",
        "-s",
        default="foo",
        help=("Add some style arguments"),
    )
    @register_cell_magic
    def my_cell_magic(line, cell):
        args = parse_argstring(my_cell_magic, line)
        print(f"{args.option=}")
        print(f"{args.style=}")
        print(f"{cell=}")

In a jupyter notebook, this cell magic can be executed like this::

    %%my_cell_magic -o Hello
    print("bar")
    i = 42

Inheritance diagram:

.. inheritance-diagram:: IPython.core.magic_arguments
   :parts: 3

é    N©Ú
UsageError)Úundoc)Ú	arg_split)Údedentz[a-zA-Z][a-zA-Z0-9_-]*$c                   ó<   ^ • \ rS rSrSrS rS rSU 4S jjrSrU =r	$ )ÚMagicHelpFormatteré`   z@A HelpFormatter with a couple of changes to meet our needs.
    c                 óV   • [         R                  R                  U [        U5      X#5      $ ©N)ÚargparseÚRawDescriptionHelpFormatterÚ
_fill_textr   )ÚselfÚtextÚwidthÚindents       ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/IPython/core/magic_arguments.pyr   ÚMagicHelpFormatter._fill_texte   s"   € Ü×3Ñ3×>Ñ>¸tÄVÈDÃ\ÐSXÓaÐaó    c                 óÖ  • UR                   (       d%  U R                  XR                  5      " S5      u  nU$ / nUR                  S:X  a  UR	                  UR                   5        OuUR                  R                  5       nU R                  X5      n[        R                  U5      (       d  SU-  nUR                    H  nUR                  U< SU< 35        M     SR                  U5      $ )Né   r   z<%s>Ú z, )Úoption_stringsÚ_metavar_formatterÚdestÚnargsÚextendÚupperÚ_format_argsÚNAME_REÚmatchÚappendÚjoin)r   ÚactionÚmetavarÚpartsÚdefaultÚargs_stringÚoption_strings          r   Ú_format_action_invocationÚ,MagicHelpFormatter._format_action_invocationi   sÃ   € Ø×$×$Ø×.Ñ.¨v·{±{ÔCÀAÓF‰HˆGØˆNð ˆEð �|‰|˜qÓ Ø—‘˜V×2Ñ2Õ3ð
 !Ÿ+™+×+Ñ+Ó-�Ø"×/Ñ/°Ó@�ô —}‘} [×1Ñ1Ø"(¨;Ñ"6�KØ%+×%:Ô%:�MØ—L‘L«Mº;Ð!GÖHñ &;ð —9‘9˜UÓ#Ð#r   c                 ó.   >• [         [        U ]  XX45        g r   )Úsuperr	   Ú	add_usage)r   ÚusageÚactionsÚgroupsÚprefixÚ	__class__s        €r   r/   ÚMagicHelpFormatter.add_usage†   s   ø€ ÜÔ  $Ñ1°%À&ÕQr   © )z::

  %)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r+   r/   Ú__static_attributes__Ú__classcell__©r4   s   @r   r	   r	   `   s   ø† ñòbò$÷:Rõ Rr   r	   c            
       óX   ^ • \ rS rSrSrSSSSS\SSSS4
U 4S jjrS rSS	.S
 jrSr	U =r
$ )ÚMagicArgumentParseré‰   z9An ArgumentParser tweaked for use by IPython magics.
    NÚ-ÚerrorFc                 ó:   >• Uc  / n[         [        U ]  XX4XVXxXšS9
  g )N)
Úprogr0   ÚdescriptionÚepilogÚparentsÚformatter_classÚprefix_charsÚargument_defaultÚconflict_handlerÚadd_help)r.   r@   Ú__init__)r   rE   r0   rF   rG   rH   rI   rJ   rK   rL   rM   r4   s              €r   rN   ÚMagicArgumentParser.__init__Œ   s3   ø€ ð ‰?ØˆGÜÔ! 4Ñ1°tØ#ØØ%Ø-ð	 	2ò 	Br   c                 ó   • [        U5      e)z4Raise a catchable error instead of exiting.
        r   )r   Úmessages     r   rC   ÚMagicArgumentParser.errorŸ   s   € ô ˜Ó!Ð!r   ©Úpartialc                óp   • [        X(       + S9nU(       a  U R                  U5      $ U R                  U5      $ )zKSplit a string into an argument list and parse that argument list.
        )Ústrict)r   Úparse_known_argsÚ
parse_args)r   Ú	argstringrT   Úargvs       r   Úparse_argstringÚ#MagicArgumentParser.parse_argstring¤   s3   € ô ˜¬;Ñ7ˆÞØ×(Ñ(¨Ó.Ð.Ø�‰˜tÓ$Ð$r   r6   )r7   r8   r9   r:   r;   r	   rN   rC   r[   r<   r=   r>   s   @r   r@   r@   ‰   sB   ø† ñð ØØ!ØØØ!3Ø!Ø"&Ø")Ø÷Bò&"ð
 5:÷ %ó %r   r@   c                 ó
  • [        U S0 5      nSU;  a  [        U SS5      US'   [        U 5      n[        U40 UD6nSnU R                  SSS2    H  nUR	                  X45      nUc  M  UnM     UR                  5       U l        U$ )zAConstruct an argument parser using the function decorations.
    Úargcmd_kwdsrF   r;   Néÿÿÿÿ)ÚgetattrÚ	real_namer@   Ú
decoratorsÚadd_to_parserÚformat_helpr;   )Ú
magic_funcÚkwdsÚarg_nameÚparserÚgroupÚdecoÚresults          r   Úconstruct_parserrl   ­   s™   € ô �:˜}¨bÓ1€DØ˜DÓ Ü% j°)¸TÓBˆˆ]ÑÜ˜Ó$€HÜ  Ñ2¨TÑ2€Fð €EØ×%Ñ%¡d¨ dÔ+ˆØ×#Ñ# FÓ2ˆØÓØŠEñ ,ð  ×+Ñ+Ó-€JÔà€Mr   FrS   c                ó4   • U R                   R                  XS9$ )z@Parse the string of arguments for the given magic function.
    rS   )rh   r[   )re   rY   rT   s      r   r[   r[   Ã   s   € ð ×Ñ×,Ñ,¨YÐ,ÐHÐHr   c                 ó|   • U R                   nUR                  S5      (       a  U[        S5      S n[        U SU5      $ )z%Find the real name of the magic.
    Úmagic_NÚargcmd_name)r7   Ú
startswithÚlenr`   )re   Ú
magic_names     r   ra   ra   É   s?   € ð ×$Ñ$€JØ×Ñ˜X×&Ñ&Ø¤ H£ Ð/ˆ
Ü�:˜}¨jÓ9Ð9r   c                   ó$   • \ rS rSrSrS rS rSrg)ÚArgDecoratoréÒ   zMBase class for decorators to add ArgumentParser information to a method.
    c                 ó|   • [        USS5      (       d  SUl        / Ul        UR                  R                  U 5        U$ ©NÚhas_argumentsFT)r`   ry   rb   r#   ©r   Úfuncs     r   Ú__call__ÚArgDecorator.__call__Ö   s7   € Ü�t˜_¨e×4Ñ4Ø!%ˆDÔØ ˆDŒOØ�‰×Ñ˜tÔ$Øˆr   c                 ó   • g)zCAdd this object's information to the parser, if necessary.
        Nr6   ©r   rh   ri   s      r   rc   ÚArgDecorator.add_to_parserÝ   s   € ð 	r   r6   N)r7   r8   r9   r:   r;   r|   rc   r<   r6   r   r   ru   ru   Ò   s   † ñòõr   ru   c                   ó(   • \ rS rSrSrSS jrS rSrg)Úmagic_argumentséã   zJMark the magic as having argparse arguments and possibly adjust the
name.
Nc                 ó   • Xl         g r   ©Úname)r   r†   s     r   rN   Úmagic_arguments.__init__è   ó   € Ø�	r   c                 ó¢   • [        USS5      (       d  SUl        / Ul        U R                  b  U R                  Ul        [        U5      Ul        U$ rx   )r`   ry   rb   r†   rp   rl   rh   rz   s     r   r|   Úmagic_arguments.__call__ë   sI   € Ü�t˜_¨e×4Ñ4Ø!%ˆDÔØ ˆDŒOØ�9‰9Ñ Ø#Ÿy™yˆDÔô ' tÓ,ˆŒØˆr   r…   r   )r7   r8   r9   r:   r;   rN   r|   r<   r6   r   r   r‚   r‚   ã   s   † ñôõ	r   r‚   c                   ó0   • \ rS rSr% Sr\\S'   S rS rSr	g)ÚArgMethodWrapperé÷   z
Base class to define a wrapper for ArgumentParser method.

Child class must define either `_method_name` or `add_to_parser`.

Ú_method_namec                 ó   • Xl         X l        g r   ©Úargsrf   )r   r‘   rf   s      r   rN   ÚArgMethodWrapper.__init__  s   € ØŒ	Ø�	r   c                 ól   • Ub  Un[        XR                  5      " U R                  0 U R                  D6  g)ú5Add this object's information to the parser.
        N)r`   rŽ   r‘   rf   r   s      r   rc   ÚArgMethodWrapper.add_to_parser  s2   € ð ÑØˆFÜ�×)Ñ)Ô*¨D¯I©IÐC¸¿¹ÒCØr   r�   N)
r7   r8   r9   r:   r;   ÚstrÚ__annotations__rN   rc   r<   r6   r   r   rŒ   rŒ   ÷   s   ‡ ñð Óòõr   rŒ   c                   ó   • \ rS rSrSrSrSrg)Úargumenti  zkStore arguments and keywords to pass to add_argument().

Instances also serve to decorate command methods.
Úadd_argumentr6   N©r7   r8   r9   r:   r;   rŽ   r<   r6   r   r   r™   r™     ó   † ñð "ƒLr   r™   c                   ó   • \ rS rSrSrSrSrg)Údefaultsi  zkStore arguments and keywords to pass to set_defaults().

Instances also serve to decorate command methods.
Úset_defaultsr6   Nr›   r6   r   r   rž   rž     rœ   r   rž   c                   ó   • \ rS rSrSrS rSrg)Úargument_groupi  zqStore arguments and keywords to pass to add_argument_group().

Instances also serve to decorate command methods.
c                 óN   • UR                   " U R                  0 U R                  D6$ )r”   )Úadd_argument_groupr‘   rf   r   s      r   rc   Úargument_group.add_to_parser%  s"   € ð ×(Ò(¨$¯)©)ÐA°t·y±yÑAÐAr   r6   N)r7   r8   r9   r:   r;   rc   r<   r6   r   r   r¡   r¡     s   † ñõ
Br   r¡   c                   ó2   ^ • \ rS rSrSrS rU 4S jrSrU =r$ )rf   i+  z:Provide other keywords to the sub-parser constructor.
    c                 ó   • Xl         g r   ©rf   )r   rf   s     r   rN   Úkwds.__init__.  rˆ   r   c                 óP   >• [         [        U ]  U5      nU R                  Ul        U$ r   )r.   rf   r|   r^   )r   r{   r4   s     €r   r|   Úkwds.__call__1  s%   ø€ Ü”T˜4Ñ)¨$Ó/ˆØŸ9™9ˆÔØˆr   r§   )	r7   r8   r9   r:   r;   rN   r|   r<   r=   r>   s   @r   rf   rf   +  s   ø† ñò÷ó r   rf   )r‚   r™   r¡   rf   r[   )r;   r   ÚreÚIPython.core.errorr   ÚIPython.utils.decoratorsr   ÚIPython.utils.processr   ÚIPython.utils.textr   Úcompiler!   r   r	   ÚArgumentParserr@   rl   r[   ra   ru   r‚   rŒ   r™   rž   r¡   rf   Ú__all__r6   r   r   Ú<module>r³      sÚ   ðñLóh Û 	õ *Ý *Ý +Ý %à
�*Š*Ð/Ó
0€àô&R˜×=Ñ=ó &Ró ð&RôP!%˜(×1Ñ1ô !%òHð, 7<õ Iò:÷ñ ô"�lô ô(�|ô ô0"Ðô "ô"Ðô "ô	BÐ%ô 	Bô	ˆ<ô 	ò�r   