a
    ‡ù»jÈ¥  ã                   @   s>  d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
 ddlmZ ddlZddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlmZ G dd„ dƒZ dd„ Z!dd„ Z"dd„ Z#dd„ Z$dd„ Z%G dd„ dƒZ&G dd„ dƒZ'G dd„ dƒZ(G dd„ dƒZ)G d d!„ d!ƒZ*G d"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                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚReturnShapezúThis 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                 C   s
   || _ d S ©N)Úshape)Úselfr   © r   úGE:\soccer\ml_env\Lib\site-packages\scipy/optimize/tests/test_minpack.pyÚ__init__   s    zReturnShape.__init__c                 C   s   t  | j¡S r   )ÚnpÚonesr   )r   Úxr   r   r   Ú__call__    s    zReturnShape.__call__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   c                 C   s
   t  |¡S )zUA function that returns an array of ones of the given shape.
    `x` is ignored.
    )r   r   )r   r   r   r   r   Ú
dummy_func$   s    r$   c                 C   s@   t t| ƒƒ� }| dd„ | ¡W  d   ƒ S 1 s20    Y  d S )Nc                 S   s   | ƒ S r   r   )Úfr   r   r   Ú<lambda>-   ó    z#sequence_parallel.<locals>.<lambda>)r   ÚlenÚmap)ÚfsÚpoolr   r   r   Úsequence_parallel+   s    r,   c                 C   s6   || d  }t  |dd… |d  |  ¡ | 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   ZhstackÚsum)Ú
flow_ratesÚQtotÚkÚPÚFr   r   r   Úpressure_network4   s    &r5   c                 C   s¢   t | ƒ}t | dd… d |dd…  d| d  |d   ¡}t ||f¡}|d |d|d …d|d …f< d|d|d …|d f< t |¡||d 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`
    r.   Nr-   r   )r(   r   ÚdiagÚemptyr   )r0   r1   r2   ÚnZpdiffÚjacr   r   r   Úpressure_network_jacobianS   s    6 r:   c                 C   s   t | ||ƒt| ||ƒfS r   )r5   r:   )r0   r1   r2   r   r   r   Úpressure_network_fun_and_gradj   s    

ÿr;   c                   @   st   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
TestFSolvec                 C   s\   t  dd¡}d}tg d¢ƒ}tjt|||fdd�\}}}}t|t  d¡ƒ t|dk|ƒ d S )Né   ç      à?©ç       @ç        r@   rA   T©ÚargsÚfull_outputr.   )	r   Úfullr
   r   Úfsolver5   r   r   r   )r   r2   r1   Úinitial_guessÚfinal_flowsÚinfoÚierÚmesgr   r   r   Ú!test_pressure_network_no_gradientp   s    
þz,TestFSolve.test_pressure_network_no_gradientc                 C   sF   t  dd¡}d}tg d¢ƒ}tjt|||ftd�}t|t  d¡ƒ d S )Nr=   r>   r?   ©rC   Úfprime)	r   rE   r
   r   rF   r5   r:   r   r   ©r   r2   r1   rG   rH   r   r   r   Ú#test_pressure_network_with_gradient{   s    
þz.TestFSolve.test_pressure_network_with_gradientc                 C   s$   t dƒ}ddg}tttj||ƒ d S ©Nr.   ç      ø?r@   ©r   Úassert_raisesÚ	TypeErrorr   rF   ©r   ÚfuncÚx0r   r   r   Útest_wrong_shape_func_callable…   s    z)TestFSolve.test_wrong_shape_func_callablec                 C   s    ddg}t ttjt|dd� d S ©NrR   r@   )©r.   ©rC   )rT   rU   r   rF   r$   ©r   rX   r   r   r   Útest_wrong_shape_func_functionŒ   s    z)TestFSolve.test_wrong_shape_func_functionc                 C   s,   t dƒ}t dƒ}tttj|ddg|d� d S )Nr.   ©r-   r-   r   ©rX   rN   rS   ©r   rW   Ú
deriv_funcr   r   r   Ú test_wrong_shape_fprime_callable’   s    z+TestFSolve.test_wrong_shape_fprime_callablec                 C   s,   dd„ }dd„ }t ttj|ddg|d� d S )Nc                 S   s
   t | dƒS ©N)r-   ©r$   ©r   r   r   r   rW   ˜   s    z9TestFSolve.test_wrong_shape_fprime_function.<locals>.funcc                 S   s
   t | dƒS ©N)é   rh   re   rf   r   r   r   rb   š   s    z?TestFSolve.test_wrong_shape_fprime_function.<locals>.deriv_funcr   r.   r`   )rT   rU   r   rF   ra   r   r   r   Ú test_wrong_shape_fprime_function—   s    z+TestFSolve.test_wrong_shape_fprime_functionc                 C   sH   dd„ }t tdd��  tj|dgd� W d   ƒ n1 s:0    Y  d S )Nc                  W   s   t dƒ‚d S ©NúI raised©Ú
ValueErrorr\   r   r   r   rW   Ÿ   s    z,TestFSolve.test_func_can_raise.<locals>.funcrk   ©Úmatchr   ©rX   ©rT   rm   r   rF   ©r   rW   r   r   r   Útest_func_can_raisež   s    zTestFSolve.test_func_can_raisec                 C   sR   dd„ }dd„ }t tdd��" tj|dg|d� W d   ƒ n1 sD0    Y  d S )	Nc                 S   s   | t  dg¡ S ©Né
   ©r   r
   rf   r   r   r   rW   ¦   s    z,TestFSolve.test_Dfun_can_raise.<locals>.funcc                  W   s   t dƒ‚d S rj   rl   r\   r   r   r   rb   ©   s    z2TestFSolve.test_Dfun_can_raise.<locals>.deriv_funcrk   rn   r   r`   rq   ra   r   r   r   Útest_Dfun_can_raise¥   s    zTestFSolve.test_Dfun_can_raisec                 C   s<   dd„ }t  |t ddgtj¡¡}t||ƒddgdd� d S )Nc                 S   s(   t j| d d | d d gt jd�d S )Nr   éd   r.   iè  ©Zdtyper-   )r   r
   Úfloat32rf   r   r   r   rW   °   s    z%TestFSolve.test_float32.<locals>.funcr.   r   çü©ñÒMbP?©Úatol)r   rF   r   r
   rz   r   )r   rW   Úpr   r   r   Útest_float32¯   s    zTestFSolve.test_float32c           	         sh   ‡ fdd„}t  dd¡}d}tg d¢ƒ}tj||||fdd�\}}}}t|t  d¡ƒ t|dk|ƒ d S )	Nc                     s   ˆ   ¡  t| Ž S r   )rL   r5   r\   ©r   r   r   rW   ¶   s    z,TestFSolve.test_reentrant_func.<locals>.funcr=   r>   r?   TrB   r.   )r   rE   r
   r   rF   r   r   r   )	r   rW   r2   r1   rG   rH   rI   rJ   rK   r   r€   r   Útest_reentrant_funcµ   s    
þzTestFSolve.test_reentrant_funcc                    sR   ‡ fdd„}t  dd¡}d}tg d¢ƒ}tjt|||f|d�}t|t  d¡ƒ d S )Nc                     s   ˆ   ¡  t| Ž S r   )rP   r:   r\   r€   r   r   rb   Å   s    z3TestFSolve.test_reentrant_Dfunc.<locals>.deriv_funcr=   r>   r?   rM   )r   rE   r
   r   rF   r5   r   r   )r   rb   r2   r1   rG   rH   r   r€   r   Útest_reentrant_DfuncÄ   s    
þzTestFSolve.test_reentrant_Dfuncc                 C   s*   t | jgd ƒ}tdd„ |D ƒƒs&J ‚d S )Nru   c                 S   s   g | ]}|d u ‘qS r   r   ©Ú.0Úresultr   r   r   Ú
<listcomp>Ô   r'   z:TestFSolve.test_concurrent_no_gradient.<locals>.<listcomp>)r,   rL   Úall©r   Úvr   r   r   Útest_concurrent_no_gradientÒ   s    z&TestFSolve.test_concurrent_no_gradientc                 C   s*   t | jgd ƒ}tdd„ |D ƒƒs&J ‚d S )Nru   c                 S   s   g | ]}|d u ‘qS r   r   rƒ   r   r   r   r†   Ø   r'   z<TestFSolve.test_concurrent_with_gradient.<locals>.<listcomp>)r,   rP   r‡   rˆ   r   r   r   Útest_concurrent_with_gradientÖ   s    z(TestFSolve.test_concurrent_with_gradientN)r    r!   r"   rL   rP   rY   r^   rc   ri   rs   rw   r   r�   r‚   rŠ   r‹   r   r   r   r   r<   o   s   

r<   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestRootHybrc                 C   sH   t  dd¡}d}tg d¢ƒ}tjt|d||fd�j}t|t  d¡ƒ d S )Nr=   r>   r?   Úhybr©ÚmethodrC   ©	r   rE   r
   r   Úrootr5   r   r   r   rO   r   r   r   rL   Ü   s    ÿz.TestRootHybr.test_pressure_network_no_gradientc                 C   sL   t  dd¡}d}tg d¢gƒ}tjt|||fdtd�j}t|t  	d¡ƒ d S )Nr=   r>   r?   r�   ©rC   r�   r9   )
r   rE   r
   r   r‘   r5   r:   r   r   r   rO   r   r   r   rP   å   s    þz0TestRootHybr.test_pressure_network_with_gradientc                 C   sJ   t  dd¡}d}tg d¢ƒ}tjt|||fddd�j}t|t  d¡ƒ d S )Nr=   r>   r?   r�   Tr’   )	r   rE   r
   r   r‘   r;   r   r   r   rO   r   r   r   Ú,test_pressure_network_with_gradient_combinedï   s    þz9TestRootHybr.test_pressure_network_with_gradient_combinedN)r    r!   r"   rL   rP   r“   r   r   r   r   rŒ   Û   s   	
rŒ   c                   @   s   e Zd Zdd„ ZdS )Ú
TestRootLMc                 C   sH   t  dd¡}d}tg d¢ƒ}tjt|d||fd�j}t|t  d¡ƒ d S )Nr=   r>   r?   ÚlmrŽ   r�   rO   r   r   r   rL   ü   s    ÿz,TestRootLM.test_pressure_network_no_gradientN)r    r!   r"   rL   r   r   r   r   r”   û   s   r”   c                   @   s¤   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S )(ÚTestLeastSqc                 C   sj   t  ddd¡}d\}}}|| _|||f| _||d  ||  | }t j d¡ |dt j |j¡  | _d S )Nr   ru   é(   )gÍÌÌÌÌÌ@é*   g33333sÀr-   g{®Gáz„?)	r   Úlinspacer   ÚabcÚrandomÚseedZstandard_normalr   Úy_meas)r   r   ÚaÚbÚcZy_truer   r   r   Úsetup_method  s    
zTestLeastSq.setup_methodc                 C   s*   |\}}}|||d  ||  |  }|S ©Nr-   r   )r   r~   Úyr   rž   rŸ   r    Úerrr   r   r   Ú	residuals  s    
zTestLeastSq.residualsc                 C   s   t  |d |t  |¡g¡j S r¢   )r   ÚvstackÚ	ones_likeÚT)r   Ú_pZ_yr   r   r   r   Úresiduals_jacobian  s    zTestLeastSq.residuals_jacobianc                 C   sN   t g d¢ƒ}t| j|| j| jfd�\}}t|dv d| ƒ t|| jdd� d S )N©r   r   r   r\   ©r.   r-   rh   r=   úsolution not found (ier=%d)r-   ©Údecimal©r
   r   r¥   r�   r   r   r   rš   ©r   Úp0Ú
params_fitrJ   r   r   r   Ú
test_basic  s    
ÿ
zTestLeastSq.test_basicc                 C   sR   t g d¢ƒ}t| j|| j| jf| jd�\}}t|dv d| ƒ t|| jdd� d S )Nr«   ©rC   ÚDfunr¬   r­   r-   r®   )	r
   r   r¥   r�   r   rª   r   r   rš   r±   r   r   r   Útest_basic_with_gradient   s    
þ
z$TestLeastSq.test_basic_with_gradientc                 C   sL   t g d¢gƒ}t| j|| j| jfdd�}|\}}}}}t|dv d| ƒ d S )Nr«   TrB   r¬   úsolution not found: %s)r
   r   r¥   r�   r   r   )r   r²   rD   r³   Úcov_xÚinfodictrK   rJ   r   r   r   Útest_full_output)  s    
þzTestLeastSq.test_full_outputc           	      C   sd   t g d¢td�}t |dd�}t| j|| j| jfdd�}|\}}}}}t|dv d| ƒ t||ƒ d S )Nr«   ry   T)ÚcopyrB   r¬   r¸   )r
   r   r   r¥   r�   r   r   r   )	r   r²   Zp0_copyrD   r³   r¹   rº   rK   rJ   r   r   r   Útest_input_untouched1  s    
þz TestLeastSq.test_input_untouchedc                 C   s$   t dƒ}ddg}tttj||ƒ d S rQ   ©r   rT   rU   r   r   rV   r   r   r   rY   ;  s    z*TestLeastSq.test_wrong_shape_func_callablec                 C   s    ddg}t ttjt|dd� d S rZ   )rT   rU   r   r   r$   r]   r   r   r   r^   B  s    z*TestLeastSq.test_wrong_shape_func_functionc                 C   s,   t dƒ}t dƒ}tttj|ddg|d� d S )Nr.   r_   r   ©rX   r¶   r¾   ra   r   r   r   Útest_wrong_shape_Dfun_callableH  s    z*TestLeastSq.test_wrong_shape_Dfun_callablec                 C   s,   dd„ }dd„ }t ttj|ddg|d� d S )Nc                 S   s
   t | dƒS rd   re   rf   r   r   r   rW   N  s    z8TestLeastSq.test_wrong_shape_Dfun_function.<locals>.funcc                 S   s
   t | dƒS rg   re   rf   r   r   r   rb   P  s    z>TestLeastSq.test_wrong_shape_Dfun_function.<locals>.deriv_funcr   r.   r¿   ©rT   rU   r   r   ra   r   r   r   Útest_wrong_shape_Dfun_functionM  s    z*TestLeastSq.test_wrong_shape_Dfun_functionc                 C   s–   dd„ }t jg d¢t jd�}t jg d¢t jd�}t  g d¢¡}tj||||fd�\}}t|dv ƒ t||||ƒd	  ¡ d
||||ƒd	  ¡  k ƒ d S )Nc                 S   s@   | d t  || d  d  d| d d   ¡ | d  }|| S )Nr   r.   r-   r@   rh   ©r   Úexp)r~   r   r£   Úqr   r   r   rW   V  s    8z&TestLeastSq.test_float32.<locals>.func)
gš™™™™™÷?gw¾Ÿ/Ýö?g%�•C‹ö?gNbX9´ö?gHáz®G÷?gçû©ñÒMø?gZd;ßO�÷?gÙÎ÷Sãõ?gú~j¼t“ô?gV-²ó?ry   )
gŒJê4‘?g¥N@aÃ“?g^KÈ=›•?gM„O¯”?gßà“©‚‘?g?W[±¿ìŽ?g‹lçû©ñ’?g³{ò°Pkš?gœÄ °rh¡?gõÛ×�sF¤?)ç      ð?rÆ   rÆ   rÆ   r\   r¬   r-   g-Cëâ6?)r   r
   rz   r   r   r   r/   )r   rW   r   r£   r²   Úp1Úsuccessr   r   r   r   T  s    
ÿ
ÿzTestLeastSq.test_float32c                 C   sH   dd„ }t tdd��  tj|dgd� W d   ƒ n1 s:0    Y  d S )Nc                  W   s   t dƒ‚d S rj   rl   r\   r   r   r   rW   e  s    z-TestLeastSq.test_func_can_raise.<locals>.funcrk   rn   r   rp   ©rT   rm   r   r   rr   r   r   r   rs   d  s    zTestLeastSq.test_func_can_raisec                 C   sR   dd„ }dd„ }t tdd��" tj|dg|d� W d   ƒ n1 sD0    Y  d S )	Nc                 S   s   | t  dg¡ S rt   rv   rf   r   r   r   rW   l  s    z-TestLeastSq.test_Dfun_can_raise.<locals>.funcc                  W   s   t dƒ‚d S rj   rl   r\   r   r   r   rb   o  s    z3TestLeastSq.test_Dfun_can_raise.<locals>.deriv_funcrk   rn   r   r¿   rÉ   ra   r   r   r   rw   k  s    zTestLeastSq.test_Dfun_can_raisec                    sX   ‡ fdd„}t g d¢ƒ}t||ˆ jˆ jfd�\}}t|dv d| ƒ t|ˆ jdd� d S )	Nc                     s   ˆ   ¡  ˆ j| Ž S r   )r´   r¥   r\   r€   r   r   rW   v  s    z-TestLeastSq.test_reentrant_func.<locals>.funcr«   r\   r¬   r­   r-   r®   )r
   r   r�   r   r   r   rš   )r   rW   r²   r³   rJ   r   r€   r   r�   u  s    
ÿ
zTestLeastSq.test_reentrant_funcc                    s\   ‡ fdd„}t g d¢ƒ}tˆ j|ˆ jˆ jf|d�\}}t|dv d| ƒ t|ˆ jdd� d S )	Nc                     s   ˆ   ¡  ˆ j| Ž S r   )r´   rª   r\   r€   r   r   rb   ‚  s    z3TestLeastSq.test_reentrant_Dfun.<locals>.deriv_funcr«   rµ   r¬   r­   r-   r®   r°   )r   rb   r²   r³   rJ   r   r€   r   Útest_reentrant_Dfun�  s    
þ
zTestLeastSq.test_reentrant_Dfunc                 C   s*   t | jgd ƒ}tdd„ |D ƒƒs&J ‚d S )Nru   c                 S   s   g | ]}|d u ‘qS r   r   rƒ   r   r   r   r†   �  r'   z;TestLeastSq.test_concurrent_no_gradient.<locals>.<listcomp>)r,   r´   r‡   rˆ   r   r   r   rŠ   Ž  s    z'TestLeastSq.test_concurrent_no_gradientc                 C   s*   t | jgd ƒ}tdd„ |D ƒƒs&J ‚d S )Nru   c                 S   s   g | ]}|d u ‘qS r   r   rƒ   r   r   r   r†   ”  r'   z=TestLeastSq.test_concurrent_with_gradient.<locals>.<listcomp>)r,   r·   r‡   rˆ   r   r   r   r‹   ’  s    z)TestLeastSq.test_concurrent_with_gradientc                 C   sJ   dd„ }t tdd��" tj|ddgd� W d   ƒ n1 s<0    Y  d S )Nc                 S   s   d| d d d  d S )Nr-   r   rh   r.   r   rf   r   r   r   rW   ˜  s    z=TestLeastSq.test_func_input_output_length_check.<locals>.funcz+Improper input: func input vector length N=rn   r   r.   rp   rÁ   rr   r   r   r   Ú#test_func_input_output_length_check–  s
    ÿz/TestLeastSq.test_func_input_output_length_checkN)r    r!   r"   r¡   r¥   rª   r´   r·   r»   r½   rY   r^   rÀ   rÂ   r   rs   rw   r�   rÊ   rŠ   r‹   rË   r   r   r   r   r–     s&   		

r–   c                   @   s~  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zedd„ ƒZej dg d¢¡dd„ ƒZej dg d¢¡dd„ ƒZej dddg¡ej dg d¢¡dd„ ƒƒZd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zej d6d7d8g¡d9d:„ ƒZd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$ej %dE¡dFdG„ ƒZ&dHdI„ Z'dJdK„ Z(dLS )MÚTestCurveFitc                 C   s    t g d¢ƒ| _t g d¢ƒ| _d S )N)rÆ   gš™™™™™	@ç      #@gffffff+@)rÆ   r@   ç      @g      @)r
   r£   r   r€   r   r   r   r¡   ¡  s    zTestCurveFit.setup_methodc           
      C   s�   dd„ }t || j| jƒ\}}tt|ƒdkƒ t|jdkƒ t|d ddd� t|d	 d
dd� t || j| jddd�}|\}}}}}	t||ƒ d S )Nc                 S   s   | | S r   r   ©r   rž   r   r   r   rW   ¦  s    z,TestCurveFit.test_one_argument.<locals>.funcr.   )r.   r.   r   g3Ä±.n£þ?r=   r®   )r   r   g-Cëâ6Z?F)rD   Úcheck_finite)r   r   r£   r   r(   r   r   r   )
r   rW   ÚpoptÚpcovÚresÚpopt2Úpcov2rº   ÚerrmsgrJ   r   r   r   Útest_one_argument¥  s    ÿzTestCurveFit.test_one_argumentc                 C   sj   dd„ }t || j| jƒ\}}tt|ƒdkƒ t|jdkƒ t|ddgdd� t|d	d
gd
dggdd� d S )Nc                 S   s   || |  S r   r   ©r   rž   rŸ   r   r   r   rW   ¶  s    z,TestCurveFit.test_two_argument.<locals>.funcr-   r_   çñcÌ]KÈü?çà-� ò?r=   r®   çäƒžÍªÏµ?çTã¥›Ä À¿ç·bÙ=yÈ?)r   r   r£   r   r(   r   r   )r   rW   rÑ   rÒ   r   r   r   Útest_two_argumentµ  s    ÿzTestCurveFit.test_two_argumentc                 C   sh   G dd„ dƒ}|ƒ }t |j| j| jƒ\}}t|jdkƒ t|ddgdd� t|dd	gd	d
ggdd� d S )Nc                   @   s   e Zd ZdZdd„ ZdS )z8TestCurveFit.test_func_is_classmethod.<locals>.test_selfz”This class tests if curve_fit passes the correct number of
               arguments when the model function is a class instance method.
            c                 S   s   |||  S r   r   )r   r   rž   rŸ   r   r   r   rW   Å  s    z=TestCurveFit.test_func_is_classmethod.<locals>.test_self.funcN)r    r!   r"   r#   rW   r   r   r   r   Ú	test_selfÀ  s   rß   r_   rÙ   rÚ   r=   r®   rÛ   rÜ   rÝ   )r   rW   r   r£   r   r   r   )r   rß   Ztest_self_instrÑ   rÒ   r   r   r   Útest_func_is_classmethod¿  s    ÿz%TestCurveFit.test_func_is_classmethodc                 C   sP   g d¢}g d¢}g d¢}g d¢}dd„ }t ||||dd�\}}t||d	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ï9°l?rá   )gäƒžÍjñ�@gºÂj¬ñ�@g…”ŸT{7›@g|'f½ØÉ˜@g ‘Æž„?g©„'ôšËŠ@c                 S   sL   |t  | | d  d|d   ¡ |t  | | d  d|d   ¡  | S )Nr-   r@   rÃ   )r   rX   Úx1ZA0ÚA1Úsigmar    r   r   r   Úf_double_gaussÜ  s
    ""ÿÿz9TestCurveFit.test_regression_2639.<locals>.f_double_gaussi'  ©Úmaxfevgñhãˆµøä>©Úrtol)r   r   )r   r   r£   ÚguessZgoodræ   rÑ   rÒ   r   r   r   Útest_regression_2639Ï  s    z!TestCurveFit.test_regression_2639c              
   C   s  t  g d¢¡}t  g d¢¡}t  g d¢¡}dd„ }dD �]}t|||ddg||d	�\}}t  t  |¡¡}t|d
dgdd� t|||ddgd| |d	�\}}t  t  |¡¡}t|d
dgdd� t|||ddg|d|d�\}}t  t  |¡¡}	t|	ddgdd� t|||ddgd| d|d�\}}t  t  |¡¡}	t|	ddgdd� q6dd„ }
t  t jgd ¡ dd¡}tƒ �^}| 	t
d¡ t|
||ddg|d�\}}t||d d… |d d… ddgd�\}}W d   ƒ n1 �sÐ0    Y  t|jdkƒ t||ƒ t|jdkƒ t||ƒ d S )N)r   r.   r-   rh   r=   é   )r.   r.   rí   é   é   é   )r.   r-   r.   r-   r.   r-   c                 S   s   ||  | S r   r   rØ   r   r   r   r%   ç  s    z!TestCurveFit.test_pcov.<locals>.f©r•   ÚtrfÚdogboxr-   r   )r²   rå   r�   g´N"ãÍqÊ?g²~uM/Nâ?r{   ré   rh   T)r²   rå   Úabsolute_sigmar�   g´ÁO=N¨Ó?g5=¬`é6ë?gŽ¢÷[u|í?gè-�/i@c                 S   s   ||  S r   r   rØ   r   r   r   Úf_flat  s    z&TestCurveFit.test_pcov.<locals>.f_flatr=   z3Covariance of the parameters could not be estimated)r²   rå   ©r²   r_   )r   r
   r   Úsqrtr6   r   ÚinfZreshaper   Úfilterr   r   r   r   )r   ÚxdataÚydatarå   r%   r�   rÑ   rÒ   Zperr_scaledZperrrõ   Zpcov_expectedÚsupÚpopt1Úpcov1r   r   r   Ú	test_pcovâ  sJ    
ÿ
ÿ
ÿ
ÿ
ÿH
zTestCurveFit.test_pcovc                 C   s:   dd„ }g d¢}g d¢}t t|||ƒd ddgdd	� d S )
Nc                 S   s   ||  | S r   r   rØ   r   r   r   Úf_linear  s    z.TestCurveFit.test_array_like.<locals>.f_linearr¬   )rh   rí   rî   é	   r   r-   r.   g»½×Ùß|Û=r|   )r   r   )r   r   r   r£   r   r   r   Útest_array_like  s    zTestCurveFit.test_array_likec                 C   s4   t  g d¢¡}t  g d¢¡}tttdd„ ||ƒ d S )N)r.   r-   rh   r=   rí   é   )r.   r-   rh   r=   g      @r  c                 S   s   ||  S r   r   rØ   r   r   r   r&      r'   z<TestCurveFit.test_indeterminate_covariance.<locals>.<lambda>)r   r
   r   r   r   ©r   rú   rû   r   r   r   Útest_indeterminate_covariance  s
    
ÿz*TestCurveFit.test_indeterminate_covariancec                 C   sl   t  dt jdg¡}t  g d¢¡}tttdd„ ||ƒ tttdd„ ||ƒ tttdd„ ||fi dd	i¤Ž d S )
Nr.   rh   ©r.   r-   rh   c                 S   s   ||  | S r   r   rØ   r   r   r   r&   *  r'   z0TestCurveFit.test_NaN_handling.<locals>.<lambda>c                 S   s   ||  | S r   r   rØ   r   r   r   r&   ,  r'   c                 S   s   ||  | S r   r   rØ   r   r   r   r&   .  r'   rÐ   T)r   r
   ÚnanrT   rm   r   r  r   r   r   Útest_NaN_handling"  s    
ÿ
ÿÿÿzTestCurveFit.test_NaN_handlingc                 C   s,  | |||ddœ}d}t t|d��( tf i |¤dddœ¤Ž W d   ƒ n1 sN0    Y  t tdd��& tf i |¤d	d
i¤Ž W d   ƒ n1 s�0    Y  tf i |¤d	di¤Ž\}}	||d< ||d< tf i |¤Ž\}
}	t||
ƒ d}t t|d��& tf i |¤d	di¤Ž W d   ƒ n1 �s0    Y  d S )NF)r%   rú   rû   r�   rÐ   z;`nan_policy='propagate'` is not supported by this function.rn   Ú	propagateiÐ  )Ú
nan_policyrè   zThe input contains nanr
  ÚraiseZomitrú   rû   z3nan_policy must be one of {'None', 'raise', 'omit'}Úhi)rT   rm   r   r   )r%   Úxdata_with_nanÚxdata_without_nanÚydata_with_nanÚydata_without_nanr�   ÚkwargsÚ	error_msgZresult_with_nanÚ_Zresult_without_nanr   r   r   Ú_check_nan_policy1  s     ÿ64
zTestCurveFit._check_nan_policyr�   rñ   c                 C   sn   dd„ }t  ddt jddt jg¡}t  ddddt jdg¡}t  g d	¢¡}t  g d
¢¡}|  ||||||¡ d S )Nc                 S   s   ||  | S r   r   rØ   r   r   r   r%   O  s    z*TestCurveFit.test_nan_policy_1d.<locals>.fr-   rh   r=   r.   rí   rî   )r-   rh   r=   r  ©r   r
   r  r  ©r   r�   r%   r  r  r  r  r   r   r   Útest_nan_policy_1dM  s    
ÿzTestCurveFit.test_nan_policy_1dc              
   C   s’   dd„ }t  ddt jddt jdgddt jt jdt jdgg¡}t  ddddt jdd	g¡}t  g d
¢g d¢g¡}t  g d¢¡}|  ||||||¡ d S )Nc                 S   s0   | dd d …f }| dd d …f }|| | | S ©Nr   r.   r   ©r   rž   rŸ   rã   Zx2r   r   r   r%   \  s    z*TestCurveFit.test_nan_policy_2d.<locals>.fr-   rh   r=   rí   rî   r.   ru   ©r-   rh   rí   ©r-   rh   rî   ©r.   r-   ru   r  r  r   r   r   Útest_nan_policy_2dZ  s    ÿ
ÿzTestCurveFit.test_nan_policy_2dr8   r-   rh   c              
   C   sª   dd„ }t  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rN| ¡ n|}t  ddddt jdd	g¡}t  g d
¢g d¢gg¡}t  g d¢¡}|  ||||||¡ d S )Nc                 S   s<   | ddd d …f   ¡ }| ddd d …f   ¡ }|| | | S )N.r   r.   )Úsqueezer  r   r   r   r%   m  s    z,TestCurveFit.test_nan_policy_2_3d.<locals>.fr-   rh   r=   rí   rî   r.   ru   r  r  r  )r   r
   r  r  r  )r   r8   r�   r%   r  r  r  r  r   r   r   Útest_nan_policy_2_3dj  s    ÿ
ÿz!TestCurveFit.test_nan_policy_2_3dc                 C   s`   t ttdd„ g g ƒ t ttdd„ g g dd� t ttdd„ dgg ƒ t ttdd„ d	gg dd� d S )
Nc                 S   s   ||  S r   r   rÏ   r   r   r   r&   ~  r'   z0TestCurveFit.test_empty_inputs.<locals>.<lambda>c                 S   s   ||  S r   r   rÏ   r   r   r   r&     r'   )r.   r-   )Úboundsc                 S   s   ||  S r   r   rÏ   r   r   r   r&   �  r'   r.   c                 S   s   ||  S r   r   rÏ   r   r   r   r&   ‚  r'   r-   ©rT   rm   r   r€   r   r   r   Útest_empty_inputs|  s    ÿÿzTestCurveFit.test_empty_inputsc                 C   s    t ttdd„ ddgddgƒ d S )Nc                 S   s   | S r   r   rf   r   r   r   r&   ‡  r'   z8TestCurveFit.test_function_zero_params.<locals>.<lambda>r.   r-   rh   r=   r!  r€   r   r   r   Útest_function_zero_params…  s    z&TestCurveFit.test_function_zero_paramsc                 C   s.   t dd„ d dt d¡ ƒ\}}t|dgƒ d S )Nc                 S   s   |t  d¡ S rt   )r   Úarange)r  rž   r   r   r   r&   Š  r'   z*TestCurveFit.test_None_x.<locals>.<lambda>r-   ru   r@   )r   r   r$  r   )r   rÑ   rÒ   r   r   r   Útest_None_x‰  s    ÿzTestCurveFit.test_None_xc                 C   sf   dd„ }t  ddd¡}||ddƒ}dD ]&}t||||d�\}}t|ddgƒ q&ttt|||d	d� d S )
Nc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   r%   �  s    z,TestCurveFit.test_method_argument.<locals>.fr   r.   é   r@   ©rò   ró   r•   N©r�   Úunknown)r   r™   r   r   rT   rm   )r   r%   rú   rû   r�   rÑ   rÒ   r   r   r   Útest_method_argumentŽ  s    z!TestCurveFit.test_method_argumentc           
      C   sÀ   dd„ }t  ddd¡}||ddƒ}dD ]”}t||||dd	�\}}}}}	t|ddgƒ d
|v s`J ‚d|v slJ ‚|dks||d u r d|v sˆJ ‚d|v s”J ‚d|v s J ‚t|tƒs®J ‚|	dv s&J ‚q&d S )Nc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   r%   œ  s    z(TestCurveFit.test_full_output.<locals>.fr   r.   r&  r@   r'  T)r�   rD   ZnfevZfvecr•   ZfjacZipvtZqtfr¬   )r   r™   r   r   Ú
isinstanceÚstr)
r   r%   rú   rû   r�   rÑ   rÒ   rº   rÖ   rJ   r   r   r   r»   ›  s     
ÿzTestCurveFit.test_full_outputc              	   C   sÞ   dd„ }t  ddd¡}||ddƒ}ddg}dd	g}||f}t||ƒ}d
D ]H}t|||||d�\}	}
t|	d dƒ t|||||d�\}}t||	ƒ qHt|||dddgdt jgfd�\}	}
t|	d dƒ ttt||||dd� d S )Nc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   r%   °  s    z#TestCurveFit.test_bounds.<locals>.fr   r.   r&  r@   rÆ   rR   rÎ   )Nrò   ró   )r   r�   rò   rA   g333333ã?)r�   r   r•   )r   r™   r   r   r   rø   rT   rm   )r   r%   rú   rû   ZlbZubr   Zbounds_classr�   rÑ   rÒ   Z
popt_classZ
pcov_classr   r   r   Útest_bounds¯  s0    

ÿ
þ

ÿ
ÿzTestCurveFit.test_boundsc           	   	   C   s�   dd„ }t  dt j dt j d¡}t  |¡}dt j dt j f}dD ]F}t|||d	t j d
�\}}t|||d	t j ||d�\}}t||ƒ qDd S )Nc                 S   s   t  | | ¡S r   )r   ÚsinrÏ   r   r   r   r%   Ô  s    z&TestCurveFit.test_bounds_p0.<locals>.féþÿÿÿr-   r—   éýÿÿÿrh   ©rò   ró   gÍÌÌÌÌÌ @rö   )r²   r   r�   )r   r™   Úpir.  r   r   )	r   r%   rú   rû   r   r�   Zpopt_1r  Zpopt_2r   r   r   Útest_bounds_p0Ñ  s    
ÿ
zTestCurveFit.test_bounds_p0c           
   	   C   sè   dd„ }dd„ }t  ddd¡}||ddƒ}d	D ]2}d
D ](}t|||||d�\}}t|ddgƒ q6q.dD ](}t|||||d�\}}t|ddgƒ qfd|d< t  |jd ¡}	d|	d< dD ].}t||||	||d�\}}t|ddgdd� q´d S )Nc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   r%   å  s    z TestCurveFit.test_jac.<locals>.fc                 S   s*   t  | |  ¡}t  || |  | f¡jS r   ©r   rÄ   r¦   r¨   ©r   rž   rŸ   Úer   r   r   r9   è  s    z"TestCurveFit.test_jac.<locals>.jacr   r.   r&  r@   r1  )z2-pointz3-pointÚcs)r9   r�   r-   rñ   ©r�   r9   rx   rí   éÈ   )rå   r�   r9   r{   ré   )r   r™   r   r   r   r   )
r   r%   r9   rú   rû   r�   ÚschemerÑ   rÒ   rå   r   r   r   Útest_jacâ  s*    
ÿ
ÿ
zTestCurveFit.test_jacc                 C   sh   t  dd¡}d| }tdd„ ||ddd�\}}td	d„ ||ddd
�\}}t|ddd� t|ddd� d S )Nr   ru   r-   c                 S   s   ||  S r   r   ©r   r~   r   r   r   r&     r'   z5TestCurveFit.test_maxfev_and_bounds.<locals>.<lambda>)r   rh   rx   )r   rè   c                 S   s   ||  S r   r   r<  r   r   r   r&     r'   )r   Zmax_nfevç›+¡†›„=r|   )r   r$  r   r   )r   r   r£   rý   r  rÔ   r   r   r   Útest_maxfev_and_bounds  s    z#TestCurveFit.test_maxfev_and_boundsc              
   C   sà   dd„ }dd„ }t j d¡ t  ddd¡}||dd	ƒ}|d
t jjt|ƒd�  }t  t|ƒ¡d
 }t  |d ¡}||fdfD ]^\}}	dD ]P}
t||||||
d�\}}t|||||	|
d�\}}t	||dd� t	||dd� qˆq|d S )Nc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   rW     s    z9TestCurveFit.test_curvefit_simplecovariance.<locals>.funcc                 S   s*   t  | |  ¡}t  || |  | f¡jS r   r4  r5  r   r   r   r9     s    z8TestCurveFit.test_curvefit_simplecovariance.<locals>.jacr   r=   é2   ç      @çÍÌÌÌÌÌô?çš™™™™™É?©Úsizer-   ©NN©FT©rå   r9   rô   r=  r|   )
r   r›   rœ   r™   Únormalr(   Úzerosr6   r   r   )r   rW   r9   rú   r£   rû   rå   ÚcovarÚjac1Újac2rô   rý   rþ   rÔ   rÕ   r   r   r   Útest_curvefit_simplecovariance  s$    
ÿ

ÿ
z+TestCurveFit.test_curvefit_simplecovariancec              
   C   sV  dd„ }dd„ }dd„ }dd„ }t j d	¡ t  d
d¡}||ddƒ}|dt jjt|ƒd�  }t  t|ƒ¡d }t  |d ¡}	t  dt  	d¡ dt  	d¡ d	gdt  	d¡ dt  	d¡ d	gg d¢g¡}
|
 
|¡}|
 
|	¡ 
|
j¡}||fdfD ]b\}}dD ]T}t||||||d�\}}t||||||d�\}}t||ddd� t||ddd� qúqîd S )Nc                 S   sb   t  dt  d¡ dt  d¡ dgdt  d¡ dt  d¡ dgg d¢g¡}| |t  | |  ¡ ¡S ©NrÆ   r-   ç      ð¿r   ©r   r   rÆ   )r   r
   r÷   ÚdotrÄ   )r   rž   rŸ   Úrotnr   r   r   Úfuncp.  s
     þz4TestCurveFit.test_curvefit_covariance.<locals>.funcpc                 S   sx   t  dt  d¡ dt  d¡ dgdt  d¡ dt  d¡ dgg d¢g¡}t  | |  ¡}| t  || |  | f¡j¡S rN  )r   r
   r÷   rÄ   rQ  r¦   r¨   )r   rž   rŸ   rR  r6  r   r   r   Újacp4  s     þz3TestCurveFit.test_curvefit_covariance.<locals>.jacpc                 S   s   |t  | |  ¡ S r   rÃ   rØ   r   r   r   rW   ;  s    z3TestCurveFit.test_curvefit_covariance.<locals>.funcc                 S   s*   t  | |  ¡}t  || |  | f¡jS r   r4  r5  r   r   r   r9   >  s    z2TestCurveFit.test_curvefit_covariance.<locals>.jacr   r.   r=   r@  rÆ   rB  rC  r-   rO  rP  rE  rF  rG  g+i¤)+€>r=  )rê   r}   )r   r›   rœ   r$  rH  r(   rI  r6   r
   r÷   rQ  r¨   r   r   )r   rS  rT  rW   r9   rú   r£   rû   rå   rJ  rR  ZydatapZcovarprK  rL  rô   rý   rþ   rÔ   rÕ   r   r   r   Útest_curvefit_covariance,  s4     þ

ÿ

ÿ
z%TestCurveFit.test_curvefit_covariancerô   FTc                 C   s`   dd„ }| j | j }}t|||d|d�\}}t|||t |d¡|d�\}}t ||k¡s\J ‚d S )Nc                 S   s   ||  | S r   r   rØ   r   r   r   rW   `  s    z5TestCurveFit.test_curvefit_scalar_sigma.<locals>.funcr-   )rå   rô   )r   r£   r   r   Z	full_liker‡   )r   rô   rW   r   r£   r  rþ   rÕ   r   r   r   Útest_curvefit_scalar_sigma^  s    ÿ
z'TestCurveFit.test_curvefit_scalar_sigmac           	   
   C   sÞ   t  dd¡}d| d dt  |¡  }dd„ }dD ]¦}t jt jfD ]”}t jt jfD ]}| |¡}| |¡}qRt ¡ �R t d	t	¡ t
||||d
�\}}t  |¡ ¡ s¨J ‚t  |d¡r¸J ‚W d   ƒ qB1 sÌ0    Y  qBq2d S )Nr0  rí   rR   rÎ   r>   c                 S   s   ||  | S r   r   rØ   r   r   r   rW   p  s    z&TestCurveFit.test_dtypes.<locals>.funcrñ   Úerrorr(  r.   )r   r$  r.  rz   r   ÚastypeÚwarningsÚcatch_warningsÚsimplefilterr   r   Úisfiniter‡   Zallclose)	r   r   r£   rW   r�   ZdtxZdtyr~   Úcovr   r   r   Útest_dtypesk  s    

zTestCurveFit.test_dtypesc                 C   sº   dd„ }t  g d¢¡}t  g d¢¡}t  g d¢¡}g d¢}t  g d¢¡}||g|¢R Ž }t||||||fd�\}}	| t j¡}||g|¢R Ž }t||||||fd�\}
}	t|
|d	d
� d S )Nc                 S   sJ   || d }|| d }||| |   |t  | | d |d d  ¡  S )Nr-   r=   )r   r÷   )r   Zs_1Zs_2Zo_xZo_yr    Zb_2Zb_1r   r   r   Ú	hyperbolaƒ  s    z,TestCurveFit.test_dtypes2.<locals>.hyperbola)g      ÀrA   ç       Àg      $ÀrA   )rA   rÎ   rÎ   rA   g      $@)g«ªªªªªê¿gUUUUUUõ?rÆ   g      Àr>   )r/  gš™™™™™Ù?éÿÿÿÿéûÿÿÿrÍ   )iàÿÿÿiðÿÿÿiøÿÿÿr=   r=   rï   é   é    )r%   rú   rû   r²   r   gñhãˆµøô>r|   )r   r
   r   rX  rz   r   )r   r_  Zmin_fitZmax_fitrë   Úparamsrú   rû   Zpopt_64r  Zpopt_32r   r   r   Útest_dtypes2€  s     
ÿ

ÿ
zTestCurveFit.test_dtypes2c                    s€   t  d¡}d|d  d|  t j t|ƒ¡ ‰ ‡ fdd„}dD ]<}t||t  |¡|d�\}}t||d	|d�\}}t||ƒ q>d S )
Nru   gÍÌÌÌÌÌ@r-   g      @c                    s   || d  ||   ˆ  S r¢   r   rØ   ©Útargetr   r   Úfit_funcŸ  s    z/TestCurveFit.test_broadcast_y.<locals>.fit_funcrñ   )rú   rû   r�   r   )r   r$  r›   Zrandr(   r   Z
zeros_liker   )r   rú   ri  r�   Zpopt0Zpcov0rý   rþ   r   rg  r   Útest_broadcast_yœ  s    
$ý
ý
zTestCurveFit.test_broadcast_yc                 C   sP   dd„ }t tƒ�, t|g d¢g d¢dgdd� W d   ƒ n1 sB0    Y  d S )Nc                 S   s   ||  | S r   r   rØ   r   r   r   rW   ¯  s    z.TestCurveFit.test_args_in_kwargs.<locals>.funcr¬   ©rí   r  é   é   r.   r[   )rú   rû   r²   rC   r!  rr   r   r   r   Útest_args_in_kwargs¬  s    
üz TestCurveFit.test_args_in_kwargsc                 C   sN   dd„ }t tdd��& t|g d¢g d¢d� W d   ƒ n1 s@0    Y  d S )Nc                 S   s    |t  | |  ¡ | | | S r   rÃ   ©r   rž   rŸ   r    Údr6  r   r   r   rW   º  s    z<TestCurveFit.test_data_point_number_validation.<locals>.funczThe number of func parameters=rn   r¬   rk  )rú   rû   )rT   rU   r   rr   r   r   r   Ú!test_data_point_number_validation¹  s    þz.TestCurveFit.test_data_point_number_validationzignore::RuntimeWarningc           	      C   s˜   dd„ }t j d¡}d}t  |¡}t  dd|¡| |¡ }tj|||dd�\}}t  t  |¡d	k¡shJ ‚t	 
|¡d	 }t  |d
k¡sˆJ ‚t||jƒ d S )Nc                 S   s0   |t  | d | ¡ |t  | d | ¡  | S ©Nr.   ©r   Úlogro  r   r   r   r%   È  s    z#TestCurveFit.test_gh4555.<locals>.fì   MI9V$O-rx   r-   rî   i † rç   r   g{®Gáz„¿)r   r›   Údefault_rngr$  r™   r   r   r‡   r6   r   Zeighr   r¨   )	r   r%   Úrngr8   r   r£   r~   r]  Zeigsr   r   r   Útest_gh4555Â  s    
zTestCurveFit.test_gh4555c           
      C   s€   t j d¡}dd„ }t  ddd¡}||ddd	ƒ}d
|j|jd� }|| }t|||ƒ\}}g d¢g d¢g d¢g}	t||	dƒ d S )Nru  c                 S   s   |t  | |  ¡ | S r   rÃ   )r   rž   rŸ   r    r   r   r   rW   Û  s    z'TestCurveFit.test_gh4555b.<locals>.funcr   r=   r?  r@  rA  r>   rB  rC  )gƒt¢^G�?çd£*.æX|?ç�ÓTû}H¿)ry  g×1”©xÿ”?çuô`v?)rz  r{  gšonÁ2Íf?gH¯¼šò×Š>)r   r›   rv  r™   rH  rD  r   r   )
r   rw  rW   rú   r£   Zy_noiserû   r  rÓ   Úrefr   r   r   Útest_gh4555bÖ  s    þzTestCurveFit.test_gh4555bc                    s€   t j d¡}t  ddd¡}d| d |jdd�d  }‡fd	d
„‰‡ fdd„‰ d ˆ_d ˆ _t  ddg¡}tˆ|||dˆ d� d S )Nl   ¾FÂjGbð r   rh   ée   r-   r.   rC  r>   c                    s.   t  ˆ j|k¡rJ ‚|ˆ _| |d  |d  S r  )r   r‡   Úlast_pr<  )Úliner   r   r€  ó  s    z'TestCurveFit.test_gh13670.<locals>.linec                    s0   t  ˆ j|k¡rJ ‚|ˆ _t  | t  | ¡g¡jS r   )r   r‡   r  r
   r§   r¨   r<  )r9   r   r   r9   ø  s    z&TestCurveFit.test_gh13670.<locals>.jacrÆ   g      @r•   r8  )r   r›   rv  r™   rH  r  r
   r   )r   rw  r   r£   r²   r   )r9   r€  r   Útest_gh13670ê  s    zTestCurveFit.test_gh13670N))r    r!   r"   r¡   r×   rÞ   rà   rì   rÿ   r  r  r  Ústaticmethodr  ÚpytestÚmarkZparametrizer  r  r  r"  r#  r%  r*  r»   r-  r3  r;  r>  rM  rU  rV  r^  rf  rj  rn  rq  Úfilterwarningsrx  r}  r�  r   r   r   r   rÌ      sP   
0	


	"$2
	

rÌ   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚTestFixedPointc                 C   s$   dd„ }d}t ||ƒ}t|dƒ d S )Nc                 S   s   d|  S ©Nr@   r   rf   r   r   r   rW     s    z0TestFixedPoint.test_scalar_trivial.<locals>.funcrÆ   rA   ©r   r   ©r   rW   rX   r   r   r   r   Útest_scalar_trivial  s    
z"TestFixedPoint.test_scalar_trivialc                 C   s$   dd„ }d}t ||ƒ}t|dƒ d S )Nc                 S   s   | d S r¢   r   rf   r   r   r   rW     s    z/TestFixedPoint.test_scalar_basic1.<locals>.funcçÍÌÌÌÌÌð?rÆ   rˆ  r‰  r   r   r   Útest_scalar_basic1  s    
z!TestFixedPoint.test_scalar_basic1c                 C   s$   dd„ }d}t ||ƒ}t|dƒ d S )Nc                 S   s   | d S ©Nr>   r   rf   r   r   r   rW     s    z/TestFixedPoint.test_scalar_basic2.<locals>.funcr‹  rÆ   rˆ  r‰  r   r   r   Útest_scalar_basic2  s    
z!TestFixedPoint.test_scalar_basic2c                 C   sX   dd„ }ddg}t jdd�� t||ƒ}W d   ƒ n1 s<0    Y  t|ddgƒ d S )Nc                 S   s   d|  S r‡  r   rf   r   r   r   rW     s    z/TestFixedPoint.test_array_trivial.<locals>.funcg333333Ó?g333333Ã?Úignore©r‡   rA   )r   Úerrstater   r   r‰  r   r   r   Útest_array_trivial  s
    (z!TestFixedPoint.test_array_trivialc                 C   sj   dd„ }t g d¢ƒ}g d¢}tjdd��  t|||fd�}W d   ƒ n1 sN0    Y  t|d| ƒ d S )	Nc                 S   s   || d  S r¢   r   ©r   r    r   r   r   rW   '  s    z.TestFixedPoint.test_array_basic1.<locals>.func©g      è?rÆ   g      ô?)çš™™™™™ñ?gffffffò?gÍÌÌÌÌÌì?r�  r�  r\   rÆ   )r
   r   r‘  r   r   ©r   rW   r    rX   r   r   r   r   Útest_array_basic1%  s    .z TestFixedPoint.test_array_basic1c                 C   s>   dd„ }t g d¢ƒ}g d¢}t|||fd�}t||d ƒ d S )Nc                 S   s   || d  S r�  r   r“  r   r   r   rW   1  s    z.TestFixedPoint.test_array_basic2.<locals>.funcr”  )gš™™™™™é?r•  r•  r\   r-   )r
   r   r   r–  r   r   r   Útest_array_basic2/  s
    z TestFixedPoint.test_array_basic2c                 C   sD   t dd„ ddddd�}t|t d| ¡d	 ƒ t|td
ƒd ƒ d S )Nc                 S   s   t  d|  ¡d S )Nr`  r@   rÃ   )Úxxr   r   r   r&   :  r'   z.TestFixedPoint.test_lambertw.<locals>.<lambda>rÆ   r   gê-�™—q=iô  )rC   ZxtolÚmaxiterr`  r@   r.   r-   )r   r   r   rÄ   r   )r   Zxxrootr   r   r   Útest_lambertw8  s
    
ÿzTestFixedPoint.test_lambertwc                    s`   d‰d‰d}d}|d | ˆˆ | d|d    ‰ ‡ ‡‡fdd„}t ||dd	�}t||ƒ d S )
Nr-   r  rA  gj¼t“ð?r.   c                    s,   t  ˆˆ |  ¡t  ˆ |  | d  ¡ d S rr  rs  )r8   ©Zi0ÚklÚksr   r   rW   G  s    z1TestFixedPoint.test_no_acceleration.<locals>.funcÚ	iterationr(  )r   r   )r   ÚmZn0rW   r8   r   rœ  r   Útest_no_acceleration?  s    $z#TestFixedPoint.test_no_accelerationN)r    r!   r"   rŠ  rŒ  rŽ  r’  r—  r˜  r›  r¡  r   r   r   r   r†    s   
	r†  ),r#   rY  rƒ  Znumpy.testingr   r   r   r   r   r   r   r	   rT   Únumpyr   r
   r   Zmultiprocessing.poolr   Zscipyr   r   Zscipy.specialr   Zscipy.optimize._minpack_pyr   r   r   Zscipy.optimizer   Zscipy.optimize._minimizer   r   r$   r,   r5   r:   r;   r<   rŒ   r”   r–   rÌ   r†  r   r   r   r   Ú<module>   s:   $	l      g