Ë
    ÜÍ:j\"  ã                   ó  — d dl Z 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mZ d dlmZ d dlmZmZ d dlmZmZ d	„ Zej,                  j/                  d
 e«       «      d„ «       Zej,                  j/                  dg d¢«      d„ «       Zd„ Zy)é    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                 ó’  ‡‡— t         j                  j                  | «      }|j                  d¬«      Št        j                  d«      }ˆfd„}ˆfd„Šˆfd„}ˆˆfd„}t        j
                  t        j                  t        ||‰|d¬	«      d
   «      dk  «      sJ ‚t        t        ||‰|d¬	«      d
   t        ||‰|¬«      d¬«       y )N)é
   r   )Úsizer   c                 óN   •— ‰j                  | «      }d|j                  |«      z  S ©Nç      à?)Údot)ÚxÚAxÚAs     €úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/sklearn/utils/tests/test_optimize.pyÚfuncztest_newton_cg.<locals>.func   s#   ø€ Ø�U‰U�1‹XˆØ�b—X‘X˜b“\Ñ!Ð!ó    c                 óX   •— ‰j                   j                  ‰j                  | «      «      S ©N©ÚTr   ©r   r   s    €r   Úgradztest_newton_cg.<locals>.grad   s   ø€ Ø�s‰s�w‰w�q—u‘u˜Q“xÓ Ð r   c                 ó’   •— |j                  ‰j                  j                  ‰j                  | j                  «       «      «      «      S r   )r   r   Úall©r   Úpr   s     €r   Úhessztest_newton_cg.<locals>.hess   s-   ø€ Ø�u‰u�Q—S‘S—W‘W˜QŸU™U 1§5¡5£7›^Ó,Ó-Ð-r   c                 ó   •—  ‰| «      ˆfd„fS )Nc                 óX   •— ‰j                   j                  ‰j                  | «      «      S r   r   r   s    €r   ú<lambda>z3test_newton_cg.<locals>.grad_hess.<locals>.<lambda>!   s   ø€  !§#¡#§'¡'¨!¯%©%°«(Ó"3€ r   © )r   r   r   s    €€r   Ú	grad_hessz!test_newton_cg.<locals>.grad_hess    s   ø€ Ù�A‹wÓ3Ð3Ð3r   ç»½×Ùß|Û=©Útolr   gH¯¼šò×z>)ÚfÚx0ÚfprimeÚfhess_pgñhãˆµøä>©Úatol)
ÚnpÚrandomÚRandomStateÚnormalÚonesr!   Úabsr   r
   r   )Úglobal_random_seedÚrngr.   r   r$   r)   r   r   s         @@r   Útest_newton_cgr;      s®   ù€ ô �)‰)×
Ñ
Ð 2Ó
3€CØ�
‰
˜ˆ
Ó!€AÜ	�‰�‹€Bô"ô!ô.õ4ô
 �6‰6”"—&‘&œ I¨t°T¸2À5ÔIÈ!ÑLÓMÐQUÑUÔVÐVÐVÜÜ�9˜d D¨"°$Ô7¸Ñ:Ü�4˜B t°TÔ:Øör   z(array_namespace, device_name, dtype_namec                 óJ  ‡	‡
‡‡— t        | |«      \  }}|j                  t        j                  ddgddgg«      j	                  |«      |¬«      Š	|j                  t        j
                  d«      j	                  |«      |¬«      Š|j                  t        j                  d«      j	                  |«      |¬«      }ˆ	ˆfd„}ˆ	ˆfd„Š
ˆ	fd„Šˆ
ˆfd	„}t        d
¬«      5  t        ||‰
|d¬«      }ddd«       t        t        d   t        d¬«      ddgd¬«       y# 1 sw Y   Œ-xY w)z/Test that newton_cg works with Array API input.é   éÿÿÿÿé   )Údeviceé   c                 ó,   •— d‰‰| z  z
  z  ‰‰| z  z
  z  S r   r(   ©r   r   Úys    €€r   r   z1test_newton_cg_array_api_compliance.<locals>.func8   s#   ø€ Ø�a˜!˜a™%‘iÑ  A¨¨A©¡IÑ.Ð.r   c                 ó.   •— ‰j                   ‰| z  ‰z
  z  S r   ©r   rC   s    €€r   r   z1test_newton_cg_array_api_compliance.<locals>.grad;   s   ø€ Ø�s‰s�a˜!‘e˜a‘iÑ Ð r   c                 ó(   •— ‰j                   ‰|z  z  S r   rF   r"   s     €r   r$   z1test_newton_cg_array_api_compliance.<locals>.hess>   s   ø€ Ø�s‰s�a˜!‘e‰}Ðr   c                 ó"   •‡ —  ‰‰ «      ˆˆ fd„fS )Nc                 ó   •—  ‰‰| «      S r   r(   )r#   r$   r   s    €€r   r'   zHtest_newton_cg_array_api_compliance.<locals>.grad_hess.<locals>.<lambda>B   s   ø€ ¡$ q¨!£*€ r   r(   )r   r   r$   s   `€€r   r)   z6test_newton_cg_array_api_compliance.<locals>.grad_hessA   s   ù€ Ù�A‹wÔ,Ð,Ð,r   T)Úarray_api_dispatchr*   r+   Nr   Úcpu)Úxpr@   r   g      ø?r1   )r	   Úasarrayr3   ÚarrayÚastypeÚaranger7   r   r   r
   r   )Úarray_namespaceÚdevice_nameÚ
dtype_namerL   r@   r.   r   r)   Úresr   r   r$   rD   s            @@@@r   Ú#test_newton_cg_array_api_compliancerU   -   sû   û€ ô & o°{ÓC�J€BˆØ
�
‰
”2—8‘8˜a ˜W r¨1 gÐ.Ó/×6Ñ6°zÓBÈ6ˆ
ÓR€AØ
�
‰
”2—9‘9˜Q“<×&Ñ& zÓ2¸6ˆ
ÓB€AØ	�‰”B—G‘G˜A“J×%Ñ% jÓ1¸&ˆÓ	A€Bõ/õ!ôõ-ô 
¨4Ô	0ñ ?Ü˜ D¨$°¸Ô>ˆ÷?ô Ü��A‘œ2 eÔ,Ø	�ˆØö÷?ð ?ús   ÃDÄD"Úverbose)r   r?   rA   c           
      óv  ‡‡— t        j                  d«      Št        j                  ddgt        ¬«      Št	        ˆˆfd„ˆˆfd„ˆˆfd„t        j
                  ‰j                  d   «      |¬«       | j                  «       }|dk(  r|j                  d	k(  sJ ‚g d
¢}|D ]  }||j                  v rŒJ ‚ |dk\  rg d¢}|D ]  }||j                  v rŒJ ‚ |dk\  �r°t        j                  ddgddgg«      dz  Št        j                  ddg«      Št        j                  t        t        f«      5  t	        ˆˆfd„ˆˆfd„ˆˆfd„t        j                  ddg«      |¬«       ddd«       | j                  «       }g d¢}|D ]  }||j                  v rŒJ ‚ t        j                  ddgddgg«      Št        j                  ddg«      Št        j                  t        «      5  t	        ˆˆfd„ˆˆfd„ˆˆfd„‰|d¬«       ddd«       | j                  «       }dg}|D ]  }||j                  v rŒJ ‚ t        j                  d«      Št        j                  ddg«      Št        j                  t        t        f«      5  t	        ˆˆfd„ˆˆfd„ˆˆfd„t        j                  ddg«      |d¬«       ddd«       | j                  «       }d g}|D ]  }||j                  v rŒJ ‚ t        j                  g d!¢«      Št        j                  g d"¢«      Št        j                  t        «      5  t	        ˆˆfd#„ˆˆfd$„ˆˆfd%„t        j                  ‰«      |dd¬&«       ddd«       | j                  «       }d'g}|D ]  }||j                  v rŒJ ‚ yy# 1 sw Y   �Œ-xY w# 1 sw Y   �ŒžxY w# 1 sw Y   ŒúxY w# 1 sw Y   Œ[xY w)(z0Test the std output of verbose newton_cg solver.rA   r?   )Údtypec                 ó   •— ‰| z  ‰z
  ˆfd„fS )Nc                 ó   •— ‰| z  S r   r(   ©Úzr   s    €r   r'   z<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>U   s   ø€ °!°a±%€ r   r(   ©r   r   Úbs    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>U   s   ø€ ˜Q ™U Q™Y«Ð8€ r   c                 ó&   •— d| z  ‰z  | z  ‰| z  z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>V   s   ø€ �s˜Q‘w ‘{ Q‘¨¨Q©Ñ.€ r   c                 ó   •— ‰| z  ‰z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>W   s   ø€ �q˜1‘u˜q‘y€ r   r   )r)   r   r   r.   rV   Ú )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                 ó   •— ‰| z  ‰z
  ˆfd„fS )Nc                 ó   •— ‰| z  S r   r(   r[   s    €r   r'   z<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>}   ó   ø€ ¸!¸a¹%€ r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>}   ó   ø€  Q¨¡U¨Q¡Y³Ð$@€ r   c                 ó&   •— d| z  ‰z  | z  ‰| z  z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>~   ó   ø€ ˜s Q™w¨™{¨Q™°°Q±Ñ6€ r   c                 ó   •— ‰| z  ‰z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>   ó   ø€ ˜q 1™u q™y€ 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                 ó   •— ‰| z  ‰z
  ˆfd„fS )Nc                 ó   •— ‰| z  S r   r(   r[   s    €r   r'   z<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>“   rf   r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>“   rg   r   c                 ó&   •— d| z  ‰z  | z  ‰| z  z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>”   ri   r   c                 ó   •— ‰| z  ‰z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>•   rk   r   )r)   r   r   r.   rV   Úmaxiterztiny_|p| = eps * ||p||^2c                 ó   •— ‰| z  ‰z
  ˆfd„fS )Nc                 ó   •— ‰ | z  S r   r(   r[   s    €r   r'   z<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>©   s   ø€ ¸1¸"¸q¹&€ r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>©   s   ø€  Q¨¡U¨Q¡YÓ0@Ð$A€ r   c                 ó&   •— d| z  ‰z  | z  ‰| z  z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>ª   ri   r   c                 ó   •— ‰| z  ‰z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>«   rk   r   r=   z9Inner CG solver iteration 0 fell back to steepest descent)gü©ñÒMbP?r?   g     @�@)rl   r?   rc   c                 ó   •— ‰| z  ‰z
  ˆfd„fS )Nc                 ó   •— ‰| z  S r   r(   r[   s    €r   r'   z<test_newton_cg_verbosity.<locals>.<lambda>.<locals>.<lambda>»   rf   r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>»   rg   r   c                 ó&   •— d| z  ‰z  | z  ‰| z  z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>¼   ri   r   c                 ó   •— ‰| z  ‰z
  S r   r(   r]   s    €€r   r'   z*test_newton_cg_verbosity.<locals>.<lambda>½   rk   r   )r)   r   r   r.   rV   rq   Úmaxinnerz*Inner CG solver stopped reaching maxiter=1)r3   ÚeyerN   Úfloatr   ÚzerosÚshapeÚ
readouterrÚoutÚpytestÚwarnsÚRuntimeWarningÚUserWarningr   ÚdiagÚ	ones_like)ÚcapsysrV   ÚcapturedÚmsgÚmr   r^   s        @@r   Útest_newton_cg_verbosityr‹   N   s’  ù€ ô 	�‰ˆq‹	€AÜ
�‰�!�Q�œuÔ%€AäÜ8Ü.Ü Ü�8‰8�A—G‘G˜A‘JÓØõð × Ñ Ó"€Hà�!‚|Ø�|‰|˜rÒ!Ð!Ð!ò
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ð	%ð �!‚|ò
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ð	%ð �!ƒ|ô �H‰H�s˜A�h  A Ð'Ó(¨4Ñ/ˆÜ�H‰H�c˜3�ZÓ ˆô �\‰\œ>¬;Ð7Ó8ñ 	ÜÜ@Ü6Ü(Ü—8‘8˜T 1˜IÓ&Øõ÷	ð ×$Ñ$Ó&ˆò
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ð	%ô
 �H‰H�s˜A�h  I Ð/Ó0ˆÜ�H‰H�d˜A�YÓˆÜ�\‰\Ô,Ó-ñ 	ÜÜ@Ü6Ü(ØØØõ÷	ð ×$Ñ$Ó&ˆà&ð
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ð	%ô �F‰F�1‹IˆÜ�H‰H�d˜A�YÓˆÜ�\‰\œ>¬;Ð7Ó8ñ 		ÜäAÜ6Ü(Ü—8‘8˜S #˜JÓ'ØØõ÷		ð ×$Ñ$Ó&ˆàGð
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ð	%ô �G‰G’NÓ#ˆÜ�H‰H’^Ó$ˆÜ�\‰\Ô,Ó-ñ 		ÜÜ@Ü6Ü(Ü—<‘< “?ØØØõ÷		ð ×$Ñ$Ó&ˆà8ð
ˆð ò 	%ˆAØ˜Ÿ™Ò$Ð$Ð$ñ	%ðg ÷	ñ 	ú÷,	ñ 	ú÷*		ð 		ú÷&		ð 		ús0   Ä,2N	ÇNÉ73N#Ì#2N/Î	NÎN Î#N,Î/N8c                  óZ  — t        «       } d| _        d| _        d| _        t	        j
                  «       5  t	        j                  d«       t        d| «       d d d «       d| _        d| _        t        j                  t        «      5 }t        d| «       d d d «       t        «      dk(  sJ ‚|d   j                  j                  d   }d|v sJ ‚| j                  |v sJ ‚d|vsJ ‚d	|v sJ ‚t        j                  t        «      5 }t        d| d¬
«       d d d «       t        |«      dk(  sJ ‚|d   j                  j                  d   }d|v sJ ‚| j                  |v sJ ‚d|v sJ ‚d	|v sJ ‚d| _        d| _        d| _        t        j                  t        «      5 }t        d| d¬
«       d d d «       t        |«      dk(  sJ ‚|d   j                  j                  d   }d|v sJ ‚| j                  |v sJ ‚d|vsJ ‚d	|v sJ ‚y # 1 sw Y   �Œ¦xY w# 1 sw Y   �ŒwxY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒxY w)Nr?   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_iterrA   Ú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�   Ë   sO  € ä‹W€Fð €F„JØ€F„MØ€F„Nä	×	 Ñ	 Ó	"ñ 0Ü×Ñ˜gÔ&Ü˜w¨Ô/÷0ð €F„MØB€F„NÜ	�‰Ô(Ó	)ð 0¨VÜ˜w¨Ô/÷0ô ˆv‹;˜!ÒÐÐØ�a‰y× Ñ ×%Ñ% aÑ(€HØ:¸hÑFÐFÐFØ�>‰>˜XÑ%Ð%Ð%Ø.°hÑ>Ð>Ð>Ø˜xÑ'Ð'Ð'ô 
�‰Ô(Ó	)ð <¨VÜ˜w¨¸Õ;÷<ô ˆv‹;˜!ÒÐÐØ�a‰y× Ñ ×%Ñ% aÑ(€HØ:¸hÑFÐFÐFØ�>‰>˜XÑ%Ð%Ð%Ø.°(Ñ:Ð:Ð:Ø˜xÑ'Ð'Ð'ð €F„JØ€F„MØ€F„NÜ	�‰Ô(Ó	)ð =¨VÜ˜w¨¸Õ<÷=ô ˆv‹;˜!ÒÐÐØ�a‰y× Ñ ×%Ñ% aÑ(€HØ:¸hÑFÐFÐFØ�>‰>˜XÑ%Ð%Ð%Ø.°hÑ>Ð>Ð>Ø˜xÑ'Ð'Ñ'÷W0ñ 0ú÷0ñ 0ú÷<ñ <ú÷=ð =ús/   ´"G:ÂHÄHÆH!Ç:HÈHÈHÈ!H*)r•   Únumpyr3   r�   Úscipy.optimizer   Úsklearnr   Úsklearn.exceptionsr   Úsklearn.utils._array_apir   r   Úsklearn.utils._bunchr   Úsklearn.utils._testingr	   r
   Úsklearn.utils.optimizer   r   r;   ÚmarkÚparametrizerU   r‹   r�   r(   r   r   ú<module>r¨      s�   ðÛ ã Û Ý #å "Ý 1ß WÝ &ß Hß Eòð< ‡�×ÑØ.Ù-Ó/óñó	ðð: ‡�×Ñ˜¢IÓ.ñy%ó /ðy%óx4(r   