
    >qj$U                         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mZ d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_allcloseassert_array_equalassert_equalassert_array_almost_equalc                 `   t         j                  j                  |      }|j                  dd| | f      }t	        |d      \  }}}|j                  |||       }t        j
                  |      d d d   }t        j                  ||      }	t        j                  |	|j                        }
|dk(  rIt        j                  |       }|j                  dd| dz
        |d d t        j                  ||      }|
|fS |dk(  rt        j                  |       }|
|fS |j                  dd|       }|
|fS )N   )lowhighsizeTrue)pivotinghardjac_equal_zero)
nprandomdefault_rnguniformr	   sortmultiplydotTzeros)nmin_eigmax_eigcaserngrandQ_	eigvaluesQauxAgs               j/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr/      s'   
))


$C ;;2AQF;3D 'GAq! gA>I	"4R4(I ;;y!$D
tQSSA v~HHQK!!A#6#2FF1aL a4K 
!	!HHQK a4K KKBQQK/a4K    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_matrix1   s}     HHl&$#% & q61b R5b!e9 6a8
d 	"$!<!#d)S]AFr0   N)__name__
__module____qualname__rI    r0   r.   r2   r2   /   s    Gr0   r2   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   r4   r5   )r4   r6      )r5   rQ      potrfFTloweroverwrite_acleanr   r   r   r>   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_submatrixJ   s     HHi! "
 %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!Q<0!.!4r0   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   r4   r5   r8   r<   )r4   rQ   rQ   r:   r   )r5   rQ      r   r4   )r8   r:   r   r8   rQ   )r<   r   r4   rQ   r<   rS   FTrU   r   r   )r   asarrayr   r   r   r   r   rZ   s           r.   #test_for_simetric_indefinite_matrixz@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixc   s     JJ'(''	) * %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!Q<0!.!4r0   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   r5   rc   )r5      rQ   )rc   rQ   rR   rS   FTrU   r   r   rY   rZ   s           r.   $test_for_first_element_equal_to_zerozATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zero~   s     HHj  " #
 %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!Q<0!.!4r0   N)rJ   rK   rL   ra   re   rh   rM   r0   r.   rO   rO   H   s    52565r0   rO   c                       e Zd Zd Zd Zd Zd Zd Zd Ze	j                  j                  d      e	j                  j                  d	      d
               Z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r;   r4   r5   r6   r4   r   r8   r   r5   r8   r   r8   r6   r   r8   r4   )r   r   r   r   r   r   c                      yNr   rM   xs    r.   <lambda>z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       r0   c                 .    t        j                        S Nr   r>   rs   r-   s    r.   rt   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       BHHQK r0   c                 .    t        j                        S rw   rx   rs   Hs    r.   rt   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       RXXa[ r0   绽|=rs   funjachessk_easyk_hard)g8<bp?ggEg v?gˍ۪߿Tr   solver   )r@   trust_radiussubprobphits_boundaryr}   r-   s        @@r.   test_for_the_easy_casez.TestIterativeSubproblem.test_for_the_easy_case   sr        &*5*?+@-2-24 #==6=!! &? 	@!-6r0   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 )Nrl   rm   rn   ro   )gAS@r   r   r   grvf(n r   r   c                      yrq   rM   rr   s    r.   rt   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   ru   r0   c                 .    t        j                        S rw   rx   ry   s    r.   rt   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   rz   r0   c                 .    t        j                        S rw   rx   r|   s    r.   rt   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   r~   r0   r   r   )r   r   r   lambda_current)r@   rC   r   r   r   r   r}   r-   s         @@r.   test_for_the_hard_casez.TestIterativeSubproblem.test_for_the_hard_case   so      *  &*5*?+@-2-24 #==6=!1"g&<&<=r0   c                     ddgddgddggt        t        j                  d      d fdfd	d
d      }|j                  d      \  }}t	        |ddg       |sJ y )N      r   rQ   r4   c                      yrq   rM   )r)   s    r.   rt   z6TestIterativeSubproblem.test_gh20244.<locals>.<lambda>   ru   r0   c                 .    t        j                        S rw   rx   )r)   r-   s    r.   rt   z6TestIterativeSubproblem.test_gh20244.<locals>.<lambda>   rz   r0   c                 .    t        j                        S rw   rx   )r)   r}   s    r.   rt   z6TestIterativeSubproblem.test_gh20244.<locals>.<lambda>   r~   r0   gư>g&.>r   g      ?gќ̪g<;?)r   r   r!   r   r   r@   r   r   r   r}   r-   s       @@r.   test_gh20244z$TestIterativeSubproblem.test_gh20244   sk    I!Wq!f%*?+@-13 #==-=K*56}r0   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)gno?獞u?,wn)?/K뚘G?)r   g켮wO@٢yn*?r<8ٿ&Î?)r   r   g6
@ĽCԿ8K?)r   r   r   gc?>ڿ)r   r   r   r   g-Q?)g*<sA?gE?gM x?gz?g=޿r   c                      yrq   rM   rr   s    r.   rt   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   ru   r0   c                 .    t        j                        S rw   rx   ry   s    r.   rt   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   rz   r0   c                 .    t        j                        S rw   rx   r|   s    r.   rt   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   r~   r0   )rs   r   r   r   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r   r   r   niterr   s       @@r.   test_for_interior_convergencez5TestIterativeSubproblem.test_for_interior_convergence   s    HJILJ	L J &*5*?+@B #==-=!! &? 	@!-7!'"8"8!<!'--3r0   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VaU?`A@5F?9)n@cѿr   g{.<?~:]?r   r   g@33 5:Ir   r   r   gйTFKտr   r   r   r   g&R)r   r   r   r   r   r   c                      yrq   rM   rr   s    r.   rt   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   ru   r0   c                 .    t        j                        S rw   rx   ry   s    r.   rt   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   rz   r0   c                 .    t        j                        S rw   rx   r|   s    r.   rt   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   r~   r0   r   r   r   giG7㰱?gl$WgZg-O|οgm/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 	"-6r0   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rq   rM   rr   s    r.   rt   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  ru   r0   c                 .    t        j                        S rw   rx   ry   s    r.   rt   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  rz   r0   c                 .    t        j                        S rw   rx   r|   s    r.   rt   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  r~   r0   r   r   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 	"-6r0   zfails in parallel)reasonr;   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   rQ   )easyr   r   ))ii)r   )r   r   )r   rQ   )r   r;   )r   r;   )rQ   r;   )r   r   )r&   )	皙?g333333?g333333?r9   r   g333333?gffffff
@g      @r;   r   c                      yrq   rM   rr   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>?  ru   r0   c                     S rw   rM   ry   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>@      q r0   c                     S rw   rM   r|   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>A  r   r0   r   )r   r         ?))r   r4   )r   r   )g?g)\(?c                      yrq   rM   rr   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>Z  ru   r0   c                     S rw   rM   ry   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>[       r0   c                     S rw   rM   r|   s    r.   rt   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>\  r   r0   T)r   r   r   r/   r   r   r   minsqrtr   r?   r
   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   Jr}   r-   s                         @@r.   test_for_random_entriesz/TestIterativeSubproblem.test_for_random_entries!  s    ii##A& 6 C	<D$J %/ 8<  $Aw3G1 %O!$5 0<L!4Q5@5@5@<A<A"CJ .8-=-=l-K*D* rvvdBFF1dO<<RVVAt_LD%2M )6 <u "%U1W%&rwwu~%5"7!"5 #6a6A6A6A=C=C#E ,3==+F(=  q"&&A, 77q!D ).rvvd1gl6J/K05a/E0FGKM )aL)@$G %Q%*_d;=<%0<8<C	<r0   c                    t        j                  g dg dg dg dg dg dg dg dg dg d	g d
g dg dg dg dg dg dg dg dg      t        j                  g d      ddg}|D ]d  }t        dd fdfddd|      }d}|j                  |      \  }}| |j                  t        j
                  k  rRJ |j                  |k  rdJ  y)zRegression test for gh-12513)g`]B@nضo}crs'@9bS.Q- 8w r   8T`w^ѿ-U\v\?炾_j@R^ݸiT[ʢ]LX?篍>'@,:Y,>7*3?)r   "J@XWmх?%6@x(,@r   yֱ@ַ#@&8L0@皇lB|sɂ(h0s?	@Fyb@{P(CfR?爏c)r   r   gϠrm@G)ܿP{ۍ`t<r   8$p&
>Jwy>b*P gc\@K@畑E1@!a"*%DS	5Vh	@k	ؒ@)r   r   r  gOhj?L ?Z"'?r   \,8Q?ZϪޡy?Mؤh?B?NR?HOAK9%?琒O$V?>fB?OZ?ϗ@dA )r   r   r  r  g3333@J_@r   r`J@"<5@|DL$d@JZRU]Ջ)T@~?@l%H@祿U"翀^sw7 [Z@ 8)&)r   r   r  r  r"  g<A?r   x극B@sd^[?烙b?睶c~7%7F8Qt?Bd?7`ƭ?Vu]ܿ{jfu?BE)r   r   r  r  r#  r/  r   g~@sϡ*J@WE@砇}Q4q%@?.XG? }#: @pr*@ݦg	oB@TY"_2#?/)S)r   r   r	  r  r$  r0  r   r;  gBw[E@<ۤbs@W#y4uֲ>Иe);M>''@Ѐz3jXD@!xtJ>ICı=฿crZ?)r   r   r
  r  r%  r1  r   r<  rF  gR,@珉f`bB<tk3mIE۶T@ۄ{e6r@ǫ#u!qs =磴?)r   r   r  r  r&  r2  r   r=  rG  rP  g6mkS@[z4Ud@罹l25ם<9
x>HO$d@瓊_l@瀛o{폽@)r   r   r  r  r'  r3  r   r>  rH  rQ  rY  gI~w@u'|rfF>ɋ[餭 '@}@+LcEV!@)r   r   r  r  r(  r4  r   r?  rI  rR  rZ  ra  gR3Z?A	#?jG@7VeeG|83緭v,?/yng)r   r   r  r  r)  r5  r   r@  rJ  rS  r[  rb  rh  gGb:@G>_R@`)Y禀\ɍ^?9o2)r   r   r  r  r*  r6  r   rA  rK  rT  r\  rc  ri  rn  g6x"m@oe%JnqvyN?~+)r   r  r  r  r+  r7  r  rB  rL  rU  r]  rd  rj  ro  rs  gbS?RBU>@WUKܿsliq?)r   r  r  r  r,  r8  r  rC  rM  rV  r^  re  rk  rp  rt  rw  g<8bM@Q;*ʔ K6@)r   r  r  r   r-  r9  r  rD  rN  rW  r_  rf  rl  rq  ru  rx  rz  g&Ad?aBI)r   r  r  r!  r.  r:  r  rE  rO  rX  r`  rg  rm  rr  rv  ry  r{  r|  gC	f@)gqՠgbk>g6ߓR>gI눑gXF;>g)	@AnN>g\>ghM>gV֕gH4>Sg͜>gsCa!T>g'sdg6KJg~|WRg,Nh>g		>gZ|O>g+ݱf>Nr;   r   c                      yrq   rM   rr   s    r.   rt   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  ru   r0   c                     S rw   rM   )rs   r   s    r.   rt   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    a r0   c                     S rw   rM   r|   s    r.   rt   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    q r0   r   g?)rs   r   r   r   r   r   maxiterr   )r   r>   r   r   r   MAXITER_DEFAULT)	r@   subproblem_maxiterr  r   r   r   r   r}   r   s	          @@r.   $test_for_finite_number_of_iterationsz<TestIterativeSubproblem.test_for_finite_number_of_iterationso  s   HH>
>
<
@
=
@
>
=
?
?
<
<
?
>
>
>
<
?
=u^>`
B HH 
  #BZ) 	0G) G L&}}\:A}}}(;(K(KKKK}}///#	0r0   N)rJ   rK   rL   r   r   r   r   r   r   pytestmarkthread_unsafe	fail_slowr   r  rM   r0   r.   rj   rj      sg    74>24.7070 [[&9:[[2I<  ;I<X}0r0   rj   rw   )__doc__r  numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r   r/   r2   rO   rj   rM   r0   r.   <module>r     s[       @ ?D D>G G2M5 M5`T0 T0r0   