a
    ¶ÀhŠ  ã                   @   sf   d dl Zd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 dd„ Zej dg d	¢¡d
d„ ƒZdS )é    N)Úfmin_ncg)ÚConvergenceWarning)Úassert_array_almost_equal)Ú
_newton_cgc                     s€   t j d¡} | jdd‰ t  d¡}‡ fdd„}‡ fdd„‰‡ fd	d
„}‡ ‡fdd„}tt||ˆ|ddd t||ˆ|dƒ d S )Nr   )é
   r   )Úsizer   c                    s   ˆ   | ¡}d|  |¡ S ©Ng      à?)Údot)ÚxZAx©ÚA© ú]/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/utils/tests/test_optimize.pyÚfunc   s    
ztest_newton_cg.<locals>.funcc                    s   ˆ j  ˆ  | ¡¡S ©N©ÚTr	   ©r
   r   r   r   Úgrad   s    ztest_newton_cg.<locals>.gradc                    s   |  ˆ j  ˆ   |  ¡ ¡¡¡S r   )r	   r   Úall)r
   Úpr   r   r   Úhess   s    ztest_newton_cg.<locals>.hessc                    s   ˆ| ƒ‡ fdd„fS )Nc                    s   ˆ j  ˆ  | ¡¡S r   r   r   r   r   r   Ú<lambda>   ó    z3test_newton_cg.<locals>.grad_hess.<locals>.<lambda>r   r   ©r   r   r   r   Ú	grad_hess   s    z!test_newton_cg.<locals>.grad_hessg»½×Ùß|Û=)Ztol)ÚfÚx0ZfprimeZfhess_p)ÚnpÚrandomZRandomStateÚnormalZonesr   r   r   )Úrngr   r   r   r   r   r   r   Útest_newton_cg
   s    
þr"   Úverbose)r   é   é   c              
      sŠ  t  d¡‰ t jddgtd‰t‡ ‡fdd„‡ ‡fdd„‡ ‡fdd„t  ˆ jd ¡|d	 |  ¡ }|dkrx|jd
ks˜J ‚n g d¢}|D ]}||jv s„J ‚q„|dkrÀg d¢}|D ]}||jv s¬J ‚q¬|dkr†t  ddgddgg¡d ‰ t  ddg¡‰t	 
t¡J t‡ ‡fdd„‡ ‡fdd„‡ ‡fdd„t  ddg¡|d	 W d  ƒ n1 sN0    Y  |  ¡ }g d¢}|D ]}||jv slJ ‚qlt  ddgddgg¡‰ t  ddg¡‰t	 
t¡B t‡ ‡fdd„‡ ‡fdd„‡ ‡fdd„ˆ|dd W d  ƒ n1 sü0    Y  |  ¡ }dg}|D ]}||jv sJ ‚qt  d¡‰ t  ddg¡‰t	 
t¡L t‡ ‡fdd„‡ ‡fdd„‡ ‡fdd„t  ddg¡|d d W d  ƒ n1 s¦0    Y  |  ¡ }d!g}|D ]}||jv sÂJ ‚qÂt  g d"¢¡‰ t  g d#¢¡‰t	 
t¡J t‡ ‡fd$d„‡ ‡fd%d„‡ ‡fd&d„t  ˆ¡|ddd' W d  ƒ n1 sR0    Y  |  ¡ }d(g}|D ]}||jv snJ ‚qndS ))z0Test the std output of verbose newton_cg solver.r%   r$   )Zdtypec                    s   ˆ |  ˆ ‡ fdd„fS )Nc                    s   ˆ |  S r   r   ©Úzr   r   r   r   +   r   ú<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>r   r   ©r   Úbr   r   r   +   r   z*test_newton_cg_verbosity.<locals>.<lambda>c                    s   d|  ˆ  |  ˆ|   S r   r   r   r)   r   r   r   ,   r   c                    s   ˆ |  ˆ S r   r   r   r)   r   r   r   -   r   r   )r   r   r   r   r#   Ú )zNewton-CG iter = 1zCheck Convergencezmax |gradient|zSolver did converge at loss = )z(Inner CG solver iteration 1 stopped withzsum(|residuals|) <= tolzLine Searchztry line search wolfe1z!wolfe1 line search was successfulg      ð?é   gêŒ 9Y>)Fç       @c                    s   ˆ |  ˆ ‡ fdd„fS )Nc                    s   ˆ |  S r   r   r&   r   r   r   r   S   r   r(   r   r   r)   r   r   r   S   r   c                    s   d|  ˆ  |  ˆ|   S r   r   r   r)   r   r   r   T   r   c                    s   ˆ |  ˆ S r   r   r   r)   r   r   r   U   r   ç       ÀN)z%wolfe1 line search was not successfulz-check loss |improvement| <= eps * |loss_old|:z,check sum(|gradient|) < sum(|gradient_old|):z#last resort: try line search wolfe2g      @c                    s   ˆ |  ˆ ‡ fdd„fS )Nc                    s   ˆ |  S r   r   r&   r   r   r   r   i   r   r(   r   r   r)   r   r   r   i   r   c                    s   d|  ˆ  |  ˆ|   S r   r   r   r)   r   r   r   j   r   c                    s   ˆ |  ˆ S r   r   r   r)   r   r   r   k   r   )r   r   r   r   r#   Úmaxiterztiny_|p| = eps * ||p||^2c                    s   ˆ |  ˆ ‡ fdd„fS )Nc                    s
   ˆ  |  S r   r   r&   r   r   r   r      r   r(   r   r   r)   r   r   r      r   c                    s   d|  ˆ  |  ˆ|   S r   r   r   r)   r   r   r   €   r   c                    s   ˆ |  ˆ S r   r   r   r)   r   r   r      r   é   z9Inner CG solver iteration 0 fell back to steepest descent)gü©ñÒMbP?r$   g     @@)r.   r$   r-   c                    s   ˆ |  ˆ ‡ fdd„fS )Nc                    s   ˆ |  S r   r   r&   r   r   r   r   ‘   r   r(   r   r   r)   r   r   r   ‘   r   c                    s   d|  ˆ  |  ˆ|   S r   r   r   r)   r   r   r   ’   r   c                    s   ˆ |  ˆ S r   r   r   r)   r   r   r   “   r   )r   r   r   r   r#   r/   Zmaxinnerz*Inner CG solver stopped reaching maxiter=1)r   ÚeyeÚarrayÚfloatr   ZzerosÚshapeZ
readouterrÚoutÚpytestZwarnsÚRuntimeWarningr   ZdiagZ	ones_like)Zcapsysr#   ZcapturedÚmsgÚmr   r)   r   Útest_newton_cg_verbosity$   s¦    
û
û&ú&ÿ
ù&	ÿù&	ÿr:   )Únumpyr   r6   Zscipy.optimizer   Zsklearn.exceptionsr   Zsklearn.utils._testingr   Zsklearn.utils.optimizer   r"   ÚmarkZparametrizer:   r   r   r   r   Ú<module>   s   