
    tKg                     -   d Z ddlmZ ddlZddlm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j0                  d      gej2                  dddg	eeedd ej0                  d      gej2                  dddg	eeedd ej0                  d      gej2                  dddg	edddd ej0                  d      gddddg	edddd ej0                  d      gddddg	edddd ej0                  d      gej2                   dddg	gZeD  cg c]  }  e ee|              c} 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 Z0d2 Z1d3 Z2d4 Z3d5 Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9d; Z:d< Z;d= Z<d> Z=d? Z>d@ Z?dA Z@dB ZA ej                   ej                  eD      j                        ZFdC ZGdD ZHdE ZIdF ZJdG ZKdH ZLdI ZMdJ ZNdK ZOg dZPg eee dej                  dLz  ej                  gej2                  ddMdNg	e!e"e#ddOdPgej2                  dLdQdRg	e!e"e#ddSdTgej2                  dUdVdWg	e!e"e#ddXdYgej2                  dZd[d\g	e!e"e#dd]d^gej2                  d_d`dag	e!e"e#ddbdcgej2                  dddedfg	e!e"e#ddgdhgej2                  didjdkg	e!e"e#ddldmgej2                  dndodpg	e!e"e#ddqdrgej2                  dsdtdug	e!e"e#ddvdwgej2                  dxdydzg	e!e"e#dd{d|gej2                  d}d~dg	e$e%e&dddgej2                  dddg	e$e%e&dddgej2                  dddg	e$e%e&dddgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddUgej2                  dddg	e'e(e)dddgej2                  dddg	e'e(e)dddgej2                  dddg	e'e(e)dddgej2                  dddg	e'e(e)dddgej2                  dddg	e*e+e,dddgej2                  dej                  dz  dg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e-e.e/dddgej2                  dddg	e0e1e2dddgej2                  dddg	e0e1e2dddgej2                  dddg	e0e1e2dddgej2                  dddg	e3e4e5dddgej2                  dddg	e3e4e5dddgej2                  dddg	e3e4e5dddgej2                  dddg	e3e4e5dddgej2                  dddg	e3e4e5dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e6e7e8dddgej2                  dddg	e9e:e;dddgej2                  dddg	e9e:e;dddgej2                  dddg	e9e:e;dddgej2                  dddg	e9e:e;dddgej2                  dddg	e9e:e;dddgej2                  dddg	e<e=e>dddgej2                  dddg	e<e=e>dddgej2                  dd dg	e<e=e>dddgej2                  dddg	e<e=e>dddgej2                  ddĐdg	e?e@eAdddgej2                  ddLdg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dd	d
g	e?e@eAdddgej2                  ddUdg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dddg	e?e@eAdddgej2                  dd_dg	e?e@eAdddgej2                  ddd g	e?e@eAd!ddgej2                  dd"d#g	e?e@eAd$ddgej2                  dd%d&g	e?e@eAd'ddgej2                  dd(d)g	e?e@eAd*ddgej2                  dd+d,g	e?e@eAd-ddgej2                  dd.d/g	e?e@eAd0ddgej2                  ddd1g	e?e@eAd2ddgej2                  dd3d4g	eGeHeIddd	gej2                  ddd5g	eJeKeLdd6ej                  dLz  gddd7d8g	eJeKeLdd6ej                  dLz  gddd7d9g	eJeKeLdd6ej                  dLz  gddd7d:g	eJeKeLdd6ej                  dLz  gddd7d;g	eJeKeLdd6ej                  dLz  gddd7d<g	eJeKeLdd6ej                  dLz  gddd7d=g	eJeKeLdd6ej                  dLz  gddd7d>g	eJeKeLdd6ej                  dLz  gddd7d?g	eJeKeLdd6ej                  dLz  gddd7d@g	eJeKeLdՐd6ej                  dLz  gddd7dAg	eJeKeLdd6ej                  dLz  gddd7dBg	eJeKeLdCd6ej                  dLz  gddd7dDg	eJeKeLdd6ej                  dLz  gddd7dEg	eJeKeLdFd6ej                  dLz  gddd7dGg	eJeKeLdd6ej                  dLz  gddd7dHg	eJeKeLdId6ej                  dLz  gddd7dJg	eJeKeLdd6ej                  dLz  gddd7dKg	eJeKeLdLd6ej                  dLz  gddd7dMg	eJeKeLdd6ej                  dLz  gddd7dNg	eJeKeLdd6ej                  dLz  gddd7dOg	eJeKeLd!d6ej                  dLz  gddd7dPg	eJeKeLdQd6ej                  dLz  gddd7dRg	eJeKeLd$d6ej                  dLz  gddd7dSg	eJeKeLdTd6ej                  dLz  gddd7dUg	eJeKeLd'd6ej                  dLz  gddd7dVg	eJeKeLdWd6ej                  dLz  gddd7dXg	eJeKeLd*d6ej                  dLz  gddd7dYg	eJeKeLdZd6ej                  dLz  gddd7d[g	eJeKeLd-d6ej                  dLz  gddd7d\g	eJeKeLd]d6ej                  dLz  gddd7d^g	eJeKeLd0d6ej                  dLz  gddd7d_g	eJeKeLd`d6ej                  dLz  gddd7dag	eJeKeLd2d6ej                  dLz  gddd7dbg	eJeKeLdcd6ej                  dLz  gddd7ddg	eJeKeLded6ej                  dLz  gddd7dfg	eJeKeLdgd6ej                  dLz  gddd7dhg	eJeKeLdid6ej                  dLz  gddd7djg	eJeKeLdkd6ej                  dLz  gddd7dlg	eJeKeLdmd6ej                  dLz  gddd7dng	eJeKeLdÐd6ej                  dLz  gddd7dog	eMeNeOdd6dpgdddqdrg	eMeNeOd!d6dpgdddsdtg	eMeNeOdQd6dpgdddudvg	eMeNeOd$d6dpgdddwdxg	eMeNeOdTd6dpgdddydzg	eMeNeOd'd6dpgddd{d|g	eMeNeOdWd6dpgddd}d~g	eMeNeOd*d6dpgddddg	eMeNeOdZd6dpgddddg	eMeNeOd-d6dpgddddg	eMeNeOd]d6dpgddddg	eMeNeOd0d6dpgddddg	eMeNeOd`d6dpgddddg	eMeNeOd2d6dpgddddg	eMeNeOdcd6dpgddddg	eMeNeOded6dpgddddg	eMeNeOdgd6dpgddddg	eMeNeOdid6dpgddddg	eMeNeOdkd6dpgddddg	eMeNeOdmd6dpgddddg	eMeNeOdÐd6dpgddddg	eMeNeOdϐd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	eMeNeOdd6dpgddddg	ZReRD  cg c]  }  e eeP|              c} ZSd ZTd ZUd ZVd ZWd ZXd ZYg dZZeTeUeVdej2                  ddddg	eTeUeVdej2                  dŐdƐd ej0                  d      dLz  dz  z   dg	eTeUeVdej2                  ddd ej0                  d      dLz  dz  z   dg	eTeUeVdej2                  dUd	dLdg	eWeXeYdej2                  dΐdej                  dz  dg	eWeXeYdej2                  dΐdej                  dz  dg	gZ[e[D  cg c]  }  e eeZ|              c} Z\dӄ Z] e]e        e]eS        e]e\       d
dԄZ^ej                  ej                  ej                  ej                  gZcg dբZdeeeeegZeg d֢Zfdׄ Zgdeg_h        dل Zidei_h        dڄ Zjdej_h        dۄ ZkdLek_h        d܄ Zldel_h        d݄ Zmdem_h        dބ Znden_h        d߄ Zodeo_h        d Zpdep_h        g dZqg egdLdgegj                  dgegddZgegj                  dgegddgegj                  dgegddgegj                  d%gegddgegj                  dgeiddgeij                  dgeidpdgeij                  dgeiddgeij                  dgeiddgeij                  dgeiddgeij                  dgejddUgejj                  d"gejddZgejj                  d%gejddgejj                  dgejddgejj                  dgejddgejj                  dgekddUgekj                  d"gekddZgekj                  d%gekddgekj                  d3gekddgekj                  dgekddgekj                  dgeldd	gelj                  d"gelddUgelj                  dgelddZgelj                  d%gelddngelj                  d(gelddgelj                  ddgemddgemj                  d"gemddgemj                  dgemdd gemj                  d%gemddgemj                  d(gemddgemj                  ddgendd	genj                  dgenddUgenj                  dgenddZgenj                  dgenddngenj                  dgenddgenj                  dgeoddLgeoj                  dgeoddgeoj                  dZgeoddgeoj                  dgeodd+geoj                  dgeoddgeoj                  dgepddgepj                  dgepddgepj                  dgepddgepj                  dZgepdd+gepj                  dgepddgepj                  dgZr eser      D cg c]$  \  }}||d   j                   d	|dUz  dz    gz   & c}}ZrerD  cg c]  }  e eeq|              c} Zu e]eu       yc c} w c c} w c c} w c c}}w c c} w (  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_py)array_namespacea  
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    \/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/_tstutils.pyf1r   A   s    B<    c                     d| z  dz
  S N      r   r	   s    r   f1_fpr   F   s    q519r   c                      yNr   r   r	   s    r   f1_fppr   J       r   c                     | dz  dz
  S )z$f2 is a symmetric parabola, x**2 - 1r   r   r   r	   s    r   f2r   N       a4!8Or   c                     d| z  S r   r   r	   s    r   f2_fpr   S   s    q5Lr   c                      yr   r   r	   s    r   f2_fppr   W   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   [   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*   d   s    19rAv""r   c                 8    | dkD  rdd| z  z   S | dk  rdd| z  z   S y)zBPiecewise linear, left- and right- discontinuous at x=1, the root.r   r   皙?      r   r   r	   s    r   f4r.   h   s/    1uR!V|1ub1f}r   c                     | dk7  rdd| z
  z  S y)zY
    Hyperbola with a pole at x=1, but pole replaced with 0. Not continuous at root.
    r   r   r   r   r	   s    r   f5r0   q   s     	Avb1f~r   c                     t         j                  | d       }|,| dkD  rt               }n| dk  rt                }nd}|t         | <   |S )Nr   r   )	_f6_cachegetr   )r
   vs     r   f6r5   ~   sH    aAyq5AU	A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                 8    t        j                  |       | dz  z
  S )z<Straightforward sum of trigonometric function and polynomialr   npsinr	   s    r   aps01_frE      s    66!9q1ur   c                 2    t        j                  |       dz
  S )Nr?   rC   cosr	   s    r   aps01_fprI      s    66!9wr   c                 .    t        j                  |        S NrB   r	   s    r   	aps01_fpprL          FF1I: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"   rC   arangesumr
   iis     r   aps02_frW      sC    	1b	BB
Q!b!e)a7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   rO   r%   r   rQ   r!   rR   rU   s     r   aps02_fprY      sC    	1b	Brvvq2vzAoRUQ6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   rO      r   rQ   rR   rU   s     r   	aps02_fppr\      sC    	1b	BB
Q!b!e)a7888r   c                 >    || z  t        j                  || z        z  S )zRapidly changing at the rootrC   expr
   abs      r   aps03_frc      s    q5266!a%=  r   c                 J    ||| z  dz   z  t        j                  || z        z  S Nr   r^   r`   s      r   aps03_fprf      s%    A	?RVVAE]**r   c                 V    |||| z  dz   z  |z   z  t        j                  || z        z  S re   r^   r`   s      r   	aps03_fpprh      s/    QUQY!#$rvva!e}44r   c                     | |z  |z
  S )zMedium-degree polynomialr   r
   nra   s      r   aps04_frl      r   r   c                     || |dz
  z  z  S re   r   rj   s      r   aps04_fprn          q1q5z>r   c                 $    ||dz
  z  | |dz
  z  z  S Nr   r   r   rj   s      r   	aps04_fpprr          A;QU##r   c                 2    t        j                  |       dz
  S )zSimple Trigonometric functionr?   rB   r	   s    r   aps05_fru      s    66!9wr   c                 ,    t        j                  |       S rK   rG   r	   s    r   aps05_fprw          66!9r   c                 .    t        j                  |        S rK   rB   r	   s    r   	aps05_fpprz      rM   r   c                 z    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   r^   r
   rk   s     r   aps06_fr}      s8    q52661":BFFA26N 22Q66r   c                 t    dt        j                  |       z  d|z  t        j                  | | z        z  z   S r   r^   r|   s     r   aps06_fpr      s2    rvvqbz>AEBFFA26N222r   c                 F    d|z  |z  t        j                  | | z        z  S NrP   r^   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 rq   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                 L    t        j                  | | z        | dz
  z  | |z  z   S )zExponential plus a polynomialr   r^   r|   s     r   aps10_fr   !  s(    661"q&>QU#ad**r   c                 f    t        j                  | | z        | | dz
  z  dz   z  || |dz
  z  z  z   S re   r^   r|   s     r   aps10_fpr   &  s;    661"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 rq   r^   r|   s     r   	aps10_fppr   *  s[    FFA26NqbQB!a%L1$45Q>?1q5kAAJ&' (r   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 rq   r   r|   s     r   aps11_fpr   4  s    A;Ar   c                     d|dz
  z  | dz  z  S )NrP   r   r"   r   r|   s     r   	aps11_fppr   8  s    Q<!Q$r   c                 h    t        j                  | d|z        t        j                  |d|z        z
  S )z!nth root of x, with a zero at x=nr   rC   powerr|   s     r   aps12_fr   <  s+    88AsQw"((1cAg"666r   c                 @    t        j                  | d|z
  |z        |z  S )Nr   r   r|   s     r   aps12_fpr   A  s     88A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   E  s7    88Aa!eq()S1W5qAAEEr   c                 b    | dk(  ryd| dz  z  }|t         kD  ry| t        j                  |      z  S )z-Function with *all* derivatives 0 at the rootr   r   r   _MAX_EXPABLErC   r_   r
   ys     r   aps13_fr   L  s8    Av 	
AqDA<rvvay=r   c                 t    | dk(  ryd| dz  z  }|t         kD  rydd| dz  z  z   t        j                  |      z  S )Nr   r   r   r   r   s     r   aps13_fpr   Y  sC    Av	AqDA<AqDLBFF1I%%r   c                     | dk(  ryd| dz  z  }|t         kD  rydd| dz  z
  z  | dz  z  t        j                  |      z  S )Nr   r   r   rQ   r   r   s     r   	aps13_fppr   b  sL    Av	AqDA<AqD>AqD 266!9,,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   rB   r|   s     r   aps14_fr   k  s:    AvrDyt8q3w*Q.//r   c                 J    | dk  ry|dz  dt        j                  |       z   z  S )Nr   r   gUUUUUU?rG   r|   s     r   aps14_fpr   r  s(    Avt8y266!9,--r   c                 F    | dk  ry| dz  t        j                  |       z  S )Nr   r   rB   r|   s     r   	aps14_fppr   x  s%    Av29q	""r   c                     | dk  ry| dd|z   z  kD  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     rC   er_   r|   s     r   aps15_fr   ~  sP    1u8q1utte|661q5A+/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     sY    'XQ''tte|661q5A+/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     sl    'XQ''tte|661q5A+/D()QU3a7$>!a%H1LtSSr   r   gS?z	aps.01.00g0D   ?g@g=.@z	aps.02.00g.   @gh!@rQ   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   rP   z	aps.03.00)irP   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)rQ   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)rO   rO   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)r[   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                     | |z  |z
  S )z&z**n-a:  Use to find the nth root of ar   zrk   ra   s      r   cplx01_fr     r   r   c                     || |dz
  z  z  S re   r   r   s      r   	cplx01_fpr     ro   r   c                 $    ||dz
  z  | |dz
  z  z  S rq   r   r   s      r   
cplx01_fppr     rs   r   c                 2    t        j                  |       |z
  S )z"e**z - a: Use to find the log of ar^   r   ra   s     r   cplx02_fr     s    66!9q=r   c                 ,    t        j                  |       S rK   r^   r   s     r   	cplx02_fpr     rx   r   c                 ,    t        j                  |       S rK   r^   r   s     r   
cplx02_fppr     rx   r   )	r6   r7   r8   r9   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                 h    | D ]-  }t        ddg|j                  dg             D ]
  \  }}|||<    / y)z:Add "a" and "b" keys to each test from the "bracket" valuera   rb   r:   N)zipr3   )testsdkr4   s       r   _add_a_br  $  s9    c
AEE)R$89DAqAaD : r   c                     | xs d} t         t        t        t        d}|j	                  | g       }||D cg c]  }|d   |k\  s| }}|S c c}w )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"]
    original)apscomplexr  chandrupatlar;   )_APS_TESTS_DICTS_COMPLEX_TESTS_DICTS_ORIGINAL_TESTS_DICTS_CHANDRUPATLA_TESTS_DICTSr3   )
collectionr;   subsetsr  tcs        r   	get_testsr  0  sd    . )zJ&.08:G KK
B'E#Fer,'7:'EeFL Gs   AA)z	cc.bisectz	cc.ridderz	cc.brenthz	cc.brentq)r   r   r.   r0   r5   c                     | dz  d| z  z
  dz
  S )Nr"   r   rQ   r   r	   s    r   fun1r  \  s    a4!A#:>r   g5 @c                     dd| dz  z  z
  S rq   r   r	   s    r   fun2r  a  s    qAv:r   c                     | dz
  dz  S )Nr"   r   r	   s    r   fun3r  f  s    aC!8Or   c                     d| dz
  dz  z  S )Nr%   r   rQ   r   r	   s    r   fun4r  k  s    acAX:r   c                     | dz  S )Nr   r   r	   s    r   fun5r  p  s    a4Kr   c                     | dz  S )Nr   r   r	   s    r   fun6r  u  s    b5Lr   c                 t    t        |       }|j                  |       dk  rdS | |j                  | dz         z  S )NgW8?r   rP   )r   absr_   r
   xps     r   fun7r#  z  s:    		Bq	F"1:"&&!b'*:(::r   c                     t        |       }d}dd|z
  z  |j                  |        z   |d|z
  |j                  |        z  z   z  dz
  d| z  z   S )Nge-?i  r   i  i\  r   r_   )r
   r"  xis      r   fun8r'    s\    		B	B1R4[#$bAbD"&&!*+<&<=DtAvMMr   g;6b?c                 d    t        |       }|j                  |       dz
  d| dz  z  z
  d| dz  z  z   S )Nr   r   g>r"   r%  r!  s     r   fun9r)    s8    		B66!9q=419$wq!t|33r   gGo?)r6   r:   r=   nfevalr>   r   g     g     @g    _g    _B+   g)\(?r   r$   gư>g    .Ar   g|=)   g-q=g   mB0   ir)   g    .-   7   6   r-   g      @g       g      @g      $@g      g      I@g      $g      Y@r#   g-C6*?r(   Q   .)r  N)v__doc__r   numpyrC   scipy.optimizer   ccscipy._lib._array_apir   descriptionr   r   r   r   r   r   r   r&   r*   r.   r0   r2   r5   _ORIGINAL_TESTS_KEYSsqrtinf_ORIGINAL_TESTSdictr  r  rE   rI   rL   rW   rY   r\   rc   rf   rh   rl   rn   rr   ru   rw   rz   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   _APS_TESTS_KEYSpi
_APS_TESTSr  r   r   r   r   r   r   _COMPLEX_TESTS_KEYS_COMPLEX_TESTSr  r  r  bisectridderbrenthbrentqmethodsmstrings	functionsfstringsr  r=   r  r  r  r  r  r#  r'  r)  _CHANDRUPATLA_TESTS_KEYS_CHANDRUPATLA_TESTS	enumerate__name__r  )testcaseitests   000r   <module>rW     s %  R   * 1

.
-# 	
,  S'"''!*-rvvsCAQRS'"''!*-rvvsCAQRS'"''!*-rvvsCAQRtR#wrwwqz*BS:JKtR#wrwwqz*BS:JKtR#wrwwqz*RVVGS#?OP ?N>M(D!8	,-o 
98
9
!
+5
$
7
3'1
2
(.1
5$+
@(
'
7
*F rvvhbhhuo))*
&-0.#2?T(uh	2	255'9266.u h	2(';RVV.u
 h	2(';RVV.u h	2)'<bff	 +/u h	2	9'=rvv	 +/u h	2	9'=rvv	 +/u h	2	9'=rvv	 +/u h	2	9'=rvv	 +/u" h	2	9'=rvv	 +/#u& h	2	:'>	 +/'u* h	2
J'?
!;0+u. h	9r2hK/u2 h	:BxK3u6 h	:BxK7u: h	8aVRVV
!;0;u> h	8aVRVV
!;0?uB h	8aVRVV
!;0CuF h	9q!fbff
!;0GuJ h	9q!fbff
!;0KuN h	6Aq6266![OuR h	6Aq6266![SuV h	6Aq6266![WuZ h	7QFBFF![[u^ h	7QFBFF![_ub h	6E4="&&![cuf h	7UDM266![guj h	7UDM266![kun h	7UDM266![our h	23x"%%!)["suv h	4!Q
!;0wuz h	4!Q
!;0{u~ h	4!Q
!;0uB h	4!Q
!;0CuF h	4!Q
!;0GuJ h	51a&"&&
!;0KuN h	51a&"&&
#[2OuR h	51a&"&&&5SuV h	51a&"&&%{4WuZ h	6Aq6266
#[2[u^ h	4!Q
!;0_ub h	51a&"&&
!;0cuf h	51a&"&&
!;0guj h	4!Q#{kun h	4!Q
!;0our h	51a&"&&
!;0suv h	51a&"&&
!;0wuz h	51a&"&&
!;0{u~ h	4!Q
!;0uB h	4!Q
!;0CuF h	4!Q
!;0GuJ h	4!Q
!;0KuN h	4!Q
!;0OuR h	51a&"&&
!;0SuV h	51a&"&&
!;0WuZ h	4!Q
!;0[u^ h	4!Q
!;0_ub h	51a&"&&
!;0cuf h	51a&"&&
!;0guj h	51a&"&&
!;0kun h	4$BFF
G["our h	4$BFF
G["suv h	54)RVV
Hk#wuz h	54)RVV
Hk#{u~ h	4!S266![uB h	4!S266![CuF h	4!S266![GuJ h	4!S266![KuN h	4!S266![OuR h	4!S266![SuV h	4!S266![WuZ h	51c(BFF"k[u^ h	51c(BFF"k_ub h	51c(BFF"kcuf h	51c(BFF"kguj h	51c(BFF"kkun h	51c(BFF"kour h	51c(BFF"ksuv h	51c(BFF"kwuz h	51c(BFF"k{u~ h	51c(BFF"kuB h	51c(BFF"kCuF h	51c(BFF"kGuJ h	2Aw![KuN h	4%);Q.OuR h	4%);Q.SuV h	4%);Q.WuZ h	4%);Q.[u^ h	4%);Q._ub h	4%);Q.cuf h	4%);Q.guj h	4%);Q.kun h	4%);Q.our h	55"%%!)*<a.suv h	55"%%!)*<a.wuz h	55"%%!)*<a.{u~ h	55"%%!)*<a.uB h	55"%%!)*<a.CuF h	55"%%!)*<a.GuJ h	55"%%!)*<a.KuN h	55"%%!)*<a.OuR h	55"%%!)*<a.SuV h	55"%%!)*<a.WuZ h	55"%%!)*<a.[u^ h	55"%%!)*<a._ub h	55"%%!)*<a.cuf h	55"%%!)*<a.guj h	55"%%!)*<a.kun h	55"%%!)*<a.our h	55"%%!)*<a.suv h	55"%%!)*<a.wuz h	55"%%!)*<a.{u~ h	55"%%!)*<a.uB h	55"%%!)*<a.CuF h	55"%%!)*<a.GuJ h	55"%%!)*<a.KuN h	55"%%!)*<a.OuR h	55"%%!)*<a.SuV h	55"%%!)*<a.WuZ h	55"%%!)*<a.[u^ h	55"%%!)*<a._ub h	55"%%!)*<a.cuf h	55"%%!)*<a.guj h	55"%%!)*<a.kun h	55$-	 +/our h	55$-	 +/suv h	55$-	 +/wuz h	55$-	 +/{u~ h	55$-	 +/uB h	55$-	 +/CuF h	55$-	 +/GuJ h	55$-	 +/KuN h	55$-	 +/OuR h	55$-	 +/SuV h	55$-	 +/WuZ h	55$-	 +/[u^ h	55$-	 +/_ub h	55$-	 +/cuf h	55$-	 +/guj h	55$-	 +/kun h	55$-	 +/our h	55$-	 +/suv h	55$-	 +/wuz h	55$-	 +/{u~ h	55$-	 +/uB	 h	6E4=!	 +/C	uF	 h	6E4=!	 +/G	uJ	 h	6E4=!	 +/K	uN	 h	6E4=!	 +/O	uR	 h	6E4=!	 +/S	uV	 h	6E4=!	 +/W	uZ	 h	6E4=!	 +/[	u^	 h	6E4=!	 +/_	ub	 h	6E4=!	 +/c	uf	 h	7UDM1	 +/g	u
n	 JTTXD_h78T 
$
$  y*grvv
R2y*fbffwrwwqzA~'< < y*grvv*gbggaj1nt33 y*fbff1oy*eRVV
RUUT\?<y*eRVV
RUUT\?<$ >L=KD (	+,^ 
 		  	  	 F 99biiBII
6?RR 	)						; 	N 	4 	 D .	Aq6499a .	Ar7DIIr". 
As8TYY#. 
D#;		2&	.
 
E4=$))R(. 
C;		1%. 
D#;		2&. 
D#;		2&. 
E4=$))R(. 
E4=$))R(. 
Aq6499b!. 
C9dii$. 
D#;		2&. 
D#;		2&. 
E4=$))R(.  
Aq6499b!!." 
C9dii$#.$ 
D#;		2&%.& 
D#;		2&'.( 
E4=$))R().* 
B7DIIr"+., 
B7DIIr"-.. 
B8TYY#/.0 
B8TYY#1.2 
C:tyy"%3.4 
C9dii$5.6 
C9dii$7.8 
C:tyy"%9.: 
C:tyy"%;.< 
D$<B'=.> 
B7DIIq!?.@ 
B7DIIq!A.B 
B8TYY#C.D 
B8TYY#E.F 
C:tyy"%G.H 
D!9dii#I.J 
D!9dii$K.L 
D!9dii$M.N 
D":tyy"%O.P 
D":tyy"%Q.R 
D!9dii#S.T 
D!9dii#U.V 
D!9dii$W.X 
D":tyy"%Y.Z 
D":tyy"%[. ` '00C&DF&D71d $q'"2"2!31QqSUG<==&DF  .AB-@ "#&>"IJ-@B  	" #Yv UHPFBs'   AZ*B7AZ/GAZ4Y)AZ9ZAZ?