o
    ?Hh                     @   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)xAxA a/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/sklearn/utils/tests/test_optimize.pyfunc   s   
ztest_newton_cg.<locals>.funcc                        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                    r   r   r   r   r   r   r   <lambda>   s    z3test_newton_cg.<locals>.grad_hess.<locals>.<lambda>r   r   r   r   r   r   	grad_hess   s   z!test_newton_cg.<locals>.grad_hessg|=)tol)fx0fprimefhess_p)nprandomRandomStatenormal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r<|jd
ks;J ng d}|D ]	}||jv sKJ qB|dkr`g d}|D ]	}||jv s_J qV|dkrt ddgddggd  t ddgt	
t% t fdd fdd fddt ddg|d	 W d   n1 sw   Y  |  }g d}|D ]	}||jv sJ qt ddgddgg t ddgt	
t! t fdd fdd fdd|dd W d   n1 sw   Y  |  }dg}|D ]}||jv sJ qt d t ddgt	
t& t fdd fdd fddt ddg|d d W d   n	1 sOw   Y  |  }d!g}|D ]}||jv sgJ q]t g d" t g d#t	
t% t fd$d fd%d fd&dt |ddd' W d   n	1 sw   Y  |  }d(g}|D ]}||jv sJ qdS dS ))z0Test the std output of verbose newton_cg solver.r+   r*   )dtypec                        |    fddfS )Nc                        |  S r   r   zr   r   r   r   +       <test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>r   r   r   br   r   r   +       z*test_newton_cg_verbosity.<locals>.<lambda>c                       d|    |  |   S r   r   r   r3   r   r   r   ,   r5   c                        |   S r   r   r   r3   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                    r-   )Nc                    r.   r   r   r/   r   r   r   r   S   r1   r2   r   r   r3   r   r   r   S   r5   c                    r6   r   r   r   r3   r   r   r   T   r5   c                    r7   r   r   r   r3   r   r   r   U   r8          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                    r-   )Nc                    r.   r   r   r/   r   r   r   r   i   r1   r2   r   r   r3   r   r   r   i   r5   c                    r6   r   r   r   r3   r   r   r   j   r5   c                    r7   r   r   r   r3   r   r   r   k   r8   )r   r   r   r   r)   maxiterztiny_|p| = eps * ||p||^2c                    r-   )Nc                    s
     |  S r   r   r/   r   r   r   r      s   
 r2   r   r   r3   r   r   r      r5   c                    r6   r   r   r   r3   r   r   r      r5   c                    r7   r   r   r   r3   r   r   r      r8      z9Inner CG solver iteration 0 fell back to steepest descent)gMbP?r*   g     @@)r<   r*   r;   c                    r-   )Nc                    r.   r   r   r/   r   r   r   r      r1   r2   r   r   r3   r   r   r      r5   c                    r6   r   r   r   r3   r   r   r      r5   c                    r7   r   r   r   r3   r   r   r      r8   )r   r   r   r   r)   r=   maxinnerz*Inner CG solver stopped reaching maxiter=1)r"   eyearrayfloatr   zerosshape
readouterroutpytestwarnsRuntimeWarningr   diag	ones_like)capsysr)   capturedmsgmr   r3   r   test_newton_cg_verbosity$   s   

	


SrP   )numpyr"   rG   scipy.optimizer   sklearn.exceptionsr   sklearn.utils._testingr   sklearn.utils.optimizer   r(   markparametrizerP   r   r   r   r   <module>   s    