o
    û›h  ã                   @   s    d Z dd„ Zdd„ ZdeiZdS )a   
Handlers for IPythonDirective's @doctest pseudo-decorator.

The Sphinx extension that provides support for embedded IPython code provides
a pseudo-decorator @doctest, which treats the input/output block as a
doctest, raising a RuntimeError during doc generation if the actual output
(after running the input) does not match the expected output.

An example usage is:

.. code-block:: rst

   .. ipython::

        In [1]: x = 1

        @doctest
        In [2]: x + 2
        Out[3]: 3

One can also provide arguments to the decorator. The first argument should be
the name of a custom handler. The specification of any other arguments is
determined by the handler. For example,

.. code-block:: rst

      .. ipython::

         @doctest float
         In [154]: 0.1 + 0.2
         Out[154]: 0.3

allows the actual output ``0.30000000000000004`` to match the expected output
due to a comparison with `np.allclose`.

This module contains handlers for the @doctest pseudo-decorator. Handlers
should have the following function signature::

    handler(sphinx_shell, args, input_lines, found, submitted)

where `sphinx_shell` is the embedded Sphinx shell, `args` contains the list
of arguments that follow: '@doctest handler_name', `input_lines` contains
a list of the lines relevant to the current doctest, `found` is a string
containing the output from the IPython shell, and `submitted` is a string
containing the expected output from the IPython shell.

Handlers must be registered in the `doctests` dict at the end of this module.

c                 C   s`   ddl }ddl m}m} |  d¡r| dd… } |  d¡r'|jt| ƒtd�}|S | t| ƒ¡}|S )	aI  
    Simplistic converter of strings from repr to float NumPy arrays.

    If the repr representation has ellipsis in it, then this will fail.

    Parameters
    ----------
    s : str
        The repr version of a NumPy array.

    Examples
    --------
    >>> s = "array([ 0.3,  inf,  nan])"
    >>> a = str_to_array(s)

    é    N)ÚinfÚnanÚarrayé   éÿÿÿÿú[)Zdtype)Únumpyr   r   Ú
startswithr   ÚevalÚfloatZ
atleast_1d)ÚsÚnpr   r   Úa© r   úWc:\Users\shubh\Videos\agent\nova\Lib\site-packages\IPython/sphinxext/custom_doctests.pyÚstr_to_array3   s   

ÿr   c                    s@  ddl }t|ƒdkrd}d}n zt|d ƒ}t|d ƒ}W n ty.   d |¡}t|ƒ|‚w z
t|ƒ}t|ƒ}W n   d}	Y n#| |¡}
| |¡}| |
|¡ }	|	|j||
  ||  ||d	� O }	d
‰ | j}|du rrd}d}n|j	j
j}d ‡ fdd„|jD ƒ¡}|	ržd}|j||d |¡t|ƒt|ƒˆ d�}t|ƒ‚dS )zÿ
    Doctest which allow the submitted output to vary slightly from the input.

    Here is how it might appear in an rst file:

    .. code-block:: rst

       .. ipython::

          @doctest float
          In [1]: 0.1 + 0.2
          Out[1]: 0.3

    r   Né   gñhãˆµøä>g:Œ0âŽyE>é   zEBoth `rtol` and `atol` must be specified if either are specified: {0}T)ÚrtolÚatolz    ZUnavailableÚ
c                    s   g | ]}ˆ | ‘qS r   r   )Ú.0Úline©ZTABr   r   Ú
<listcomp>‰   s    z!float_doctest.<locals>.<listcomp>z¥doctest float comparison failure

Document source: {0}

Raw content: 
{1}

On input line(s):
{TAB}{2}

we found output:
{TAB}{3}

instead of the expected:
{TAB}{4}

r   )r   Úlenr   Ú
IndexErrorÚformatr   ÚisnanZallcloseÚ	directiveÚstateZdocumentZcurrent_sourceÚjoinÚcontentÚreprÚRuntimeError)Zsphinx_shellÚargsZinput_linesÚfoundZ	submittedr   r   r   ÚeÚerrorZfound_isnanZsubmitted_isnanr   Úsourcer"   r   r   r   Úfloat_doctestU   sN   ÿ
ý


þ
ÿör*   r   N)Ú__doc__r   r*   Zdoctestsr   r   r   r   Ú<module>   s
    2"Eÿ