a
    a's                     @   s  d Z ddlmZ ddlZddlmZ dZdd Zdd	 Z	d
d Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zi Zdd Zg dZee	e
dd ed!gejd"d#d$g	eeedd ed!gejd"d#d%g	eeedd ed!gejd"d#d&g	edddd ed!gd'd"d#d(g	edddd ed!gd'd"d#d)g	edddd ed!gej d"d#d)g	gZd*d+ eD Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$dBdC Z%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+dPdQ Z,dRdS Z-dTdU Z.dVdW Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=e>e?e@jAZBdtdu ZCdvdw ZDdxdy ZEdzd{ ZFd|d} ZGd~d ZHdd ZIdd ZJdd ZKg dZLeeedejMd ejMgejd!ddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	eeedddgejdddg	e e!e"dddgejdddg	e e!e"dddgejdddg	e e!e"dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e#e$e%dddgejdddg	e&e'e(dddgejdejMd dg	e)e*e+dddgejd ddg	e)e*e+dddgejd ddg	e)e*e+dddgejd ddg	e)e*e+dddgejd ddg	e)e*e+dddgejdddg	e)e*e+dddgejdddg	e)e*e+dddgejddd g	e)e*e+dddgejdddg	e)e*e+dddgejdddg	e)e*e+d	ddgejd
ddg	e,e-e.dddgejdddg	e,e-e.dddgejdddg	e,e-e.dddgejdddg	e/e0e1dddgejdd dg	e/e0e1dddgejdddg	e/e0e1dddgejdddg	e/e0e1dddgejdddg	e/e0e1dddgejdddg	e2e3e4dddgejd dd g	e2e3e4dddgejd d!d"g	e2e3e4dddgejd d#d$g	e2e3e4dddgejd d%d&g	e2e3e4d'ddgejd d(d)g	e2e3e4dddgejd d*d+g	e2e3e4dddgejd d,d-g	e5e6e7dddgejdd.d/g	e5e6e7dddgejdd0d1g	e5e6e7dddgejdd2d3g	e5e6e7dddgejdd4d5g	e5e6e7dddgejdd6d7g	e8e9e:dd8dgejd8d d9g	e8e9e:dd8dgejd8d:d;g	e8e9e:dd8dgejd8d<d=g	e8e9e:dd8dgejd8dd>g	e;e<e=ddԐd?gejd@ddAg	e;e<e=ddԐd?gejd@d!dBg	e;e<e=ddԐd?gejd@dCdDg	e;e<e=ddԐd?gejd@ddEg	e;e<e=dFdԐd?gejd@ddGg	e;e<e=dHdԐd?gejd@dIdJg	e;e<e=dKdԐd?gejd@dLdMg	e;e<e=dNdԐd?gejd@dOdPg	e;e<e=dQdԐd?gejd@dRdSg	e;e<e=ddԐd?gejd@dTdUg	e;e<e=dVdԐd?gejd@ddWg	e;e<e=dXdԐd?gejd@dYdZg	e;e<e=d[dԐd?gejd@d\d]g	e;e<e=d^dԐd?gejd@d_d`g	e;e<e=dadԐd?gejd@dbdcg	e;e<e=dddԐd?gejd@dedfg	e;e<e=dgdԐd?gejd@dhdig	e;e<e=djdԐd?gejd@ddkg	e;e<e=dldԐd?gejd@dmdng	eCeDeEdd'dCgejddodpg	eFeGeHddqejMd gddԐdrdsg	eFeGeHddqejMd gddԐdrdtg	eFeGeHddqejMd gddԐdrdug	eFeGeHddqejMd gddԐdrdvg	eFeGeHddqejMd gddԐdrdwg	eFeGeHdFdqejMd gddԐdrdxg	eFeGeHdHdqejMd gddԐdrdyg	eFeGeHd'dqejMd gddԐdrdzg	eFeGeHdKdqejMd gddԐdrd{g	eFeGeHddqejMd gddԐdrd|g	eFeGeHdNdqejMd gddԐdrd}g	eFeGeHd~dqejMd gddԐdrdg	eFeGeHdQdqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdVdqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdXdqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHd[dqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHd^dqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdadqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdgdqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdjdqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHdldqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eFeGeHddqejMd gddԐdrdg	eIeJeKddqdgddddg	eIeJeKd[dqdgddddg	eIeJeKddqdgddddg	eIeJeKd^dqdgddddg	eIeJeKddqdgddddg	eIeJeKdadqdgddddg	eIeJeKddqdgddddg	eIeJeKdddqdgddddg	eIeJeKddqdgddddg	eIeJeKdgdqdgddddg	eIeJeKddqdgddddg	eIeJeKdjdqdgddddg	eIeJeKddqdgdddĐdg	eIeJeKdldqdgdddƐdg	eIeJeKddqdgdddȐdg	eIeJeKddqdgdddʐdg	eIeJeKddqdgddd̐dg	eIeJeKddqdgdddΐdg	eIeJeKddqdgdddАdg	eIeJeKddqdgdddҐdg	eIeJeKddqdgdddԐdg	eIeJeKd	dqdgddd֐dg	eIeJeKdؐdqdgdddِdg	eIeJeKdېdqdgdddܐdg	eIeJeKdސdqdgdddߐdg	eIeJeKddqdgddddg	eIeJeKddqdgddddg	eIeJeKddqdgddddg	eIeJeKddqdgddddg	eIeJeKddqdgddddg	eIeJeKddqdgddddg	gZNdd+ eND ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUg d ZVePeQeRdejddddg	ePeQeRdejddd	ed!d d  d
g	ePeQeRdejddd ed!d d  dg	ePeQeRdejddCddg	eSeTeUdejddejMd dg	eSeTeUdejddejMd dg	gZWdd+ eWD ZXdd ZYeYe eYeO eYeX dddZZej[ej\ej]ej^gZ_g dZ`eeeeegZag dZbdS (  a
  
Parameters used in test and benchmark methods.

Collections of test cases suitable for testing 1-D root-finders
  'original': The original benchmarking functions.
     Real-valued functions of real-valued inputs on an interval
     with a zero.
     f1, .., f3 are continuous and infinitely differentiable
     f4 has a left- and right- discontinuity at the root
     f5 has a root at 1 replacing a 1st order pole
     f6 is randomly positive on one side of the root,
     randomly negative on the other.
     f4 - f6 are not continuous at the root.

  'aps': The test problems in the 1995 paper
     TOMS "Algorithm 748: Enclosing Zeros of Continuous Functions"
     by Alefeld, Potra and Shi. Real-valued functions of
     real-valued inputs on an interval with a zero.
     Suitable for methods which start with an enclosing interval, and
     derivatives up to 2nd order.

  'complex': Some complex-valued functions of complex-valued inputs.
     No enclosing bracket is provided.
     Suitable for methods which use one or more starting values, and
     derivatives up to 2nd order.

  The test cases are provided as a list of dictionaries. The dictionary
  keys will be a subset of:
  ["f", "fprime", "fprime2", "args", "bracket", "smoothness",
  "a", "b", "x0", "x1", "root", "ID"]
    )randomN)zerosa  
f2 is a symmetric parabola, x**2 - 1
f3 is a quartic polynomial with large hump in interval
f4 is step function with a discontinuity at 1
f5 is a hyperbola with vertical asymptote at 1
f6 has random values positive to left of 1, negative to right

Of course, these are not real problems. They just test how the
'good' solvers behave in bad circumstances where bisection is
really the best. A good solver should not be much worse than
bisection in such circumstance, while being faster for smooth
monotone sorts of functions.
c                 C   s   | | d  S )z'f1 is a quadratic with roots at 0 and 1      ? xr   r   h/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/scipy/optimize/_tstutils.pyf1=   s    r	   c                 C   s   d|  d S N      r   r   r   r   r   f1_fpB   s    r   c                 C   s   dS Nr   r   r   r   r   r   f1_fppF   s    r   c                 C   s   | d d S )z$f2 is a symmetric parabola, x**2 - 1r   r   r   r   r   r   r   f2J   s    r   c                 C   s   d|  S r   r   r   r   r   r   f2_fpO   s    r   c                 C   s   dS r   r   r   r   r   r   f2_fppS   s    r   c                 C   s   | | d  | d  | d  S )z%A quartic with roots at 0, 1, 2 and 3r   g       @g      @r   r   r   r   r   f3W   s    r   c                 C   s$   d| d  d| d   d|   d S )N         r         r   r   r   r   r   f3_fp\   s    r   c                 C   s   d| d  d|   d S )N   r   $   r   r   r   r   r   r   f3_fpp`   s    r   c                 C   s,   | dkrdd|   S | dk r(dd|   S dS )zBPiecewise linear, left- and right- discontinuous at x=1, the root.r   r   皙?g      r   r   r   r   r   r   f4d   s
    r   c                 C   s   | dkrdd|   S dS )zOHyperbola with a pole at x=1, but pole replaced with 0. Not continuous at root.r   r   r   r   r   r   r   r   f5m   s    r   c                 C   sF   t | d }|d u rB| dkr$t }n| dk r6t  }nd}|t | < |S )Nr   r   )	_f6_cachegetr   )r   vr   r   r   f6x   s    
r#   )	ffprimefprime2argsbracket
smoothnessx0rootIDr         ?r   g333333?r   zoriginal.01.00zoriginal.02.00zoriginal.03.00zoriginal.04.00zoriginal.05.00c                 C   s   g | ]}t tt|qS r   )dictzip_ORIGINAL_TESTS_KEYS.0Ztestcaser   r   r   
<listcomp>       r4   c                 C   s   t | | d  S )z<Straightforward sum of trigonometric function and polynomialr   npsinr   r   r   r   aps01_f   s    r9   c                 C   s   t | d S )Nr-   r7   cosr   r   r   r   aps01_fp   s    r<   c                 C   s   t |  S Nr6   r   r   r   r   	aps01_fpp   s    r>   c                 C   s6   t dd}dt d| d d | |d  d   S )zDpoles at x=n**2, 1st and 2nd derivatives at root are also close to 0r      r      r   r7   Zarangesumr   iir   r   r   aps02_f   s    rF   c                 C   s6   t dd}dt d| d d | |d  d   S )Nr   r?   r   r   rA   r   rB   rD   r   r   r   aps02_fp   s    rG   c                 C   s6   t dd}dt d| d d | |d  d   S )Nr   r?      r   rA   rB   rD   r   r   r   	aps02_fpp   s    rI   c                 C   s   ||  t ||   S )zRapidly changing at the rootr7   expr   abr   r   r   aps03_f   s    rO   c                 C   s   |||  d  t ||   S Nr   rJ   rL   r   r   r   aps03_fp   s    rQ   c                 C   s&   ||||  d  |  t ||   S rP   rJ   rL   r   r   r   	aps03_fpp   s    rR   c                 C   s   | | | S )zMedium-degree polynomialr   r   nrM   r   r   r   aps04_f   s    rU   c                 C   s   || |d   S rP   r   rS   r   r   r   aps04_fp   s    rV   c                 C   s   ||d  | |d   S Nr   r   r   rS   r   r   r   	aps04_fpp   s    rX   c                 C   s   t | d S )zSimple Trigonometric functionr-   r6   r   r   r   r   aps05_f   s    rY   c                 C   s
   t | S r=   r:   r   r   r   r   aps05_fp   s    rZ   c                 C   s   t |  S r=   r6   r   r   r   r   	aps05_fpp   s    r[   c                 C   s,   d|  t |  dt | |    d S )z0Exponential rapidly changing from -1 to 1 at x=0r   r   rJ   r   rT   r   r   r   aps06_f   s    r]   c                 C   s(   dt |  d| t | |    S r   rJ   r\   r   r   r   aps06_fp   s    r^   c                 C   s   d| | t | |   S Nr@   rJ   r\   r   r   r   	aps06_fpp   s    r`   c                 C   s$   dd| d  |  d||   d  S )z/Upside down parabola with parametrizable heightr   r   r   r\   r   r   r   aps07_f   s    ra   c                 C   s$   dd| d  d| d||     S rW   r   r\   r   r   r   aps07_fp   s    rb   c                 C   s   d| | S r_   r   r\   r   r   r   	aps07_fpp   s    rc   c                 C   s   | |  d|  |  S )zDegree n polynomialr   r   r\   r   r   r   aps08_f   s    rd   c                 C   s   d|  |d|  |d    S r
   r   r\   r   r   r   aps08_fp  s    re   c                 C   s    d||d  d|  |d    S r
   r   r\   r   r   r   	aps08_fpp  s    rf   c                 C   s$   dd| d  |  d||   d  S )z.Upside down quartic with parametrizable heightr   r   r   r\   r   r   r   aps09_f
  s    rg   c                 C   s(   dd| d  d| d||   d   S )Nr   r   r   r   r\   r   r   r   aps09_fp  s    rh   c                 C   s   d| d||   d  S )Nir   r   r   r\   r   r   r   	aps09_fpp  s    ri   c                 C   s    t | |  | d  | |  S )zExponential plus a polynomialr   rJ   r\   r   r   r   aps10_f  s    rj   c                 C   s2   t | |  | | d  d  || |d    S rP   rJ   r\   r   r   r   aps10_fp  s    rk   c                 C   sJ   t | |  | | | d  d  | |    ||d  | |d    S rW   rJ   r\   r   r   r   	aps10_fpp   s    rl   c                 C   s   ||  d |d |   S )z8Rational function with a zero at x=1/n and a pole at x=0r   r   r\   r   r   r   aps11_f$  s    rm   c                 C   s   d|d  | d  S rW   r   r\   r   r   r   aps11_fp)  s    rn   c                 C   s   d|d  | d  S )Nr@   r   r   r   r\   r   r   r   	aps11_fpp-  s    ro   c                 C   s    t | d| t |d|  S )z!nth root of x, with a zero at x=nr   r7   powerr\   r   r   r   aps12_f1  s    rr   c                 C   s   t | d| | | S )Nr   rp   r\   r   r   r   aps12_fp6  s    rs   c                 C   s,   t | dd|  | d|  d|  | S )Nr   r   rp   r\   r   r   r   	aps12_fpp:  s    rt   c                 C   s2   | dkrdS d| d  }|t kr$dS | t| S )z-Function with *all* derivatives 0 at the rootr   r   r   _MAX_EXPABLEr7   rK   r   yr   r   r   aps13_fA  s    ry   c                 C   s>   | dkrdS d| d  }|t kr$dS dd| d   t| S )Nr   r   r   ru   rw   r   r   r   aps13_fpN  s    rz   c                 C   sF   | dkrdS d| d  }|t kr$dS dd| d   | d  t| S )Nr   r   r   rA   ru   rw   r   r   r   	aps13_fppW  s    r{   c                 C   s0   | dkr| d S |d | d t |  d  S )z<0 for negative x-values, trigonometric+linear for x positiver         4@      ?r   r6   r\   r   r   r   aps14_f`  s    
r~   c                 C   s"   | dkrdS |d dt |   S )Nr   r|   gUUUUUU?r:   r\   r   r   r   aps14_fpg  s    r   c                 C   s    | dkrdS | d t |  S )Nr   r|   r6   r\   r   r   r   	aps14_fppm  s    r   c                 C   sD   | dk rdS | dd|  kr&t jd S t |d |  d d d S )z6piecewise linear, constant outside of [0, 0.002/(1+n)]r   grh|Mb`?r   X9v?r     r7   erK   r\   r   r   r   aps15_fs  s
    
r   c                 C   sR   d|   krdd|  ks(n t jd S t |d |  d d |d  d d S Nr   r   r   r   r   r   r   r\   r   r   r   aps15_fp|  s    
r   c                 C   sb   d|   krdd|  ks(n t jd S t |d |  d d |d  d d |d  d d S r   r   r\   r   r   r   	aps15_fpp  s    
r   r   gS?z	aps.01.00g0D   ?g@g=.@z	aps.02.00g.   @gh!@rA   gƸ)@z	aps.02.01g   "@gh/@
   gxs7z&@z	aps.02.02gK   0@g}8@   g^^W3@z	aps.02.03gK   9@g?A@   g=@z	aps.02.04g%   B@g?H@%   gnD@z	aps.02.05g%  H@g?O@2   g؛[mK@z	aps.02.06g   P@g?T@A   g%Q@z	aps.02.07g  @T@gX@R   gkYMV@z	aps.02.08g   Y@g?^@e   gzi[@z	aps.02.09)ir.   i   r@   z	aps.03.00)ir@   z	aps.03.01)i8z	aps.03.02)r   皙?g      @gllRf?z	aps.04.00)r   r   g_
x?z	aps.04.01)   r   glTj"+?z	aps.04.02)r   r   g08->?z	aps.04.03)r   r   g?z	aps.04.04)r   r   r   z	aps.04.05)r   r   z	aps.04.06)r   r   z	aps.04.07)r   r   z	aps.04.08)r   r   z	aps.04.09gffffffg333333@r}   z	aps.04.10z	aps.04.11z	aps.04.12)   r   z	aps.04.13g?r   z	aps.05.00)r   g	?z	aps.06.00)r   gn?z	aps.06.01)r   gs Hda?z	aps.06.02)r   gX?z	aps.06.03)rA   g?gi?z	aps.06.04)   r   g]?z	aps.06.05)(   g?g.?z	aps.06.06)<   g?gTϨ?z	aps.06.07)P   g?g.?z	aps.06.08)d   g{Gz?gͺ},d|?z	aps.06.09gz?z	aps.07.00)r   g3_tF?z	aps.07.01gmd?z	aps.07.02g?z	aps.08.00gΏ$?z	aps.08.01g~++`?z	aps.08.02)   gx5[?z	aps.08.03gB!?z	aps.08.04g.xz?z	aps.09.00g.xz?z	aps.09.01gIl?z	aps.09.02g:*m?z	aps.09.03)r   glM:?z	aps.09.04gR@>z	aps.09.05gKu->z	aps.09.06gG"?z	aps.10.00gXbT?z	aps.10.01g,C?z	aps.10.02g=N?z	aps.10.03gaw?z	aps.10.04g{Gz?z	aps.11.00r   z	aps.11.01g?z	aps.11.02z	aps.11.03r   g?z	aps.12.00z	aps.12.01r   z	aps.12.02z	aps.12.03)r   z	aps.12.04)   r   z	aps.12.05)	   r   z	aps.12.06)   r   z	aps.12.07)   r   z	aps.12.08r   z	aps.12.09)r   z	aps.12.10)   r   z	aps.12.11)r?   r?   z	aps.12.12)   r   z	aps.12.13)   r   z	aps.12.14)   r   z	aps.12.15)   r   z	aps.12.16)r   z	aps.12.17)!   r   z	aps.12.18g@Xԯ?z	aps.13.00igh9?z	aps.14.00z	aps.14.01z	aps.14.02z	aps.14.03z	aps.14.04z	aps.14.05z	aps.14.06z	aps.14.07z	aps.14.08z	aps.14.09z	aps.14.10)r   z	aps.14.11z	aps.14.12)r   z	aps.14.13z	aps.14.14)   z	aps.14.15z	aps.14.16)r   z	aps.14.17z	aps.14.18z	aps.14.19z	aps.14.20)r   z	aps.14.21z	aps.14.22)rH   z	aps.14.23z	aps.14.24)r   z	aps.14.25z	aps.14.26)   z	aps.14.27z	aps.14.28)   z	aps.14.29z	aps.14.30)    z	aps.14.31z	aps.14.32)"   z	aps.14.33)#   z	aps.14.34)r   z	aps.14.35)r   z	aps.14.36)&   z	aps.14.37)'   z	aps.14.38z	aps.14.39g-C6?gBi?z	aps.15.00gpĵx?z	aps.15.01gD?z	aps.15.02gY?z	aps.15.03gVXl
?z	aps.15.04g^	?z	aps.15.05g3Qu?z	aps.15.06gq3юL8?z	aps.15.07gm۾Rk?z	aps.15.08gHt/?z	aps.15.09gW?z	aps.15.10gBQ?z	aps.15.11gWΥ?z	aps.15.12gBN?z	aps.15.13g@rp?z	aps.15.14g`MW?z	aps.15.15g-rc?z	aps.15.16g[.?z	aps.15.17g ?z	aps.15.18g5cA ?z	aps.15.19g\
>z	aps.15.20guW>z	aps.15.21)   g,Y~>z	aps.15.22)i,  gG>z	aps.15.23)i  g]4H->z	aps.15.24)i  g2v>z	aps.15.25)iX  gwaO>z	aps.15.26)i  gAbE٭>z	aps.15.27)i   gӥM>z	aps.15.28)i  gݢO>z	aps.15.29)r   g$lȴ>z	aps.15.30c                 C   s   g | ]}t tt|qS r   )r/   r0   _APS_TESTS_KEYSr2   r   r   r   r4   4  r5   c                 C   s   | | | S )z&z**n-a:  Use to find the nth root of ar   zrT   rM   r   r   r   cplx01_f<  s    r   c                 C   s   || |d   S rP   r   r   r   r   r   	cplx01_fpA  s    r   c                 C   s   ||d  | |d   S rW   r   r   r   r   r   
cplx01_fppE  s    r   c                 C   s   t | | S )z"e**z - a: Use to find the log of arJ   r   rM   r   r   r   cplx02_fI  s    r   c                 C   s
   t | S r=   rJ   r   r   r   r   	cplx02_fpN  s    r   c                 C   s
   t | S r=   rJ   r   r   r   r   
cplx02_fppR  s    r   )	r$   r%   r&   r'   r)   r*   x1r+   r,   )r   r.   y      ?      ?y      ?      ?              ?zcomplex.01.00)r   r   y            ?y             @g      zcomplex.01.01)r   r.   zcomplex.01.02)r   r   zcomplex.01.03)r.   y      ?       @zcomplex.02.00)r   y              ?zcomplex.02.01c                 C   s   g | ]}t tt|qS r   )r/   r0   _COMPLEX_TESTS_KEYSr2   r   r   r   r4   p  r5   c                 C   s6   | D ],}t ddg|dg D ]\}}|||< qqdS )z:Add "a" and "b" keys to each test from the "bracket" valuerM   rN   r(   N)r0   r!   )testsdkr"   r   r   r   _add_a_bs  s    r   originalc                    s>   | pd} t ttd}|| g } dur: fdd|D }|S )a  Return the requested collection of test cases, as an array of dicts with subset-specific keys

    Allowed values of collection:
    'original': The original benchmarking functions.
         Real-valued functions of real-valued inputs on an interval with a zero.
         f1, .., f3 are continuous and infinitely differentiable
         f4 has a single discontinuity at the root
         f5 has a root at 1 replacing a 1st order pole
         f6 is randomly positive on one side of the root, randomly negative on the other
    'aps': The test problems in the TOMS "Algorithm 748: Enclosing Zeros of Continuous Functions"
         paper by Alefeld, Potra and Shi. Real-valued functions of
         real-valued inputs on an interval with a zero.
         Suitable for methods which start with an enclosing interval, and
         derivatives up to 2nd order.
    'complex': Some complex-valued functions of complex-valued inputs.
         No enclosing bracket is provided.
         Suitable for methods which use one or more starting values, and
         derivatives up to 2nd order.

    The dictionary keys will be a subset of
    ["f", "fprime", "fprime2", "args", "bracket", "a", b", "smoothness", "x0", "x1", "root", "ID"]
     r   )Zapscomplexr   Nc                    s   g | ]}|d   kr|qS r)   r   )r3   Ztcr   r   r   r4     r5   zget_tests.<locals>.<listcomp>)_APS_TESTS_DICTS_COMPLEX_TESTS_DICTS_ORIGINAL_TESTS_DICTSr!   )Z
collectionr)   Zsubsetsr   r   r   r   	get_tests  s    r   )z	cc.bisectz	cc.ridderz	cc.brenthz	cc.brentq)r   r   r   r   r#   )r   N)c__doc__r   Znumpyr7   Zscipy.optimizer   ccdescriptionr	   r   r   r   r   r   r   r   r   r   r   r    r#   r1   sqrtinfZ_ORIGINAL_TESTSr   r9   r<   r>   rF   rG   rI   rO   rQ   rR   rU   rV   rX   rY   rZ   r[   r]   r^   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rr   rs   rt   logZfinfofloatmaxrv   ry   rz   r{   r~   r   r   r   r   r   r   piZ
_APS_TESTSr   r   r   r   r   r   r   r   Z_COMPLEX_TESTSr   r   r   bisectZridderZbrenthZbrentqmethodsZmstringsZ	functionsZfstringsr   r   r   r   <module>   s  &	
   "				" """  ""     ""  "$   " "$$$$$"$$$$$$"$ $$$$$&&&&&&&&&&&&&&$&&&&&&&&&&&&&&&&&&&$ """"""""""""""""""" """"""""""  
 .,&&"
