
    tKg                     r   d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlZddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ  G d d      Z d Z!d Z"d Z#d Z$d Z% G d d      Z& G d d      Z' G d d      Z( G d d      Z) G d d      Z* G d d      Z+ G d d       Z,y)!z7
Unit tests for optimization routines from minpack.py.
    N)assert_assert_almost_equalassert_array_equalassert_array_almost_equalassert_allcloseassert_warnssuppress_warnings)raises)arrayfloat64)
ThreadPool)optimizelinalg)lambertw)leastsq	curve_fitfixed_point)OptimizeWarning)Boundsc                       e Zd ZdZd Zd Zy)ReturnShapezThis class exists to create a callable that does not have a '__name__' attribute.

    __init__ takes the argument 'shape', which should be a tuple of ints.
    When an instance is called with a single argument 'x', it returns numpy.ones(shape).
    c                     || _         y N)shape)selfr   s     e/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_minpack.py__init__zReturnShape.__init__   s	    
    c                 @    t        j                  | j                        S r   )nponesr   )r   xs     r   __call__zReturnShape.__call__    s    wwtzz""r   N)__name__
__module____qualname____doc__r   r#    r   r   r   r      s    #r   r   c                 ,    t        j                  |      S )zUA function that returns an array of ones of the given shape.
    `x` is ignored.
    )r    r!   )r"   r   s     r   
dummy_funcr*   $   s     775>r   c                 |    t        t        |             5 }|j                  d |       cd d d        S # 1 sw Y   y xY w)Nc                      |        S r   r(   )fs    r   <lambda>z#sequence_parallel.<locals>.<lambda>-   s    !#r   )r   lenmap)fspools     r   sequence_parallelr3   +   s*    	CG	xxr* 
		s   2;c                 x    || dz  z  }t        j                  |dd |d   z
  | j                         |z
  f      }|S )a  Evaluate non-linear equation system representing
    the pressures and flows in a system of n parallel pipes::

        f_i = P_i - P_0, for i = 1..n
        f_0 = sum(Q_i) - Qtot

    where Q_i is the flow rate in pipe i and P_i the pressure in that pipe.
    Pressure is modeled as a P=kQ**2 where k is a valve coefficient and
    Q is the flow rate.

    Parameters
    ----------
    flow_rates : float
        A 1-D array of n flow rates [kg/s].
    k : float
        A 1-D array of n valve coefficients [1/kg m].
    Qtot : float
        A scalar, the total input flow rate [kg/s].

    Returns
    -------
    F : float
        A 1-D array, F[i] == f_i.

          Nr   )r    hstacksum)
flow_ratesQtotkPFs        r   pressure_networkr>   4   sD    4 	
JMA
		1QR51Q4<!1D!89:AHr   c                 .   t        |       }t        j                  | dd dz  |dd z  d| d   z  |d   z  z
        }t        j                  ||f      }|dz  |d|dz
  d|dz
  f<   d|d|dz
  |dz
  f<   t        j                  |      ||dz
  ddf<   |S )a  Return the jacobian of the equation system F(flow_rates)
    computed by `pressure_network` with respect to
    *flow_rates*. See `pressure_network` for the detailed
    description of parameters.

    Returns
    -------
    jac : float
        *n* by *n* matrix ``df_i/dQ_i`` where ``n = len(flow_rates)``
        and *f_i* and *Q_i* are described in the doc for `pressure_network`
    r6   Nr5   r   )r/   r    diagemptyr!   )r9   r:   r;   npdiffjacs         r   pressure_network_jacobianrE   S   s     	JAGGJqrNQ&12.Z]1BQqT1IIJE
((Aq6
CaiC1dqsd
OC1ac	N''!*C!QKJr   c                 6    t        | ||      t        | ||      fS r   )r>   rE   )r9   r:   r;   s      r   pressure_network_fun_and_gradrG   j   s$    Zq1%j$:< <r   c                   Z    e 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y)
TestFSolvec                     t        j                  dd      }d}t        g d      }t        j                  t
        |||fd      \  }}}}t        |t        j                  d             t        |dk(  |       y )N         ?       @        rN   rO   Targsfull_outputr6   )	r    fullr   r   fsolver>   r   r!   r   )r   r;   r:   initial_guessfinal_flowsinfoiermesgs           r   !test_pressure_network_no_gradientz,TestFSolve.test_pressure_network_no_gradientp   sh    GGAsO./'/m4)($T3 	"+rwwqz:q$r   c                     t        j                  dd      }d}t        g d      }t        j                  t
        |||ft              }t        |t        j                  d             y )NrK   rL   rM   rQ   fprime)	r    rS   r   r   rT   r>   rE   r   r!   r   r;   r:   rU   rV   s        r   #test_pressure_network_with_gradientz.TestFSolve.test_pressure_network_with_gradient{   sQ    GGAsO./oom4),. 	"+rwwqz:r   c                 b    t        d      }ddg}t        t        t        j                  ||       y Nr6         ?rN   r   assert_raises	TypeErrorr   rT   r   funcx0s      r   test_wrong_shape_func_callablez)TestFSolve.test_wrong_shape_func_callable   s(    1~ 3Zi$;r   c                 X    ddg}t        t        t        j                  t        |d       y Nrb   rN   )r6   rQ   )rd   re   r   rT   r*   r   rh   s     r   test_wrong_shape_func_functionz)TestFSolve.test_wrong_shape_func_function   s!     3Zi*bwOr   c                 x    t        d      }t        d      }t        t        t        j                  |ddg|       y )Nr6   r5   r5   r   rh   r]   rc   r   rg   
deriv_funcs      r    test_wrong_shape_fprime_callablez+TestFSolve.test_wrong_shape_fprime_callable   s-    1~ '
i$Aa5Tr   c                 X    d }d }t        t        t        j                  |ddg|       y )Nc                     t        | d      S N)r5   r*   r"   s    r   rg   z9TestFSolve.test_wrong_shape_fprime_function.<locals>.func       a&&r   c                     t        | d      S N)   r~   ry   rz   s    r   rt   z?TestFSolve.test_wrong_shape_fprime_function.<locals>.deriv_func       a((r   r   r6   rr   )rd   re   r   rT   rs   s      r    test_wrong_shape_fprime_functionz+TestFSolve.test_wrong_shape_fprime_function   s$    	'	)i$Aa5Tr   c                     d }t        t        d      5  t        j                  |dg       d d d        y # 1 sw Y   y xY w)Nc                      t        d      NI raised
ValueErrorrm   s    r   rg   z,TestFSolve.test_func_can_raise.<locals>.func       Z((r   r   matchr   rh   rd   r   r   rT   r   rg   s     r   test_func_can_raisezTestFSolve.test_func_can_raise   s/    	) :Z8OODaS) 988	   7A c                     d }d }t        t        d      5  t        j                  |dg|       d d d        y # 1 sw Y   y xY w)Nc                 4    | t        j                  dg      z
  S N
   r    r   rz   s    r   rg   z,TestFSolve.test_Dfun_can_raise.<locals>.func       rxx~%%r   c                      t        d      r   r   rm   s    r   rt   z2TestFSolve.test_Dfun_can_raise.<locals>.deriv_func   r   r   r   r   r   rr   r   rs   s      r   test_Dfun_can_raisezTestFSolve.test_Dfun_can_raise   s6    	&	) :Z8OODaS< 988	   ;Ac                     d }t        j                  |t        j                  ddgt        j                              }t         ||      ddgd       y )Nc                 n    t        j                  | d   dz
  | d   dz
  gt         j                        dz  S )Nr   d   r6   i  dtyper5   )r    r   float32rz   s    r   rg   z%TestFSolve.test_float32.<locals>.func   s1    88QqTCZ15RZZHAMMr   r6   r   MbP?atol)r   rT   r    r   r   r   )r   rg   ps      r   test_float32zTestFSolve.test_float32   s?    	NOOD"((Aq62::">?Q!Qd3r   c                       fd}t        j                  dd      }d}t        g d      }t        j                  ||||fd      \  }}}}t        |t        j                  d             t        |dk(  |       y )Nc                  4    j                          t        |  S r   )rZ   r>   rQ   r   s    r   rg   z,TestFSolve.test_reentrant_func.<locals>.func   s    224#T**r   rK   rL   rM   TrP   r6   )r    rS   r   r   rT   r   r!   r   )	r   rg   r;   r:   rU   rV   rW   rX   rY   s	   `        r   test_reentrant_funczTestFSolve.test_reentrant_func   sp    	+
 GGAsO./'/-tQi($T3 	"+rwwqz:q$r   c                       fd}t        j                  dd      }d}t        g d      }t        j                  t
        |||f|      }t        |t        j                  d             y )Nc                  4    j                          t        |  S r   )r_   rE   r   s    r   rt   z3TestFSolve.test_reentrant_Dfunc.<locals>.deriv_func   s    446,d33r   rK   rL   rM   r\   )r    rS   r   r   rT   r>   r   r!   )r   rt   r;   r:   rU   rV   s   `     r   test_reentrant_DfunczTestFSolve.test_reentrant_Dfunc   sY    	4
 GGAsO./oom4) 	"+rwwqz:r   c                 z    t        | j                  gdz        }t        |D cg c]  }|d u  c}      sJ y c c}w r   )r3   rZ   allr   vresults      r   test_concurrent_no_gradientz&TestFSolve.test_concurrent_no_gradient   s>    tEEFKL3vFdN34443   8c                 z    t        | j                  gdz        }t        |D cg c]  }|d u  c}      sJ y c c}w r   )r3   r_   r   r   s      r   test_concurrent_with_gradientz(TestFSolve.test_concurrent_with_gradient   s>    tGGH2MN3vFdN34443r   N)r$   r%   r&   rZ   r_   ri   ro   ru   r   r   r   r   r   r   r   r   r(   r   r   rI   rI   o   sF    	 ;<PU
U*=4 ;55r   rI   c                       e Zd Zd Zd Zd Zy)TestRootHybrc                     t        j                  dd      }d}t        g d      }t        j                  t
        |d||f      j                  }t        |t        j                  d             y )NrK   rL   rM   hybrmethodrQ   	r    rS   r   r   rootr>   r"   r   r!   r^   s        r   rZ   z.TestRootHybr.test_pressure_network_no_gradient   sX    GGAsO./mm$4m+1q	CCD1 	!+rwwqz:r   c                     t        j                  dd      }d}t        g dg      }t        j                  t
        |||fdt              j                  }t        |t        j                  d             y )NrK   rL   rM   r   rQ   r   rD   )
r    rS   r   r   r   r>   rE   r"   r   r!   r^   s        r   r_   z0TestRootHybr.test_pressure_network_with_gradient   s`    GGAsO/01mm$4m*.6(ACCD1 	 	"+rwwqz:r   c                     t        j                  dd      }d}t        g d      }t        j                  t
        |||fdd      j                  }t        |t        j                  d             y )NrK   rL   rM   r   Tr   )	r    rS   r   r   r   rG   r"   r   r!   r^   s        r   ,test_pressure_network_with_gradient_combinedz9TestRootHybr.test_pressure_network_with_gradient_combined   s^     GGAsO./mm$A$1q	+1t==>Q 	 	"+rwwqz:r   N)r$   r%   r&   rZ   r_   r   r(   r   r   r   r      s    ;;	;r   r   c                       e Zd Zd Zy)
TestRootLMc                     t        j                  dd      }d}t        g d      }t        j                  t
        |d||f      j                  }t        |t        j                  d             y )NrK   rL   rM   lmr   r   r^   s        r   rZ   z,TestRootLM.test_pressure_network_no_gradient   sX    GGAsO./mm$4m+/tQiAAB 	!+rwwqz:r   N)r$   r%   r&   rZ   r(   r   r   r   r      s    ;r   r   c                   `    e Zd Zd Zej
                  j                  dg d      d        Zd Zy)TestNfevc                 <    | xj                   dz  c_         |dz  dz
  S )Nr6   r5   r~   )nfev)r   ys     r   zero_fzTestNfev.zero_f  s    		Q	!tAvr   r   )
r   r   broyden1broyden2andersonlinearmixingdiagbroydenexcitingmixingkrylovzdf-sanec                     d| _         t        j                  | j                  d|      }|j                   | j                   k(  sJ y )Nr   r   r   )r   r   r   r   )r   r   solutions      r   test_root_nfevzTestNfev.test_root_nfev  s7     	==c&A}}		)))r   c                     d| _         t        j                  | j                  dd      \  }}}}|d   | j                   k(  sJ y )Nr   r   T)rR   r   )r   r   rT   r   )r   r"   rW   rX   rY   s        r   test_fsolve_nfevzTestNfev.test_fsolve_nfev  s>    	%__T[[#4P4dF|tyy(((r   N)	r$   r%   r&   r   pytestmarkparametrizer   r   r(   r   r   r   r     s6     [[X (3 4
*4
*
)r   r   c                   ~    e 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d Zd Zd Zy)TestLeastSqc                 (   t        j                  ddd      }d\  }}}|| _        |||f| _        ||dz  z  ||z  z   |z   }t         j                  j                  d       |dt         j                  j                  |j                        z  z   | _        y )Nr   r   (   )g@*   g33333sr5   g{Gz?)	r    linspacer"   abcrandomseedstandard_normalr   y_meas)r   r"   abcy_trues         r   setup_methodzTestLeastSq.setup_method  s    KK2r"!AQq51a4!A#!
		qtBII$=$=fll$KKKr   c                 :    |\  }}}|||dz  z  ||z  z   |z   z
  }|S Nr5   r(   )r   r   r   r"   r   r   r   errs           r   	residualszTestLeastSq.residuals%  s1    !A1a4!A#!"
r   c                 t    t        j                  |dz  |t        j                  |      g      j                   S r   )r    vstack	ones_likeT)r   _p_yr"   s       r   residuals_jacobianzTestLeastSq.residuals_jacobian*  s-    		1a4BLLO457777r   c                     t        g d      }t        | j                  || j                  | j                  f      \  }}t        |dv d|z         t        || j                  d       y )Nr   r   r   rm   r6   r5   r~   rK   solution not found (ier=%d)r5   decimalr   r   r   r   r"   r   r   r   r   p0
params_fitrX   s       r   
test_basiczTestLeastSq.test_basic-  sV    7^!$.."(,TVV'<>
Cy "?#"EF!*dhhBr   c                     t        g d      }t        | j                  || j                  | j                  f| j
                        \  }}t        |dv d|z         t        || j                  d       y )Nr   rQ   Dfunr   r   r5   r   )	r   r   r   r   r"   r   r   r   r   r   s       r   test_basic_with_gradientz$TestLeastSq.test_basic_with_gradient5  sb    7^!$.."(,TVV'<'+'>'>@
C 	y "?#"EF!*dhhBr   c                     t        g dg      }t        | j                  || j                  | j                  fd      }|\  }}}}}t        |dv d|        y )Nr   TrP   r   solution not found: )r   r   r   r   r"   r   )r   r   rR   r   cov_xinfodictrY   rX   s           r   test_full_outputzTestLeastSq.test_full_output>  s\    G9dnnb$(KK#8*.0 2=.
E8T3y $8"?@r   c                     t        g dt              }t        |d      }t        | j                  || j                  | j
                  fd      }|\  }}}}}t        |dv d|        t        ||       y )Nr   r   T)copyrP   r   r  )r   r   r   r   r   r"   r   r   )	r   r   p0_copyrR   r   r  r  rY   rX   s	            r   test_input_untouchedz TestLeastSq.test_input_untouchedF  sr    7)&dnnb$(KK#8*.0 2=.
E8T3y $8"?@2w'r   c                 b    t        d      }ddg}t        t        t        j                  ||       y ra   r   rd   re   r   r   rf   s      r   ri   z*TestLeastSq.test_wrong_shape_func_callableP  s*    1~ 3Zi!1!14<r   c                 X    ddg}t        t        t        j                  t        |d       y rk   )rd   re   r   r   r*   rn   s     r   ro   z*TestLeastSq.test_wrong_shape_func_functionW  s#     3Zi!1!1:rPr   c                 x    t        d      }t        d      }t        t        t        j                  |ddg|       y )Nr6   rq   r   rh   r  r  rs   s      r   test_wrong_shape_Dfun_callablez*TestLeastSq.test_wrong_shape_Dfun_callable]  s/    1~ '
i!1!14QqE
Sr   c                 X    d }d }t        t        t        j                  |ddg|       y )Nc                     t        | d      S rx   ry   rz   s    r   rg   z8TestLeastSq.test_wrong_shape_Dfun_function.<locals>.funcc  r{   r   c                     t        | d      S r}   ry   rz   s    r   rt   z>TestLeastSq.test_wrong_shape_Dfun_function.<locals>.deriv_funce  r   r   r   r6   r  rd   re   r   r   rs   s      r   test_wrong_shape_Dfun_functionz*TestLeastSq.test_wrong_shape_Dfun_functionb  s&    	'	)i!1!14QqE
Sr   c           	         d }t        j                  g dt         j                        }t        j                  g dt         j                        }t        j                  g d      }t        j                  ||||f      \  }}t        |dv        t         ||||      dz  j                         d	 ||||      dz  j                         z  k         y )
Nc                 z    | d   t        j                  || d   z
  dz   d| d   dz  z  z        z  | d   z   }||z
  S )Nr   r6   r5   rN   r~   r    exp)r   r"   r   qs       r   rg   z&TestLeastSq.test_float32.<locals>.funck  sJ    !RVVa!fq[L#adAg+677!<Aq5Lr   )
g?gw/?g%C?gNbX9?gHzG?gM?gZd;O?gS?g~jt?gV-?r   )
gJ4?gN@aÓ?g^K=?gMO?g?g?W[?gl?g{Pk?g rh?gׁsF?)      ?r  r  r  rm   r   r5   g-C6?)r    r   r   r   r   r   r8   )r   rg   r"   r   r   p1successs          r   r   zTestLeastSq.test_float32i  s    	 HH %'ZZ1HH $+-::7XX'(&&tRqe<G9$%b1q%%'$$r!A,/1F1F1H*HHIr   c                     d }t        t        d      5  t        j                  |dg       d d d        y # 1 sw Y   y xY w)Nc                      t        d      r   r   rm   s    r   rg   z-TestLeastSq.test_func_can_raise.<locals>.funcz  r   r   r   r   r   r   rd   r   r   r   r   s     r   r   zTestLeastSq.test_func_can_raisey  s1    	) :Z8Tqc* 988r   c                     d }d }t        t        d      5  t        j                  |dg|       d d d        y # 1 sw Y   y xY w)Nc                 4    | t        j                  dg      z
  S r   r   rz   s    r   rg   z-TestLeastSq.test_Dfun_can_raise.<locals>.func  r   r   c                      t        d      r   r   rm   s    r   rt   z3TestLeastSq.test_Dfun_can_raise.<locals>.deriv_func  r   r   r   r   r   r  r!  rs   s      r   r   zTestLeastSq.test_Dfun_can_raise  s8    	&	) :Z8Tqc
; 988r   c                       fd}t        g d      }t        || j                   j                  f      \  }}t	        |dv d|z         t        | j                  d       y )Nc                  B    j                           j                  |  S r   )r   r   r   s    r   rg   z-TestLeastSq.test_reentrant_func.<locals>.func  s    OO!4>>4((r   r   rm   r   r   r5   r   )r   r   r   r"   r   r   r   )r   rg   r   r   rX   s   `    r   r   zTestLeastSq.test_reentrant_func  sZ    	) 7^!$(,TVV'<>
Cy "?#"EF!*dhhBr   c                       fd}t        g d      }t         j                  | j                   j                  f|      \  }}t        |dv d|z         t        | j                  d       y )Nc                  B    j                           j                  |  S r   )r   r   r   s    r   rt   z3TestLeastSq.test_reentrant_Dfun.<locals>.deriv_func  s     OO*4**D11r   r   r   r   r   r5   r   r   )r   rt   r   r   rX   s   `    r   test_reentrant_DfunzTestLeastSq.test_reentrant_Dfun  sc    	2 7^!$.."(,TVV'<'13
C 	y "?#"EF!*dhhBr   c                 z    t        | j                  gdz        }t        |D cg c]  }|d u  c}      sJ y c c}w r   )r3   r   r   r   s      r   r   z'TestLeastSq.test_concurrent_no_gradient  s<    t/"453vFdN34443r   c                 z    t        | j                  gdz        }t        |D cg c]  }|d u  c}      sJ y c c}w r   )r3   r  r   r   s      r   r   z)TestLeastSq.test_concurrent_with_gradient  s>    t<<=BC3vFdN34443r   c                     d }t        t        d      5  t        j                  |ddg       d d d        y # 1 sw Y   y xY w)Nc                 $    d| d   dz
  dz  z  dz   S )Nr5   r   r~   r6   r(   rz   s    r   rg   z=TestLeastSq.test_func_input_output_length_check.<locals>.func  s    !qQ&**r   z+Improper input: func input vector length N=r   r   r6   r   r  r   s     r   #test_func_input_output_length_checkz/TestLeastSq.test_func_input_output_length_check  s>    	+ 9!NPTq!f-P P Ps	   8AN)r$   r%   r&   r   r   r   r   r  r  r  ri   ro   r  r  r   r   r   r   r)  r   r   r.  r(   r   r   r   r     sk    L
8CCA(=QT
TJ +<
CC55.r   r   c                   b   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zed
        Zej                  j!                  dg d      d        Zej                  j!                  dg d      d        Zej                  j!                  dddg      ej                  j!                  dg d      d               Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zej                  j!                  ddd g      d!        Zd" Z d# Z!d$ Z"d% Z#d& Z$ej                  jK                  d'      d(        Z&d) Z'd* Z(y+),TestCurveFitc                 L    t        g d      | _        t        g d      | _        y )N)r  g	@      #@gffffff+@)r  rN         @g      @)r   r   r"   r   s    r   r   zTestCurveFit.setup_method  s    ,-+,r   c                 d   d }t        || j                  | j                        \  }}t        t	        |      dk(         t        |j
                  dk(         t        |d   dd       t        |d   d	d       t        || j                  | j                  dd
      }|\  }}}}}	t        ||       y )Nc                     | |z  S r   r(   r"   r   s     r   rg   z,TestCurveFit.test_one_argument.<locals>.func      a4Kr   r6   )r6   r6   r   g3ı.n?rK   r   )r   r   g-C6Z?F)rR   check_finite)r   r"   r   r   r/   r   r   r   )
r   rg   poptpcovrespopt2pcov2r  errmsgrX   s
             r   test_one_argumentzTestCurveFit.test_one_argument  s    	tTVVTVV4
dD	Q

e#$DGVQ7DIvq9 dffdff$%E;03-x!$.r   c                     d }t        || j                  | j                        \  }}t        t	        |      dk(         t        |j
                  dk(         t        |ddgd       t        |dd	gd	d
ggd       y )Nc                     || |z  z  S r   r(   r"   r   r   s      r   rg   z,TestCurveFit.test_two_argument.<locals>.func  s    QT6Mr   r5   rq   c]K?-?rK   r   䃞ͪϵ?T㥛 b=y?)r   r"   r   r   r/   r   r   )r   rg   r:  r;  s       r   test_two_argumentzTestCurveFit.test_two_argument  sq    	tTVVTVV4
dD	Q

e#$!$(8!D!$&'):Wf<M(N*+	-r   c                      G d d      } |       }t        |j                  | j                  | j                        \  }}t	        |j
                  dk(         t        |ddgd       t        |dd	gd	d
ggd       y )Nc                       e Zd ZdZd Zy)8TestCurveFit.test_func_is_classmethod.<locals>.test_selfzThis class tests if curve_fit passes the correct number of
               arguments when the model function is a class instance method.
            c                     |||z  z  S r   r(   )r   r"   r   r   s       r   rg   z=TestCurveFit.test_func_is_classmethod.<locals>.test_self.func  s    1a4xr   N)r$   r%   r&   r'   rg   r(   r   r   	test_selfrL    s     r   rN  rq   rD  rE  rK   r   rF  rG  rH  )r   rg   r"   r   r   r   r   )r   rN  test_self_instr:  r;  s        r   test_func_is_classmethodz%TestCurveFit.test_func_is_classmethod  su    	  	  #~22DFFDFFC
d

e#$!$(8!D!$&'):Wf<M(N*+	-r   c                 l    g d}g d}g d}g d}d }t        ||||d      \  }}t        ||d	       y )
N)
gB`"@gZd;@gQ@g#~j@g/$@g;O@g @g@gZd;@g)\@)
     ؊@g     (@g     @g     X@g     t@g     @g     @g     8@g     @g     H@)g^w8}@gU]}@     X@rS  g29l?rR  )g䃞j@gj@gT{7@g|'fɘ@g ƞ?g'ˊ@c                     |t        j                  | |z
  dz   d|dz  z  z        z  |t        j                  | |z
  dz   d|dz  z  z        z  z   |z   S )Nr5   rN   r  )r"   rh   x1A0A1sigmar   s          r   f_double_gaussz9TestCurveFit.test_regression_2639.<locals>.f_double_gauss  sd    rvv"qyj"UAX+677!B$
BuaxK 899:<=> ?r   i'  maxfevgh㈵>rtol)r   r   )r   r"   r   guessgoodrY  r:  r;  s           r   test_regression_2639z!TestCurveFit.test_regression_2639  sG    #//	? ~q!U5I
dd.r   c           
         t        j                  g d      }t        j                  g d      }t        j                  g d      }d }dD ]C  }t        |||ddg||      \  }}t        j                  t        j                  |            }t        |d	d
gd       t        |||ddgd|z  |      \  }}t        j                  t        j                  |            }t        |d	d
gd       t        |||ddg|d|      \  }}t        j                  t        j                  |            }	t        |	ddgd       t        |||ddgd|z  d|      \  }}t        j                  t        j                  |            }	t        |	ddgd       F d }
t        j                  t         j                  gdz        j                  dd      }t               5 }|j                  t        d       t        |
||ddg|      \  }}t        ||d d |d d ddg      \  }}d d d        t        j                  dk(         t        ||       t        j                  dk(         t        ||       y # 1 sw Y   RxY w)N)r   r6   r5   r~   rK      )r6   r6   rb           )r6   r5   r6   r5   r6   r5   c                     || z  |z   S r   r(   rC  s      r   r-   z!TestCurveFit.test_pcov.<locals>.f      Q37Nr   r   trfdogboxr5   r   )r   rX  r   gN"q?g~uM/N?r   r\  r~   T)r   rX  absolute_sigmar   gO=N?g5=`6?g[u|?g-/i@c                     || z  S r   r(   rC  s      r   f_flatz&TestCurveFit.test_pcov.<locals>.f_flat  s    Q3Jr   rK   z3Covariance of the parameters could not be estimated)r   rX  r   rq   )r    r   r   sqrtr@   r   infreshaper	   filterr   r   r   r   )r   xdataydatarX  r-   r   r:  r;  perr_scaledperrrm  pcov_expectedsuppopt1pcov1s                  r   	test_pcovzTestCurveFit.test_pcov  s0   +,,-+,	 .F"1eU1vU*02JD$''"''$-0KK*j)AM"1eU1vQuW*02JD$''"''$-0KK*j)AM"1eU1vU26vGJD$772774=)DD:z":F"1eU1vQuW26vGJD$772774=)DD<">TJ' ..	 "&&!,44Q: CJJLN"65%QF%PJD$$Qbq	5!9!QHLE5	 ! 	

f$%4/v%&5-0 ! s   AI--I6c                 V    d }g d}g d}t        t        |||      d   ddgd       y )	Nc                     || z  |z   S r   r(   rC  s      r   f_linearz.TestCurveFit.test_array_like.<locals>.f_linear)  rg  r   r   )r~   rb  rc  	   r   r5   r6   g|=r   )r   r   )r   r~  r"   r   s       r   test_array_likezTestCurveFit.test_array_like'  s1    	 	(Aq1!4q!f5Ir   c                     t        j                  g d      }t        j                  g d      }t        t        t        d ||       y )N)r6   r5   r~   rK   rb     )r6   r5   r~   rK   g      @r  c                     || z  S r   r(   rC  s      r   r.   z<TestCurveFit.test_indeterminate_covariance.<locals>.<lambda>5  s    QqSr   )r    r   r   r   r   r   rs  rt  s      r   test_indeterminate_covariancez*TestCurveFit.test_indeterminate_covariance0  s3    +,-._i(%	8r   c                    t        j                  dt         j                  dg      }t        j                  g d      }t        t        t
        d ||       t        t        t
        d ||       t        t        t
        d ||fi ddi y )	Nr6   r~   r6   r5   r~   c                     || z  |z   S r   r(   rC  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>?      acAgr   c                     || z  |z   S r   r(   rC  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>A  r  r   c                     || z  |z   S r   r(   rC  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>C  s    QqS1Wr   r9  T)r    r   nanrd   r   r   r  s      r   test_NaN_handlingzTestCurveFit.test_NaN_handling7  ss     !RVVQ(#j)-ue	=j)-ue	= 	j)-DU	>'5t&<	>r   c                    | |||dd}d}t        t        |      5  t        di |ddd d d d        t        t        d      5  t        di |d	d
i d d d        t        di |d	di\  }}	||d<   ||d<   t        di |\  }
}	t        ||
       d}t        t        |      5  t        di |d	di d d d        y # 1 sw Y   xY w# 1 sw Y   wxY w# 1 sw Y   y xY w)NF)r-   rs  rt  r   r9  z;`nan_policy='propagate'` is not supported by this function.r   	propagatei  )
nan_policyr[  zThe input contains nanr  raiseomitrs  rt  zTnan_policy must be one of \{(?:'raise'|'omit'|None)(?:, ?(?:'raise'|'omit'|None))*\}hir(   )rd   r   r   r   )r-   xdata_with_nanxdata_without_nanydata_with_nanydata_without_nanr   kwargs	error_msgresult_with_nan_result_without_nans              r   _check_nan_policyzTestCurveFit._check_nan_policyF  s     >N"E;)	:Y7DD;tD 8 :-EF3373 G 'CCFC+w+w ) 3F 3A);<:	:Y70040 87% 87 GF 87s#   C C'C C	CC!r   rh  c                 R   d }t        j                  ddt         j                  ddt         j                  g      }t        j                  ddddt         j                  dg      }t        j                  g d      }t        j                  g d	      }| j                  ||||||       y )
Nc                     || z  |z   S r   r(   rC  s      r   r-   z*TestCurveFit.test_nan_policy_1d.<locals>.fe  rg  r   r5   r~   rK   r6   rb  rc  )r5   r~   rK   r  r    r   r  r  r   r   r-   r  r  r  r  s          r   test_nan_policy_1dzTestCurveFit.test_nan_policy_1dc  s    	 1aArvv">?1aArvvq"9:HHY/HHY/q.2C-/@&	Jr   c           
         d }t        j                  ddt         j                  ddt         j                  dgddt         j                  t         j                  dt         j                  dgg      }t        j                  ddddt         j                  ddg      }t        j                  g d	g d
g      }t        j                  g d      }| j                  ||||||       y )Nc                 <    | dd d f   }| dd d f   }||z  |z   |z   S Nr   r6   r(   r"   r   r   rU  x2s        r   r-   z*TestCurveFit.test_nan_policy_2d.<locals>.fr  s.    1a4B1a4BR4!8b= r   r5   r~   rK   rb  rc  r6   r   r5   r~   rb  r5   r~   rc  r6   r5   r   r  r  s          r   test_nan_policy_2dzTestCurveFit.test_nan_policy_2dp  s    	!
 Aq"&&!Q#B$%q"&&"&&!RVVQ#G#I J1aArvvq""=>HHi%;<HHZ0q.2C-/@&	Jr   rB   r5   r~   c           
         d }t        j                  ddt         j                  ddt         j                  dgddt         j                  t         j                  dt         j                  dggg      }|dk(  r|j                         n|}t        j                  ddddt         j                  ddg      }t        j                  g d	g d
gg      }t        j                  g d      }| j	                  ||||||       y )Nc                 x    | ddd d f   j                         }| ddd d f   j                         }||z  |z   |z   S )N.r   r6   )squeezer  s        r   r-   z,TestCurveFit.test_nan_policy_2_3d.<locals>.f  sD    319%%'B319%%'BR4!8b= r   r5   r~   rK   rb  rc  r6   r   r  r  r  )r    r   r  r  r  )r   rB   r   r-   r  r  r  r  s           r   test_nan_policy_2_3dz!TestCurveFit.test_nan_policy_2_3d  s    	!
 Q2661a$C$%q"&&"&&!RVVQ#G$I #J K56!V//11aArvvq""=>HHy)&<%=>HHZ0q.2C-/@&	Jr   c                     t        t        t        d g g        t        t        t        d g g d       t        t        t        d dgg        t        t        t        d dgg d       y )	Nc                     || z  S r   r(   r7  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>      !A#r   c                     || z  S r   r(   r7  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   )r6   r5   )boundsc                     || z  S r   r(   r7  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r6   c                     || z  S r   r(   r7  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r5   rd   r   r   r4  s    r   test_empty_inputszTestCurveFit.test_empty_inputs  sT    j)-=r2Fj)-=r2#	%j)-=sBGj)-=sB#	%r   c                 <    t        t        t        d ddgddg       y )Nc                     | S r   r(   rz   s    r   r.   z8TestCurveFit.test_function_zero_params.<locals>.<lambda>  s    qr   r6   r5   r~   rK   r  r4  s    r   test_function_zero_paramsz&TestCurveFit.test_function_zero_params  s    j)[1a&1a&Ir   c                 l    t        d d dt        j                  d      z        \  }}t        |dg       y )Nc                 2    |t        j                  d      z  S r   )r    arange)r  r   s     r   r.   z*TestCurveFit.test_None_x.<locals>.<lambda>  s    A		",=r   r5   r   rN   )r   r    r  r   )r   r:  r;  s      r   test_None_xzTestCurveFit.test_None_x  s1    =#Q2%68
drd#r   c                     d }t        j                  ddd      } ||dd      }dD ]"  }t        ||||      \  }}t        |ddg       $ t	        t
        t        |||d       y )	Nc                 :    |t        j                  | | z        z  S r   r  rC  s      r   r-   z,TestCurveFit.test_method_argument.<locals>.f      rvvqbd|##r   r   r6      rN   ri  rj  r   Nr   unknown)r    r   r   r   rd   r   )r   r-   rs  rt  r   r:  r;  s          r   test_method_argumentz!TestCurveFit.test_method_argument  si    	$ Aq"%%R 3F"1eU6BJD$D2r(+ 4 	j)QuYOr   c                    d }t        j                  ddd      } ||dd      }dD ]c  }t        ||||d      \  }}}}}	t        |ddg       d	|v sJ d
|v sJ |dk(  s|d|v sJ d|v sJ d|v sJ t	        |t
              sJ |	dv rcJ  y )Nc                 :    |t        j                  | | z        z  S r   r  rC  s      r   r-   z(TestCurveFit.test_full_output.<locals>.f  s    rvvqb1f~%%r   r   r6   r  rN   r  T)r   rR   r   fvecr   fjacipvtqtfr   )r    r   r   r   
isinstancestr)
r   r-   rs  rt  r   r:  r;  r  r?  rX   s
             r   r  zTestCurveFit.test_full_output  s    	& Aq"%%R 3F095%D1B-D$&#D2r(+X%%%X%%%~))))))(((fc***,&&& 4r   c           	         d }t        j                  ddd      } ||dd      }ddg}ddg}||f}t        ||      }d	D ]C  }t        |||||
      \  }	}
t	        |	d   d       t        |||||
      \  }}t	        ||	       E t        |||dddgdt         j
                  gf      \  }	}
t	        |	d   d       t        t        t        ||||d
       y )Nc                 :    |t        j                  | | z        z  S r   r  rC  s      r   r-   z#TestCurveFit.test_bounds.<locals>.f  r  r   r   r6   r  rN   r  rb   r3  )Nri  rj  )r  r   ri  rO   g333333?)r   r  r   )r    r   r   r   r   rp  rd   r   )r   r-   rs  rt  lbubr  bounds_classr   r:  r;  
popt_class
pcov_classs                r   test_boundszTestCurveFit.test_bounds  s    	$ Aq"%%R  !W2Y bb"~-F"1eU6*02JD$DGS)%.q%6B6<&>"J
 J- . q%u(*Awbff&>@
dQ% 	j)QuV!	#r   c           	         d }t        j                  dt         j                  z  dt         j                  z  d      }t        j                  |      }dt         j                  z  dt         j                  z  f}dD ]V  }t	        |||dt         j                  z  	      \  }}t	        |||dt         j                  z  ||
      \  }}t        ||       X y )Nc                 2    t        j                  | |z         S r   )r    sinr7  s     r   r-   z&TestCurveFit.test_bounds_p0.<locals>.f  s    66!a%= r   r5   r   r~   ri  rj  g @rn  )r   r  r   )r    r   pir  r   r   )	r   r-   rs  rt  r  r   popt_1r  popt_2s	            r   test_bounds_p0zTestCurveFit.test_bounds_p0  s    	! BruuHagr2uruu*a"%%i('F!!UEc"%%i@IFA!!UEc"%%i)/@IFA FF+ (r   c           	         d }d }t        j                  ddd      } ||dd      }dD ]*  }dD ]#  }t        |||||	      \  }}t        |d
d
g       % , dD ]#  }t        |||||      \  }}t        |d
d
g       % d|d<   t        j                  |j
                  d         }	d|	d<   dD ]&  }t        ||||	||      \  }}t        |d
d
gd       ( y )Nc                 :    |t        j                  | | z        z  S r   r  rC  s      r   r-   z TestCurveFit.test_jac.<locals>.f  r  r   c                     t        j                  | | z        }t        j                  || | z  |z  f      j                  S r   r    r  r   r   r"   r   r   es       r   rD   z"TestCurveFit.test_jac.<locals>.jac  8    r!tA99a!a!_-///r   r   r6   r  rN   r  )z2-pointz3-pointcs)rD   r   r5   rh  r   rD   r   rb     )rX  r   rD   r   r\  )r    r   r   r   r!   r   )
r   r-   rD   rs  rt  r   schemer:  r;  rX  s
             r   test_jaczTestCurveFit.test_jac  s    	$	0 Aq"%%R  (F6&q%F.46
dq!f- 7 ( .F"1eU6sKJD$D1a&) .
 aA'a-F"1eU%'*,JD$ D1a&t4 .r   c                     t        j                  dd      }d|z  }t        d ||dd      \  }}t        d ||dd	      \  }}t        |dd
       t        |dd
       y )Nr   r   r5   c                     || z  S r   r(   r"   r   s     r   r.   z5TestCurveFit.test_maxfev_and_bounds.<locals>.<lambda>!      1r   )r   r~   r   )r  r[  c                     || z  S r   r(   r  s     r   r.   z5TestCurveFit.test_maxfev_and_bounds.<locals>.<lambda>"  r  r   )r  max_nfev+=r   )r    r  r   r   )r   r"   r   ry  r  r=  s         r   test_maxfev_and_boundsz#TestCurveFit.test_maxfev_and_bounds  sa     IIaaC_a6#Nq_a6CPqqu-qu-r   c           
         d }d }t         j                  j                  d       t        j                  ddd      } ||dd      }|dt         j                  j	                  t        |      	      z  z   }t        j                  t        |            dz   }t        j                  |d
z        }||fdfD ]P  \  }}	dD ]F  }
t        ||||||
      \  }}t        |||||	|
      \  }}t        ||d       t        ||d       H R y )Nc                 :    |t        j                  | | z        z  S r   r  rC  s      r   rg   z9TestCurveFit.test_curvefit_simplecovariance.<locals>.func)  r  r   c                     t        j                  | | z        }t        j                  || | z  |z  f      j                  S r   r  r  s       r   rD   z8TestCurveFit.test_curvefit_simplecovariance.<locals>.jac,  r  r   r   rK   2         @?皙?sizer5   NNFTrX  rD   rk  r  r   )
r    r   r   r   normalr/   zerosr@   r   r   )r   rg   rD   rs  r   rt  rX  covarjac1jac2rk  ry  rz  r=  r>  s                  r   test_curvefit_simplecovariancez+TestCurveFit.test_curvefit_simplecovariance'  s    	$	0 			qAq"%S!C"))**E
*;;;U$s*q!:|4JD$"/(ue5  Au(ue5  Au  u59u59 #0 5r   c           
         d }d }d }d }t         j                  j                  d       t        j                  dd      } ||dd	      }|d
t         j                  j	                  t        |            z  z   }t        j                  t        |            d
z   }t        j                  |dz        }	t        j                  d	t        j                  d      z  dt        j                  d      z  dgd	t        j                  d      z  d	t        j                  d      z  dgg dg      }
|
j                  |      }|
j                  |	      j                  |
j                        }||fdfD ]R  \  }}dD ]H  }t        ||||||      \  }}t        ||||||      \  }}t        ||dd       t        ||dd       J T y )Nc                 H   t        j                  dt        j                  d      z  dt        j                  d      z  dgdt        j                  d      z  dt        j                  d      z  dgg dg      }|j                  |t        j                  | | z        z        S Nr  r5         r   r   r   r  )r    r   ro  dotr  )r"   r   r   rotns       r   funcpz4TestCurveFit.test_curvefit_covariance.<locals>.funcpD  s    88bmS^Q? mR
]A>(* +D 88Ar!t,--r   c                    t        j                  dt        j                  d      z  dt        j                  d      z  dgdt        j                  d      z  dt        j                  d      z  dgg dg      }t        j                  | | z        }|j	                  t        j
                  || | z  |z  f      j                        S r	  )r    r   ro  r  r  r   r   )r"   r   r   r  r  s        r   jacpz3TestCurveFit.test_curvefit_covariance.<locals>.jacpJ  s    88bmS^Q? mR
]A>(* +D r!tA88BIIq1"q&1*o68899r   c                 :    |t        j                  | | z        z  S r   r  rC  s      r   rg   z3TestCurveFit.test_curvefit_covariance.<locals>.funcQ  r  r   c                     t        j                  | | z        }t        j                  || | z  |z  f      j                  S r   r  r  s       r   rD   z2TestCurveFit.test_curvefit_covariance.<locals>.jacT  r  r   r   r6   rK   r  r  r  r  r5   r
  r  r  r  r   g+i)+>r  )r]  r   )r    r   r   r  r  r/   r  r@   r   ro  r  r   r   r   )r   r  r  rg   rD   rs  r   rt  rX  r  r  ydatapcovarpr  r  rk  ry  rz  r=  r>  s                       r   test_curvefit_covariancez%TestCurveFit.test_curvefit_covarianceB  s   	.	:	$	0 			q		!QS!C"))**E
*;;;U$s*q! xx"RWWQZ-RWWQZ;RWWQZ-BGGAJ:$& ' %%$$TVV,;5JD$"/(ue5  Au(vV  Au  u6Fu6F #0 6r   rk  FTc           	          d }| j                   | j                  }}t        |||d|      \  }}t        |||t        j                  |d      |      \  }}t        j
                  ||k(        sJ y )Nc                     || z  |z   S r   r(   rC  s      r   rg   z5TestCurveFit.test_curvefit_scalar_sigma.<locals>.funcv      q519r   r5   )rX  rk  )r"   r   r   r    	full_liker   )r   rk  rg   r"   r   r  rz  r>  s           r   test_curvefit_scalar_sigmaz'TestCurveFit.test_curvefit_scalar_sigmat  sl    	 vvtvv1T1aqP5a",,q!"4^
5 vveun%%%r   c           	         t        j                  dd      }d|z  dz   dt        j                  |      z  z   }d }dD ]  }t         j                  t         j                  fD ]  }t         j                  t         j                  fD ]$  }|j                  |      }|j                  |      }& t        j                         5  t        j                  dt               t        ||||	      \  }}t        j                  |      j                         sJ t        j                  |d
      rJ 	 d d d          y # 1 sw Y   xY w)Nr  rb  rb   r3  rL   c                     || z  |z   S r   r(   rC  s      r   rg   z&TestCurveFit.test_dtypes.<locals>.func  rg  r   rh  errorr   r6   )r    r  r  r   r   astypewarningscatch_warningssimplefilterr   r   isfiniter   allclose)	r   r"   r   rg   r   dtxdtyr   covs	            r   test_dtypeszTestCurveFit.test_dtypes  s    IIb!ECK#bffQi-'	 .F

BJJ/JJ

3CAA 4 ,,.))'?C&tQ&AFAs;;s+//111!{{1a0000 /. 0 . /.s   >A*D66D?c                    d }t        j                  g d      }t        j                  g d      }t        j                  g d      }g d}t        j                  g d      } ||g| }t        ||||||f      \  }}	|j                  t         j                        } ||g| }t        ||||||f      \  }
}	t        |
|d	       y )
Nc                     ||z   dz  }||z
  dz  }||| |z
  z  z   |t        j                  | |z
  dz  |dz  dz  z         z  z   S )Nr5   rK   )r    ro  )r"   s_1s_2o_xo_yr   b_2b_1s           r   	hyperbolaz,TestCurveFit.test_dtypes2.<locals>.hyperbola  sW    9/C9/Cae$s277AcEA:1Q3F+G'GGGr   )g      rO          g      $rO   )rO   r3  r3  rO   g      $@)ggUUUUUU?r  g      rL   )r  g?r2  )iiirK   rK   rd         )r-   rs  rt  r   r  gh㈵>r   )r    r   r   r  r   r   )r   r0  min_fitmax_fitr^  paramsrs  rt  popt_64r  popt_32s              r   test_dtypes2zTestCurveFit.test_dtypes2  s    	H
 ((89((56:;&89%)&) %u'.&8:
 RZZ(%)&)%u'.&8:
 	t4r   c                 <   t        j                  d      }d|dz  z  d|z  z   t         j                  j                  t	        |            z   fd}dD ]E  }t        ||t        j                  |      |      \  }}t        ||d|      \  }}t        ||       G y )	Nr   g@r5   g      @c                 &    || dz  z  || z  z   z
  S r   r(   )r"   r   r   targets      r   fit_funcz/TestCurveFit.test_broadcast_y.<locals>.fit_func  s    qAv:A%..r   rh  )rs  rt  r   r   )r    r  r   randr/   r   
zeros_liker   )	r   rs  r?  r   popt0pcov0ry  rz  r>  s	           @r   test_broadcast_yzTestCurveFit.test_broadcast_y  s    		"uz!C%K/"))..U2LL	/-F$X+0+-==+?,24LE5 %X+0+,,24LE5 E5) .r   c                 |    d }t        t              5  t        |g dg ddgd       d d d        y # 1 sw Y   y xY w)Nc                     || z  |z   S r   r(   rC  s      r   rg   z.TestCurveFit.test_args_in_kwargs.<locals>.func  r  r   r   rb  r        r6   rl   )rs  rt  r   rQ   r  r   s     r   test_args_in_kwargsz TestCurveFit.test_args_in_kwargs  s5    	 :&d(*	! '&&s   2;c                 z    d }t        t        d      5  t        |g dg d       d d d        y # 1 sw Y   y xY w)Nc                 L    |t        j                  | | z        z  |z   |z   |z   S r   r  r"   r   r   r   dr  s         r   rg   z<TestCurveFit.test_data_point_number_validation.<locals>.func  s*    rvvqb1f~%)A-11r   zThe number of func parameters=r   r   rG  )rs  rt  )rd   re   r   r   s     r   !test_data_point_number_validationz.TestCurveFit.test_data_point_number_validation  s1    	2 9,LMd(*, NMMs   1:zignore::RuntimeWarningc                    d }t         j                  j                  d      }d}t        j                  |      }t        j                  dd|      |j                  |      z   }t        j                  |||d      \  }}t        j                  t        j                  |      dkD        sJ t        j                  |      d   }t        j                  |d	kD        sJ t        ||j                         y )
Nc                     |t        j                  | dz   |z         z  |t        j                  | dz   |z         z  z   |z   S Nr6   r    logrM  s         r   r-   z#TestCurveFit.test_gh4555.<locals>.f  s>    RVVAEAI&&266!a%!)+<)<<q@@r      MI9V$O-r   r5   rc  i rZ  r   g{Gz)r    r   default_rngr  r   r   r   r   r@   r   eighr   r   )	r   r-   rngrB   r"   r   r   r&  eigss	            r   test_gh4555zTestCurveFit.test_gh4555  s    	A ii##$67IIaLKK1a 3::a=0##Aq!F;3vvbggclQ&'''{{3"vvdUl###SUU#r   c                 $   t         j                  j                  d      }d }t        j                  ddd      } ||ddd      }d	|j	                  |j
                  
      z  }||z   }t        |||      \  }}g dg dg dg}	t        ||	d       y )NrU  c                 @    |t        j                  | | z        z  |z   S r   r  )r"   r   r   r   s       r   rg   z'TestCurveFit.test_gh4555b.<locals>.func  s     rvvqb1f~%))r   r   rK   r  r  r  rL   r  r  )gt^G?d*.X|?T}H)r]  g1x?u`v?)r^  r_  gon2f?gH׊>)r    r   rV  r   r  r  r   r   )
r   rX  rg   rs  r   y_noisert  r  r<  refs
             r   test_gh4555bzTestCurveFit.test_gh4555b  s     ii##$67	* Aq"%S#&




33G4.3MMMO 	S$'r   c                 0   t         j                  j                  d      }t        j                  ddd      }d|z  dz   |j	                  d      dz  z   }fd	fd
d _        d _        t        j                  ddg      }t        |||d       y )Nl   FjGb r   r~   e   r5   r6   r  rL   c                 v    t        j                  j                  |k(        rJ |_        | |d   z  |d   z   S r  )r    r   last_p)r"   r   lines     r   rg  z'TestCurveFit.test_gh13670.<locals>.line	  s;    vvdkkQ.///DKqt8ad?"r   c                     t        j                  j                  |k(        rJ |_        t        j                  | t        j                  |       g      j
                  S r   )r    r   rf  r   r   r   )r"   r   rD   s     r   rD   z&TestCurveFit.test_gh13670.<locals>.jac  sF    vvcjjAo...CJ88QQ01333r   r  g      @r   r  )r    r   rV  r   r  rf  r   r   )r   rX  r"   r   r   rD   rg  s        @@r   test_gh13670zTestCurveFit.test_gh13670   s    
 ii##$78KK1c"EAI


,s22	#
	4
 
XXsCj!$1b37r   N))r$   r%   r&   r   r@  rI  rP  r`  r{  r  r  r  staticmethodr  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r;  rD  rJ  rO  filterwarningsrZ  rb  ri  r(   r   r   r0  r0    s   -/ -- /&.1`J8> 1 18 [[X'>?
J @
J [[X'>?J @J [[S1a&)[[X'>?J @ *J %J$
P'( #D,""5H	.:60Gd [[-t}=
& >
&1*58* !, [[ 89$ :$&((8r   r0  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestFixedPointc                 >    d }d}t        ||      }t        |d       y )Nc                     d| z  S NrN   r(   rz   s    r   rg   z0TestFixedPoint.test_scalar_trivial.<locals>.func      q5Lr   r  rO   r   r   r   rg   rh   r"   s       r   test_scalar_trivialz"TestFixedPoint.test_scalar_trivial  s"    	b!As#r   c                 >    d }d}t        ||      }t        |d       y )Nc                     | dz  S r   r(   rz   s    r   rg   z/TestFixedPoint.test_scalar_basic1.<locals>.func%  r8  r   ?r  rr  rs  s       r   test_scalar_basic1z!TestFixedPoint.test_scalar_basic1#  s"    	b!As#r   c                 >    d }d}t        ||      }t        |d       y )Nc                     | dz  S NrL   r(   rz   s    r   rg   z/TestFixedPoint.test_scalar_basic2.<locals>.func-  s    c6Mr   rw  r  rr  rs  s       r   test_scalar_basic2z!TestFixedPoint.test_scalar_basic2+  s"    	b!As#r   c                     d }ddg}t        j                  d      5  t        ||      }d d d        t        ddg       y # 1 sw Y   xY w)Nc                     d| z  S rp  r(   rz   s    r   rg   z/TestFixedPoint.test_array_trivial.<locals>.func4  rq  r   g333333?g333333?ignorer   rO   )r    errstater   r   rs  s       r   test_array_trivialz!TestFixedPoint.test_array_trivial3  sD    	4[[[X&D"%A 'ASz* '&s   AAc                     d }t        g d      }g d}t        j                  d      5  t        |||f      }d d d        t	        d|z         y # 1 sw Y   xY w)Nc                     || dz  z  S r   r(   r"   r   s     r   rg   z.TestFixedPoint.test_array_basic1.<locals>.func=  s    q!t8Or   g      ?r  g      ?)皙?gffffff?g?r  r  rm   r  )r   r    r  r   r   r   rg   r   rh   r"   s        r   test_array_basic1z TestFixedPoint.test_array_basic1;  sO    	#$[[X&D"A40A 'As1u% '&s   AAc                 h    d }t        g d      }g d}t        |||f      }t        ||dz         y )Nc                     || dz  z  S r{  r(   r  s     r   rg   z.TestFixedPoint.test_array_basic2.<locals>.funcG  s    q#v:r   r  )g?r  r  rm   r5   )r   r   r   r  s        r   test_array_basic2z TestFixedPoint.test_array_basic2E  s5    	#$bt,Aq!t$r   c                     t        d dddd      }t        |t        j                  d|z        dz         t        |t	        d	      d
z         y )Nc                 8    t        j                  d| z        dz  S )Nr1  rN   r  )xxs    r   r.   z.TestFixedPoint.test_lambertw.<locals>.<lambda>P  s    tBw(;r   r  r(   g-q=i  )rQ   xtolmaxiterr1  rN   r6   r5   )r   r   r    r  r   )r   xxroots     r   test_lambertwzTestFixedPoint.test_lambertwN  sF    ;SeS2tF{ 3C 78A.r   c                     ddd}d}|dz
  |z  z  |z  d|dz
  z  z  z  fd}t        ||d      }t        ||       y )	Nr5   r  r  gjt?r6   c                 ~    t        j                  z  | z        t        j                  | z  | dz
  z        z  dz   S rR  rS  )rB   i0klkss    r   rg   z1TestFixedPoint.test_no_acceleration.<locals>.func]  s8    66"R%'?RVVBqD!a%L%99A==r   	iterationr   )r   r   )r   mn0rg   rB   r  r  r  s        @@@r   test_no_accelerationz#TestFixedPoint.test_no_accelerationU  s]    sAg2a1ac7++	> b51r   N)r$   r%   r&   rt  rx  r|  r  r  r  r  r  r(   r   r   rm  rm    s*    $$$+&%/r   rm  )-r'   r  r   numpy.testingr   r   r   r   r   r   r	   r
   rd   numpyr    r   r   multiprocessing.poolr   scipyr   r   scipy.specialr   scipy.optimize._minpack_pyr   r   r   scipy.optimizer   scipy.optimize._minimizer   r   r*   r3   r>   rE   rG   rI   r   r   r   r   r0  rm  r(   r   r   <module>r     s     < < < +    + " " F F * +# #+>.<
i5 i5X; ;@; ;) )*W. W.ta	8 a	8HH Hr   