a
    h2                     @   s   d 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	 d	ZG d
d dZG dd dZdS )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                 C   s   t jdd| | f}t|dd\}}}t j||| }t |d d d }t ||}t ||j}	|dkrt | }
t jdd| d |
d d< t ||
}
n$|dkrt | }
nt jdd| }
|	|
fS )N   True)Zpivotinghardjac_equal_zero)	nprandomuniformr   sortmultiplydotTZzeros)nmin_eigmax_eigcaseZrandQ_Z	eigvaluesZQauxAg r!   g/var/www/html/assistant/venv/lib/python3.9/site-packages/scipy/optimize/tests/test_trustregion_exact.pyrandom_entry   s    
r#   c                   @   s   e Zd Zdd ZdS )!TestEstimateSmallestSingularValuec           	      C   s|   t g dg dg dg dg}t|\}}}|d }|dd d f }t|\}}t||dd tt|t|dd d S )N)r            )r   g?<      )r   r   皙?	   )r   r   r   
   r      )decimal)r   arrayr   r   r   abs)	selfCUsZVtZsmin_svdZzmin_svdZsminZzminr!   r!   r"    test_for_ill_condiotioned_matrix2   s    
zBTestEstimateSmallestSingularValue.test_for_ill_condiotioned_matrixN)__name__
__module____qualname__r5   r!   r!   r!   r"   r$   0   s   r$   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestSingularLeadingSubmatrixc                 C   s   t g dg dg dg}td|f\}||dddd\}}t|||\}}||d |d f  |7  < tt|d |d |f d	 t |t ||}t|d	 d S )
N)r   r%   r&   )r%   r'      )r&   r:      ZpotrfFTlowerZoverwrite_acleanr   r   r   r/   r   r   r   r   r   r1   r   ZcholeskyckdeltavZquadratic_termr!   r!   r"   +test_for_already_singular_leading_submatrixK   s    
zHTestSingularLeadingSubmatrix.test_for_already_singular_leading_submatrixc                 C   s   t g dg dg dg dg dg}td|f\}||dddd	\}}t|||\}}||d
 |d
 f  |7  < tt|d |d |f d t |t ||}t|d d S )N)r   r%   r&   r)   r-   )r%   r:   r:   r+   r   )r&   r:      r   r%   )r)   r+   r   r)   r:   )r-   r   r%   r:   r-   r<   FTr=   r   r   )r   Zasarrayr   r   r   r   r   rA   r!   r!   r"   #test_for_simetric_indefinite_matrixd   s    
z@TestSingularLeadingSubmatrix.test_for_simetric_indefinite_matrixc                 C   s   t g dg dg dg}td|f\}||dddd\}}t|||\}}||d |d f  |7  < tt|d |d |f d	 t |t ||}t|d	 d S )
N)r   r&   rG   )r&      r:   )rG   r:   r;   r<   FTr=   r   r   r@   rA   r!   r!   r"   $test_for_first_element_equal_to_zero   s    
zATestSingularLeadingSubmatrix.test_for_first_element_equal_to_zeroN)r6   r7   r8   rF   rH   rJ   r!   r!   r!   r"   r9   I   s   r9   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestIterativeSubproblemc                    sz   g dg dg dg dg g dd}t ddd	 fd
d	 fdd	ddd}||\}}t|g d t|d d S )Nr,   r%   r&   r'   r%   r   r)   r   r&   r)   r   r)   r'   r   r)   r%   )r   r   r   r   r   r   c                 S   s   dS Nr   r!   xr!   r!   r"   <lambda>       z@TestIterativeSubproblem.test_for_the_easy_case.<locals>.<lambda>c                    s
   t  S Nr   r/   rQ   r    r!   r"   rS      rT   c                    s
   t  S rU   rV   rQ   Hr!   r"   rS      rT   绽|=rR   funjachessk_easyk_hard)g8<bp?ggEg v?gˍ۪߿Tr   solver   )r1   trust_radiussubprobphits_boundaryr!   rY   r    r"   test_for_the_easy_case   s"    

z.TestIterativeSubproblem.test_for_the_easy_casec                    st   g dg dg dg dg g dd}d}t dd	d
 fdd
 fdd
ddd}||\}}t| |j d S )NrL   rM   rN   rO   )gAS@r   r   r   grvf(n r   r   c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS      rT   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>c                    s
   t  S rU   rV   rQ   rW   r!   r"   rS      rT   c                    s
   t  S rU   rV   rQ   rX   r!   r"   rS      rT   rZ   r[   )r   rb   r   lambda_current)r1   r4   rc   rd   re   rf   r!   rg   r"   test_for_the_hard_case   s"    

z.TestIterativeSubproblem.test_for_the_hard_casec                    s   g dg dg dg dg dg g dt ddd	 fd
d	 fdd	d}|d\}}t|g d t|d t|jd t|jd d S )N)gno?獞u?,wn)?/K뚘G?)rk   g켮wO@٢yn*?r<8ٿ&Î?)rl   ro   g6
@ĽCԿ8K?)rm   rp   rr   gc?>ڿ)rn   rq   rs   rt   g-Q?)g*<sA?gE?gM x?gz?g=޿r   c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS      rT   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>c                    s
   t  S rU   rV   rQ   rW   r!   r"   rS      rT   c                    s
   t  S rU   rV   rQ   rX   r!   r"   rS      rT   )rR   r\   r]   r^   皙?)g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   rb   r   ri   Zniterr1   rd   re   rf   r!   rg   r"   test_for_interior_convergence   s"    


z5TestIterativeSubproblem.test_for_interior_convergencec                    s|   g dg dg dg dg dg g dt ddd	 fd
d	 fdd	ddd}|d\}}t|g d t|d d S )NgVaU?`A@5F?9)n@cѿry   g{.<?~:]?rz   r~   g@33 5:Ir{   r   r   gйTFKտr|   r   r   r   g&R)r   r   r   r   r   r   c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS      rT   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>c                    s
   t  S rU   rV   rQ   rW   r!   r"   rS      rT   c                    s
   t  S rU   rV   rQ   rX   r!   r"   rS      rT   rZ   r[   ru   giG7㰱?gl$WgZg-O|οgm/Tra   rv   r!   rg   r"   test_for_jac_equal_zero   s"    

z/TestIterativeSubproblem.test_for_jac_equal_zeroc                    s|   g dg dg dg dg dg g dt ddd	 fd
d	 fdd	ddd}|d\}}t|g d t|d d S )Nrx   r}   r   r   r   )r   r   r   r   gV瞯<r   c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS   	  rT   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>c                    s
   t  S rU   rV   rQ   rW   r!   r"   rS   
  rT   c                    s
   t  S rU   rV   rQ   rX   r!   r"   rS     rT   rZ   r[   ru   r   Tra   rv   r!   rg   r"   test_for_jac_very_close_to_zero   s"    

z7TestIterativeSubproblem.test_for_jac_very_close_to_zeroc                    s  t jd d}dD ]|}g d}|D ]h\}}t||||\ g d}|D ]>}tddd fd	d fd
dddd}||\}	}
dt |	t  |	 t |	 }g d}|D ]\}}t|d dt | }d| }tddd fdd fdd||d}||\}}dt |t  | t | }|rht	t 
t|| |d | kd ntt||kd t||| kd qqNq&qd S )Nr   r:   )Zeasyr   r   ))ii))r   r   )r   r:   )r   r,   )r   r,   )r:   r,   )      )	皙?g333333?g333333?r*   r   g333333?gffffff
@g      @r,   r   c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS   2  rT   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>c                    s    S rU   r!   rQ   rW   r!   r"   rS   3  rT   c                    s    S rU   r!   rQ   rX   r!   r"   rS   4  rT   rZ   )r_   r`         ?))r   r%   )r   ru   )g?g)\(?c                 S   s   dS rP   r!   rQ   r!   r!   r"   rS   M  rT   c                    s    S rU   r!   rQ   rW   r!   r"   rS   N  rT   c                    s    S rU   r!   rQ   rX   r!   r"   rS   O  rT   T)r   r   seedr#   r   rb   r   minsqrtr
   r0   r	   r   )r1   r   r   Z
eig_limitsr   r   Ztrust_radius_listrc   Z
subprob_acZp_acZhits_boundary_acZJ_acZstop_criteriaZk_optZk_trfr_   r`   rd   re   rf   Jr!   rg   r"   test_for_random_entries  sP    
	


$

$
z/TestIterativeSubproblem.test_for_random_entriesN)	r6   r7   r8   rh   rj   rw   r   r   r   r!   r!   r!   r"   rK      s   rK   )__doc__numpyr   Z!scipy.optimize._trustregion_exactr   r   r   Zscipy.linalgr   r   r   r   r	   Znumpy.testingr
   r   r   r#   r$   r9   rK   r!   r!   r!   r"   <module>   s   P