
    Mpj\"                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJ	r	  S SK
JrJr  S SKJr  S SKJrJr  S SKJrJr  S	 r\R,                  R/                  S
\" 5       5      S 5       r\R,                  R/                  S/ SQ5      S 5       rS rg)    N)fmin_ncg)config_context)ConvergenceWarning)move_to)yield_namespace_device_dtype_combinations)Bunch)_array_api_for_testsassert_allclose)_check_optimize_result
_newton_cgc                   ^^ [         R                  R                  U 5      nUR                  SS9m[         R                  " S5      nU4S jnU4S jmU4S jnUU4S jn[         R
                  " [         R                  " [        XSTUSS	9S
   5      S:*  5      (       d   e[        [        XSTUSS	9S
   [        X2TUS9SS9  g )N)
   r   )sizer   c                 N   > TR                  U 5      nSUR                  U5      -  $ N      ?)dot)xAxAs     ]/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/utils/tests/test_optimize.pyfunctest_newton_cg.<locals>.func   s#    UU1XbXXb\!!    c                 X   > TR                   R                  TR                  U 5      5      $ NTr   r   r   s    r   gradtest_newton_cg.<locals>.grad   s    sswwquuQx  r   c                    > UR                  TR                  R                  TR                  U R                  5       5      5      5      $ r   )r   r   allr   pr   s     r   hesstest_newton_cg.<locals>.hess   s-    uuQSSWWQUU1557^,--r   c                     > T" U 5      U4S j4$ )Nc                 X   > TR                   R                  TR                  U 5      5      $ r   r   r   s    r   <lambda>3test_newton_cg.<locals>.grad_hess.<locals>.<lambda>!   s    !##''!%%("3r    )r   r   r    s    r   	grad_hess!test_newton_cg.<locals>.grad_hess    s    Aw333r   绽|=tolr   gHz>)fx0fprimefhess_pgh㈵>atol)
nprandomRandomStatenormalonesr#   absr   r
   r   )global_random_seedrngr3   r   r&   r-   r   r    s         @@r   test_newton_cgr@      s     ))

 2
3C


!A	B"!.4
 66"&&IT25I!LMQUUVVVV9D"$7:4tT:r   z(array_namespace, device_name, dtype_namec           	      2  ^	^
^^ [        X5      u  p4UR                  [        R                  " SS/SS//5      R	                  U5      US9m	UR                  [        R
                  " S5      R	                  U5      US9mUR                  [        R                  " S5      R	                  U5      US9nU	U4S jnU	U4S jm
U	4S jmU
U4S	 jn[        S
S9   [        XvT
USS9nSSS5        [        [        WS   [        SS9SS/SS9  g! , (       d  f       N,= f)z/Test that newton_cg works with Array API input.      )device   c                 ,   > STTU -  -
  -  TTU -  -
  -  $ r   r,   r   r   ys    r   r   1test_newton_cg_array_api_compliance.<locals>.func8   s#    a!a%i AAI..r   c                 .   > TR                   TU -  T-
  -  $ r   r   rH   s    r   r    1test_newton_cg_array_api_compliance.<locals>.grad;   s    ssa!eai  r   c                 (   > TR                   TU-  -  $ r   rL   r$   s     r   r&   1test_newton_cg_array_api_compliance.<locals>.hess>   s    ssa!e}r   c                 $   >^  T" T 5      UU 4S j4$ )Nc                    > T" TU 5      $ r   r,   )r%   r&   r   s    r   r*   Htest_newton_cg_array_api_compliance.<locals>.grad_hess.<locals>.<lambda>B   s    $q!*r   r,   )r   r    r&   s   `r   r-   6test_newton_cg_array_api_compliance.<locals>.grad_hessA   s    Aw,,,r   T)array_api_dispatchr/   r0   Nr   cpu)xprE   r   g      ?r6   )r	   asarrayr8   arrayastypearanger<   r   r   r
   r   )array_namespacedevice_name
dtype_namerV   rE   r3   r   r-   resr   r    r&   rI   s            @@@@r   #test_newton_cg_array_api_compliancer_   -   s     &oCJB


288aWr1g./66zB6
RA


299Q<&&z26
BA	BGGAJ%%j1&	AB/!- 
4	0$> 
1 A2e,	 
1	0s   D
Dverbose)r   rD   rF   c                   ^^ [         R                  " S5      m[         R                  " SS/[        S9m[	        UU4S jUU4S jUU4S j[         R
                  " TR                  S   5      US9  U R                  5       nUS:X  a  UR                  S	:X  d   eO/ S
QnU H  nXBR                  ;   a  M   e   US:  a  / SQnU H  nXBR                  ;   a  M   e   US:  Ga  [         R                  " SS/SS//5      S-  m[         R                  " SS/5      m[        R                  " [        [        45         [	        UU4S jUU4S jUU4S j[         R                  " SS/5      US9  SSS5        U R                  5       n/ SQnU H  nXBR                  ;   a  M   e   [         R                  " SS/SS//5      m[         R                  " SS/5      m[        R                  " [        5         [	        UU4S jUU4S jUU4S jTUSS9  SSS5        U R                  5       nS/nU H  nXBR                  ;   a  M   e   [         R                  " S5      m[         R                  " SS/5      m[        R                  " [        [        45         [	        UU4S jUU4S jUU4S j[         R                  " SS/5      USS9  SSS5        U R                  5       nS /nU H  nXBR                  ;   a  M   e   [         R                  " / S!Q5      m[         R                  " / S"Q5      m[        R                  " [        5         [	        UU4S# jUU4S$ jUU4S% j[         R                  " T5      USSS&9  SSS5        U R                  5       nS'/nU H  nXBR                  ;   a  M   e   gg! , (       d  f       GNI= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       Ns= f)(z0Test the std output of verbose newton_cg solver.rF   rD   )dtypec                     > TU -  T-
  U4S j4$ )Nc                    > TU -  $ r   r,   zr   s    r   r*   <test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>U   s	    !a%r   r,   r   r   bs    r   r*   *test_newton_cg_verbosity.<locals>.<lambda>U   s    QUQY8r   c                 &   > SU -  T-  U -  TU -  -
  $ r   r,   rh   s    r   r*   rj   V   s    sQw{QQ.r   c                    > TU -  T-
  $ r   r,   rh   s    r   r*   rj   W   s    q1uqyr   r   )r-   r   r    r3   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                     > TU -  T-
  U4S j4$ )Nc                    > TU -  $ r   r,   re   s    r   r*   rg   }   	    !a%r   r,   rh   s    r   r*   rj   }       QUQY$@r   c                 &   > SU -  T-  U -  TU -  -
  $ r   r,   rh   s    r   r*   rj   ~       sQw{QQ6r   c                    > TU -  T-
  $ r   r,   rh   s    r   r*   rj          q1uqyr          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                     > TU -  T-
  U4S j4$ )Nc                    > TU -  $ r   r,   re   s    r   r*   rg      rr   r   r,   rh   s    r   r*   rj      rs   r   c                 &   > SU -  T-  U -  TU -  -
  $ r   r,   rh   s    r   r*   rj      ru   r   c                    > TU -  T-
  $ r   r,   rh   s    r   r*   rj      rw   r   )r-   r   r    r3   r`   maxiterztiny_|p| = eps * ||p||^2c                     > TU -  T-
  U4S j4$ )Nc                    > T* U -  $ r   r,   re   s    r   r*   rg      s    1"q&r   r,   rh   s    r   r*   rj      s    QUQY0@$Ar   c                 &   > SU -  T-  U -  TU -  -
  $ r   r,   rh   s    r   r*   rj      ru   r   c                    > TU -  T-
  $ r   r,   rh   s    r   r*   rj      rw   r   rB   z9Inner CG solver iteration 0 fell back to steepest descent)gMbP?rD   g     @@)rx   rD   ro   c                     > TU -  T-
  U4S j4$ )Nc                    > TU -  $ r   r,   re   s    r   r*   rg      rr   r   r,   rh   s    r   r*   rj      rs   r   c                 &   > SU -  T-  U -  TU -  -
  $ r   r,   rh   s    r   r*   rj      ru   r   c                    > TU -  T-
  $ r   r,   rh   s    r   r*   rj      rw   r   )r-   r   r    r3   r`   r}   maxinnerz*Inner CG solver stopped reaching maxiter=1)r8   eyerX   floatr   zerosshape
readouterroutpytestwarnsRuntimeWarningUserWarningr   diag	ones_like)capsysr`   capturedmsgmr   ri   s        @@r   test_newton_cg_verbosityr   N   sL    	q	A
!Qu%A8. 88AGGAJ   "H!|||r!!!
 A$$$  !|
 A$$$  !| HHsAhA'(4/HHc3Z  \\>;78@6(88T1I& 9 $$&
 A$$$ 
 HHsAhI/0HHdAY\\,-@6( . $$&&
 A$$$  FF1IHHdAY\\>;78A6(88S#J' 9 $$&G
 A$$$  GGN#HH^$\\,-@6(<<? . $$&8
 A$$$ g  98, .-* 98& .-s0   :3N/1O4O3O%/
N>
O
O"%
O3c                     [        5       n SU l        SU l        SU l        [        R
                  " 5          [        R                  " S5        [        SU 5        S S S 5        SU l        SU l        [        R                  " [        5       n[        SU 5        S S S 5        [        W5      S:X  d   eUS   R                  R                  S   nSU;   d   eU R                  U;   d   eSU;  d   eS	U;   d   e[        R                  " [        5       n[        SU SS
9  S S S 5        [        U5      S:X  d   eUS   R                  R                  S   nSU;   d   eU R                  U;   d   eSU;   d   eS	U;   d   eSU l        SU l        SU l        [        R                  " [        5       n[        SU SS
9  S S S 5        [        U5      S:X  d   eUS   R                  R                  S   nSU;   d   eU R                  U;   d   eSU;  d   eS	U;   d   eg ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN%= f! , (       d  f       N= f)NrD   r   OKerrorlbfgsz+STOP: TOTAL NO. OF ITERATIONS REACHED LIMITz-lbfgs failed to converge after 1 iteration(s)z!Increase the number of iterationszscale the data)max_iterrF   ABNORMALr   z-lbfgs failed to converge after 2 iteration(s))r   nitstatusmessagewarningscatch_warningssimplefilterr   r   r   r   lenargs)resultrecordwarn_msgs      r   test_check_optimizer      s3   WF FJFMFN		 	 	"g&w/ 
# FMBFN	(	)Vw/ 
* v;!ay  %%a(H:hFFF>>X%%%.h>>>x''' 
(	)Vw; 
* v;!ay  %%a(H:hFFF>>X%%%.(:::x''' FJFMFN	(	)Vw< 
* v;!ay  %%a(H:hFFF>>X%%%.h>>>x'''W 
#	" 
*	) 
*	) 
*	)s/   #HH&H8(I

H#&
H58
I

I)r   numpyr8   r   scipy.optimizer   sklearnr   sklearn.exceptionsr   sklearn.utils._array_apir   r   sklearn.utils._bunchr   sklearn.utils._testingr	   r
   sklearn.utils.optimizer   r   r@   markparametrizer_   r   r   r,   r   r   <module>r      s       # " 1 W & H E< .-/	: I.y% /y%x4(r   