Ë
    âQ(h…2  ã                   óž   — d Z ddlZddlZddlmZmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZmZmZ d„ Z G d„ d«      Z G d	„ d
«      Z G d„ d«      Zy)z4
Unit tests for trust-region iterative subproblem.

é    N)Ú estimate_smallest_singular_valueÚsingular_leading_submatrixÚIterativeSubproblem)ÚsvdÚget_lapack_funcsÚdetÚqrÚnorm)Úassert_array_equalÚassert_equalÚassert_array_almost_equalc                 óŠ  — t         j                  j                  dd| | f«      }t        |d¬«      \  }}}t         j                  j                  ||| «      }t        j                  |«      d d d…   }t        j
                  ||«      }t        j                  ||j                  «      }	|dk(  rVt        j                  | «      }
t         j                  j                  dd| dz
  «      |
d d t        j                  ||
«      }
|	|
fS |dk(  rt        j                  | «      }
|	|
fS t         j                  j                  dd| «      }
|	|
fS )Néÿÿÿÿé   ÚTrue)ÚpivotingÚhardÚjac_equal_zero)	ÚnpÚrandomÚuniformr	   ÚsortÚmultiplyÚdotÚTÚzeros)ÚnÚmin_eigÚmax_eigÚcaseÚrandÚQÚ_Ú	eigvaluesÚQauxÚAÚgs              úi/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/scipy/optimize/tests/test_trustregion_exact.pyÚrandom_entryr)      s#  € ô �9‰9×Ñ˜R  Q¨ FÓ+€Dô � Ô'�G€A€qˆ!ô —	‘	×!Ñ! '¨7°AÓ6€IÜ—‘˜	Ó"¡4 R 4Ñ(€Iô �;‰;�y !Ó$€DÜ
�‰ˆt�Q—S‘SÓ€Að ˆv‚~Ü�H‰H�Q‹KˆÜ—‘×"Ñ" 2 q¨!¨A©#Ó.ˆˆ#ˆ2ˆÜ�F‰F�1�a‹Lˆð ˆaˆ4€Kð 
Ð!Ò	!Ü�H‰H�Q‹Kˆð ˆaˆ4€Kô �I‰I×Ñ˜b ! QÓ'ˆàˆaˆ4€Kó    c                   ó   — e Zd Zd„ Zy)Ú!TestEstimateSmallestSingularValuec                 óø   — t        j                  g d¢g d¢g d¢g d¢g«      }t        |«      \  }}}|d   }|dd d …f   }t        |«      \  }}t	        ||d¬«       t	        t        |«      t        |«      d¬«       y )N)r   é   é   é   )r   gš™™™™™©?é<   é   )r   r   çš™™™™™é?é	   )r   r   r   é
   r   é   )Údecimal)r   Úarrayr   r   r   Úabs)	ÚselfÚCÚUÚsÚVtÚsmin_svdÚzmin_svdÚsminÚzmins	            r(   Ú test_for_ill_condiotioned_matrixzBTestEstimateSmallestSingularValue.test_for_ill_condiotioned_matrix0   s}   € ô �H‰H’lÚ&Ú$Ú#ð%ó &ˆô �q“6‰ˆˆ1ˆbð �R‘5ˆØ�bš!�e‘9ˆô 6°aÓ8‰
ˆˆdô 	" $¨¸!Õ<Ü!¤# d£)¬S°«]ÀAÖFr*   N)Ú__name__Ú
__module__Ú__qualname__rC   © r*   r(   r,   r,   .   s   „ óGr*   r,   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestSingularLeadingSubmatrixc                 ón  — t        j                  g d¢g d¢g d¢g«      }t        d|f«      \  } ||ddd¬«      \  }}t        |||«      \  }}||dz
  |dz
  fxx   |z  cc<   t	        t        |d |…d |…f   «      d	«       t        j                  |t        j                  ||«      «      }t	        |d	«       y )
N)r   r.   r/   )r.   r0   é   )r/   rK   é   ©ÚpotrfFT©ÚlowerÚoverwrite_aÚcleanr   r   ©r   r8   r   r   r   r   r   ©r:   r&   ÚcholeskyÚcÚkÚdeltaÚvÚquadratic_terms           r(   Ú+test_for_already_singular_leading_submatrixzHTestSingularLeadingSubmatrix.test_for_already_singular_leading_submatrixI   s¹   € ô �H‰H’iÚÚð!ó "ˆô
 % Z°!°Ó6‰	ˆñ ˜ °EÀÔF‰ˆˆ1ä-¨a°°AÓ6‰ˆˆqà	ˆ!ˆA‰#ˆq�‰sˆ(‹�uÑ‹ô 	"¤# a¨¨¨¨B¨Q¨B¨¡i£.°!Ô4ô Ÿ™ ¤2§6¡6¨!¨Q£<Ó0ˆÜ! .°!Õ4r*   c                 óz  — t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        d|f«      \  } ||ddd¬	«      \  }}t        |||«      \  }}||d
z
  |d
z
  fxx   |z  cc<   t	        t        |d |…d |…f   «      d«       t        j                  |t        j                  ||«      «      }t	        |d«       y )N)r   r.   r/   r2   r6   )r.   rK   rK   r4   r   )r/   rK   é   r   r.   )r2   r4   r   r2   rK   )r6   r   r.   rK   r6   rM   FTrO   r   r   )r   Úasarrayr   r   r   r   r   rT   s           r(   Ú#test_for_simetric_indefinite_matrixz@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixb   s¿   € ô �J‰JšÚ'Ú(Ú'Ú'ð	)ó *ˆô % Z°!°Ó6‰	ˆñ ˜ °EÀÔF‰ˆˆ1ä-¨a°°AÓ6‰ˆˆqà	ˆ!ˆA‰#ˆq�‰sˆ(‹�uÑ‹ô 	"¤# a¨¨¨¨B¨Q¨B¨¡i£.°!Ô4ô Ÿ™ ¤2§6¡6¨!¨Q£<Ó0ˆÜ! .°!Õ4r*   c                 ón  — t        j                  g d¢g d¢g d¢g«      }t        d|f«      \  } ||ddd¬«      \  }}t        |||«      \  }}||dz
  |dz
  fxx   |z  cc<   t	        t        |d |…d |…f   «      d	«       t        j                  |t        j                  ||«      «      }t	        |d	«       y )
N)r   r/   r]   )r/   é   rK   )r]   rK   rL   rM   FTrO   r   r   rS   rT   s           r(   Ú$test_for_first_element_equal_to_zerozATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zero}   s¹   € ô �H‰H’jÚ Ú ð"ó #ˆô
 % Z°!°Ó6‰	ˆñ ˜ °EÀÔF‰ˆˆ1ä-¨a°°AÓ6‰ˆˆqà	ˆ!ˆA‰#ˆq�‰sˆ(‹�uÑ‹ô 	"¤# a¨¨¨¨B¨Q¨B¨¡i£.°!Ô4ô Ÿ™ ¤2§6¡6¨!¨Q£<Ó0ˆÜ! .°!Õ4r*   N)rD   rE   rF   r[   r_   rb   rG   r*   r(   rI   rI   G   s   „ ò5ò25ó65r*   rI   c                   ól   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zej                  j                  d«      d„ «       Zy)	ÚTestIterativeSubproblemc                 ó¼   ‡‡— g d¢g d¢g d¢g d¢gŠg d¢Šd}t        dd„ ˆfd	„ˆfd
„dd¬«      }|j                  |«      \  }}t        |g d¢«       t        |d«       y )N©r5   r.   r/   r0   ©r.   r   r2   r   ©r/   r2   r   r2   ©r0   r   r2   r.   )r   r   r   r   r   r   c                  ó   — y©Nr   rG   ©Úxs    r(   ú<lambda>z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>¨   ó   � r*   c                 ó.   •— t        j                  ‰«      S ©N©r   r8   ©rm   r'   s    €r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>©   ó   ø€ ´B·H±H¸Q³K€ r*   c                 ó.   •— t        j                  ‰«      S rq   rr   ©rm   ÚHs    €r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>ª   ó   ø€ ´R·X±X¸a³[€ r*   ç»½×Ùß|Û=©rm   ÚfunÚjacÚhessÚk_easyÚk_hard)gë8<Œbp?gøgÌEø®á¿gÎþ vå?gË�ùëÛªß¿T©r   Úsolver   )r:   Útrust_radiusÚsubprobÚpÚhits_boundaryrw   r'   s        @@r(   Útest_for_the_easy_casez.TestIterativeSubproblem.test_for_the_easy_case™   sr   ù€ ò ÚÚÚðˆò ˆð ˆô &¨Ù*5Û*?Û+@Ø-2Ø-2ô4ˆð #Ÿ=™=¨Ó6Ñˆˆ=ä! !ò &?ô 	@ä! -°Õ6r*   c                 óº   ‡‡— g d¢g d¢g d¢g d¢gŠg d¢Šd}d}t        dd	„ ˆfd
„ˆfd„dd¬«      }|j                  |«      \  }}t        | |j                  «       y )Nrf   rg   rh   ri   )gASýéð@r   r   r   grv»f(n Àr   r   c                  ó   — yrk   rG   rl   s    r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>Ã   ro   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rs   s    €r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>Ä   rt   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rv   s    €r(   rn   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>Å   rx   r*   ry   rz   )r   r�   r   Úlambda_current)r:   r=   r‚   rƒ   r„   r…   rw   r'   s         @@r(   Útest_for_the_hard_casez.TestIterativeSubproblem.test_for_the_hard_case³   so   ù€ ò ÚÚÚðˆò *ˆØˆð ˆô &¨Ù*5Û*?Û+@Ø-2Ø-2ô4ˆð #Ÿ=™=¨Ó6Ñˆˆ=ä! 1 " g×&<Ñ&<Õ=r*   c                 ó  ‡‡— g d¢g d¢g d¢g d¢g d¢gŠg d¢Št        dd„ ˆfd	„ˆfd
„¬«      }|j                  d«      \  }}t        |g d¢«       t        |d«       t        |j                  d«       t        |j                  d«       y )N)gÛn‚ošþü?ç�ž¶¡½uê?ç,wnó)ôË?ç”/ËK¼Ëà¿çÿëš˜GÐ?)rŽ   gì¼®ÛwO@çÙ¢y¾n*Ô?çr–<8±Ù¿çõ¶Û&ÃŽ¶?)r�   r’   gÓ6›ª
@çøòÄ½CÔ¿ç8Š¤ÄKƒÑ?)r�   r“   r•   gÀc‘‰èù?çò†«>øÚ¿)r‘   r”   r–   r—   gÂ-£Qõ?)g*‹ã<sAè?g³¢¼E�?gM x¾—©Õ?gzý‹˜ÀÊê?gôÒ=€©Þ¿r   c                  ó   — yrk   rG   rl   s    r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>Ø   ro   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rs   s    €r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>Ù   rt   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rv   s    €r(   rn   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>Ú   rx   r*   )rm   r{   r|   r}   çš™™™™™ñ?)g8bÒ„òå¿gåO
©‘L¿?g p4OÇFÌ¿g� Ïqå¿g­oš-7Ô?Fr   )r   r�   r   r‹   Úniter©r:   rƒ   r„   r…   rw   r'   s       @@r(   Útest_for_interior_convergencez5TestIterativeSubproblem.test_for_interior_convergenceÌ   s‡   ù€ âHÚJÚIÚLÚJð	Lˆò Jˆô &¨Ù*5Û*?Û+@ôBˆð #Ÿ=™=¨Ó-Ñˆˆ=ä! !ò &?ô 	@ä! -°Ô7Ü! '×"8Ñ"8¸!Ô<Ü! '§-¡-°Õ3r*   c                 ó¾   ‡‡— g d¢g d¢g d¢g d¢g d¢gŠg d¢Št        dd„ ˆfd	„ˆfd
„dd¬«      }|j                  d«      \  }}t        |g d¢«       t        |d«       y )N©gÝVaÐUì?çø˜›±`A@ç5“ýF€ï?çÔ9Ô)n@é¿ç€îcñÑ¿©r¡   gµÚ{ú¥§¿ç.<íøÕ?ç~õýÏËê¿çÔ:]³èÅ?©r¢   r¦   g@33ôë¿ç �5Ð:²°¿ç¦ä¤IŒâö¿©r£   r§   rª   gÐ¹ÛõÒTú¿ç¦F¦K°Õ¿©r¤   r¨   r«   r­   g¬¢&—Rùú¿)r   r   r   r   r   r   c                  ó   — yrk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>ï   ro   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rs   s    €r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>ð   rt   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rv   s    €r(   rn   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>ñ   rx   r*   ry   rz   r›   ©g÷iG7ã°±?glµ$“•W�¿gÀü€ÍZæä¿g-ðOˆ|Î¿g¦mô‚/ë¿Tr€   r�   s       @@r(   Útest_for_jac_equal_zeroz/TestIterativeSubproblem.test_for_jac_equal_zeroã   sn   ù€ âKÚKÚLÚLÚMð	Oˆò ˆô &¨Ù*5Û*?Û+@Ø-2Ø-2ô4ˆð #Ÿ=™=¨Ó-Ñˆˆ=ä! !ò &3ô 	4ô 	" -°Õ6r*   c                 ó¾   ‡‡— g d¢g d¢g d¢g d¢g d¢gŠg d¢Št        dd„ ˆfd	„ˆfd
„dd¬«      }|j                  d«      \  }}t        |g d¢«       t        |d«       y )Nr    r¥   r©   r¬   r®   )r   r   r   r   gVçž¯Ò<r   c                  ó   — yrk   rG   rl   s    r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  ro   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rs   s    €r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  rt   r*   c                 ó.   •— t        j                  ‰«      S rq   rr   rv   s    €r(   rn   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>	  rx   r*   ry   rz   r›   r²   Tr€   r�   s       @@r(   Útest_for_jac_very_close_to_zeroz7TestIterativeSubproblem.test_for_jac_very_close_to_zeroû   sn   ù€ âKÚKÚLÚLÚMð	Oˆò  ˆô &¨Ù*5Û*?Û+@Ø-2Ø-2ô4ˆð #Ÿ=™=¨Ó-Ñˆˆ=ä! !ò &3ô 	4ô 	" -°Õ6r*   r5   c                 ó®  ‡‡— t         j                  j                  d«       d}dD �]¬  }g d¢}|D �]Ÿ  \  }}t        ||||«      \  ŠŠg d¢}|D �]~  }t	        dd„ ˆfd„ˆfd	„d
d
¬«      }|j                  |«      \  }	}
dt        j                  |	t        j                  ‰|	«      «      z  t        j                  ‰|	«      z   }g d¢}|D �]  \  }}t        |dz
  dt        j                  |«      z
  «      }d|z
  }t	        dd„ ˆfd„ˆfd„||¬«      }|j                  |«      \  }}dt        j                  |t        j                  ‰|«      «      z  t        j                  ‰|«      z   }|r5t        t        j                  t        |«      |z
  «      |dz
  |z  k  d«       nt        t        |«      |k  d«       t        |||z  k  d«       �Œ �Œ� �Œ¢ �Œ¯ y )Nr   rK   )Úeasyr   r   ))iìÿÿÿiñÿÿÿ)éöÿÿÿéûÿÿÿ)r»   r   )r¼   rK   )r»   r5   )r   r5   )rK   r5   )é   é   )	çš™™™™™¹?g333333Ó?g333333ã?r3   r   g333333ó?gffffff
@g      @r5   r   c                  ó   — yrk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>1  ro   r*   c                 ó   •— ‰S rq   rG   rs   s    €r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>2  ó   ø€ ¸q€ r*   c                 ó   •— ‰S rq   rG   rv   s    €r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>3  rÂ   r*   ry   )r~   r   ç      à?))r¿   r.   )rÄ   r›   )gÍÌÌÌÌÌì?g)\�Âõ(ð?c                  ó   — yrk   rG   rl   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>L  ro   r*   c                 ó   •— ‰S rq   rG   rs   s    €r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>M  ó   ø€ À€ r*   c                 ó   •— ‰S rq   rG   rv   s    €r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>N  rÇ   r*   T)r   r   Úseedr)   r   r�   r   ÚminÚsqrtr   r9   r
   r   )r:   r   r    Ú
eig_limitsr   r   Útrust_radius_listr‚   Ú
subprob_acÚp_acÚhits_boundary_acÚJ_acÚstop_criteriaÚk_optÚk_trfr~   r   rƒ   r„   r…   ÚJrw   r'   s                        @@r(   Útest_for_random_entriesz/TestIterativeSubproblem.test_for_random_entries  sæ  ù€ ô 	�	‰	�‰�qÔð ˆà6ó C	<ˆDò$ˆJð %/ó 8<Ñ �˜ô $ A w°¸Ó>‘��1ò %OÐ!à$5ó 0<�Lä!4°QÙ5@Û5@Û5@Ø<AØ<Aô"C�Jð .8×-=Ñ-=¸lÓ-KÑ*�DÐ*ð œrŸv™v d¬B¯F©F°1°d«OÓ<Ñ<¼R¿V¹VÀAÀt»_ÑL�Dò%2�Mð )6ó <™˜˜uô "% U¨1¡WØ%&¤r§w¡w¨u£~Ñ%5ó"7˜à!" 5¡˜ô #6°aÙ6AÛ6AÛ6AØ=CØ=Cô#E˜ð ,3¯=©=¸Ó+FÑ(˜˜=ð  ¤§¡ q¬"¯&©&°°A«,Ó 7Ñ7¼¿¹¸qÀ!»ÑD˜ñ )Ü.¬r¯v©v´d¸1³g¸lÑ6JÓ/KØ05°a±¸Ñ/Eñ0FØGKõMô )¬¨a«°LÑ)@À$ÔGô % Q¨%°©*¡_°dÖ;ò=<ò%0<ò8<ñC	<r*   N)rD   rE   rF   r†   rŒ   rž   r³   r¸   ÚpytestÚmarkÚ	fail_slowrÖ   rG   r*   r(   rd   rd   —   s@   „ ò7ò4>ò24ò.7ò07ð0 ‡[�[×Ñ˜2ÓñJ<ó ñJ<r*   rd   )Ú__doc__r×   Únumpyr   Ú!scipy.optimize._trustregion_exactr   r   r   Úscipy.linalgr   r   r   r	   r
   Únumpy.testingr   r   r   r)   r,   rI   rd   rG   r*   r(   ú<module>rß      s[   ðñó Û ÷ñ ÷ @Õ ?÷Dñ Dò÷<Gñ G÷2M5ñ M5÷`G<ò G<r*   