
    tKg2                         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)zs
Unit tests for trust-region iterative subproblem.

To run it in its simplest form::
  nosetests test_optimize.py

    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              o/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entryr)      s#    99RQF+D 'GAq! 		!!'7A6I	"4R4(I ;;y!$D
tQSSA v~HHQK""2q!A#.#2FF1aL a4K 
!	!HHQK a4K IIb!Q'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_matrix3   s}     HHl&$#% & q61b R5b!e9 6a8
d 	"$!<!#d)S]AFr*   N)__name__
__module____qualname__rC    r*   r(   r,   r,   1   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_submatrixL   s     HHi! "
 %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!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_matrixe   s     JJ'(''	) * %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!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     HHj  " #
 %Z!6	 EF1-aA6q	!A#qs(u 	"#aBQBi.!4 266!Q<0!.!4r*   N)rD   rE   rF   r[   r_   rb   rG   r*   r(   rI   rI   J   s    5256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>       Ar*   c                 .    t        j                        S Nr   r8   rm   r'   s    r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       BHHQKr*   c                 .    t        j                        S rq   rr   rm   Hs    r(   rn   z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>       RXXa[r*   绽|=rm   funjachessk_easyk_hard)g8<bp?ggEg 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   grvf(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)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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҄gO
L?gp4OF̿g qgo-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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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   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 	"-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*   rK   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   ))ii))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>4  s    qr*   c                     S rq   rG   rs   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>5      qr*   c                     S rq   rG   rv   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>6  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>O  s    r*   c                     S rq   rG   rs   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>P      r*   c                     S rq   rG   rv   s    r(   rn   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>Q  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 6D$J %/  $Aw>1 %O!$5L!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;= )6% %6 %/ 7r*   N)rD   rE   rF   r   r   r   r   r   pytestmark	fail_slowr   rG   r*   r(   rd   rd      s@    74>24.7070 [[1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*   