
    Pi5S                         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dZ G d d          Z G d	 d
          Z G d d          ZdS )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   t           j                            |          }|                    dd| | f          }t	          |d          \  }}}|                    |||           }t          j        |          d d d         }t          j        ||          }	t          j        |	|j                  }
|dk    rJt          j	        |           }|                    dd| dz
            |d d<   t          j        ||          }n3|dk    rt          j	        |           }n|                    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               /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr.      s.   
)


$
$C ;;2AQF;33D '''GAq! gA>>I	""44R4(I ;y!$$D
tQSA v~~HQKK!!A#66#2#F1aLL	!	!	!HQKKKKBQQK//a4K    c                       e Zd Zd ZdS )!TestEstimateSmallestSingularValuec                 4   t          j        g dg dg dg dg          }t          |          \  }}}|d         }|dd d f         }t          |          \  }}t	          ||d           t	          t          |          t          |          d           d S )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     Hlll&&&$nn#mm% & & q661b R5b!!!e9 6a88
d 	"$!<<<<!#d))S]]AFFFFFFr/   N)__name__
__module____qualname__rH    r/   r-   r1   r1   /   s(        G G G G Gr/   r1   c                        e Zd Zd Zd Zd ZdS )TestSingularLeadingSubmatrixc                    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	           d S )
N)r   r3   r4   )r3   r5      )r4   rP      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     Hiiiiiii! " "
 %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r/   c                    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           d S )N)r   r3   r4   r7   r;   )r3   rP   rP   r9   r   )r4   rP      r   r3   )r7   r9   r   r7   rP   )r;   r   r3   rP   r;   rR   FTrT   r   r   )r   asarrayr   r   r   r   r   rY   s           r-   #test_for_simetric_indefinite_matrixz@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixc   s    J'(((''	) * * %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r/   c                    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	           d S )
N)r   r4   rb   )r4      rP   )rb   rP   rQ   rR   FTrT   r   r   rX   rY   s           r-   $test_for_first_element_equal_to_zerozATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zero~   s     Hjjj jj jj" # #
 %Z!66	 xEFFF1-aA66q	!A#qs(u 	"#aBQBi..!444 26!Q<<00!.!44444r/   N)rI   rJ   rK   r`   rd   rg   rL   r/   r-   rN   rN   H   sA        5 5 525 5 565 5 5 5 5r/   rN   c                       e Zd Zd Zd Zd Zd Zd Zej	        
                    d          ej	                            d          d	                         Zd
 ZdS )TestIterativeSubproblemc                     g dg dg dg dgg dd}t          dd fd	fd
dd          }|                    |          \  }}t          |g d           t          |d           d S )Nr:   r3   r4   r5   r3   r   r7   r   r4   r7   r   r7   r5   r   r7   r3   )r   r   r   r   r   r   c                     dS Nr   rL   xs    r-   <lambda>z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       A r/   c                 ,    t          j                  S Nr   r=   rr   r,   s    r-   rs   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       BHQKK r/   c                 ,    t          j                  S rv   rw   rr   Hs    r-   rs   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       RXa[[ r/   绽|=rr   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   s     ]]\\\\\\ LL  &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==66=!! &? &? &? 	@ 	@ 	@!-666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          }|                    |          \  }}t          | |j                   d S )Nrk   rl   rm   rn   )gAS@r   r   r   grvf(n r   r   c                     dS rp   rL   rq   s    r-   rs   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   rt   r/   c                 ,    t          j                  S rv   rw   rx   s    r-   rs   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   ry   r/   c                 ,    t          j                  S rv   rw   r{   s    r-   rs   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>   r}   r/   r~   r   )r   r   r   lambda_current)r?   rB   r   r   r   r   r|   r,   s         @@r-   test_for_the_hard_casez.TestIterativeSubproblem.test_for_the_hard_case   s     ]]\\\\\\ *))  &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==66=!1"g&<=====r/   c                 0   g dg dg dg dg dgg dt          dd fd	fd
          }|                    d          \  }}t          |g d           t          |d           t          |j        d           t          |j        d           d S )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                     dS rp   rL   rq   s    r-   rs   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   rt   r/   c                 ,    t          j                  S rv   rw   rx   s    r-   rs   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   ry   r/   c                 ,    t          j                  S rv   rw   r{   s    r-   rs   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>   r}   r/   )rr   r   r   r   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r   r   r   niterr?   r   r   r   r|   r,   s       @@r-   test_for_interior_convergencez5TestIterativeSubproblem.test_for_interior_convergence   s    HHHJJJIIILLLJJJ	L JII &*5+*?*?*?*?+@+@+@+@B B B #==--=!! &? &? &? 	@ 	@ 	@!-777!'"8!<<<!'-33333r/   c                     g dg dg dg dg dgg dt          dd fd	fd
dd          }|                    d          \  }}t          |g d           t          |d           d S )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                     dS rp   rL   rq   s    r-   rs   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   rt   r/   c                 ,    t          j                  S rv   rw   rx   s    r-   rs   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   ry   r/   c                 ,    t          j                  S rv   rw   r{   s    r-   rs   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>   r}   r/   r~   r   r   giG7㰱?gl$WgZg-O|οgm/Tr   r   s       @@r-   test_for_jac_equal_zeroz/TestIterativeSubproblem.test_for_jac_equal_zero   s    KKKKKKLLLLLLMMM	O OO &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==--=!! &3 &3 &3 	4 	4 	4 	"-66666r/   c                     g dg dg dg dg dgg dt          dd fd	fd
dd          }|                    d          \  }}t          |g d           t          |d           d S )Nr   r   r   r   r   )r   r   r   r   gV瞯<r   c                     dS rp   rL   rq   s    r-   rs   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>  rt   r/   c                 ,    t          j                  S rv   rw   rx   s    r-   rs   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>	  ry   r/   c                 ,    t          j                  S rv   rw   r{   s    r-   rs   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>
  r}   r/   r~   r   r   r   Tr   r   s       @@r-   test_for_jac_very_close_to_zeroz7TestIterativeSubproblem.test_for_jac_very_close_to_zero   s    KKKKKKLLLLLLMMM	O   &*5+*?*?*?*?+@+@+@+@-2-24 4 4 #==--=!! &3 &3 &3 	4 	4 	4 	"-66666r/   zfails in parallel)reasonr:   c                    t           j                            d          }d}dD ]}g d}|D ]\  }}t          |||||          \  g d}|D ]}t	          dd fd	fd
dd          }	|	                    |          \  }
}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||          }|                    |          \  }}dt          j        |t          j        |                    z  t          j        |          z   }|r=t          t          j
        t          |          |z
            |dz
  |z  k    d           n!t          t          |          |k    d           t          |||z  k    d           !Ɛd S )Nr   rP   )easyr   r   ))ii))r   r   )r   rP   )r   r:   )r   r:   )rP   r:   )      )r%   )	皙?g333333?g333333?r8   r   g333333?gffffff
@g      @r:   r   c                     dS rp   rL   rq   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>2  s    q r/   c                     S rv   rL   rx   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>3      q r/   c                     S rv   rL   r{   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>4  r   r/   r~   )r   r         ?))r   r3   )r   r   )g?g)\(?c                     dS rp   rL   rq   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>M  s     r/   c                     S rv   rL   rx   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>N       r/   c                     S rv   rL   r{   s    r-   rs   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>O  r   r/   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    i##A&& 6 C	< C	<D$ $ $J %/ 8< 8<  $Aw3GGG1 %O$N$N!$5 0< 0<L!4Q5@[5@[[[5@[[[<A<A"C "C "CJ .8-=-=l-K-K*D* rvdBF1dOO<<<RVAt__LD%2 %2 %2M )6 < <u "%U1W%&rwu~~%5"7 "7!"5 #6a6Ak6Akkk6Akkk=C=C#E #E #E ,3==+F+F(=  q"&A,, 7 77q!D ) H.rvd1ggl6J/K/K05a/E0FGKM M M M )aL)@$GGG %Q%*_d;;;;=<%0<8<C	< C	<r/   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 ]`}t          dd fdfddd|          }d}|                    |          \  }}||j        t          j        k    sJ S|j        |k    sJ adS )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  r*  r   r5  gBw[E@<ۤbs@W#y4uֲ>Иe);M>''@Ѐz3jXD@!xtJ>ICı=฿crZ?)r   r   r  r  r  r+  r   r6  r@  gR,@珉f`bB<tk3mIE۶T@ۄ{e6r@ǫ#u!qs =磴?)r   r   r  r  r   r,  r   r7  rA  rJ  g6mkS@[z4Ud@罹l25ם<9
x>HO$d@瓊_l@瀛o{폽@)r   r   r  r  r!  r-  r   r8  rB  rK  rS  gI~w@u'|rfF>ɋ[餭 '@}@+LcEV!@)r   r   r  r  r"  r.  r   r9  rC  rL  rT  r[  gR3Z?A	#?jG@7VeeG|83緭v,?/yng)r   r   r  r  r#  r/  r   r:  rD  rM  rU  r\  rb  gGb:@G>_R@`)Y禀\ɍ^?9o2)r   r   r	  r  r$  r0  r   r;  rE  rN  rV  r]  rc  rh  g6x"m@oe%JnqvyN?~+)r   r   r
  r  r%  r1  r   r<  rF  rO  rW  r^  rd  ri  rm  gbS?RBU>@WUKܿsliq?)r   r   r  r  r&  r2  r   r=  rG  rP  rX  r_  re  rj  rn  rq  g<8bM@Q;*ʔ K6@)r   r   r  r  r'  r3  r   r>  rH  rQ  rY  r`  rf  rk  ro  rr  rt  g&Ad?aBI)r   r   r  r  r(  r4  r   r?  rI  rR  rZ  ra  rg  rl  rp  rs  ru  rv  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                     dS rp   rL   rq   s    r-   rs   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    a r/   c                     S rv   rL   )rr   r   s    r-   rs   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    a r/   c                     S rv   rL   r{   s    r-   rs   zNTestIterativeSubproblem.test_for_finite_number_of_iterations.<locals>.<lambda>  s    q r/   r   g?)rr   r   r   r   r   r   maxiterr   )r   r=   r   r   r   MAXITER_DEFAULT)	r?   subproblem_maxiterrz  r   r   r   r   r|   r   s	          @@r-   $test_for_finite_number_of_iterationsz<TestIterativeSubproblem.test_for_finite_number_of_iterationsb  s   H> > >
> > >
< < <
@ @ @
= = =
@ @ @
> > >
= = =
? ? ?
? ? ?
< < <
< < <
? ? ?
> > >
> > >
> > >
< < <
? ? ?
= = =u^>`
 `
B H 
 
 
   #BZ) 	0 	0G)KKKK [[[  G L&}}\::A}}(;(KKKKKK}/////#	0 	0r/   N)rI   rJ   rK   r   r   r   r   r   pytestmarkthread_unsafe	fail_slowr   r}  rL   r/   r-   ri   ri      s        7 7 74> > >24 4 4.7 7 707 7 70 [&9::[2I< I<  ;:I<X}0 }0 }0 }0 }0r/   ri   rv   )__doc__r~  numpyr   !scipy.optimize._trustregion_exactr   r   r   scipy.linalgr   r   r   r	   r
   numpy.testingr   r   r   r.   r1   rN   ri   rL   r/   r-   <module>r     sr                  @ ? ? ? ? ? ? ? ? ? ? ? ? ?D D D D D D D D D D   >G G G G G G G G2M5 M5 M5 M5 M5 M5 M5 M5`G0 G0 G0 G0 G0 G0 G0 G0 G0 G0r/   