
    Mh                         d Z d Z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                    ddl }ddl m}m} |                     d          r
| dd         } |                     d          r*|                    t          |           t                    }n"|                    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   [)dtype)numpyr   r   
startswithr   evalfloat
atleast_1d)snpr   r   as        a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/IPython/sphinxext/custom_doctests.pystr_to_arrayr   3   s    "  ||H adG||D $HHT!WWEH** MM%((##H    c           	      l   ddl }t          |          dk    rd}d}n_	 t          |d                   }t          |d                   }n3# t          $ r& d                    |          }t          |          |w xY w	 t          |          }t          |          }|                    |          }	|                    |          }
|                    |	|
           }||                    ||	          ||
          ||           z  }n	#  d	}Y nxY wd
| j        }|d}d}n7|j	        j
        j        }d                    fd|j        D                       }|rYd}|                    ||d                    |          t          |          t          |                    }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   gh㈵>g:0yE>   zEBoth `rtol` and `atol` must be specified if either are specified: {0})rtolatolTz    Unavailable
c                     g | ]}|z   S  r   ).0lineTABs     r   
<listcomp>z!float_doctest.<locals>.<listcomp>   s    FFFDS4ZFFFr   zdoctest 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   isnanallclose	directivestatedocumentcurrent_sourcejoincontentreprRuntimeError)sphinx_shellargsinput_linesfound	submittedr   r   r   efound_isnansubmitted_isnanerrorr(   sourcer-   r!   s                  @r   float_doctestr:   U   s    
4yyA~~	'a>>Da>>DD 	' 	' 	'006t Q--Q&	'
7 ++	U##
 hhuoo((9--KK_===R[[|!4!*O+;!<&* ! 7 7 7 	7 C&I)8))FFFFI4EFFFGG 
6 HHVWdii&<&<d5kk)__#  / /1oo
 
s   *A
 
0A:>D	 	Dr   N)__doc__r   r:   doctestsr   r   r   <module>r=      sE   0 0d     D@ @ @J ]r   