
    ^Mh)                        d Z ddl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-dS )!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dS )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                     || _         d S N)shape)selfr   s     a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/optimize/tests/test_minpack.py__init__zReturnShape.__init__   s    


    c                 4    t          j        | j                  S r   )nponesr   )r   xs     r   __call__zReturnShape.__call__!   s    wtz"""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     75>>r   c                     t          t          |                     5 }|                    d |           cd d d            S # 1 swxY w Y   d S )Nc                      |             S r   r(   )fs    r   <lambda>z#sequence_parallel.<locals>.<lambda>.   s    !!## r   )r   lenmap)fspools     r   sequence_parallelr3   ,   s    	CGG		 +xxr**+ + + + + + + + + + + + + + + + + +s   AAAc                     || dz  z  }t          j        |dd         |d         z
  |                                 |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>   5   sJ    4 	
JMA
	1QRR51Q4<!1!1D!89::AHr   c                 P   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   T   s     	JAGJqrrNQ&122.Z]1BQqT1IIJJE
(Aq6

CaiC1dqsd
OC1ac	N'!**C!QQQKJr   c                 F    t          | ||          t          | ||          fS r   )r>   rE   )r9   r:   r;   s      r   pressure_network_fun_and_gradrG   k   s*    Zq11%j$::< <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S )
TestFSolvec                 
   t          j        dd          }d}t          g d          }t          j        t
          |||fd          \  }}}}t          |t          j        d                     t          |dk    |           d S )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_gradientq   s    GAsOO...//'/m4)( ( ($T3 	"+rwqzz:::q$r   c                     t          j        dd          }d}t          g d          }t          j        t
          |||ft                    }t          |t          j        d                     d S )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|   sn    GAsOO...//om4),. . . 	"+rwqzz:::::r   c                 n    t          d          }ddg}t          t          t          j        ||           d S Nr6         ?rN   r   assert_raises	TypeErrorr   rT   r   funcx0s      r   test_wrong_shape_func_callablez)TestFSolve.test_wrong_shape_func_callable   s4    1~~ 3Zi$;;;;;r   c                 ^    ddg}t          t          t          j        t          |d           d S 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OOOOOOr   c                     t          d          }t          d          }t          t          t          j        |ddg|           d S )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TTTTTTr   c                 \    d }d }t          t          t          j        |ddg|           d S )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   sE    	' 	' 	'	) 	) 	)i$Aa5TTTTTTr   c                     d }t          t          d          5  t          j        |dg           d d d            d S # 1 swxY w Y   d S )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88 	* 	*ODaS))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*   ?AAc                     d }d }t          t          d          5  t          j        |dg|           d d d            d S # 1 swxY w Y   d S )Nc                 2    | t          j        dg          z
  S N
   r    r   rz   s    r   rg   z,TestFSolve.test_Dfun_can_raise.<locals>.func       rx~~%%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   s    	& 	& 	&	) 	) 	) :Z888 	= 	=ODaS<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=   AA
Ac                     d }t          j        |t          j        ddgt          j                            }t           ||          ddgd           d S )Nc                 p    t          j        | d         dz
  | d         dz
  gt           j                  dz  S )Nr   d   r6     dtyper5   )r    r   float32rz   s    r   rg   z%TestFSolve.test_float32.<locals>.func   s3    8QqTCZ15RZHHHAMMr   r6   r   MbP?atol)r   rT   r    r   r   r   )r   rg   ps      r   test_float32zTestFSolve.test_float32   s^    	N 	N 	NOD"(Aq62:">">??Q!Qd333333r   c                      fd}t          j        dd          }d}t          g d          }t          j        ||||fd          \  }}}}t          |t          j        d                     t          |dk    |           d S )Nc                  >                                      t          |  S r   )rZ   r>   rQ   r   s    r   rg   z,TestFSolve.test_reentrant_func.<locals>.func   s     2244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   s    	+ 	+ 	+ 	+ 	+
 GAsOO...//'/-tQi( ( ($T3 	"+rwqzz:::q$r   c                       fd}t          j        dd          }d}t          g d          }t          j        t
          |||f|          }t          |t          j        d                     d S )Nc                  >                                      t          |  S r   )r_   rE   r   s    r   rt   z3TestFSolve.test_reentrant_Dfunc.<locals>.deriv_func   s     4466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   s    	4 	4 	4 	4 	4
 GAsOO...//om4)   	"+rwqzz:::::r   c                 l    t          | j        gdz            }t          d |D                       sJ d S )Nr   c                     g | ]}|d u S r   r(   .0results     r   
<listcomp>z:TestFSolve.test_concurrent_no_gradient.<locals>.<listcomp>       333vFdN333r   )r3   rZ   allr   vs     r   test_concurrent_no_gradientz&TestFSolve.test_concurrent_no_gradient   sC    tEFKLL333334444444r   c                 l    t          | j        gdz            }t          d |D                       sJ d S )Nr   c                     g | ]}|d u S r   r(   r   s     r   r   z<TestFSolve.test_concurrent_with_gradient.<locals>.<listcomp>   r   r   )r3   r_   r   r   s     r   test_concurrent_with_gradientz(TestFSolve.test_concurrent_with_gradient   sC    tGH2MNN333334444444r   N)r$   r%   r&   rZ   r_   ri   ro   ru   r   r   r   r   r   r   r   r   r(   r   r   rI   rI   p   s        	  	  	 ; ; ;< < <P P PU U U
U U U* * *= = =4 4 4     ; ; ;5 5 55 5 5 5 5r   rI   c                        e Zd Zd Zd Zd ZdS )TestRootHybrc                     t          j        dd          }d}t          g d          }t          j        t
          |d||f          j        }t          |t          j        d                     d S )NrK   rL   rM   hybrmethodrQ   	r    rS   r   r   rootr>   r"   r   r!   r^   s        r   rZ   z.TestRootHybr.test_pressure_network_no_gradient   su    GAsOO...//m$4m+1q	C C CCD 	!+rwqzz:::::r   c                     t          j        dd          }d}t          g dg          }t          j        t
          |||fdt                    j        }t          |t          j	        d                     d S )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}    GAsOO///011m$4m*.6(AC C CCD 	 	"+rwqzz:::::r   c                     t          j        dd          }d}t          g d          }t          j        t
          |||fdd          j        }t          |t          j        d                     d S )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   sy     GAsOO...//m$A$1q	+1t= = ==> 	 	"+rwqzz:::::r   N)r$   r%   r&   rZ   r_   r   r(   r   r   r   r      sA        ; ; ;; ; ;	; 	; 	; 	; 	;r   r   c                       e Zd Zd ZdS )
TestRootLMc                     t          j        dd          }d}t          g d          }t          j        t
          |d||f          j        }t          |t          j        d                     d S )NrK   rL   rM   lmr   r   r^   s        r   rZ   z,TestRootLM.test_pressure_network_no_gradient   su    GAsOO...//m$4m+/tQiA A AAB 	!+rwqzz:::::r   N)r$   r%   r&   rZ   r(   r   r   r   r      s#        ; ; ; ; ;r   r   c                   l    e Zd Zd Zd Zej                            dg d          d             Zd Z	dS )TestNfevc                 6    t          j                    | _        d S r   )	threadinglocalnfevr   s    r   setup_methodzTestNfev.setup_method  s    O%%			r   c                 ~    t          | j        d          sd| j        _        | j        xj        dz  c_        |dz  dz
  S )Ncr   r6   r5   r~   )hasattrr   r   )r   ys     r   zero_fzTestNfev.zero_f  s>    ty#&& 	DIK	q!tAvr   r   )
r   r   broyden1broyden2andersonlinearmixingdiagbroydenexcitingmixingkrylovzdf-sanec                     d| j         _        t          j        | j        d|          }|j         | j         j        k    sJ d S )Nr   r   r   )r   r   r   r   r   )r   r   solutions      r   test_root_nfevzTestNfev.test_root_nfev  sB     	=c&AAA}	++++++r   c                     d| j         _        t          j        | j        dd          \  }}}}|d         | j         j        k    sJ d S )Nr   r   T)rR   r   )r   r   r   rT   r   )r   r"   rW   rX   rY   s        r   test_fsolve_nfevzTestNfev.test_fsolve_nfev  sK    	%_T[#4PPP4dF|ty{******r   N)
r$   r%   r&   r   r   pytestmarkparametrizer   r   r(   r   r   r   r     s        & & &   [X (3 (3 (3 4 4
, ,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dS )TestLeastSqc                    t          j        ddd          }d\  }}}|| _        |||f| _        ||dz  z  ||z  z   |z   }t           j                            d           |dt           j                            |j                  z  z   | _        d S )Nr   r   (   )g@*   g33333sr5   g{Gz?)	r    linspacer"   abcrandomseedstandard_normalr   y_meas)r   r"   abr   y_trues         r   r   zTestLeastSq.setup_method"  s    K2r""!AQq51a4!A#!
	qtBI$=$=fl$K$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                 f    t          j        |dz  |t          j        |          g          j         S r   )r    vstack	ones_likeT)r   _p_yr"   s       r   residuals_jacobianzTestLeastSq.residuals_jacobian0  s+    	1a4BLOO455777r   c                     t          g d          }t          | j        || j        | j        f          \  }}t          |dv d|z             t          || j        d           d S )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_basic3  ss    777^^!$."(,TV'<> > >
Cy "?#"EFFF!*dhBBBBBBr   c                     t          g d          }t          | j        || j        | j        f| j                  \  }}t          |dv d|z             t          || j        d           d S )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_gradient;  s~    777^^!$."(,TV'<'+'>@ @ @
C 	y "?#"EFFF!*dhBBBBBBr   c                     t          g dg          }t          | j        || j        | j        fd          }|\  }}}}}t          |dv d|            d S )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_outputD  st    GGG9dnb$(K#8*.0 0 0 2=.
E8T3y "?"?"?@@@@@r   c                     t          g dt                    }t          |d          }t          | j        || j        | j        fd          }|\  }}}}}t          |dv d|            t          ||           d S )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_untouchedL  s    777)))&&&dnb$(K#8*.0 0 0 2=.
E8T3y "?"?"?@@@2w'''''r   c                 n    t          d          }ddg}t          t          t          j        ||           d S ra   r   rd   re   r   r   rf   s      r   ri   z*TestLeastSq.test_wrong_shape_func_callableV  s5    1~~ 3Zi!14<<<<<r   c                 ^    ddg}t          t          t          j        t          |d           d S rk   )rd   re   r   r   r*   rn   s     r   ro   z*TestLeastSq.test_wrong_shape_func_function]  s/     3Zi!1:rPPPPPPr   c                     t          d          }t          d          }t          t          t          j        |ddg|           d S )Nr6   rq   r   rh   r  r  rs   s      r   test_wrong_shape_Dfun_callablez*TestLeastSq.test_wrong_shape_Dfun_callablec  s@    1~~ ''
i!14QqE
SSSSSSr   c                 \    d }d }t          t          t          j        |ddg|           d S )Nc                 "    t          | d          S rx   ry   rz   s    r   rg   z8TestLeastSq.test_wrong_shape_Dfun_function.<locals>.funci  r{   r   c                 "    t          | d          S r}   ry   rz   s    r   rt   z>TestLeastSq.test_wrong_shape_Dfun_function.<locals>.deriv_funck  r   r   r   r6   r  rd   re   r   r   rs   s      r   test_wrong_shape_Dfun_functionz*TestLeastSq.test_wrong_shape_Dfun_functionh  sF    	' 	' 	'	) 	) 	)i!14QqE
SSSSS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                                  d	 ||||          dz                                  z  k                d S )
Nc                     | 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>.funcq  sK    !RVa!fq[L#adAg+67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_float32o  s   	 	 	 H   %'Z1 1 1H $ $ $+-:7 7 7X'''((&tRqe<<<G9$%%%b1q%%''$$$r!A,,/1F1F1H1H*HHIIIIIr   c                     d }t          t          d          5  t          j        |dg           d d d            d S # 1 swxY w Y   d S )Nc                       t          d          r   r   rm   s    r   rg   z-TestLeastSq.test_func_can_raise.<locals>.func  r   r   r   r   r   r   rd   r   r   r   r   s     r   r   zTestLeastSq.test_func_can_raise  s    	) 	) 	) :Z888 	+ 	+Tqc****	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+r   c                     d }d }t          t          d          5  t          j        |dg|           d d d            d S # 1 swxY w Y   d S )Nc                 2    | 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  s    	& 	& 	&	) 	) 	) :Z888 	< 	<Tqc
;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r   c                       fd}t          g d          }t          || j         j        f          \  }}t	          |dv d|z             t          | j        d           d S )Nc                  @                                       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  s    	) 	) 	) 	) 	) 777^^!$(,TV'<> > >
Cy "?#"EFFF!*dhBBBBBBr   c                       fd}t          g d          }t           j        | j         j        f|          \  }}t          |dv d|z             t          | j        d           d S )Nc                  @                                       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  s    	2 	2 	2 	2 	2 777^^!$."(,TV'<'13 3 3
C 	y "?#"EFFF!*dhBBBBBBr   c                 l    t          | j        gdz            }t          d |D                       sJ d S )Nr   c                     g | ]}|d u S r   r(   r   s     r   r   z;TestLeastSq.test_concurrent_no_gradient.<locals>.<listcomp>  r   r   )r3   r	  r   r   s     r   r   z'TestLeastSq.test_concurrent_no_gradient  sB    t/"455333334444444r   c                 l    t          | j        gdz            }t          d |D                       sJ d S )Nr   c                     g | ]}|d u S r   r(   r   s     r   r   z=TestLeastSq.test_concurrent_with_gradient.<locals>.<listcomp>  r   r   )r3   r  r   r   s     r   r   z)TestLeastSq.test_concurrent_with_gradient  sC    t<=BCC333334444444r   c                     d }t          t          d          5  t          j        |ddg           d d d            d S # 1 swxY w Y   d S )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 P P 	. 	.Tq!f----	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   A  AAN)r$   r%   r&   r   r   r   r	  r  r  r  ri   ro   r  r!  r   r   r   r   r4  r   r   r;  r(   r   r   r   r   !  sO       L L L  
8 8 8C C CC C CA A A( ( (= = =Q Q QT T T
T T TJ J J + + +< < <
C 
C 
CC C C5 5 55 5 5. . . . .r   r   c                   >   e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j        j        d             Zd	 Zed
             Ze
j                            dg d          d             Ze
j                            dg d          d             Ze
j                            dddg          e
j                            dg d          d                         Zd Zd Zd Zd Zd Zd Zd Zd Zd Ze
j                            dg d          d             Zd Zd  Z e
j                            d!d"d#g          d$             Z!d% Z"d& Z#d' Z$d( Z%d) Z&e
j        '                    d*          d+             Z(d, Z)d- Z*e
j                            dd.d/g          d0             Z+d1S )2TestCurveFitc                 ^    t          g d          | _        t          g d          | _        d S )N)r'  g	@      #@gffffff+@)r'  rN         @g      @)r   r   r"   r   s    r   r   zTestCurveFit.setup_method  s2    ,,,--+++,,r   c                    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          ||           d S )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    	 	 	tTVTV44
dD		Q
e#$$$DGVQ7777DIvq9999 dfdf$%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           d S )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   rF  rG  s       r   test_two_argumentzTestCurveFit.test_two_argument  s    	 	 	tTVTV44
dD		Q
e#$$$!$(8!DDD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           d S )Nc                       e Zd ZdZd ZdS )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_selfrX    s-                  r   rZ  rq   rP  rQ  rK   r  rR  rS  rT  )r   rg   r"   r   r   r   r   )r   rZ  test_self_instrF  rG  s        r   test_func_is_classmethodz%TestCurveFit.test_func_is_classmethod  s    	  	  	  	  	  	  	  	  #~2DFDFCC
d
e#$$$!$(8!DDDD!$&'):Wf<M(N*+	- 	- 	- 	- 	- 	-r   c                 ~    g d}g d}g d}g d}d }t          ||||d          \  }}t          ||d	           d S )
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@r_  g29l?r^  )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  sf    rv"qyj"UAX+6777!B$
BuaxK 8999:<=> ?r   i'  maxfevgh㈵>rtol)r   r   )r   r"   r   guessgoodre  rF  rG  s           r   test_regression_2639z!TestCurveFit.test_regression_2639  s      # # #/ / // / /	? 	? 	? ~q!U5III
dd......r   c           
      d   t          j        g d          }t          j        g d          }t          j        g d          }d }dD ][}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           ]d }
t          j        t           j        gdz                                dd          }t                      5 }|	                    t          d           t          |
||ddg|          \  }}t          ||d d         |d d         ddg          \  }}d d d            n# 1 swxY w Y   t          |j        dk               t          ||           t          |j        dk               t          ||           d S )N)r   r6   r5   r~   rK      )r6   r6   rn           )r6   r5   r6   r5   r6   r5   c                     || z  |z   S r   r(   rO  s      r   r-   z!TestCurveFit.test_pcov.<locals>.f      Q37Nr   r   trfdogboxr5   r   )r  rd  r   gN"q?g~uM/N?r   rh  r~   T)r  rd  absolute_sigmar   gO=N?g5=`6?g[u|?g-/i@c                     || z  S r   r(   rO  s      r   f_flatz&TestCurveFit.test_pcov.<locals>.f_flat  s    Q3Jr   rK   z3Covariance of the parameters could not be estimatedr  rd  r  rq   )r    r   r   sqrtr@   r   infreshaper	   filterr   r   r   r   )r   xdataydatard  r-   r   rF  rG  perr_scaledperrry  pcov_expectedsuppopt1pcov1s                  r   	test_pcovzTestCurveFit.test_pcov  sG   +++,,,,,--+++,,	 	 	 . 	K 	KF"1eU1vU*02 2 2JD$'"'$--00KK*j)AMMMM"1eU1vQuW*02 2 2JD$'"'$--00KK*j)AMMMM"1eU1vU26vG G GJD$7274==))DD:z":FFFF"1eU1vQuW26vG G GJD$7274==))DD<">TJJJJJ	 	 	 "&!,,44Q::   	ICJJLN N N"65%QF%PPPJD$$Qbqb	5!9!QHHHLE5		I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	
f$%%%4///v%&&&5-00000s   ,AIIIc                 n    d }g d}g d}t          t          |||          d         ddgd           d S )	Nc                     || z  |z   S r   r(   rO  s      r   f_linearz.TestCurveFit.test_array_like.<locals>.f_linear/  rs  r   r  )r~   rn  ro  	   r   r5   r6   g|=r   )r   r   )r   r  r"   r   s       r   test_array_likezTestCurveFit.test_array_like-  sU    	 	 	 LLLL	(Aq11!4q!f5IIIIIIr   c                     t          j        g d          }t          j        g d          }t          t          t          d ||           d S )N)r6   r5   r~   rK   rn     )r6   r5   r~   rK   g      @r  c                     || z  S r   r(   rO  s      r   r.   z<TestCurveFit.test_indeterminate_covariance.<locals>.<lambda><  s
    QqS r   )r    r   r   r   r   r   r  r  s      r   test_indeterminate_covariancez*TestCurveFit.test_indeterminate_covariance6  sZ     +++,,---.._i((%	8 	8 	8 	8 	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 d S )	Nr6   r~   r6   r5   r~   c                     || z  |z   S r   r(   rO  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>F      acAg r   c                     || z  |z   S r   r(   rO  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>H  r  r   c                     || z  |z   S r   r(   rO  s      r   r.   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>J  s    QqS1W r   rE  T)r    r   nanrd   r   r   r  s      r   test_NaN_handlingzTestCurveFit.test_NaN_handling>  s     !RVQ((##j)--ue	= 	= 	=j)--ue	= 	= 	= 	j)-D-DU	> 	>'5t&<	> 	> 	> 	> 	>r   c                    | |||dd}d}t          t          |          5  t          di |ddd d d d            n# 1 swxY w Y   t          t          d          5  t          di |d	d
i d d d            n# 1 swxY w Y   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            d S # 1 swxY w Y   d S )NF)r-   r  r  r   rE  z;`nan_policy='propagate'` is not supported by this function.r   	propagatei  )
nan_policyrg  zThe input contains nanr  raiseomitr  r  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_policyM  sE    >N"E; ;)	:Y777 	E 	EDDD;tDDDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E :-EFFF 	4 	4333373333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 'CCCCFCCC+w+w ) 3 3F 3 3A);<<<:	:Y777 	1 	1000040000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1s3   ?AA A==BBC::C>C>r   rt  c                 <   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	          }|                     ||||||           d S )
Nc                     || z  |z   S r   r(   rO  s      r   r-   z*TestCurveFit.test_nan_policy_1d.<locals>.fl  rs  r   r5   r~   rK   r6   rn  ro  )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_1dj  s    	 	 	 1aArv">??1aArvq"9::HYYY//HYYY//q.2C-/@&	J 	J 	J 	J 	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          }|                     ||||||           d S )Nc                 H    | dd d f         }| dd d f         }||z  |z   |z   S Nr   r6   r(   r"   r   r   ra  x2s        r   r-   z*TestCurveFit.test_nan_policy_2d.<locals>.fy  s6    1aaa4B1aaa4BR4!8b= r   r5   r~   rK   rn  ro  r6   r   r5   r~   rn  r5   r~   ro  r6   r5   r   r  r  s          r   test_nan_policy_2dzTestCurveFit.test_nan_policy_2dw  s    	! 	! 	!
 Aq"&!Q#B$%q"&"&!RVQ#G#I J J1aArvq""=>>Hiii%;<<HZZZ00q.2C-/@&	J 	J 	J 	J 	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|                                n|}t          j        ddddt           j        ddg          }t          j        g d	g d
gg          }t          j        g d          }|                     ||||||           d S )Nc                     | ddd d f                                          }| ddd d f                                          }||z  |z   |z   S )N.r   r6   )squeezer  s        r   r-   z,TestCurveFit.test_nan_policy_2_3d.<locals>.f  sR    31119%%''B31119%%''BR4!8b= r   r5   r~   rK   rn  ro  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261a$C$%q"&"&!RVQ#G$I #J K K56!VV//1111aArvq""=>>Hyyy)))&<%=>>HZZZ00q.2C-/@&	J 	J 	J 	J 	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           d S )	Nc                     || z  S r   r(   rC  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  
    !A# r   c                     || z  S r   r(   rC  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   )r6   r5   )boundsc                     || z  S r   r(   rC  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r6   c                     || z  S r   r(   rC  s     r   r.   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r5   rd   r   r   r   s    r   test_empty_inputszTestCurveFit.test_empty_inputs  s    j)-=-=r2FFFj)-=-=r2#	% 	% 	% 	%j)-=-=sBGGGj)-=-=sB#	% 	% 	% 	% 	% 	%r   c                 J    t          t          t          d ddgddg           d S )Nc                     | S r   r(   rz   s    r   r.   z8TestCurveFit.test_function_zero_params.<locals>.<lambda>  s    q r   r6   r5   r~   rK   r  r   s    r   test_function_zero_paramsz&TestCurveFit.test_function_zero_params  s(    j)[[1a&1a&IIIIIr   c                 |    t          d d dt          j        d          z            \  }}t          |dg           d S )Nc                 0    |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   rF  rG  s      r   test_None_xzTestCurveFit.test_None_x  sE    ==#Q2%68 8
drd#####r   c                     d }t          j        ddd          } ||dd          }dD ]*}t          ||||          \  }}t          |ddg           +t	          t
          t          |||d           d S )	Nc                 8    |t          j        | | z            z  S r   r$  rO  s      r   r-   z,TestCurveFit.test_method_argument.<locals>.f      rvqbd||##r   r   r6      rN   ru  rv  r   Nr   unknown)r    r   r   r   rd   r   )r   r-   r  r  r   rF  rG  s          r   test_method_argumentz!TestCurveFit.test_method_argument  s    	$ 	$ 	$ Aq"%%%R  3 	, 	,F"1eU6BBBJD$D2r(++++j)QuYOOOOOOr   c                 :   d }t          j        ddd          } ||dd          }dD ]q}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 sJ rd S )Nc                 8    |t          j        | | z            z  S r   r$  rO  s      r   r-   z(TestCurveFit.test_full_output.<locals>.f  s    rvqb1f~~%%r   r   r6   r  rN   r  T)r   rR   r   fvecr   fjacipvtqtfr  )r    r   r   r   
isinstancestr)
r   r-   r  r  r   rF  rG  r  rK  rX   s
             r   r  zTestCurveFit.test_full_output  s   	& 	& 	& Aq"%%%R  3 	' 	'F095%D1B 1B 1B-D$&#D2r(+++X%%%%X%%%%~~))))))))((((fc*****,&&&&&	' 	'r   c           	         d }t          j        ddd          } ||dd          }ddg}ddg}||f}t          ||          }d	D ]V}t          |||||
          \  }	}
t	          |	d         d           t          |||||
          \  }}t	          ||	           Wt          |||dddgdt           j        gf          \  }	}
t	          |	d         d           t          t          t          ||||d
           d S )Nc                 8    |t          j        | | z            z  S r   r$  rO  s      r   r-   z#TestCurveFit.test_bounds.<locals>.f  r  r   r   r6   r  rN   r'  rb   r@  )Nru  rv  )r  r   ru  rO   g333333?)r   r  r   )r    r   r   r   r   r}  rd   r   )r   r-   r  r  lbubr  bounds_classr   rF  rG  
popt_class
pcov_classs                r   test_boundszTestCurveFit.test_bounds  sb   	$ 	$ 	$ Aq"%%%R   !W2Y bb"~~- 	. 	.F"1eU6*02 2 2JD$DGS)))%.q%6B6<&> &> &>"J
 J---- q%u(*Awbf&>@ @ @
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 ]Z}t	          |||dt           j        z  	          \  }}t	          |||dt           j        z  ||
          \  }}t          ||           [d S )Nc                 0    t          j        | |z             S r   )r    sinrC  s     r   r-   z&TestCurveFit.test_bounds_p0.<locals>.f  s    6!a%== r   r5   r   r~   ru  rv  g @r{  r  r  r   )r    r   pir  r   r   )	r   r-   r  r  r  r   popt_1r  popt_2s	            r   test_bounds_p0zTestCurveFit.test_bounds_p0  s    	! 	! 	! BruHagr22uru*a"%i(' 	, 	,F!!UEc"%i@@@IFA!!UEc"%i)/@ @ @IFA FF++++	, 	,r   c           	         d }d }t          j        ddd          } ||dd          }dD ]0}dD ]+}t          |||||	          \  }}t          |d
d
g           ,1dD ]+}t          |||||          \  }}t          |d
d
g           ,d|d<   t          j        |j        d                   }	d|	d<   dD ].}t          ||||	||          \  }}t          |d
d
gd           /d S )Nc                 8    |t          j        | | z            z  S r   r$  rO  s      r   r-   z TestCurveFit.test_jac.<locals>.f  r  r   c                 v    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  6    r!tA9a!a!_--//r   r   r6   r  rN   r  )z2-pointz3-pointcs)rD   r   r5   rt  r   rD   r   rn     )rd  r   rD   r   rh  )r    r   r   r   r!   r   )
r   r-   rD   r  r  r   schemerF  rG  rd  s
             r   test_jaczTestCurveFit.test_jac  sp   	$ 	$ 	$	0 	0 	0 Aq"%%%R   ( 	. 	.F6 . .&q%F.46 6 6
dq!f----. . 	* 	*F"1eU6sKKKJD$D1a&)))) aA''a- 	5 	5F"1eU%'*, , ,JD$ D1a&t44444	5 	5r   c                     t          j        dd          }d|z  }t          d ||dd          \  }}t          d ||dd	          \  }}t          |dd
           t          |dd
           d S )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  rg  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   r  r  rI  s         r   test_maxfev_and_boundsz#TestCurveFit.test_maxfev_and_bounds#  s     IaaC__a6#NNNq__a6CPPPqqu----qu------r   	sigma_dim)r   r6   r5   c                    d }t           j                            d          }d}t          j        dd|          } ||dd          }|dk    rd	}||                    d||          z  }n|dk    r |d	z  }||                    d||          z  }n_|d
k    rO|                    dd
||f          }||j        z  }||                    t          j        |          |          z  }n
J d            ddg}	|                    |d          }
|                    |d          }t           j	        ||
<   t           j	        ||<   t          ||||	|d          \  }}t          j        t          j        |
|f                    }t          j        ||d          }t          j        ||d          }t          j        |          }|j        dk    rt          j        ||          }n9|j        d
k    r.t          j        ||d          }t          j        ||d          }t          ||||	|          \  }}t!          ||d           t!          ||d           d S )Nc                 6    |t          j        || z            z  S r   r$  rO  s      r   exponentialz7TestCurveFit.test_curvefit_omitnan.<locals>.exponential0  s    rva!e}}$$r   l   lt*G7 r   r6   r   皙?rL   r   g?r5   Fz1The sigma must be a scalar, 1D array or 2D array.g?r'  rn  sizer  )r  rd  r  )axisrz  r  r   )r    r   default_rngr   normalr   multivariate_normal
zeros_likeintegersr  r   uniqueconcatenatedeleteasarrayndimr   )r   r  r  rngNr"   r   rd  r   r  i_xi_yres_optres_covi_deleteref_optref_covs                    r   test_curvefit_omitnanz"TestCurveFit.test_curvefit_omitnan.  s|   	% 	% 	% i##O44K2q!!K3$$NNEAua(((AA1nnHEAua(((AA1nn

1a!Q((AGE((q)9)95AAAAAMMMMM3Z ll11l%%ll11l%% ##$[!Q2U068 8 8
 9R^S#J7788Ia***Ia***
5!!:??IeX..EEZ1__IeXA666EIeXA666E$[!Q2UKKKu5555u555555r   c           
      <   d }d }t           j                            d           t          j        ddd          } ||dd          }|dt           j                            t          |          	          z  z   }t          j        t          |                    dz   }t          j        |d
z            }||fdfD ]^\  }}	dD ]V}
t          ||||||
          \  }}t          |||||	|
          \  }}t          ||d           t          ||d           W_d S )Nc                 8    |t          j        | | z            z  S r   r$  rO  s      r   rg   z9TestCurveFit.test_curvefit_simplecovariance.<locals>.funcg  r  r   c                 v    t          j        | | z            }t          j        || | z  |z  f          j        S r   r  r  s       r   rD   z8TestCurveFit.test_curvefit_simplecovariance.<locals>.jacj  r  r   r   rK   2         @?r  r  r5   NNFTrd  rD   rw  r  r   )
r    r   r   r   r  r/   zerosr@   r   r   )r   rg   rD   r  r   r  rd  covarjac1jac2rw  r  r  rI  rJ  s                  r   test_curvefit_simplecovariancez+TestCurveFit.test_curvefit_simplecovariancee  sj   	$ 	$ 	$	0 	0 	0 		qAq"%%DS!!C")**E

*;;;;U$$s*q!!:|4 	: 	:JD$"/ : :(ue5  A  A  Au(ue5  A  A  Au  u59999u599999:	: 	:r   c           
         d }d }d }d }t           j                            d          }t          j        dd          } ||dd	          }|d
|                    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                  }||fdfD ]`\  }}dD ]X}t          ||||	||          \  }}t          ||||||          \  }}t          ||dd           t          ||dd           Yad S )Nc                 D   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            z            S Nr'  r5         r   r   r   r'  )r    r   r|  dotr%  )r"   r   r   rotns       r   funcpz4TestCurveFit.test_curvefit_covariance.<locals>.funcp  s    8b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            }|                    t          j        || | z  |z  f          j                  S r/  )r    r   r|  r%  r2  r   r   )r"   r   r   r3  r  s        r   jacpz3TestCurveFit.test_curvefit_covariance.<locals>.jacp  s    8bmS^Q? mR

]A>([[* + +D r!tA88BIq1"q&1*o668999r   c                 8    |t          j        | | z            z  S r   r$  rO  s      r   rg   z3TestCurveFit.test_curvefit_covariance.<locals>.func  r  r   c                 v    t          j        | | z            }t          j        || | z  |z  f          j        S r   r  r  s       r   rD   z2TestCurveFit.test_curvefit_covariance.<locals>.jac  r  r   r   r6   rK   r#  r'  r  r  r5   r0  r1  r%  r&  r'  g+i)+>r  )ri  r   )r    r   RandomStater  r  r/   r(  r@   r   r|  r2  r   r   r   )r   r4  r6  rg   rD   r  r  r   r  rd  r)  r3  ydatapcovarpr*  r+  rw  r  r  rI  rJ  s                        r   test_curvefit_covariancez%TestCurveFit.test_curvefit_covariance  s   	. 	. 	.	: 	: 	:	$ 	$ 	$	0 	0 	0 i##A&&	!QDS!!C#**#e***5555U$$s*q!! x"RWQZZ-RWQZZ;RWQZZ-BGAJJ:$& ' ' %%$$TV,,;5 	G 	GJD$"/ G G(ue5  A  A  Au(vV  A  A  Au  u6FFFFu6FFFFFG	G 	Gr   rw  FTc           	          d }| j         | j        }}t          |||d|          \  }}t          |||t          j        |d          |          \  }}t          j        ||k              sJ d S )Nc                     || z  |z   S r   r(   rO  s      r   rg   z5TestCurveFit.test_curvefit_scalar_sigma.<locals>.func      q519r   r5   )rd  rw  )r"   r   r   r    	full_liker   )r   rw  rg   r"   r   r  r  rJ  s           r   test_curvefit_scalar_sigmaz'TestCurveFit.test_curvefit_scalar_sigma  s    	 	 	 vtv1T1aqPPP5a",q!"4"4^
 
 
5 veun%%%%%%%r   c           	      v   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 ],}|                    |          }|                    |          }-t          j                    5  t          j        dt                     t          ||||	          \  }}t          j        |                                          sJ t          j        |d
          rJ 	 d d d            n# 1 swxY w Y   d S )Nr  rn  rb   r@  rL   c                     || z  |z   S r   r(   rO  s      r   rg   z&TestCurveFit.test_dtypes.<locals>.func  rs  r   rt  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   Ib!ECK#bfQii-'	 	 	 . 	1 	1F
BJ/ 
1 
1J
3 & &CAAA,.. 1 1)'?CCC&tQ&AAAFAs;s++//11111!{1a0000001 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1	1 	1s   /A0D,,D03D0c                    d }t          j        g d          }t          j        g d          }t          j        g d          }g d}t          j        g d          } ||g|R  }t          ||||||f          \  }}	|                    t           j                  } ||g|R  }t          ||||||f          \  }
}	t          |
|d	           d S )
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    r|  )r"   s_1s_2o_xo_yr   b_2b_1s           r   	hyperbolaz,TestCurveFit.test_dtypes2.<locals>.hyperbola  sX    9/C9/Cae$s27AcEA:1Q3F+G+G'GGGr   )g      rO          g      $rO   )rO   r@  r@  rO   g      $@)ggUUUUUU?r'  g      rL   )r  g?r?  )iiirK   rK   rp         )r-   r  r  r  r  gh㈵>r   )r    r   r   rE  r   r   )r   rW  min_fitmax_fitrj  paramsr  r  popt_64r  popt_32s              r   test_dtypes2zTestCurveFit.test_dtypes2  s+   	H 	H 	H
 (88899(55566:::;;&&&88899	%)&))) %u'.&8: : :
 RZ((	%)&)))%u'.&8: : :
 	t444444r   c                 V   t          j        d          }d|dz  z  d|z  z   t           j                            t	          |                    z   fd}dD ]P}t          ||t          j        |          |          \  }}t          ||d|          \  }}t          ||           Qd S )	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   rt  )r  r  r   r   )r    r  r   randr/   r   r  r   )	r   r  rf  r   popt0pcov0r  r  re  s	           @r   test_broadcast_yzTestCurveFit.test_broadcast_y  s    	"uz!C%K/")..U2L2LL	/ 	/ 	/ 	/ 	/- 		* 		*F$X+0+-=+?+?,24 4 4LE5 %X+0+,,24 4 4LE5 E5))))		* 		*r   c                     d }t          t                    5  t          |g dg ddgd           d d d            d S # 1 swxY w Y   d S )Nc                     || z  |z   S r   r(   rO  s      r   rg   z.TestCurveFit.test_args_in_kwargs.<locals>.func  r?  r   r  rn  r        r6   rl   )r  r  r  rQ   r  r   s     r   test_args_in_kwargsz TestCurveFit.test_args_in_kwargs   s    	 	 	 :&& 	! 	!d(LL*NN	! ! ! !	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   ?AAc                     d }t          t          d          5  t          |g dg d           d d d            d S # 1 swxY w Y   d S )Nc                 J    |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*    rvqb1f~~%)A-11r   zThe number of func parameters=r   r  rm  )r  r  )rd   re   r   r   s     r   !test_data_point_number_validationz.TestCurveFit.test_data_point_number_validation  s    	2 	2 	2 9,LMMM 	, 	,d(LL*NN, , , ,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s   >AAzignore::RuntimeWarningc                    d }t           j                            d          }d}t          j        |          }t          j        dd|          |                    |          z   }t          j        |||d          \  }}t          j        t          j        |          dk              sJ t          j
        |          d         }t          j        |d	k              sJ t          ||j                   d S )
Nc                 ~    |t          j        | dz   |z             z  |t          j        | dz   |z             z  z   |z   S Nr6   r    logrs  s         r   r-   z#TestCurveFit.test_gh4555.<locals>.f  s@    RVAEAI&&&26!a%!)+<+<)<<q@@r      MI9V$O-r   r5   ro  i rf  r   g{Gz)r    r   r  r  r   r   r   r   r@   r   eighr   r   )	r   r-   r  rB   r"   r   r   rM  eigss	            r   test_gh4555zTestCurveFit.test_gh4555  s    	A 	A 	A i##$677IaLLK1a  3::a==0#Aq!F;;;3vbgcllQ&'''''{3"vdUl#####SU#####r   c                 8   t           j                            d          }d }t          j        ddd          } ||ddd          }d	|                    |j        
          z  }||z   }t          |||          \  }}g dg dg dg}	t          ||	d           d S )Nr{  c                 >    |t          j        | | z            z  |z   S r   r$  )r"   r   r   r   s       r   rg   z'TestCurveFit.test_gh4555b.<locals>.func/  s     rvqb1f~~%))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   r  r   r  r	  r   r   )
r   r  rg   r  r   y_noiser  r  rH  refs
             r   test_gh4555bzTestCurveFit.test_gh4555b*  s     i##$677	* 	* 	* Aq"%%DS#&&



333G4..3MMMMMMMMMO 	S$'''''r   c                 >   t           j                            d          }t          j        ddd          }d|z  dz   |                    d          dz  z   }fd	fd
d _        d _        t          j        ddg          }t          |||d           d S )Nl   FjGb r   r~   e   r5   r6   r  rL   c                 x    t          j        j        |k              rJ |_        | |d         z  |d         z   S r  )r    r   last_p)r"   r   lines     r   r  z'TestCurveFit.test_gh13670.<locals>.lineG  s=    vdkQ./////DKqt8ad?"r   c                     t          j        j        |k              rJ |_        t          j        | t          j        |           g          j        S r   )r    r   r  r   r   r   )r"   r   rD   s     r   rD   z&TestCurveFit.test_gh13670.<locals>.jacL  sF    vcjAo.....CJ8QQ01133r   r'  g      @r   r  )r    r   r  r   r  r  r   r   )r   r  r"   r   r  rD   r  s        @@r   test_gh13670zTestCurveFit.test_gh13670>  s    
 i##$788K1c""EAI


,,s22	# 	# 	# 	# 	#
	4 	4 	4 	4 	4
 
XsCj!!$1b3777777r   ru  rv  c           	          d }d}t          j        t          |          5  t          || j        | j        dgd|           d d d            d S # 1 swxY w Y   d S )Nc                     | |z  S r   r(   rC  s     r   rg   z9TestCurveFit.test_gh20155_error_mentions_x0.<locals>.funcZ  rD  r   z+Initial guess is outside of provided boundsr   r6   )r   i  r  )r   r
   r   r   r"   r   )r   r   rg   messages       r   test_gh20155_error_mentions_x0z+TestCurveFit.test_gh20155_error_mentions_x0V  s    	 	 	?]:W555 	% 	%dDFDFs<#% % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   !AAAN),r$   r%   r&   r   rL  rU  r\  rl  r  r  r   r   thread_unsafer  r  staticmethodr  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r,  r<  rA  rN  rb  rj  rp  ru  filterwarningsr~  r  r  r  r(   r   r   r=  r=    sx       - - -/ / / - - -- - - / / /&.1 .1 .1`J J J [8 8 8> > > 1 1 \18 [X'>'>'>??
J 
J @?
J [X'>'>'>??J J @?J [S1a&))[X'>'>'>??J J @? *)J % % %J J J$ $ $
P P P' ' '( #  #  #D, , ,""5 "5 "5H	. 	. 	. [[)))4446 46 5446l: : :60G 0G 0Gd [-t}==
& 
& >=
&1 1 1*5 5 58* * * ! ! !, , , [ 899$ $ :9$&( ( ((8 8 80 [Xx'899% % :9% % %r   r=  c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestFixedPointc                 P    d }d}t          ||          }t          |d           d S )Nc                     d| z  S NrN   r(   rz   s    r   rg   z0TestFixedPoint.test_scalar_trivial.<locals>.funcf      q5Lr   r'  rO   r   r   r   rg   rh   r"   s       r   test_scalar_trivialz"TestFixedPoint.test_scalar_triviald  s;    	 	 	b!!As#####r   c                 P    d }d}t          ||          }t          |d           d S )Nc                     | dz  S r   r(   rz   s    r   rg   z/TestFixedPoint.test_scalar_basic1.<locals>.funcn  rD  r   ?r'  r  r  s       r   test_scalar_basic1z!TestFixedPoint.test_scalar_basic1l  s;    	 	 	b!!As#####r   c                 P    d }d}t          ||          }t          |d           d S )Nc                     | dz  S NrL   r(   rz   s    r   rg   z/TestFixedPoint.test_scalar_basic2.<locals>.funcv  s    c6Mr   r  r'  r  r  s       r   test_scalar_basic2z!TestFixedPoint.test_scalar_basic2t  s;    	 	 	b!!As#####r   c                     d }ddg}t          j        d          5  t          ||          }d d d            n# 1 swxY w Y   t          |ddg           d S )Nc                     d| z  S r  r(   rz   s    r   rg   z/TestFixedPoint.test_array_trivial.<locals>.func}  r  r   g333333?g333333?ignorer   rO   )r    errstater   r   r  s       r   test_array_trivialz!TestFixedPoint.test_array_trivial|  s    	 	 	4[[X&&& 	& 	&D"%%A	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&ASz*****s   :>>c                     d }t          g d          }g d}t          j        d          5  t          |||f          }d d d            n# 1 swxY w Y   t	          |d|z             d S )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  s    	 	 	###$$[X&&& 	1 	1D"A4000A	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1As1u%%%%%s   AAAc                     d }t          g d          }g d}t          |||f          }t          ||dz             d S )Nc                     || dz  z  S r  r(   r  s     r   rg   z.TestFixedPoint.test_array_basic2.<locals>.func  s    q#v:r   r  )g?r  r  rm   r5   )r   r   r   r  s        r   test_array_basic2z TestFixedPoint.test_array_basic2  s^    	 	 	###$$__bt,,,Aq!t$$$$$r   c                     t          d dddd          }t          |t          j        d|z            dz             t          |t	          d	          d
z             d S )Nc                 6    t          j        d| z            dz  S )NrX  rN   r$  )xxs    r   r.   z.TestFixedPoint.test_lambertw.<locals>.<lambda>  s    tBw(; r   r'  r(   g-q=i  )rQ   xtolmaxiterrX  rN   r6   r5   )r   r   r    r%  r   )r   xxroots     r   test_lambertwzTestFixedPoint.test_lambertw  sh    ;;SeS2 2 2tF{ 3 3C 7888A.....r   c                     ddd}d}|dz
  |z  z  |z  d|dz
  z  z  z  fd}t          ||d          }t          ||           d S )	Nr5   r  r$  gjt?r6   c                 z    t          j        z  | z            t          j        | z  | dz
  z            z  dz   S rx  ry  )rB   i0klkss    r   rg   z1TestFixedPoint.test_no_acceleration.<locals>.func  s9    6"R%'??RVBqD!a%L%9%99A==r   	iterationr   )r   r   )r   mn0rg   rB   r  r  r  s        @@@r   test_no_accelerationz#TestFixedPoint.test_no_acceleration  s    sAg2a1ac7++	> 	> 	> 	> 	> 	> 	> b5551r   N)r$   r%   r&   r  r  r  r  r  r  r  r  r(   r   r   r  r  b  s        $ $ $$ $ $$ $ $+ + +& & &% % %/ / /    r   r  ).r'   rF  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   r=  r  r(   r   r   <module>r     s         < < < < < < < < < < < < < < < < < < + * * * * *                     + + + + + + " " " " " " " " " " " " " " F F F F F F F F F F * * * * * * + + + + + +# # # # # # # #  + + +  >  .< < <
i5 i5 i5 i5 i5 i5 i5 i5X; ; ; ; ; ; ; ;@; ; ; ; ; ; ; ;+ + + + + + + +4W. W. W. W. W. W. W. W.td
% d
% d
% d
% d
% d
% d
% d
%NH H H H H H H H H Hr   