o
    Ö­j)¯  ã                   @   sT  d Z ddlZddlZddlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlZddlmZmZ ddlmZ ddlmZmZ ddlmZ dd	lmZmZmZ dd
lmZ ddlm Z  G dd„ 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,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   ú^/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/optimize/tests/test_minpack.pyÚ__init__   ó   
zReturnShape.__init__c                 C   s   t  | j¡S r   )ÚnpÚonesr   )r   Úxr   r   r   Ú__call__!   ó   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 sw   Y  d S )Nc                 S   s   | ƒ S r   r   )Úfr   r   r   Ú<lambda>.   s    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   ÚhstackÚsum)Ú
flow_ratesÚQtotÚkÚPÚFr   r   r   Úpressure_network5   s   &r7   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   )r2   r3   r4   ÚnÚpdiffÚjacr   r   r   Úpressure_network_jacobianT   s   6 r=   c                 C   s   t | ||ƒt| ||ƒfS r   )r7   r=   )r2   r3   r4   r   r   r   Úpressure_network_fun_and_gradk   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é   ç      à?©ç       @ç        rC   rD   T©ÚargsÚfull_outputr/   )	r   Úfullr
   r   Úfsolver7   r   r   r   )r   r4   r3   Úinitial_guessÚfinal_flowsÚinfoÚierÚmesgr   r   r   Ú!test_pressure_network_no_gradientq   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@   rA   rB   ©rF   Úfprime)	r   rH   r
   r   rI   r7   r=   r   r   ©r   r4   r3   rJ   rK   r   r   r   Ú#test_pressure_network_with_gradient|   s   
þz.TestFSolve.test_pressure_network_with_gradientc                 C   ó$   t dƒ}ddg}tttj||ƒ d S ©Nr/   ç      ø?rC   ©r   Úassert_raisesÚ	TypeErrorr   rI   ©r   ÚfuncÚx0r   r   r   Útest_wrong_shape_func_callable†   ó   z)TestFSolve.test_wrong_shape_func_callablec                 C   ó    ddg}t ttjt|dd� d S ©NrV   rC   )©r/   ©rF   )rX   rY   r   rI   r&   ©r   r\   r   r   r   Útest_wrong_shape_func_function�   ó   z)TestFSolve.test_wrong_shape_func_functionc                 C   ó,   t dƒ}t dƒ}tttj|ddg|d� d S )Nr/   ©r.   r.   r   ©r\   rQ   rW   ©r   r[   Ú
deriv_funcr   r   r   Ú test_wrong_shape_fprime_callable“   ó   z+TestFSolve.test_wrong_shape_fprime_callablec                 C   ó,   dd„ }dd„ }t ttj|ddg|d� d S )Nc                 S   ó
   t | dƒS ©N)r.   ©r&   ©r   r   r   r   r[   ™   r   z9TestFSolve.test_wrong_shape_fprime_function.<locals>.funcc                 S   rn   ©N)é   rs   rp   rq   r   r   r   rj   ›   r   z?TestFSolve.test_wrong_shape_fprime_function.<locals>.deriv_funcr   r/   rh   )rX   rY   r   rI   ri   r   r   r   Ú test_wrong_shape_fprime_function˜   ó   z+TestFSolve.test_wrong_shape_fprime_functionc                 C   óJ   dd„ }t tdd�� tj|dgd� W d   ƒ d S 1 sw   Y  d S )Nc                  W   ó   t dƒ‚©NúI raised©Ú
ValueErrorrb   r   r   r   r[       ó   z,TestFSolve.test_func_can_raise.<locals>.funcry   ©Úmatchr   ©r\   ©rX   r{   r   rI   ©r   r[   r   r   r   Útest_func_can_raiseŸ   ó   "ÿzTestFSolve.test_func_can_raisec                 C   óT   dd„ }dd„ }t tdd�� tj|dg|d� W d   ƒ d S 1 s#w   Y  d S )	Nc                 S   ó   | t  dg¡ S ©Né
   ©r   r
   rq   r   r   r   r[   §   ó   z,TestFSolve.test_Dfun_can_raise.<locals>.funcc                  W   rw   rx   rz   rb   r   r   r   rj   ª   r|   z2TestFSolve.test_Dfun_can_raise.<locals>.deriv_funcry   r}   r   rh   r€   ri   r   r   r   Útest_Dfun_can_raise¦   ó
   "ÿ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/   éè  ©Údtyper.   )r   r
   Úfloat32rq   r   r   r   r[   ±   s   (z%TestFSolve.test_float32.<locals>.funcr/   r   çü©ñÒMbP?©Úatol)r   rI   r   r
   r�   r   )r   r[   Ú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                     ó   ˆ   ¡  t| Ž S r   )rO   r7   rb   ©r   r   r   r[   ·   ó   z,TestFSolve.test_reentrant_func.<locals>.funcr@   rA   rB   TrE   r/   )r   rH   r
   r   rI   r   r   r   )	r   r[   r4   r3   rJ   rK   rL   rM   rN   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                     r–   r   )rS   r=   rb   r—   r   r   rj   Æ   r˜   z3TestFSolve.test_reentrant_Dfunc.<locals>.deriv_funcr@   rA   rB   rP   )r   rH   r
   r   rI   r7   r   r   )r   rj   r4   r3   rJ   rK   r   r—   r   Útest_reentrant_DfuncÅ   s   
þzTestFSolve.test_reentrant_Dfuncc                 C   ó*   t | jgd ƒ}tdd„ |D ƒƒsJ ‚d S )Nr‡   c                 S   ó   g | ]}|d u ‘qS r   r   ©Ú.0Úresultr   r   r   Ú
<listcomp>Õ   ó    z:TestFSolve.test_concurrent_no_gradient.<locals>.<listcomp>)r-   rO   Úall©r   Úvr   r   r   Útest_concurrent_no_gradientÓ   ó   z&TestFSolve.test_concurrent_no_gradientc                 C   r›   )Nr‡   c                 S   rœ   r   r   r�   r   r   r   r    Ù   r¡   z<TestFSolve.test_concurrent_with_gradient.<locals>.<listcomp>)r-   rS   r¢   r£   r   r   r   Útest_concurrent_with_gradient×   r¦   z(TestFSolve.test_concurrent_with_gradientN)r"   r#   r$   rO   rS   r]   rd   rk   rt   r‚   rŠ   r•   r™   rš   r¥   r§   r   r   r   r   r?   p   s    

r?   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestRootHybrc                 C   óH   t  dd¡}d}tg d¢ƒ}tjt|d||fd�j}t|t  d¡ƒ d S )Nr@   rA   rB   Úhybr©ÚmethodrF   ©	r   rH   r
   r   Úrootr7   r   r   r   rR   r   r   r   rO   Ý   ó   ÿÿ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@   rA   rB   rª   ©rF   r¬   r<   )
r   rH   r
   r   r®   r7   r=   r   r   r   rR   r   r   r   rS   æ   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@   rA   rB   rª   Tr°   )	r   rH   r
   r   r®   r>   r   r   r   rR   r   r   r   Ú,test_pressure_network_with_gradient_combinedð   s   þþz9TestRootHybr.test_pressure_network_with_gradient_combinedN)r"   r#   r$   rO   rS   r±   r   r   r   r   r¨   Ü   s    	
r¨   c                   @   s   e Zd Zdd„ ZdS )Ú
TestRootLMc                 C   r©   )Nr@   rA   rB   Úlmr«   r­   rR   r   r   r   rO   ý   r¯   z,TestRootLM.test_pressure_network_no_gradientN)r"   r#   r$   rO   r   r   r   r   r²   ü   s    r²   c                   @   s>   e Zd Zdd„ Zdd„ Zej dg d¢¡dd„ ƒZd	d
„ Z	dS )ÚTestNfevc                 C   s   t  ¡ | _d S r   )Ú	threadingÚlocalÚnfevr—   r   r   r   Úsetup_method  ó   zTestNfev.setup_methodc                 C   s0   t | jdƒs
d| j_| j jd7  _|d d S )NÚcr   r/   r.   rs   )Úhasattrr·   rº   )r   Úyr   r   r   Úzero_f  s   zTestNfev.zero_fr¬   )
rª   r³   Úbroyden1Úbroyden2ÚandersonÚlinearmixingÚdiagbroydenÚexcitingmixingÚkrylovzdf-sanec                 C   s0   d| j _tj| jd|d�}|j | j jksJ ‚d S )Nr   rŒ   ©r¬   )r·   rº   r   r®   r½   )r   r¬   Úsolutionr   r   r   Útest_root_nfev  s   zTestNfev.test_root_nfevc                 C   s:   d| j _tj| jddd�\}}}}|d | j jksJ ‚d S )Nr   rŒ   T)rG   r·   )r·   rº   r   rI   r½   )r   r   rL   rM   rN   r   r   r   Útest_fsolve_nfev  s   zTestNfev.test_fsolve_nfevN)
r"   r#   r$   r¸   r½   ÚpytestÚmarkÚparametrizerÇ   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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   r‡   é(   )gÍÌÌÌÌÌ@é*   g33333sÀr.   g{®Gáz„?)	r   Úlinspacer   ÚabcÚrandomÚseedÚstandard_normalr   Úy_meas)r   r   ÚaÚbrº   Úy_truer   r   r   r¸   "  s   
zTestLeastSq.setup_methodc                 C   s*   |\}}}|||d  ||  |  }|S ©Nr.   r   )r   r”   r¼   r   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   Ú_pÚ_yr   r   r   r   Úresiduals_jacobian0  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   rb   ©r/   r.   rs   r@   úsolution not found (ier=%d)r.   ©Údecimal©r
   r   rÚ   rÔ   r   r   r   rÐ   ©r   Úp0Ú
params_fitrM   r   r   r   Ú
test_basic3  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á   ©rF   Ú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   sN   t g d¢gƒ}t| j|| j| jfdd�}|\}}}}}t|dv d|› �ƒ d S )Nrá   TrE   râ   úsolution not found: )r
   r   rÚ   rÔ   r   r   )r   rè   rG   ré   Úcov_xÚinfodictrN   rM   r   r   r   Útest_full_outputD  s   
þzTestLeastSq.test_full_outputc           	      C   sf   t g d¢td�}t |dd�}t| j|| j| jfdd�}|\}}}}}t|dv d|› �ƒ t||ƒ d S )Nrá   rŽ   T)ÚcopyrE   râ   rî   )r
   r   r   rÚ   rÔ   r   r   r   )	r   rè   Úp0_copyrG   ré   rï   rð   rN   rM   r   r   r   Útest_input_untouchedL  s   
þz TestLeastSq.test_input_untouchedc                 C   rT   rU   ©r   rX   rY   r   r   rZ   r   r   r   r]   V  r^   z*TestLeastSq.test_wrong_shape_func_callablec                 C   r_   r`   )rX   rY   r   r   r&   rc   r   r   r   rd   ]  re   z*TestLeastSq.test_wrong_shape_func_functionc                 C   rf   )Nr/   rg   r   ©r\   rì   rõ   ri   r   r   r   Útest_wrong_shape_Dfun_callablec  rl   z*TestLeastSq.test_wrong_shape_Dfun_callablec                 C   rm   )Nc                 S   rn   ro   rp   rq   r   r   r   r[   i  r   z8TestLeastSq.test_wrong_shape_Dfun_function.<locals>.funcc                 S   rn   rr   rp   rq   r   r   r   rj   k  r   z>TestLeastSq.test_wrong_shape_Dfun_function.<locals>.deriv_funcr   r/   rö   ©rX   rY   r   r   ri   r   r   r   Útest_wrong_shape_Dfun_functionh  ru   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.   rC   rs   ©r   Úexp)r”   r   r¼   Úqr   r   r   r[   q  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-²ó?rŽ   )
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ý   rb   râ   r.   g-Cëâ6?)r   r
   r�   r   r   r   r1   )r   r[   r   r¼   rè   Úp1Úsuccessr   r   r   r•   o  s   
ÿ
ÿ4zTestLeastSq.test_float32c                 C   rv   )Nc                  W   rw   rx   rz   rb   r   r   r   r[   €  r|   z-TestLeastSq.test_func_can_raise.<locals>.funcry   r}   r   r   ©rX   r{   r   r   r�   r   r   r   r‚     rƒ   zTestLeastSq.test_func_can_raisec                 C   r„   )	Nc                 S   r…   r†   rˆ   rq   r   r   r   r[   ‡  r‰   z-TestLeastSq.test_Dfun_can_raise.<locals>.funcc                  W   rw   rx   rz   rb   r   r   r   rj   Š  r|   z3TestLeastSq.test_Dfun_can_raise.<locals>.deriv_funcry   r}   r   rö   r   ri   r   r   r   rŠ   †  r‹   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                     ó   ˆ   ¡  ˆ j| Ž S r   )rê   rÚ   rb   r—   r   r   r[   ‘  ó   
z-TestLeastSq.test_reentrant_func.<locals>.funcrá   rb   râ   rã   r.   rä   )r
   r   rÔ   r   r   r   rÐ   )r   r[   rè   ré   rM   r   r—   r   r™   �  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                     r  r   )rê   rà   rb   r—   r   r   rj   �  r  z3TestLeastSq.test_reentrant_Dfun.<locals>.deriv_funcrá   rë   râ   rã   r.   rä   ræ   )r   rj   rè   ré   rM   r   r—   r   Útest_reentrant_Dfunœ  s   

þzTestLeastSq.test_reentrant_Dfunc                 C   r›   )Nr‡   c                 S   rœ   r   r   r�   r   r   r   r    «  r¡   z;TestLeastSq.test_concurrent_no_gradient.<locals>.<listcomp>)r-   rê   r¢   r£   r   r   r   r¥   ©  r¦   z'TestLeastSq.test_concurrent_no_gradientc                 C   r›   )Nr‡   c                 S   rœ   r   r   r�   r   r   r   r    ¯  r¡   z=TestLeastSq.test_concurrent_with_gradient.<locals>.<listcomp>)r-   rí   r¢   r£   r   r   r   r§   ­  r¦   z)TestLeastSq.test_concurrent_with_gradientc                 C   sL   dd„ }t tdd�� tj|ddgd� W d   ƒ d S 1 sw   Y  d S )Nc                 S   s   d| d d d  d S )Nr.   r   rs   r/   r   rq   r   r   r   r[   ³  ó   z=TestLeastSq.test_func_input_output_length_check.<locals>.funcz+Improper input: func input vector length N=r}   r   r/   r   rø   r�   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ô   r]   rd   r÷   rù   r•   r‚   rŠ   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	e
jj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e
j d2g d3¢¡d4d5„ ƒZd6d7„ Zd8d9„ Z e
j d:d;d<g¡d=d>„ ƒZ!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&e
j 'dI¡dJdK„ ƒZ(dLdM„ Z)dNdO„ Z*e
j ddPdQg¡dRdS„ ƒZ+dTS )UÚTestCurveFitc                 C   s    t g d¢ƒ| _t g d¢ƒ| _d S )N)rý   gš™™™™™	@ç      #@gffffff+@)rý   rC   ç      @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 r   r   ©r   rÕ   r   r   r   r[   Á  r|   z,TestCurveFit.test_one_argument.<locals>.funcr/   )r/   r/   r   g3Ä±.n£þ?r@   rä   )r   r   g-Cëâ6Z?F)rG   Úcheck_finite)r   r   r¼   r   r)   r   r   r   )
r   r[   ÚpoptÚpcovÚresÚpopt2Úpcov2rð   ÚerrmsgrM   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   r[   Ñ  r!   z,TestCurveFit.test_two_argument.<locals>.funcr.   rg   çñcÌ]KÈü?çà-� ò?r@   rä   çäƒžÍªÏµ?çTã¥›Ä À¿ç·bÙ=yÈ?)r   r   r¼   r   r)   r   r   )r   r[   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   r[   à  r!   z=TestCurveFit.test_func_is_classmethod.<locals>.test_self.funcN)r"   r#   r$   r%   r[   r   r   r   r   Ú	test_selfÛ  s    r  rg   r  r  r@   rä   r  r  r  )r   r[   r   r¼   r   r   r   )r   r  Ú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.   rC   rú   )r   r\   Úx1Ú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¼   ÚguessÚ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� qd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æw   Y  t|jdkƒ t||ƒ t|jdkƒ t||ƒ d S )N)r   r/   r.   rs   r@   é   )r/   r/   r+  é   é   é   )r/   r.   r/   r.   r/   r.   c                 S   ó   ||  | S r   r   r  r   r   r   r'     r!   z!TestCurveFit.test_pcov.<locals>.f©r³   ÚtrfÚdogboxr.   r   )rè   r"  r¬   g´N"ãÍqÊ?g²~uM/Nâ?r‘   r&  rs   T)rè   r"  Úabsolute_sigmar¬   g´ÁO=N¨Ó?g5=¬`é6ë?gŽ¢÷[u|í?gè-�/i@c                 S   ó   ||  S r   r   r  r   r   r   Úf_flat  r|   z&TestCurveFit.test_pcov.<locals>.f_flatr@   z3Covariance of the parameters could not be estimated©rè   r"  ©rè   rg   )r   r
   r   Úsqrtr8   r   ÚinfÚreshaper   Úfilterr   r   r   r   )r   ÚxdataÚydatar"  r'   r¬   r  r  Úperr_scaledÚperrr5  Úpcov_expectedÚsupÚpopt1Úpcov1r   r   r   Ú	test_pcový  sL   
ÿ
ÿ
ÿ
ÿÿ*ü
zTestCurveFit.test_pcovc                 C   s:   dd„ }g d¢}g d¢}t t|||ƒd ddgdd	� d S )
Nc                 S   r/  r   r   r  r   r   r   Úf_linear/  r!   z.TestCurveFit.test_array_like.<locals>.f_linearrâ   )rs   r+  r,  é	   r   r.   r/   g»½×Ùß|Û=r’   )r   r   )r   rE  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.   rs   r@   r+  é   )r/   r.   rs   r@   g      @rH  c                 S   r4  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_covariance6  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/   rs   ©r/   r.   rs   c                 S   r/  r   r   r  r   r   r   r(   F  ó    z0TestCurveFit.test_NaN_handling.<locals>.<lambda>c                 S   r/  r   r   r  r   r   r   r(   H  rM  c                 S   r/  r   r   r  r   r   r   r(   J  rM  r  T)r   r
   ÚnanrX   r{   r   rJ  r   r   r   Útest_NaN_handling>  s   
ÿ
ÿÿ
ÿzTestCurveFit.test_NaN_handlingc                 C   s,  | |||ddœ}d}t t|d�� tdi |¤dddœ¤Ž W d   ƒ n1 s'w   Y  t tdd�� tdi |¤d	d
i¤Ž W d   ƒ n1 sHw   Y  tdi |¤d	di¤Ž\}}	||d< ||d< tdi |¤Ž\}
}	t||
ƒ d}t t|d�� tdi |¤d	di¤Ž W d   ƒ d S 1 s�w   Y  d S )NF)r'   r<  r=  r¬   r  z;`nan_policy='propagate'` is not supported by this function.r}   Ú	propagateiÐ  )Ú
nan_policyr%  zThe input contains nanrQ  ÚraiseÚomitr<  r=  zTnan_policy must be one of \{(?:'raise'|'omit'|None)(?:, ?(?:'raise'|'omit'|None))*\}Úhir   )rX   r{   r   r   )r'   Úxdata_with_nanÚxdata_without_nanÚydata_with_nanÚydata_without_nanr¬   ÚkwargsÚ	error_msgÚresult_with_nanÚ_Úresult_without_nanr   r   r   Ú_check_nan_policyM  s&   ÿÿÿ
"ÿzTestCurveFit._check_nan_policyr¬   r0  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   r/  r   r   r  r   r   r   r'   l  r!   z*TestCurveFit.test_nan_policy_1d.<locals>.fr.   rs   r@   r/   r+  r,  )r.   rs   r@   rL  ©r   r
   rN  r^  ©r   r¬   r'   rU  rW  rV  rX  r   r   r   Útest_nan_policy_1dj  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  Úx2r   r   r   r'   y  s   z*TestCurveFit.test_nan_policy_2d.<locals>.fr.   rs   r@   r+  r,  r/   r‡   ©r.   rs   r+  ©r.   rs   r,  ©r/   r.   r‡   r_  r`  r   r   r   Útest_nan_policy_2dw  s   ÿ
ÿzTestCurveFit.test_nan_policy_2dr:   r.   rs   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r'| ¡ 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/   )Úsqueezerc  r   r   r   r'   Š  s   z,TestCurveFit.test_nan_policy_2_3d.<locals>.fr.   rs   r@   r+  r,  r/   r‡   re  rf  rg  )r   r
   rN  ri  r^  )r   r:   r¬   r'   rU  rW  rV  rX  r   r   r   Útest_nan_policy_2_3d‡  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   r4  r   r   r
  r   r   r   r(   ›  rI  z0TestCurveFit.test_empty_inputs.<locals>.<lambda>c                 S   r4  r   r   r
  r   r   r   r(   œ  rI  )r/   r.   )Úboundsc                 S   r4  r   r   r
  r   r   r   r(   ž  rI  r/   c                 S   r4  r   r   r
  r   r   r   r(   Ÿ  rI  r.   ©rX   r{   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   rq   r   r   r   r(   ¤  s    z8TestCurveFit.test_function_zero_params.<locals>.<lambda>r/   r.   rs   r@   rl  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 r†   )r   Úarange)r\  rÕ   r   r   r   r(   §  s    z*TestCurveFit.test_None_x.<locals>.<lambda>r.   r‡   rC   )r   r   ro  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   ó   |t  | |  ¡ S r   rú   r  r   r   r   r'   ¬  ó   z,TestCurveFit.test_method_argument.<locals>.fr   r/   é   rC   ©r1  r2  r³   NrÅ   Úunknown)r   rÏ   r   r   rX   r{   )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 ]J}t||||dd	�\}}}}}	t|ddgƒ d
|v s0J ‚d|v s6J ‚|dks>|d u rPd|v sDJ ‚d|v sJJ ‚d|v sPJ ‚t|tƒsWJ ‚|	dv s]J ‚qd S )Nc                 S   rq  r   rú   r  r   r   r   r'   ¹  rr  z(TestCurveFit.test_full_output.<locals>.fr   r/   rs  rC   rt  T)r¬   rG   r·   Úfvecr³   ÚfjacÚipvtÚqtfrâ   )r   rÏ   r   r   Ú
isinstanceÚstr)
r   r'   r<  r=  r¬   r  r  rð   r  rM   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 ]$}t|||||d�\}	}
t|	d dƒ t|||||d�\}}t||	ƒ q$t|||dddgdt jgfd�\}	}
t|	d dƒ ttt||||dd� d S )Nc                 S   rq  r   rú   r  r   r   r   r'   Í  rr  z#TestCurveFit.test_bounds.<locals>.fr   r/   rs  rC   rý   rV   r  )Nr1  r2  )rk  r¬   r1  rD   g333333ã?)r¬   rk  r³   )r   rÏ   r   r   r   r9  rX   r{   )r   r'   r<  r=  ÚlbÚubrk  Úbounds_classr¬   r  r  Ú
popt_classÚ
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 ]#}t|||d	t j d
�\}}t|||d	t j ||d�\}}t||ƒ q"d S )Nc                 S   s   t  | | ¡S r   )r   Úsinr
  r   r   r   r'   ñ  r¹   z&TestCurveFit.test_bounds_p0.<locals>.féþÿÿÿr.   rÍ   éýÿÿÿrs   ©r1  r2  gÍÌÌÌÌÌ @r7  ©rè   rk  r¬   )r   rÏ   Úpirƒ  r   r   )	r   r'   r<  r=  rk  r¬   Úpopt_1r\  Ú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 ]}d
D ]}t|||||d�\}}t|ddgƒ qqdD ]}t|||||d�\}}t|ddgƒ q3d|d< t  |jd ¡}	d|	d< dD ]}t||||	||d�\}}t|ddgdd� qZd S )Nc                 S   rq  r   rú   r  r   r   r   r'     rr  z TestCurveFit.test_jac.<locals>.fc                 S   ó*   t  | |  ¡}t  || |  | f¡jS r   ©r   rû   rÛ   rÝ   ©r   rÕ   rÖ   Úer   r   r   r<     r¦   z"TestCurveFit.test_jac.<locals>.jacr   r/   rs  rC   r†  )z2-pointz3-pointÚcs)r<   r¬   r.   r0  ©r¬   r<   rŒ   r+  éÈ   )r"  r¬   r<   r‘   r&  )r   rÏ   r   r   r   r   )
r   r'   r<   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   r‡   r.   c                 S   r4  r   r   ©r   r”   r   r   r   r(   (  rI  z5TestCurveFit.test_maxfev_and_bounds.<locals>.<lambda>)r   rs   rŒ   )rk  r%  c                 S   r4  r   r   r•  r   r   r   r(   )  rI  )rk  Úmax_nfevç›+¡†›„=r’   )r   ro  r   r   )r   r   r¼   rB  r\  r  r   r   r   Útest_maxfev_and_bounds#  s   z#TestCurveFit.test_maxfev_and_boundsÚ	sigma_dim)r   r/   r.   c                 C   sÀ  dd„ }t j d¡}d}t  dd|¡}||ddƒ}|d	kr)d
}|| d	||¡7 }n4|dkr;|d
 }|| d	||¡7 }n"|dkrY| d	d||f¡}||j }|| t  |¡|¡7 }nJ dƒ‚ddg}	|j|dd�}
|j|dd�}t j	||
< t j	||< t
||||	|dd�\}}t  t  |
|f¡¡}t j||d	d�}t j||d	d�}t  |¡}|jdkr°t  ||¡}n|jdkrÅt j||d	d�}t j||dd�}t
||||	|d�\}}t||dd� t||dd� d S )Nc                 S   s   |t  ||  ¡ S r   rú   r  r   r   r   Úexponential0  s   z7TestCurveFit.test_curvefit_omitnan.<locals>.exponentiall   lt*GÊ7 rŒ   r/   r‡   çš™™™™™É?rA   r   gš™™™™™©?r.   Fz1The sigma must be a scalar, 1D array or 2D array.gš™™™™™¹?rý   r+  ©ÚsizerS  )rè   r"  rQ  )Úaxisr6  r—  r’   )r   rÑ   Údefault_rngrÏ   ÚnormalrÝ   Úmultivariate_normalÚ
zeros_likeÚintegersrN  r   ÚuniqueÚconcatenateÚdeleteÚasarrayÚndimr   )r   r™  rš  ÚrngÚNr   r¼   r"  rÕ   rè   Úi_xÚi_yÚres_optÚres_covÚi_deleteÚref_optÚref_covr   r   r   Útest_curvefit_omitnan.  sH   



ÿ


z"TestCurveFit.test_curvefit_omitnanc              
   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 ](}
t||||||
d�\}}t|||||	|
d�\}}t	||dd� t	||dd� qDq>d S )Nc                 S   rq  r   rú   r  r   r   r   r[   g  rr  z9TestCurveFit.test_curvefit_simplecovariance.<locals>.funcc                 S   rŒ  r   r�  rŽ  r   r   r   r<   j  r¦   z8TestCurveFit.test_curvefit_simplecovariance.<locals>.jacr   r@   é2   ç      @çÍÌÌÌÌÌô?r›  rœ  r.   ©NN©FT©r"  r<   r3  r—  r’   )
r   rÑ   rÒ   rÏ   r   r)   Úzerosr8   r   r   )r   r[   r<   r<  r¼   r=  r"  ÚcovarÚjac1Újac2r3  rB  rC  r  r  r   r   r   Útest_curvefit_simplecovariancee  s(   

ÿ

ÿùÿz+TestCurveFit.test_curvefit_simplecovariancec              
   C   sT  dd„ }dd„ }dd„ }dd„ }t j d	¡}t  d
d¡}||ddƒ}|d|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 ]1\}}dD ]*}t||||	||d�\}}t||||||d�\}}t||ddd� t||ddd� q|qvd 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
   r8  Ú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 r¾  )r   r
   r8  rû   rÁ  rÛ   rÝ   )r   rÕ   rÖ   rÂ  r�  r   r   r   Újacpˆ  s    þ z3TestCurveFit.test_curvefit_covariance.<locals>.jacpc                 S   rq  r   rú   r  r   r   r   r[   �  rr  z3TestCurveFit.test_curvefit_covariance.<locals>.funcc                 S   rŒ  r   r�  rŽ  r   r   r   r<   ’  r¦   z2TestCurveFit.test_curvefit_covariance.<locals>.jacr   r/   r@   r´  rý   r›  rœ  r.   r¿  rÀ  r¶  r·  r¸  g+i¤)+€>r—  )r'  r“   )r   rÑ   ÚRandomStatero  r   r)   r¹  r8   r
   r8  rÁ  rÝ   r   r   )r   rÃ  rÄ  r[   r<   r©  r<  r¼   r=  r"  rº  rÂ  ÚydatapÚcovarpr»  r¼  r3  rB  rC  r  r  r   r   r   Útest_curvefit_covariance€  s8    þ


ÿ

ÿùÿz%TestCurveFit.test_curvefit_covariancer3  FTc                 C   s`   dd„ }| j | j}}t|||d|d�\}}t|||t |d¡|d�\}}t ||k¡s.J ‚d S )Nc                 S   r/  r   r   r  r   r   r   r[   ´  r!   z5TestCurveFit.test_curvefit_scalar_sigma.<locals>.funcr.   )r"  r3  )r   r¼   r   r   Ú	full_liker¢   )r   r3  r[   r   r¼   r\  rC  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 ]S}t jt jfD ]J}t jt jfD ]}| |¡}| |¡}q)t ¡ �) t d	t	¡ t
||||d
�\}}t  |¡ ¡ sTJ ‚t  |d¡r\J ‚W d   ƒ n1 sfw   Y  q!qd S )Nr…  r+  rV   r  rA   c                 S   r/  r   r   r  r   r   r   r[   Ä  r!   z&TestCurveFit.test_dtypes.<locals>.funcr0  ÚerrorrÅ   r/   )r   ro  rƒ  r�   r   ÚastypeÚwarningsÚcatch_warningsÚsimplefilterr   r   Úisfiniter¢   Úallclose)	r   r   r¼   r[   r¬   ÚdtxÚdtyr”   Úcovr   r   r   Útest_dtypes¿  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   r8  )r   Ús_1Ús_2Úo_xÚo_yrº   Úb_2Úb_1r   r   r   Ú	hyperbola×  s   2z,TestCurveFit.test_dtypes2.<locals>.hyperbola)g      ÀrD   ç       Àg      $ÀrD   )rD   r  r  rD   g      $@)g«ªªªªªê¿gUUUUUUõ?rý   g      ÀrA   )r„  gš™™™™™Ù?éÿÿÿÿéûÿÿÿr  )iàÿÿÿiðÿÿÿiøÿÿÿr@   r@   r-  é   é    )r'   r<  r=  rè   rk  gñhãˆµøô>r’   )r   r
   r   rÌ  r�   r   )r   rÜ  Úmin_fitÚmax_fitr(  Úparamsr<  r=  Úpopt_64r\  Ú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 )
Nr‡   gÍÌÌÌÌÌ@r.   g      @c                    s   || d  ||   ˆ  S rØ   r   r  ©Útargetr   r   Úfit_funcó  r  z/TestCurveFit.test_broadcast_y.<locals>.fit_funcr0  )r<  r=  r¬   r   )r   ro  rÑ   Úrandr)   r   r¢  r   )r   r<  rê  r¬   Úpopt0Úpcov0rB  rC  r   rè  r   Útest_broadcast_yð  s    
$
ý
ý÷zTestCurveFit.test_broadcast_yc                 C   sR   dd„ }t tƒ� t|g d¢g d¢dgdd� W d   ƒ d S 1 s"w   Y  d S )Nc                 S   r/  r   r   r  r   r   r   r[     r!   z.TestCurveFit.test_args_in_kwargs.<locals>.funcrâ   ©r+  rF  é   é   r/   ra   )r<  r=  rè   rF   rl  r�   r   r   r   Útest_args_in_kwargs   s   
ü"ÿz TestCurveFit.test_args_in_kwargsc                 C   sP   dd„ }t tdd�� t|g d¢g d¢d� W d   ƒ d S 1 s!w   Y  d S )Nc                 S   s    |t  | |  ¡ | | | S r   rú   ©r   rÕ   rÖ   rº   Údr�  r   r   r   r[     s    z<TestCurveFit.test_data_point_number_validation.<locals>.funczThe number of func parameters=r}   râ   rï  )r<  r=  )rX   rY   r   r�   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¡s4J ‚t	 
|¡d	 }t  |d
k¡sDJ ‚t||jƒ d S )Nc                 S   s0   |t  | d | ¡ |t  | d | ¡  | S ©Nr/   ©r   Úlogró  r   r   r   r'     s   0z#TestCurveFit.test_gh4555.<locals>.fì   MI9V$O-rŒ   r.   r,  i † r$  r   g{®Gáz„¿)r   rÑ   rŸ  ro  rÏ   r   r   r¢   r8   r   Úeighr   rÝ   )	r   r'   r©  r:   r   r¼   r”   rÔ  Ú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 )Nrù  c                 S   s   |t  | |  ¡ | S r   rú   )r   rÕ   rÖ   rº   r   r   r   r[   /  r  z'TestCurveFit.test_gh4555b.<locals>.funcr   r@   r³  r´  rµ  rA   r›  rœ  )gƒt¢^G�?çd£*.æX|?ç�ÓTû}H¿)rý  g×1”©xÿ”?çuô`v?)rþ  rÿ  gšonÁ2Íf?gH¯¼šò×Š>)r   rÑ   rŸ  rÏ   r   r�  r   r   )
r   r©  r[   r<  r¼   Ú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   rs   ée   r.   r/   rœ  rA   c                    s.   t  ˆ j|k¡r
J ‚|ˆ _| |d  |d  S rb  )r   r¢   Úlast_pr•  )Úliner   r   r  G  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•  )r<   r   r   r<   L  s   z&TestCurveFit.test_gh13670.<locals>.jacrý   g      @r³   r‘  )r   rÑ   rŸ  rÏ   r   r  r
   r   )r   r©  r   r¼   rè   r   )r<   r  r   Útest_gh13670>  s   zTestCurveFit.test_gh13670r1  r2  c              	   C   sZ   dd„ }d}t jt|d�� t|| j| jdgd|d� W d   ƒ d S 1 s&w   Y  d S )Nc                 S   r	  r   r   r
  r   r   r   r[   Z  r|   z9TestCurveFit.test_gh20155_error_mentions_x0.<locals>.funcz+Initial guess is outside of provided boundsr}   r/   )r�   ié  r‡  )rÉ   r	   r{   r   r   r¼   )r   r¬   r[   Úmessager   r   r   Útest_gh20155_error_mentions_x0V  s   ÿ"ÿz+TestCurveFit.test_gh20155_error_mentions_x0N),r"   r#   r$   r¸   r  r  r  r*  rD  rG  rÉ   rÊ   Úthread_unsaferK  rO  Ústaticmethodr^  rË   ra  rh  rj  rm  rn  rp  rv  rñ   r‚  r‹  r”  r˜  r²  r½  rÈ  rÊ  rÕ  rç  rî  rò  rõ  Úfilterwarningsrü  r  r  r  r   r   r   r   r  »  s\    
0	



	"$
6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   ó$   dd„ }d}t ||ƒ}t|dƒ d S )Nc                 S   ó   d|  S ©NrC   r   rq   r   r   r   r[   f  r|   z0TestFixedPoint.test_scalar_trivial.<locals>.funcrý   rD   ©r   r   ©r   r[   r\   r   r   r   r   Útest_scalar_triviald  ó   
z"TestFixedPoint.test_scalar_trivialc                 C   r  )Nc                 S   ó   | d S rØ   r   rq   r   r   r   r[   n  r|   z/TestFixedPoint.test_scalar_basic1.<locals>.funcçÍÌÌÌÌÌð?rý   r  r  r   r   r   Útest_scalar_basic1l  r  z!TestFixedPoint.test_scalar_basic1c                 C   r  )Nc                 S   r  ©NrA   r   rq   r   r   r   r[   v  r|   z/TestFixedPoint.test_scalar_basic2.<locals>.funcr  rý   r  r  r   r   r   Útest_scalar_basic2t  r  z!TestFixedPoint.test_scalar_basic2c                 C   sX   dd„ }ddg}t jdd�� t||ƒ}W d   ƒ n1 sw   Y  t|ddgƒ d S )Nc                 S   r  r  r   rq   r   r   r   r[   }  r|   z/TestFixedPoint.test_array_trivial.<locals>.funcg333333Ó?g333333Ã?Úignore©r¢   rD   )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 s'w   Y  t|d| ƒ d S )	Nc                 S   ó   || d  S rØ   r   ©r   rº   r   r   r   r[   †  r!   z.TestFixedPoint.test_array_basic1.<locals>.func©g      è?rý   g      ô?)çš™™™™™ñ?gffffffò?gÍÌÌÌÌÌì?r  r  rb   rý   )r
   r   r  r   r   ©r   r[   rº   r\   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   r  r  r   r  r   r   r   r[   �  r!   z.TestFixedPoint.test_array_basic2.<locals>.funcr  )gš™™™™™é?r   r   rb   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Ý  rC   rú   )Úxxr   r   r   r(   ™  s    z.TestFixedPoint.test_lambertw.<locals>.<lambda>rý   r   gê-�™—q=iô  )rF   ÚxtolÚmaxiterrÝ  rC   r/   r.   )r   r   r   rû   r   )r   Úxxrootr   r   r   Útest_lambertw—  s
   
ÿzTestFixedPoint.test_lambertwc                    s`   d‰d‰d}d}|d | ˆˆ | d|d    ‰ ‡ ‡‡fdd„}t ||dd	�}t||ƒ d S )
Nr.   rH  rµ  gj¼t“ð?r/   c                    s,   t  ˆˆ |  ¡t  ˆ |  | d  ¡ d S rö  r÷  )r:   ©Úi0ÚklÚksr   r   r[   ¦  s   ,z1TestFixedPoint.test_no_acceleration.<locals>.funcÚ	iterationrÅ   )r   r   )r   ÚmÚn0r[   r:   r   r)  r   Útest_no_accelerationž  s   $z#TestFixedPoint.test_no_accelerationN)r"   r#   r$   r  r  r  r  r"  r#  r(  r0  r   r   r   r   r  b  s    
	r  ).r%   rÍ  rÉ   rµ   Únumpy.testingr   r   r   r   r   r   r   r	   rX   Únumpyr   r
   r   Úmultiprocessing.poolr   Úscipyr   r   Úscipy.specialr   Úscipy.optimize._minpack_pyr   r   r   Úscipy.optimizer   Úscipy.optimize._minimizer   r   r&   r-   r7   r=   r>   r?   r¨   r²   r´   rÌ   r  r  r   r   r   r   Ú<module>   sB    $	l       ,