
    biO                     r   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	 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)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     \/home/cdr/jupyterlab/.venv/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_parallelr1   +   s3    	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`
    r4   Nr3   r   )r-   r   diagemptyr   )r7   r8   r9   npdiffjacs         r   pressure_network_jacobianrC   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<   rC   )r7   r8   r9   s      r   pressure_network_fun_and_gradrE   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         ?       @        rL   rM   Targsfull_outputr4   )	r   fullr	   r   fsolver<   r   r   r   )r   r9   r8   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 )NrI   rJ   rK   rO   fprime)	r   rQ   r	   r   rR   r<   rC   r   r   r   r9   r8   rS   rT   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 Nr4         ?rL   r   assert_raises	TypeErrorr   rR   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 Nr`   rL   )r4   rO   )rb   rc   r   rR   r(   r   rf   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 )Nr4   r3   r3   r   rf   r[   ra   r   re   
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)r3   r(   r    s    r   re   z9TestFSolve.test_wrong_shape_fprime_function.<locals>.func       a&&r   c                     t        | d      S N)   r|   rw   rx   s    r   rr   z?TestFSolve.test_wrong_shape_fprime_function.<locals>.deriv_func       a((r   r   r4   rp   )rb   rc   r   rR   rq   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
ValueErrorrk   s    r   re   z,TestFSolve.test_func_can_raise.<locals>.func       Z((r   r   matchr   rf   rb   r   r   rR   r   re   s     r   test_func_can_raisezTestFSolve.test_func_can_raise   s8    	) :Z8 	*OODaS)	* 	* 	*	   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	   rx   s    r   re   z,TestFSolve.test_Dfun_can_raise.<locals>.func       rxx~%%r   c                      t        d      r   r   rk   s    r   rr   z2TestFSolve.test_Dfun_can_raise.<locals>.deriv_func   r   r   r   r   r   rp   r   rq   s      r   test_Dfun_can_raisezTestFSolve.test_Dfun_can_raise   s?    	&	) :Z8 	=OODaS<	= 	= 	=	   ;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   r4     dtyper3   )r   r	   float32rx   s    r   re   z%TestFSolve.test_float32.<locals>.func   s1    88QqTCZ15RZZHAMMr   r4   r   MbP?atol)r   rR   r   r	   r   r   )r   re   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   )rX   r<   rO   r   s    r   re   z,TestFSolve.test_reentrant_func.<locals>.func   s    224#T**r   rI   rJ   rK   TrN   r4   )r   rQ   r	   r   rR   r   r   r   )	r   re   r9   r8   rS   rT   rU   rV   rW   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]   rC   r   s    r   rr   z3TestFSolve.test_reentrant_Dfunc.<locals>.deriv_func   s    446,d33r   rI   rJ   rK   rZ   )r   rQ   r	   r   rR   r<   r   r   )r   rr   r9   r8   rS   rT   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   )r1   rX   allr   vresults      r   test_concurrent_no_gradientz&TestFSolve.test_concurrent_no_gradient   s:    tEEFKL3vFdN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   )r1   r]   r   r   s      r   test_concurrent_with_gradientz(TestFSolve.test_concurrent_with_gradient   s:    tGGH2MN3vFdN34443r   N)r"   r#   r$   rX   r]   rg   rm   rs   r~   r   r   r   r   r   r   r   r&   r   r   rG   rG   o   sF    	 ;<PU
U*=4 ;55r   rG   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 )NrI   rJ   rK   hybrmethodrO   	r   rQ   r	   r   rootr<   r    r   r   r\   s        r   rX   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 )NrI   rJ   rK   r   rO   r   rB   )
r   rQ   r	   r   r   r<   rC   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 )NrI   rJ   rK   r   Tr   )	r   rQ   r	   r   r   rE   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$   rX   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 )NrI   rJ   rK   lmr   r   r\   s        r   rX   z,TestRootLM.test_pressure_network_no_gradient   sX    GGAsO./mm$4m+/tQiAAB 	!+rwwqz:r   N)r"   r#   r$   rX   r&   r   r   r   r      s    ;r   r   c                   f    e Zd Zd Zd Zej                  j                  dg d      d        Zd Z	y)TestNfevc                 6    t        j                         | _        y r   )	threadinglocalnfevr   s    r   setup_methodzTestNfev.setup_method  s    OO%	r   c                     t        | j                  d      sd| j                  _        | j                  xj                  dz  c_        |dz  dz
  S )Ncr   r4   r3   r|   )hasattrr   r   )r   ys     r   zero_fzTestNfev.zero_f
  s:    tyy#&DIIK		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 y )Nr   r   r   )r   r   r   r   r   )r   r   solutions      r   test_root_nfevzTestNfev.test_root_nfev  s?     		==c&A}}		+++r   c                     d| j                   _        t        j                  | j                  dd      \  }}}}|d   | j                   j                  k(  sJ y )Nr   r   T)rP   r   )r   r   r   rR   r   )r   r    rU   rV   rW   s        r   test_fsolve_nfevzTestNfev.test_fsolve_nfev  sF    		%__T[[#4P4dF|tyy{{***r   N)
r"   r#   r$   r   r   pytestmarkparametrizer   r   r&   r   r   r   r     s;    & [[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|j                  |j                        z  z   | _        y )Nr   r   (   )g@*   g33333sr3   {   g{Gz?)	r   linspacer    abcrandomdefault_rngstandard_normalr   y_meas)r   r    abr   y_truerngs          r   r   zTestLeastSq.setup_method!  s    KK2r"!AQq51a4!A#!ii##C(tC$7$7$EEEr   c                 :    |\  }}}|||dz  z  ||z  z   |z   z
  }|S Nr3   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| d       t        || j                  d       y )Nr   r   r   rk   r4   r3   r|   rI   solution not found (ier=)r3   decimalr	   r   r   r   r    r   r   r   r   p0
params_fitrV   s       r   
test_basiczTestLeastSq.test_basic2  sZ    7^!$.."(,TVV'<>
C|#'?uA%FG!*dhhBr   c                     t        g d      }t        | j                  || j                  | j                  f| j
                        \  }}t        |dv d| d       t        || j                  d       y )Nr   rO   Dfunr   r   r   r3   r   )	r	   r   r   r   r    r   r   r   r   r  s       r   test_basic_with_gradientz$TestLeastSq.test_basic_with_gradient:  sf    7^!$.."(,TVV'<'+'>'>@
C 	|#'?uA%FG!*dhhBr   c                     t        g dg      }t        | j                  || j                  | j                  fd      }|\  }}}}}t        |dv d|        y )Nr   TrN   r   solution not found: )r	   r   r   r   r    r   )r   r  rP   r  cov_xinfodictrW   rV   s           r   test_full_outputzTestLeastSq.test_full_outputC  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)copyrN   r   r  )r	   r
   r   r   r   r    r   r   )	r   r  p0_copyrP   r  r  r  rW   rV   s	            r   test_input_untouchedz TestLeastSq.test_input_untouchedK  sr    7)&dnnb$(KK#8*.0 2=.
E8T3y $8"?@2w'r   c                 b    t        d      }ddg}t        t        t        j                  ||       y r_   r   rb   rc   r   r   rd   s      r   rg   z*TestLeastSq.test_wrong_shape_func_callableU  s*    1~ 3Zi!1!14<r   c                 X    ddg}t        t        t        j                  t        |d       y ri   )rb   rc   r   r   r(   rl   s     r   rm   z*TestLeastSq.test_wrong_shape_func_function\  s#     3Zi!1!1:rPr   c                 x    t        d      }t        d      }t        t        t        j                  |ddg|       y )Nr4   ro   r   rf   r  r  rq   s      r   test_wrong_shape_Dfun_callablez*TestLeastSq.test_wrong_shape_Dfun_callableb  s/    1~ '
i!1!14QqE
Sr   c                 X    d }d }t        t        t        j                  |ddg|       y )Nc                     t        | d      S rv   rw   rx   s    r   re   z8TestLeastSq.test_wrong_shape_Dfun_function.<locals>.funch  ry   r   c                     t        | d      S r{   rw   rx   s    r   rr   z>TestLeastSq.test_wrong_shape_Dfun_function.<locals>.deriv_funcj  r}   r   r   r4   r  rb   rc   r   r   rq   s      r   test_wrong_shape_Dfun_functionz*TestLeastSq.test_wrong_shape_Dfun_functiong  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   r4   r3   rL   r|   r   exp)r   r    r   qs       r   re   z&TestLeastSq.test_float32.<locals>.funcp  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#  rk   r   r3   g-C6?)r   r	   r   r   r   r   r6   )r   re   r    r   r  p1successs          r   r   zTestLeastSq.test_float32n  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   rk   s    r   re   z-TestLeastSq.test_func_can_raise.<locals>.func  r   r   r   r   r   r   rb   r   r   r   r   s     r   r   zTestLeastSq.test_func_can_raise~  s:    	) :Z8 	+Tqc*	+ 	+ 	+r   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   rx   s    r   re   z-TestLeastSq.test_Dfun_can_raise.<locals>.func  r   r   c                      t        d      r   r   rk   s    r   rr   z3TestLeastSq.test_Dfun_can_raise.<locals>.deriv_func  r   r   r   r   r   r  r(  rq   s      r   r   zTestLeastSq.test_Dfun_can_raise  sA    	&	) :Z8 	<Tqc
;	< 	< 	<r   c                       fd}t        g d      }t        || j                   j                  f      \  }}t	        |dv d| d       t        | j                  d       y )	Nc                  B    j                           j                  |  S r   )r  r   r   s    r   re   z-TestLeastSq.test_reentrant_func.<locals>.func  s    OO!4>>4((r   r   rk   r   r   r   r3   r   )r	   r   r   r    r   r   r   )r   re   r  r  rV   s   `    r   r   zTestLeastSq.test_reentrant_func  s^    	) 7^!$(,TVV'<>
C|#'?uA%FG!*dhhBr   c                       fd}t        g d      }t         j                  | j                   j                  f|      \  }}t        |dv d| d       t        | j                  d       y )	Nc                  B    j                           j                  |  S r   )r  r   r   s    r   rr   z3TestLeastSq.test_reentrant_Dfun.<locals>.deriv_func  s     OO*4**D11r   r   r  r   r   r   r3   r   r  )r   rr   r  r  rV   s   `    r   test_reentrant_DfunzTestLeastSq.test_reentrant_Dfun  sg    	2 7^!$.."(,TVV'<'13
C 	|#'?uA%FG!*dhhBr   c                 z    t        | j                  gdz        }t        |D cg c]  }|d u  c}      sJ y c c}w r   )r1   r  r   r   s      r   r   z'TestLeastSq.test_concurrent_no_gradient  s8    t/"453vFdN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   )r1   r	  r   r   s      r   r   z)TestLeastSq.test_concurrent_with_gradient  s:    t<<=BC3vFdN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 )Nr3   r   r|   r4   r&   rx   s    r   re   z=TestLeastSq.test_func_input_output_length_check.<locals>.func  s    !qQ&**r   z+Improper input: func input vector length N=r   r   r4   r   r  r   s     r   #test_func_input_output_length_checkz/TestLeastSq.test_func_input_output_length_check  s@    	+ 9!NP 	.Tq!f-	. 	. 	.s	   8AN)r"   r#   r$   r   r   r   r  r	  r  r  rg   rm   r  r  r   r   r   r   r0  r   r   r5  r&   r   r   r   r      sk    F
8CCA(=QT
TJ +<
CC55.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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ej                  j!                  dg d      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                  jM                  d*      d+        Z'd, Z(d- Z)ej                  j!                  dd.d/g      d0        Z*y1)2TestCurveFitc                 L    t        g d      | _        t        g d      | _        y )N)r#  g	@      #@gffffff+@)r#  rL         @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   re   z,TestCurveFit.test_one_argument.<locals>.func      a4Kr   r4   )r4   r4   r   g3ı.n?rI   r   )r   r   g-C6Z?F)rP   check_finite)r   r    r   r   r-   r   r   r   )
r   re   poptpcovrespopt2pcov2r  errmsgrV   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   re   z,TestCurveFit.test_two_argument.<locals>.func  s    QT6Mr   r3   ro   c]K?-?rI   r   䃞ͪϵ?T㥛 b=y?)r   r    r   r   r-   r   r   )r   re   r@  rA  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   re   z=TestCurveFit.test_func_is_classmethod.<locals>.test_self.func  s    1a4xr   N)r"   r#   r$   r%   re   r&   r   r   	test_selfrR    s     r   rT  ro   rJ  rK  rI   r   rL  rM  rN  )r   re   r    r   r   r   r   )r   rT  test_self_instr@  rA  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@rY  g29l?rX  )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 )Nr3   rL   r   )r    rf   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goodr_  r@  rA  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        j                         5  t        j                  ddt               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   r4   r3   r|   rI      )r4   r4   rh           )r4   r3   r4   r3   r4   r3   c                     || z  |z   S r   r&   rI  s      r   r+   z!TestCurveFit.test_pcov.<locals>.f      Q37Nr   r   trfdogboxr3   r   )r  r^  r   gN"q?g~uM/N?r   rb  r|   T)r  r^  absolute_sigmar   gO=N?g5=`6?g[u|?g-/i@c                     || z  S r   r&   rI  s      r   f_flatz&TestCurveFit.test_pcov.<locals>.f_flat  s    Q3Jr   rI   ignorez3Covariance of the parameters could not be estimatedr  r^  r  ro   )r   r	   r   sqrtr>   r   infreshapewarningscatch_warningsfilterwarningsr   r   r   r   )r   xdataydatar^  r+   r   r@  rA  perr_scaledperrrs  pcov_expectedpopt1pcov1s                 r   	test_pcovzTestCurveFit.test_pcov  sM   +,,-+,	 . 	K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'	K.	 "&&!,44Q:$$& 	I##E! #65%QF%PJD$$Qbq	5!9!QHLE5	I 	

f$%4/v%&5-0	I 	Is    AI<<Jc                 V    d }g d}g d}t        t        |||      d   ddgd       y )	Nc                     || z  |z   S r   r&   rI  s      r   f_linearz.TestCurveFit.test_array_like.<locals>.f_linear0  rm  r   r   )r|   rh  ri  	   r   r3   r4   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        j                  t              5  t        d ||       d d d        y # 1 sw Y   y xY w)N)r4   r3   r|   rI   rh     )r4   r3   r|   rI   g      @r  c                     || z  S r   r&   rI  s      r   r,   z<TestCurveFit.test_indeterminate_covariance.<locals>.<lambda><  s
    ac r   )r   r	   r   warnsr   r   r   r}  r~  s      r   test_indeterminate_covariancez*TestCurveFit.test_indeterminate_covariance7  sN    +,-.\\/* 	9)5%8	9 	9 	9s   A  A)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 )	Nr4   r|   r4   r3   r|   c                     || z  |z   S r   r&   rI  s      r   r,   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>F      acAg r   c                     || z  |z   S r   r&   rI  s      r   r,   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>H  r  r   c                     || z  |z   S r   r&   rI  s      r   r,   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>J  s    QqS1W r   r?  T)r   r	   nanrb   r   r   r  s      r   test_NaN_handlingzTestCurveFit.test_NaN_handling>  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+   r}  r~  r   r?  z;`nan_policy='propagate'` is not supported by this function.r   	propagatei  )
nan_policyra  zThe input contains nanr  raiseomitr}  r~  zTnan_policy must be one of \{(?:'raise'|'omit'|None)(?:, ?(?:'raise'|'omit'|None))*\}hir&   )rb   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  s	    >N"E;)	:Y7 	EDD;tD	E :-EF 	43373	4 'CCFC+w+w ) 3F 3A);<:	:Y7 	10040	1 	1%	E 	E	4 	4	1 	1s#   C C'C C	CC!r   rn  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&   rI  s      r   r+   z*TestCurveFit.test_nan_policy_1d.<locals>.fl  rm  r   r3   r|   rI   r4   rh  ri  )r3   r|   rI   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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   r4   r&   r    r   r   r[  x2s        r   r+   z*TestCurveFit.test_nan_policy_2d.<locals>.fy  s.    1a4B1a4BR4!8b= r   r3   r|   rI   rh  ri  r4   r   r3   r|   rh  r3   r|   ri  r4   r3   r   r  r  s          r   test_nan_policy_2dzTestCurveFit.test_nan_policy_2dw  s    	!
 Aq"&&!Q#B$%q"&&"&&!RVVQ#G#I J1aArvvq""=>HHi%;<HHZ0q.2C-/@&	Jr   r@   r3   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   r4   )squeezer  s        r   r+   z,TestCurveFit.test_nan_policy_2_3d.<locals>.f  sD    319%%'B319%%'BR4!8b= r   r3   r|   rI   rh  ri  r4   r   r  r  r  )r   r	   r  r  r  )r   r@   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&   r=  s     r   r,   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  
    !A# r   c                     || z  S r   r&   r=  s     r   r,   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   )r4   r3   )boundsc                     || z  S r   r&   r=  s     r   r,   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r4   c                     || z  S r   r&   r=  s     r   r,   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>  r  r   r3   rb   r   r   r   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&   rx   s    r   r,   z8TestCurveFit.test_function_zero_params.<locals>.<lambda>  s    q r   r4   r3   r|   rI   r  r   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   r3   r   rL   )r   r   r  r   )r   r@  rA  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   rI  s      r   r+   z,TestCurveFit.test_method_argument.<locals>.f      rvvqbd|##r   r   r4      rL   ro  rp  r   Nr   unknown)r   r   r   r   rb   r   )r   r+   r}  r~  r   r@  rA  s          r   test_method_argumentz!TestCurveFit.test_method_argument  sn    	$ Aq"%%R 3 	,F"1eU6BJD$D2r(+	, 	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   rI  s      r   r+   z(TestCurveFit.test_full_output.<locals>.f  s    rvvqb1f~%%r   r   r4   r  rL   r  T)r   rP   r   fvecr   fjacipvtqtfr   )r   r   r   r   
isinstancestr)
r   r+   r}  r~  r   r@  rA  r  rE  rV   s
             r   r  zTestCurveFit.test_full_output  s    	& Aq"%%R 3 	'F095%D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 ]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   rI  s      r   r+   z#TestCurveFit.test_bounds.<locals>.f  r  r   r   r4   r  rL   r#  r`   r:  )Nro  rp  )r  r   ro  rM   g333333?)r   r  r   )r   r   r   r   r   rx  rb   r   )r   r+   r}  r~  lbubr  bounds_classr   r@  rA  
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   sinr=  s     r   r+   z&TestCurveFit.test_bounds_p0.<locals>.f  s    66!a%= r   r3   r   r|   ro  rp  g @rv  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    	! 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   rI  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   rB   z"TestCurveFit.test_jac.<locals>.jac  8    r!tA99a!a!_-///r   r   r4   r  rL   r  )z2-pointz3-pointcs)rB   r   r3   rn  r   rB   r   rh     )r^  r   rB   r   rb  )r   r   r   r   r   r   )
r   r+   rB   r}  r~  r   schemer@  rA  r^  s
             r   test_jaczTestCurveFit.test_jac  s   	$	0 Aq"%%R  ( 	.F6 .&q%F.46
dq!f-.	. . 	*F"1eU6sKJD$D1a&)	*
 aA'a- 	5F"1eU%'*,JD$ D1a&t4	5r   c                     t        j                  dd      }d|z  }t        d ||dd      \  }}t        d ||dd	      \  }}t        |dd
       t        |dd
       y )Nr   r   r3   c                     || z  S r   r&   r    r   s     r   r,   z5TestCurveFit.test_maxfev_and_bounds.<locals>.<lambda>(  
    1 r   )r   r|   r   )r  ra  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  rC  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   	sigma_dim)r   r4   r3   c                    d }t         j                  j                  d      }d}t        j                  dd|      } ||dd      }|dk(  rd	}||j	                  d||      z  }nz|dk(  r|d	z  }||j	                  d||      z  }nY|d
k(  rM|j	                  dd
||f      }||j
                  z  }||j                  t        j                  |      |      z  }nJ d       ddg}	|j                  |d      }
|j                  |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                  ||      }n?|j                  d
k(  r0t        j                  ||d      }t        j                  ||d      }t        ||||	|      \  }}t!        ||d       t!        ||d       y )Nc                 8    |t        j                  || z        z  S r   r   rI  s      r   exponentialz7TestCurveFit.test_curvefit_omitnan.<locals>.exponential0  s    rvva!e}$$r   l   lt*G7 r   r4   r   皙?rJ   r   g?r3   z1The sigma must be a scalar, 1D array or 2D array.g?r#  rh  sizer  )r  r^  r  )axisru  r  r   )r   r   r   r   normalr   multivariate_normal
zeros_likeintegersr  r   uniqueconcatenatedeleteasarrayndimr   )r   r   r  r   Nr    r   r^  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   	% ii##O4KK2q!3$NEAua((A1nHEAua((A1n

1a!Q(AGE((q)95AAAMMM53Z ll11l%ll11l% ##$[!Q2U068
 99R^^S#J78IIa*IIa*

5!::?IIeX.EZZ1_IIeXA6EIIeXA6E$[!Q2UKu5u5r   c           
         d }d }t         j                  j                  d      }t        j                  ddd      } ||dd      }|d	|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   rI  s      r   re   z9TestCurveFit.test_curvefit_simplecovariance.<locals>.funcg  r  r   c                     t        j                  | | z        }t        j                  || | z  |z  f      j                  S r   r  r  s       r   rB   z8TestCurveFit.test_curvefit_simplecovariance.<locals>.jacj  r  r   r   r   rI   2         @?r  r  r3   NNFTr^  rB   rq  r  r   )
r   r   r   r   r   r-   zerosr>   r   r   )r   re   rB   r   r}  r   r~  r^  covarjac1jac2rq  r  r  rC  rD  s                   r   test_curvefit_simplecovariancez+TestCurveFit.test_curvefit_simplecovariancee  s	   	$	0 ii##C(Aq"%S!C#--3u:->>>U$s*q!:|4 	:JD$"/ :(ue5  Au(ue5  Au  u59u59:	:r   c           
      j   d }d }d }d }t         j                  j                  d      }t        j                  dd      } ||dd	      }|d
|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#  r3         r   r   r   r#  )r   r	   rw  dotr!  )r    r   r   rotns       r   funcpz4TestCurveFit.test_curvefit_covariance.<locals>.funcp  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	   rw  r!  r-  r   r   )r    r   r   r.  r  s        r   jacpz3TestCurveFit.test_curvefit_covariance.<locals>.jacp  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   rI  s      r   re   z3TestCurveFit.test_curvefit_covariance.<locals>.func  r  r   c                     t        j                  | | z        }t        j                  || | z  |z  f      j                  S r   r  r  s       r   rB   z2TestCurveFit.test_curvefit_covariance.<locals>.jac  r  r   i  r4   rI   r  r#  r  r  r3   r+  r   r,  r   r!  r"  gz]ʂ>r  )rc  r   )r   r   r   r  r   r-   r#  r>   r	   rw  r-  r   r   r   )r   r/  r1  re   rB   r   r}  r   r~  r^  r$  r.  ydatapcovarpr%  r&  rq  r  r  rC  rD  s                        r   test_curvefit_covariancez%TestCurveFit.test_curvefit_covariance  s   	.	:	$	0 ii##D)		!QS!C#--3u:->>>U$s*q! xx"RWWQZ-RWWQZ;RWWQZ-BGGAJ:$& ' %%$$TVV,;5 	GJD$"/ G(ue5  Au(vV  Au  u6Fu6FG	Gr   rq  FTc           	          d }| j                   | j                  }}t        |||d|      \  }}t        |||t        j                  |d      |      \  }}t        j
                  ||k(        sJ y )Nc                     || z  |z   S r   r&   rI  s      r   re   z5TestCurveFit.test_curvefit_scalar_sigma.<locals>.func      q519r   r3   )r^  rq  )r    r   r   r   	full_liker   )r   rq  re   r    r   r  r  rD  s           r   test_curvefit_scalar_sigmaz'TestCurveFit.test_curvefit_scalar_sigma  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  rh  r`   r:  rJ   c                     || z  |z   S r   r&   rI  s      r   re   z&TestCurveFit.test_dtypes.<locals>.func  rm  r   rn  errorr   r4   )r   r  r  r   r
   astyperz  r{  simplefilterr   r   isfiniter   allclose)	r   r    r   re   r   dtxdtyr   covs	            r   test_dtypeszTestCurveFit.test_dtypes  s   IIb!ECK#bffQi-'	 . 	1F

BJJ/ 
1JJ

3 &CAA& ,,. 1))'?C&tQ&AFAs;;s+//111!{{1a00001 1
1	11 1s   >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 )Nr3   rI   )r   rw  )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      rM          g      $rM   )rM   r:  r:  rM   g      $@)ggUUUUUU?r#  g      rJ   )r  g?r9  )iiirI   rI   rj         )r+   r}  r~  r  r  gh㈵>r   )r   r	   r   r?  r   r   )r   rO  min_fitmax_fitrd  paramsr}  r~  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      }t         j                  j                  d      }d|dz  z  d|z  z   |j                  t	        |            z   		fd}dD ]E  }t        ||t        j                  |      |	      \  }}t        ||d
|	      \  }}t        ||       G y )Nr   r   g@r3   g      @r  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   rn  )r}  r~  r   r   )r   r  r   r   r-   r   r
  r   )
r   r}  r   r^  r   popt0pcov0r  r  r]  s
            @r   test_broadcast_yzTestCurveFit.test_broadcast_y  s    		"ii##C(uz!C%K/#**#e**2MM	/- 		*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&   rI  s      r   re   z.TestCurveFit.test_args_in_kwargs.<locals>.func  r9  r   r   rh  r        r4   rj   )r}  r~  r  rO   r  r   s     r   test_args_in_kwargsz TestCurveFit.test_args_in_kwargs  s>    	 :& 	!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   re   z<TestCurveFit.test_data_point_number_validation.<locals>.func  s*    rvvqb1f~%)A-11r   zThe number of func parameters=r   r   rd  )r}  r~  )rb   rc   r   r   s     r   !test_data_point_number_validationz.TestCurveFit.test_data_point_number_validation  s9    	2 9,LM 	,d(*,	, 	, 	,s   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 Nr4   r   logrj  s         r   r+   z#TestCurveFit.test_gh4555.<locals>.f  s>    RVVAEAI&&266!a%!)+<)<<q@@r      MI9V$O-r   r3   ri  i r`  r   g{Gz)r   r   r   r  r   r   r   r   r>   r   eighr   r   )	r   r+   r   r@   r    r   r   rE  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 )Nrr  c                 @    |t        j                  | | z        z  |z   S r   r   )r    r   r   r   s       r   re   z'TestCurveFit.test_gh4555b.<locals>.func0  s     rvvqb1f~%))r   r   rI   r  r  r  rJ   r  r  )gt^G?d*.X|?T}H)rx  g1x?u`v?)ry  rz  gon2f?gH׊>)r   r   r   r   r  r  r   r   )
r   r   re   r}  r   y_noiser~  r  rB  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   r3   r4   r  rJ   c                 v    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>.lineH  s;    vvdkkQ.///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   rB   s     r   rB   z&TestCurveFit.test_gh13670.<locals>.jacM  sF    vvcjjAo...CJ88QQ01333r   r#  g      @r   r  )r   r   r   r   r  r  r	   r   )r   r   r    r   r  rB   r  s        @@r   test_gh13670zTestCurveFit.test_gh13670?  s    
 ii##$78KK1c"EAI


,s22	#
	4
 
XXsCj!$1b37r   ro  rp  c           	          d }d}t        j                  t        |      5  t        || j                  | j
                  dgd|       d d d        y # 1 sw Y   y xY w)Nc                     | |z  S r   r&   r=  s     r   re   z9TestCurveFit.test_gh20155_error_mentions_x0.<locals>.func[  r>  r   z+Initial guess is outside of provided boundsr   r4   )r   i  r  )r   r   r   r   r    r   )r   r   re   messages       r   test_gh20155_error_mentions_x0z+TestCurveFit.test_gh20155_error_mentions_x0W  sN    	?]]:W5 	%dDFFDFFs<#%	% 	% 	%s   'AAN)+r"   r#   r$   r   rF  rO  rV  rf  r  r  r  r  staticmethodr  r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r6  r;  rF  rZ  ra  rg  rl  r|  ru  r}  r  r  r&   r   r   r7  r7    s   -/ -- /&01dJ9> 1 18 [[X'>?
J @
J [[X'>?J @J [[S1a&)[[X'>?J @ *J %J$
P'( #D,""5H	. [[[)446 546l:60Gd [[-t}=
& >
&1*58*"!, [[ 89$ :$&((80 [[Xx'89% :%r   r7  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 NrL   r&   rx   s    r   re   z0TestFixedPoint.test_scalar_trivial.<locals>.funcg      q5Lr   r#  rM   r   r   r   re   rf   r    s       r   test_scalar_trivialz"TestFixedPoint.test_scalar_triviale  s"    	b!As#r   c                 >    d }d}t        ||      }t        |d       y )Nc                     | dz  S r   r&   rx   s    r   re   z/TestFixedPoint.test_scalar_basic1.<locals>.funco  r>  r   ?r#  r  r  s       r   test_scalar_basic1z!TestFixedPoint.test_scalar_basic1m  s"    	b!As#r   c                 >    d }d}t        ||      }t        |d       y )Nc                     | dz  S NrJ   r&   rx   s    r   re   z/TestFixedPoint.test_scalar_basic2.<locals>.funcw  s    c6Mr   r  r#  r  r  s       r   test_scalar_basic2z!TestFixedPoint.test_scalar_basic2u  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 r  r&   rx   s    r   re   z/TestFixedPoint.test_array_trivial.<locals>.func~  r  r   g333333?g333333?rt  r   rM   )r   errstater   r   r  s       r   test_array_trivialz!TestFixedPoint.test_array_trivial}  sK    	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   re   z.TestFixedPoint.test_array_basic1.<locals>.func  s    q!t8Or   g      ?r#  g      ?)皙?gffffff?g?rt  r  rk   r#  )r	   r   r  r   r   r   re   r   rf   r    s        r   test_array_basic1z TestFixedPoint.test_array_basic1  sV    	#$[[X& 	1D"A40A	1As1u%	1 	1s   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   re   z.TestFixedPoint.test_array_basic2.<locals>.func  s    q#v:r   r  )g?r  r  rk   r3   )r	   r   r   r  s        r   test_array_basic2z TestFixedPoint.test_array_basic2  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 )NrP  rL   r   )xxs    r   r,   z.TestFixedPoint.test_lambertw.<locals>.<lambda>  s    tBw(; r   r#  r&   g-q=i  )rO   xtolmaxiterrP  rL   r4   r3   )r   r   r   r!  r   )r   xxroots     r   test_lambertwzTestFixedPoint.test_lambertw  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 )	Nr3   r  r  gjt?r4   c                 ~    t        j                  z  | z        t        j                  | z  | dz
  z        z  dz   S ro  rp  )r@   i0klkss    r   re   z1TestFixedPoint.test_no_acceleration.<locals>.func  s8    66"R%'?RVVBqD!a%L%99A==r   	iterationr   )r   r   )r   mn0re   r@   r  r  r  s        @@@r   test_no_accelerationz#TestFixedPoint.test_no_acceleration  s]    sAg2a1ac7++	> b51r   N)r"   r#   r$   r  r  r  r  r  r  r  r  r&   r   r   r  r  c  s*    $$$+&%/r   r  ),r%   rz  r   r   numpy.testingr   r   r   r   r   r   rb   numpyr   r	   r
   multiprocessing.poolr   scipyr   r   scipy.specialr   scipy.optimize._minpack_pyr   r   r   scipy.optimizer   scipy.optimize._minimizer   r   r(   r1   r<   rC   rE   rG   r   r   r   r   r7  r  r&   r   r   <module>r     s      G G *    + " " F F * +# #+>.<
i5 i5X; ;@; ;+ +4W. W.tf
% f
%RH Hr   