
    9=e                     %   d Z ddlmZ ddlZddlmZ dZd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zi Zd Zg dZee	e
dd ej        d          gej        dddg	eeedd ej        d          gej        dddg	eeedd ej        d          gej        dddg	edddd ej        d          gddddg	edddd ej        d          gddddg	edddd ej        d          gej         dddg	gZd eD             Zd Zd  Zd! Zd" Zd# Zd$ Zd% Z d& Z!d' Z"d( Z#d) Z$d* Z%d+ Z&d, Z'd- Z(d. Z)d/ Z*d0 Z+d1 Z,d2 Z-d3 Z.d4 Z/d5 Z0d6 Z1d7 Z2d8 Z3d9 Z4d: Z5d; Z6d< Z7d= Z8d> Z9d? Z:d@ Z;dA Z<dB Z= ej>         ej?        e@          jA                  ZBdC ZCdD ZDdE ZEdF ZFdG ZGdH ZHdI ZIdJ ZJdK ZKg dZLg eeedejM        dLz  ejM        gej        ddMdNg	eeeddOdPgej        dLdQdRg	eeeddSdTgej        dUdVdWg	eeeddXdYgej        dZd[d\g	eeedd]d^gej        d_d`dag	eeeddbdcgej        dddedfg	eeeddgdhgej        didjdkg	eeeddldmgej        dndodpg	eeeddqdrgej        dsdtdug	eeeddvdwgej        dxdydzg	eeedd{d|gej        d}d~dg	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dUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUgej        dddg	e#e$e%dddUg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jM        dz  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        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/e0e1dddgej        dddg	e/e0e1dddgej        dddg	e/e0e1dddgej        dddg	e/e0e1dddgej        dddg	e/e0e1dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e2e3e4dddgej        dddg	e5e6e7dddgej        dddg	e5e6e7dddgej        dddg	e5e6e7dddgej        dddg	e5e6e7dddgej        dddg	e5e6e7dddgej        dddg	e8e9e:dddgej        dddg	e8e9e:dddgej        dd dg	e8e9e:dddgej        dddg	e8e9e:dddgej        ddĐdg	e;e<e=dddgej        ddLdg	e;e<e=dddgej        dddg	e;e<e=dddgej        dd	d
g	e;e<e=dddgej        ddUdg	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=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=dddgej        dddg	e;e<e=dddgej        dddg	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=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=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=d-ddgej        dd.d/g	e;e<e=d0ddgej        ddd1g	e;e<e=d2ddgej        dd3d4g	eCeDeEddd	gej        ddd5g	eFeGeHdd6ejM        dLz  gddd7d8g	eFeGeHdd6ejM        dLz  gddd7d9g	eFeGeHdd6ejM        dLz  gddd7d:g	eFeGeHdd6ejM        dLz  gddd7d;g	eFeGeHdd6ejM        dLz  gddd7d<g	eFeGeHdd6ejM        dLz  gddd7d=g	eFeGeHdd6ejM        dLz  gddd7d>g	eFeGeHdd6ejM        dLz  gddd7d?g	eFeGeHdd6ejM        dLz  gddd7d@g	eFeGeHdՐd6ejM        dLz  gddd7dAg	eFeGeHdd6ejM        dLz  gddd7dBg	eFeGeHdCd6ejM        dLz  gddd7dDg	eFeGeHdd6ejM        dLz  gddd7dEg	eFeGeHdFd6ejM        dLz  gddd7dGg	eFeGeHdd6ejM        dLz  gddd7dHg	eFeGeHdId6ejM        dLz  gddd7dJg	eFeGeHdd6ejM        dLz  gddd7dKg	eFeGeHdLd6ejM        dLz  gddd7dMg	eFeGeHdd6ejM        dLz  gddd7dNg	eFeGeHdd6ejM        dLz  gddd7dOg	eFeGeHd!d6ejM        dLz  gddd7dPg	eFeGeHdQd6ejM        dLz  gddd7dRg	eFeGeHd$d6ejM        dLz  gddd7dSg	eFeGeHdTd6ejM        dLz  gddd7dUg	eFeGeHd'd6ejM        dLz  gddd7dVg	eFeGeHdWd6ejM        dLz  gddd7dXg	eFeGeHd*d6ejM        dLz  gddd7dYg	eFeGeHdZd6ejM        dLz  gddd7d[g	eFeGeHd-d6ejM        dLz  gddd7d\g	eFeGeHd]d6ejM        dLz  gddd7d^g	eFeGeHd0d6ejM        dLz  gddd7d_g	eFeGeHd`d6ejM        dLz  gddd7dag	eFeGeHd2d6ejM        dLz  gddd7dbg	eFeGeHdcd6ejM        dLz  gddd7ddg	eFeGeHded6ejM        dLz  gddd7dfg	eFeGeHdgd6ejM        dLz  gddd7dhg	eFeGeHdid6ejM        dLz  gddd7djg	eFeGeHdkd6ejM        dLz  gddd7dlg	eFeGeHdmd6ejM        dLz  gddd7dng	eFeGeHdÐd6ejM        dLz  gddd7dog	eIeJeKdd6dpgdddqdrg	eIeJeKd!d6dpgdddsdtg	eIeJeKdQd6dpgdddudvg	eIeJeKd$d6dpgdddwdxg	eIeJeKdTd6dpgdddydzg	eIeJeKd'd6dpgddd{d|g	eIeJeKdWd6dpgddd}d~g	eIeJeKd*d6dpgddddg	eIeJeKdZd6dpgddddg	eIeJeKd-d6dpgddddg	eIeJeKd]d6dpgddddg	eIeJeKd0d6dpgddddg	eIeJeKd`d6dpgddddg	eIeJeKd2d6dpgddddg	eIeJeKdcd6dpgddddg	eIeJeKded6dpgddddg	eIeJeKdgd6dpgddddg	eIeJeKdid6dpgddddg	eIeJeKdkd6dpgddddg	eIeJeKdmd6dpgddddg	eIeJeKdÐd6dpgddddg	eIeJeKdϐd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	eIeJeKdd6dpgddddg	ZNd eND             ZOd ZPd ZQd ZRd ZSd ZTd ZUg dZVePeQeRdej        dddÐdg	ePeQeRdej        dƐdǐd ej        d          dLz  dz  z   dg	ePeQeRdej        dÐdd ej        d          dLz  dz  z   dg	ePeQeRdej        dUd	dLdg	eSeTeUdej        dϐdejM        dz  dg	eSeTeUdej        dϐdejM        dz  dg	gZWdԄ eWD             ZXdՄ ZY eYe            eYeO            eYeX           ddׄZZej[        ej\        ej]        ej^        gZ_g dآZ`eeeeegZag d٢Zbdڄ Zcdec_d        d܄ Zedee_d        d݄ Zfdef_d        dބ ZgdLeg_d        d߄ Zhdeh_d        d Zidei_d        d Zjdej_d        d Zkdek_d        d Zldel_d        g dZmg ecdLdgecjd        dgecddZgecjd        dgecddgecjd        dgecddgecjd        d%gecddgecjd        dgeeddgeejd        dgeedpdgeejd        dgeeddgeejd        dgeeddgeejd        dgeeddgeejd        dgefddUgefjd        d"gefddZgefjd        d%gefdpdgefjd        dgefddgefjd        dgefddgefjd        dgegddUgegjd        d"gegddZgegjd        d%gegdpdgegjd        d3gegddgegjd        dgegddgegjd        dgehdd	gehjd        d"gehddUgehjd        dgehddZgehjd        d%gehddngehjd        d(gehddgehjd        ddgeiddgeijd        d"geid dgeijd        dgeiddgeijd        d%geiddgeijd        d(geiddgeijd        ddgejdd	gejjd        dgejddUgejjd        dgejddZgejjd        dgejddngejjd        dgejddgejjd        dgekddLgekjd        dgekddgekjd        dZgekddgekjd        dgekdd+gekjd        d	gekdd
gekjd        dgelddLgeljd        dgelddgeljd        dgelddgeljd        dZgeldd+geljd        dgeldd
geljd        dgZnd  eoen          D             Znd enD             Zp eYep           d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)	_zeros_pya  
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                     | | dz
  z  S )z'f1 is a quadratic with roots at 0 and 1      ? xs    8lib/python3.11/site-packages/scipy/optimize/_tstutils.pyf1r   @   s    B<    c                     d| z  dz
  S N      r   r   s    r
   f1_fpr   E   s    q519r   c                     dS Nr   r   r   s    r
   f1_fppr   I       1r   c                     | dz  dz
  S )z$f2 is a symmetric parabola, x**2 - 1r   r   r   r   s    r
   f2r   M       a4!8Or   c                     d| z  S r   r   r   s    r
   f2_fpr   R   s    q5Lr   c                     dS r   r   r   s    r
   f2_fppr   V   r   r   c                 *    | | dz
  z  | dz
  z  | dz
  z  S )z%A quartic with roots at 0, 1, 2 and 3r   g       @g      @r   r   s    r
   f3r   Z   s"    B<1r6"a"f--r   c                 6    d| dz  z  d| dz  z  z
  d| z  z   dz
  S )N         r         r   r   s    r
   f3_fpr%   _   s+    q!t8b1a4i"q&(1,,r   c                 $    d| dz  z  d| z  z
  dz   S )N   r   $   r#   r   r   s    r
   f3_fppr)   c   s    19rAv""r   c                 >    | dk    rdd| z  z   S | dk     rdd| z  z   S dS )zBPiecewise linear, left- and right- discontinuous at x=1, the root.r   r   皙?      r   r   r   s    r
   f4r-   g   s5    1uuR!V|1uub1f}1r   c                 "    | dk    rdd| z
  z  S dS )zOHyperbola with a pole at x=1, but pole replaced with 0. Not continuous at root.r   r   r   r   r   s    r
   f5r/   p   s    Avvb1f~1r   c                     t                               | d           }|7| dk    rt                      }n| dk     rt                       }nd}|t           | <   |S )Nr   r   )	_f6_cachegetr   )r	   vs     r
   f6r4   {   sW    aAyq55AAUU	AAA	!Hr   )	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                 R    g | ]$}t          t          t          |                    %S r   )dictzip_ORIGINAL_TESTS_KEYS.0testcases     r
   
<listcomp>rG      s+    cccxc"6AABBcccr   c                 6    t          j        |           | dz  z
  S )z<Straightforward sum of trigonometric function and polynomialr   npsinr   s    r
   aps01_frL      s    6!99q1ur   c                 0    t          j        |           dz
  S )Nr>   rJ   cosr   s    r
   aps01_fprP      s    6!99wr   c                 ,    t          j        |            S NrI   r   s    r
   	aps01_fpprS          F1II:r   c                     t          j        dd          }dt          j        d|z  dz
  dz  | |dz  z
  dz  z            z  S )zDpoles at x=n**2, 1st and 2nd derivatives at root are also close to 0r      r      r!   rJ   arangesumr	   iis     r
   aps02_fr^      sE    	1b		BB
Q!b!e)a78888r   c                     t          j        dd          }dt          j        d|z  dz
  dz  | |dz  z
  dz  z            z  S )Nr   rV   r$   r   rX   r    rY   r\   s     r
   aps02_fpr`      sE    	1b		Brvq2vzAoRUQ67777r   c                     t          j        dd          }dt          j        d|z  dz
  dz  | |dz  z
  dz  z            z  S )Nr   rV      r   rX   rY   r\   s     r
   	aps02_fpprc      sE    	1b		BB
Q!b!e)a78888r   c                 <    || z  t          j        || z            z  S )zRapidly changing at the rootrJ   expr	   abs      r
   aps03_frj      s    q526!a%==  r   c                 H    ||| z  dz   z  t          j        || z            z  S Nr   re   rg   s      r
   aps03_fprm      s%    A	?RVAE]]**r   c                 T    |||| z  dz   z  |z   z  t          j        || z            z  S rl   re   rg   s      r
   	aps03_fppro      s/    QUQY!#$rva!e}}44r   c                     | |z  |z
  S )zMedium-degree polynomialr   r	   nrh   s      r
   aps04_frs      r   r   c                     || |dz
  z  z  S rl   r   rq   s      r
   aps04_fpru          q1q5z>r   c                 $    ||dz
  z  | |dz
  z  z  S Nr   r   r   rq   s      r
   	aps04_fppry          A;QU##r   c                 0    t          j        |           dz
  S )zSimple Trigonometric functionr>   rI   r   s    r
   aps05_fr|      s    6!99wr   c                 *    t          j        |           S rR   rN   r   s    r
   aps05_fpr~          6!99r   c                 ,    t          j        |            S rR   rI   r   s    r
   	aps05_fppr      rT   r   c                 v    d| z  t          j        |           z  dt          j        | | z            z  z
  dz   S )z0Exponential rapidly changing from -1 to 1 at x=0r   r   re   r	   rr   s     r
   aps06_fr      s8    q5261"::BFA26NN 22Q66r   c                 p    dt          j        |           z  d|z  t          j        | | z            z  z   S r   re   r   s     r
   aps06_fpr      s2    rvqbzz>AEBFA26NN222r   c                 D    d|z  |z  t          j        | | z            z  S NrW   re   r   s     r
   	aps06_fppr      s#    6A:rAv&&r   c                 6    dd|z
  dz  z   | z  d|| z  z
  dz  z
  S )z/Upside down parabola with parametrizable heightr   r   r   r   s     r
   aps07_fr      *    Q
Na1q1u9q.00r   c                 6    dd|z
  dz  z   d|z  d|| z  z
  z  z   S rx   r   r   s     r
   aps07_fpr      s*    Q
Na!eq1q5y111r   c                     d|z  |z  S r   r   r   s     r
   	aps07_fppr      s    6A:r   c                     | | z  d| z
  |z  z
  S )zDegree n polynomialr   r   r   s     r
   aps08_fr      s    q5AEA:r   c                 *    d| z  |d| z
  |dz
  z  z  z   S r   r   r   s     r
   aps08_fpr     s#    q51AQ''''r   c                 0    d||dz
  z  d| z
  |dz
  z  z  z
  S r   r   r   s     r
   	aps08_fppr   	  s'    qAE{a!eq1u----r   c                 6    dd|z
  dz  z   | z  d|| z  z
  dz  z
  S )z.Upside down quartic with parametrizable heightr   r    r   r   s     r
   aps09_fr     r   r   c                 <    dd|z
  dz  z   d|z  d|| z  z
  dz  z  z   S )Nr   r    r!   r   r   s     r
   aps09_fpr     s.    Q
Na!eq1q5y1n444r   c                 $    d|z  d|| z  z
  dz  z  S )Nir   r   r   r   s     r
   	aps09_fppr     s    7a!a%i!^##r   c                 J    t          j        | | z            | dz
  z  | |z  z   S )zExponential plus a polynomialr   re   r   s     r
   aps10_fr     s(    61"q&>>QU#ad**r   c                 d    t          j        | | z            | | dz
  z  dz   z  || |dz
  z  z  z   S rl   re   r   s     r
   aps10_fpr     s;    61"q&>>aR1q5\A-.QQZ??r   c                     t          j        | | z            | | | dz
  z  dz   z  | | z  z   z  ||dz
  z  | |dz
  z  z  z   S rx   re   r   s     r
   	aps10_fppr   #  sY    61"q&>>aRA2Q<!#34rAv=>a!eqSTWXSXzAYYYr   c                 $    || z  dz
  |dz
  | z  z  S )z8Rational function with a zero at x=1/n and a pole at x=0r   r   r   s     r
   aps11_fr   '  s    EAI1q5A+&&r   c                     d|dz
  z  | dz  z  S rx   r   r   s     r
   aps11_fpr   ,  s    A;Ar   c                     d|dz
  z  | dz  z  S )NrW   r   r!   r   r   s     r
   	aps11_fppr   0  s    Q<!Q$r   c                 d    t          j        | d|z            t          j        |d|z            z
  S )z!nth root of x, with a zero at x=nr   rJ   powerr   s     r
   aps12_fr   4  s-    8AsQw"(1cAg"6"666r   c                 >    t          j        | d|z
  |z            |z  S )Nr   r   r   s     r
   aps12_fpr   9  s!    8Aa1}%%))r   c                 \    t          j        | dd|z  z
  |z            d|z  z  d|z
  z  |z  S )Nr   r   r   r   s     r
   	aps12_fppr   =  s8    8Aa!eq())S1W5qAAEEr   c                 j    | dk    rdS d| dz  z  }|t           k    rdS | t          j        |          z  S )z-Function with *all* derivatives 0 at the rootr   r   r   _MAX_EXPABLErJ   rf   r	   ys     r
   aps13_fr   D  sA    Avvq 	
AqDA<qrvayy=r   c                 |    | dk    rdS d| dz  z  }|t           k    rdS dd| dz  z  z   t          j        |          z  S )Nr   r   r   r   r   s     r
   aps13_fpr   Q  sL    Avvq	AqDA<qAqDLBF1II%%r   c                     | dk    rdS d| dz  z  }|t           k    rdS dd| dz  z
  z  | dz  z  t          j        |          z  S )Nr   r   r   rX   r   r   s     r
   	aps13_fppr   Z  sU    Avvq	AqDA<qAqD>AqD 26!99,,r   c                 `    | dk    r| dz  S |dz  | dz  t          j        |           z   dz
  z  S )z<0 for negative x-values, trigonometric+linear for x positiver         4@      ?r   rI   r   s     r
   aps14_fr   c  s<    AvvrDyt8q3w*Q.//r   c                 L    | dk    rdS |dz  dt          j        |           z   z  S )Nr   r   gUUUUUU?rN   r   s     r
   aps14_fpr   j  s,    Avvqt8y26!99,--r   c                 H    | dk    rdS | dz  t          j        |           z  S )Nr   r   rI   r   s     r
   	aps14_fppr   p  s)    Avvq29q		""r   c                     | dk     rdS | dd|z   z  k    rt           j        dz
  S t          j        |dz   | z  dz  dz            dz
  S )z6piecewise linear, constant outside of [0, 0.002/(1+n)]r   grh|Mb`?r   X9v?r     rJ   erf   r   s     r
   aps15_fr   v  sV    1uuv8q1ute|61q5A+/D())E11r   c                     d| cxk    rdd|z   z  k    sn t           j        dz
  S t          j        |dz   | z  dz  dz            |dz   z  dz  dz  S Nr   r   r   r   r   r   r   r   s     r
   aps15_fpr     sj    ''''XQ'''''te|61q5A+/D())QU3a7$>>r   c                     d| cxk    rdd|z   z  k    sn t           j        dz
  S t          j        |dz   | z  dz  dz            |dz   z  dz  dz  |dz   z  dz  dz  S r   r   r   s     r
   	aps15_fppr     s}    ''''XQ'''''te|61q5A+/D())QU3a7$>!a%H1LtSSr   r   gS?z	aps.01.00g0D   ?g@g=.@z	aps.02.00g.   @gh!@rX   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   rW   z	aps.03.00)irW   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)rX   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.04{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)rV   rV   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.18z	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)rb   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                 R    g | ]$}t          t          t          |                    %S r   )rA   rB   _APS_TESTS_KEYSrD   s     r
   rG   rG   7  s*    TTTXD_h7788TTTr   c                     | |z  |z
  S )z&z**n-a:  Use to find the nth root of ar   zrr   rh   s      r
   cplx01_fr   ?  r   r   c                     || |dz
  z  z  S rl   r   r   s      r
   	cplx01_fpr   D  rv   r   c                 $    ||dz
  z  | |dz
  z  z  S rx   r   r   s      r
   
cplx01_fppr   H  rz   r   c                 0    t          j        |           |z
  S )z"e**z - a: Use to find the log of are   r   rh   s     r
   cplx02_fr  L  s    6!99q=r   c                 *    t          j        |           S rR   re   r  s     r
   	cplx02_fpr  Q  r   r   c                 *    t          j        |           S rR   re   r  s     r
   
cplx02_fppr  U  r   r   )	r5   r6   r7   r8   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                 R    g | ]$}t          t          t          |                    %S r   )rA   rB   _COMPLEX_TESTS_KEYSrD   s     r
   rG   rG   s  s+    ```XS!4h??@@```r   c                 r    | D ]3}t          ddg|                    dg                     D ]
\  }}|||<   4dS )z:Add "a" and "b" keys to each test from the "bracket" valuerh   ri   r9   N)rB   r2   )testsdkr3   s       r
   _add_a_br  v  sZ      c
AEE)R$8$899 	 	DAqAaDD	 r   originalc                     | pd} t           t          t          t          d}|                    | g           }f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  )apscomplexr  chandrupatlaNc                 ,    g | ]}|d          k    |S )r:   r   )rE   tcr:   s     r
   rG   zget_tests.<locals>.<listcomp>  s(    FFFr,'7:'E'E'E'E'Er   )_APS_TESTS_DICTS_COMPLEX_TESTS_DICTS_ORIGINAL_TESTS_DICTS_CHANDRUPATLA_TESTS_DICTSr2   )
collectionr:   subsetsr  s    `  r
   	get_testsr    s`    . )zJ&.08: :G KK
B''EFFFFeFFFLr   )z	cc.bisectz	cc.ridderz	cc.brenthz	cc.brentq)r   r   r-   r/   r4   c                     | dz  d| z  z
  dz
  S )Nr!   r   rX   r   r   s    r
   fun1r    s    a4!A#:>r   g5 @c                     dd| dz  z  z
  S rx   r   r   s    r
   fun2r!    s    qAv:r   c                     | dz
  dz  S )Nr!   r   r   s    r
   fun3r#    s    aC!8Or   c                     d| dz
  dz  z  S )Nr$   r   rX   r   r   s    r
   fun4r%    s    acAX:r   c                     | dz  S )Nr   r   r   s    r
   fun5r'    s    a4Kr   c                     | dz  S )Nr   r   r   s    r
   fun6r)    s    b5Lr   c                 b    t          |           dk     rdn| t          j        | dz             z  S )NgW8?r   rW   )absrJ   rf   r   s    r
   fun7r,    s/    A11Qrvq2wh'7'7%77r   c                     d}dd|z
  z  t          j        |            z   |d|z
  t          j        |            z  z   z  dz
  d| z  z   S )Nge-?i  r   i  i\  re   )r	   xis     r
   fun8r/    sR    	B1R4[#$bAbD"&!**+<&<=DtAvMMr   g;6b?c                 T    t          j        |           dz
  d| dz  z  z
  d| dz  z  z   S )Nr   r   g>r!   re   r   s    r
   fun9r1    s.    6!99q=419$wq!t|33r   gGo?)r5   r9   r<   nfevalr=   r   g     g     @g    _g    _B+   g)\(?r   r#   gư>g    .Ar   g|=)   g-q=g   mB0   ir(   -   7   6   r,   g      @g       g      @g      $@g      g      I@g      $g      Y@r"   g-C6*?r'   Q   c                 L    g | ]!\  }}||d          j          d|dz  dz    gz   "S )r   .rX   r   )__name__)rE   itests      r
   rG   rG     sW     F F F"1d $q'"2<<QqSU<<== F F Fr   c                 R    g | ]$}t          t          t          |                    %S r   )rA   rB   _CHANDRUPATLA_TESTS_KEYSrD   s     r
   rG   rG     sA     B B B!) "#&>"I"IJJ B B Br   )r  N)q__doc__r   numpyrJ   scipy.optimizer   ccdescriptionr   r   r   r   r   r   r   r%   r)   r-   r/   r1   r4   rC   sqrtinf_ORIGINAL_TESTSr  rL   rP   rS   r^   r`   rc   rj   rm   ro   rs   ru   ry   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   logfinfofloatmaxr   r   r   r   r   r   r   r   r   r   r   pi
_APS_TESTSr  r   r   r   r  r  r  r
  _COMPLEX_TESTSr  r  r  bisectridderbrenthbrentqmethodsmstrings	functionsfstringsr  r<   r!  r#  r%  r'  r)  r,  r/  r1  rA  _CHANDRUPATLA_TESTS	enumerater  r   r   r
   <module>r[     s%   R           * * * * * *  
      
    . . .
- - -# # #     	
 
 
, gff S'"'!**-rvsCAQRS'"'!**-rvsCAQRS'"'!**-rvsCAQRtR#wrwqzz*BS:JKtR#wrwqzz*BS:JKtR#wrwqzz*RVGS#?OP dcSbccc   
    9 9 98 8 8
9 9 9
! ! !
+ + +5 5 5  
  $ $ $  
    7 7 7
3 3 3' ' '1 1 1
2 2 2    
( ( (. . .1 1 1
5 5 5$ $ $+ + +
@ @ @Z Z Z' ' '
    7 7 7
* * *F F F rvhbhuoo)**
 
 
& & &- - -0 0 0. . .# # #2 2 2? ? ?T T T( baa[h	2	25'9261F]_jk[h	2(';RVQH_alm[ h	2(';RVQH_alm[ h	2)'<bfbJacno	[
 h	2	9'=rvrKbdop[ h	2	9'=rvrKbdop[ h	2	9'=rvrKbdop[ h	2	9'=rvrKbdop[ h	2	9'=rvrKbdop[ h	2	:'>Lcepq[ h	2
J'?Negrs[ h	9r2hA{S[ h	:BxQT[ h	:BxQT[ h	8aVRVSBY[fg[  h	8aVRVSBY[fg![" h	8aVRVSBY[fg#[$ h	9q!fbfcCZ\gh%[& h	9q!fbfcCZ\gh'[( h	6Aq6263;O)[* h	6Aq6263;O+[, h	6Aq6263;O-[. h	7QFBFCKP/[0 h	7QFBFCKP1[2 h	6E4="&#q+V3[4 h	7UDM263;W5[6 h	7UDM263;W7[8 h	7UDM263;W9[: h	23xbeaiU;[< h	4!Q>UWbc=[> h	4!Q>UWbc?[@ h	4!Q>UWbcA[B h	4!Q>UWbcC[D h	4!Q>UWbcE[F h	51a&"&#?VXcdG[H h	51a&"&%AXZefI[J h	51a&"&(D[]hiK[L h	51a&"&'CZ\ghM[N h	6Aq6265BY[fgO[P h	4!Q>UWbcQ[R h	51a&"&#?VXcdS[T h	51a&"&#?VXcdU[V h	4!Qc;OW[X h	4!Q>UWbcY[Z h	51a&"&#?VXcd[[\ h	51a&"&#?VXcd][^ h	51a&"&#?VXcd_[` h	4!Q>UWbca[b h	4!Q>UWbcc[d h	4!Q>UWbce[f h	4!Q>UWbcg[h h	4!Q>UWbci[j h	51a&"&#?VXcdk[l h	51a&"&#?VXcdm[n h	4!Q>UWbco[p h	4!Q>UWbcq[r h	51a&"&#?VXcds[t h	51a&"&#?VXcdu[v h	51a&"&#?VXcdw[x h	4$BFE7KXy[z h	4$BFE7KX{[| h	54)RVUHkZ}[~ h	54)RVUHkZ[@ h	4!S263;OA[B h	4!S263;OC[D h	4!S263;OE[F h	4!S263;OG[H h	4!S263;OI[J h	4!S263;OK[L h	4!S263;OM[N h	51c(BFC[QO[P h	51c(BFC[QQ[R h	51c(BFC[QS[T h	51c(BFC[QU[V h	51c(BFC[QW[X h	51c(BFC[QY[Z h	51c(BFC[Q[[\ h	51c(BFC[Q][^ h	51c(BFC[Q_[` h	51c(BFC[Qa[b h	51c(BFC[Qc[d h	51c(BFC[Qe[f h	2AwQLg[h h	4%);QCZ\ghi[j h	4%);QCZ\ghk[l h	4%);QCZ\ghm[n h	4%);QCZ\gho[p h	4%);QCZ\ghq[r h	4%);QCZ\ghs[t h	4%);QCZ\ghu[v h	4%);QCZ\ghw[x h	4%);QCZ\ghy[z h	55"%!)*<aD[]hi{[| h	55"%!)*<aD[]hi}[~ h	55"%!)*<aD[]hi[@ h	55"%!)*<aD[]hiA[B h	55"%!)*<aD[]hiC[D h	55"%!)*<aD[]hiE[F h	55"%!)*<aD[]hiG[H h	55"%!)*<aD[]hiI[J h	55"%!)*<aD[]hiK[L h	55"%!)*<aD[]hiM[N h	55"%!)*<aD[]hiO[P h	55"%!)*<aD[]hiQ[R h	55"%!)*<aD[]hiS[T h	55"%!)*<aD[]hiU[V h	55"%!)*<aD[]hiW[X h	55"%!)*<aD[]hiY[Z h	55"%!)*<aD[]hi[[\ h	55"%!)*<aD[]hi][^ h	55"%!)*<aD[]hi_[` h	55"%!)*<aD[]hia[b h	55"%!)*<aD[]hic[d h	55"%!)*<aD[]hie[f h	55"%!)*<aD[]hig[h h	55"%!)*<aD[]hii[j h	55"%!)*<aD[]hik[l h	55"%!)*<aD[]him[n h	55"%!)*<aD[]hio[p h	55"%!)*<aD[]hiq[r h	55"%!)*<aD[]his[t h	55"%!)*<aD[]hiu[v h	55"%!)*<aD[]hiw[x h	55$-B@WYdey[z h	55$-B@WYde{[| h	55$-B@WYde}[~ h	55$-B@WYde[@ h	55$-B@WYdeA[B h	55$-B@WYdeC[D h	55$-B@WYdeE[F h	55$-B@WYdeG[H h	55$-B@WYdeI[J h	55$-B@WYdeK[L h	55$-B@WYdeM[N h	55$-B@WYdeO[P h	55$-B@WYdeQ[R h	55$-B@WYdeS[T h	55$-B@WYdeU[V h	55$-B@WYdeW[X h	55$-B@WYdeY[Z h	55$-B@WYde[[\ h	55$-B@WYde][^ h	55$-B@WYde_[` h	55$-B@WYdea[b h	6E4=!RAXZefc[d h	6E4=!RAXZefe[f h	6E4=!RAXZefg[h h	6E4=!RAXZefi[j h	6E4=!RAXZefk[l h	6E4=!RAXZefm[n h	6E4=!RAXZefo[p h	6E4=!RAXZefq[r h	6E4=!RAXZefs[t h	7UDM1bBY[fgu[
z UTTTT   
  $ $ $  
    $ a`` y*grv*rSbcy*fbfw+QUX_XZX_`aXbXbefXfimXmQmy*grvrJ#PWPRPWXYPZPZ]^P^aePeJey*fbfaAOy*eRVf
RUUY\[jky*eRVf
RUUY\[jk	 a`Q_```    		    	    	      F 9biBI
6???RR 	)))  	  	  	  	  	  	8 8 8	N N N 	4 4 4	 DCC .	Aq649a .	Ar7DIr". 
As8TY#. 
D#;	2&	.
 
E4=$)R(. 
C;	1%. 
D#;	2&. 
D#;	2&. 
E4=$)R(. 
E4=$)R(. 
Aq649b!. 
C9di$. 
D#;	2&. 
D#;	2&. 
E4=$)R(.  
Aq649b!!." 
C9di$#.$ 
D#;	2&%.& 
D#;	2&'.( 
E4=$)R().* 
B7DIr"+., 
B7DIr"-.. 
B8TY#/.0 
B8TY#1.2 
C:ty"%3.4 
C9di$5.6 
C9di$7.8 
C:ty"%9.: 
C:ty"%;.< 
D$<B'=.> 
B7DIq!?.@ 
B7DIq!A.B 
B8TY#C.D 
B8TY#E.F 
C:ty"%G.H 
D!9di#I.J 
D!9di$K.L 
D!9di$M.N 
D":ty"%O.P 
D":ty"%Q.R 
D!9di#S.T 
D!9di#U.V 
D!9di$W.X 
D":ty"%Y.Z 
D":ty"%[. ^F F&/i0C&D&DF F F B B-@B B B  	" # # # # #r   