U
    9%e2                     @   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!   j/var/www/html/Darija-Ai-API/env/lib/python3.8/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 ddddgddddgddd	d
gddddgg}t|\}}}|d }|dd d f }t|\}}t||dd tt|t|dd d S )Nr            r   g?<      皙?	   
   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 dddgdddgdddg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 )Nr   r%   r&   r'         ZpotrfFTlowerZoverwrite_acleanr   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 dddddgdddddgddd	ddgdddddgdddddg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 )Nr   r%   r&   r)   r-   r:   r+   r      r<   FTr=   )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 dddgdddgdddg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 )Nr   r&   rG      r:   r;   r<   FTr=   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                    s   ddddgddddgddddgddddgg ddddgd}t ddd	 fd
d	 fdd	ddd}||\}}t|ddddg t|d d S )Nr,   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/   rM   r    r!   r"   rO      rP   c                    s
   t  S rQ   rR   rM   Hr!   r"   rO      rP   绽|=rN   funjachessk_easyk_hardg8<bp?ggEg v?gˍ۪߿Tr   solver   )r1   trust_radiussubprobphits_boundaryr!   rU   r    r"   test_for_the_easy_case   s(    





 z.TestIterativeSubproblem.test_for_the_easy_casec                    s   ddddgddddgddddgddddgg ddddgd}d}t d	d
d fdd fddddd}||\}}t| |j d S )Nr,   r%   r&   r'   r   r)   gAS@grvf(n r   c                 S   s   dS rL   r!   rM   r!   r!   r"   rO      rP   z@TestIterativeSubproblem.test_for_the_hard_case.<locals>.<lambda>c                    s
   t  S rQ   rR   rM   rS   r!   r"   rO      rP   c                    s
   t  S rQ   rR   rM   rT   r!   r"   rO      rP   rV   rW   )r   r^   r   lambda_current)r1   r4   r_   r`   ra   rb   r!   rc   r"   test_for_the_hard_case   s"    





z.TestIterativeSubproblem.test_for_the_hard_casec              	      s   dddddgddddd	gddd
ddgdddddgdd	dddgg dddddgt ddd fdd fddd}|d\}}t|ddddd g t|d! t|jd t|jd" d S )#Ngno?gu?g,wn)?g/Kg뚘G?g켮wO@g٢yn*?gr<8ٿg&Î?g6
@gĽCԿg8K?gc?g>ڿg-Q?g*<sA?gE?gM x?gz?g=޿r   c                 S   s   dS rL   r!   rM   r!   r!   r"   rO      rP   zGTestIterativeSubproblem.test_for_interior_convergence.<locals>.<lambda>c                    s
   t  S rQ   rR   rM   rS   r!   r"   rO      rP   c                    s
   t  S rQ   rR   rM   rT   r!   r"   rO      rP   )rN   rX   rY   rZ   皙?g8b҄gO
L?gp4OF̿g qgo-7?Fr   )r   r^   r   re   Zniterr1   r`   ra   rb   r!   rc   r"   test_for_interior_convergence   s(    


 
z5TestIterativeSubproblem.test_for_interior_convergencec              	      s   dddddgddddd	gddd
ddgdddddgdd	dddgg dddddgt ddd fdd fddddd}|d\}}t|dddddg t|d d S )NVaU?`A@5F?9)n@cѿ{.<?~:]?@33 5:IйTFKտ笢&Rr   c                 S   s   dS rL   r!   rM   r!   r!   r"   rO      rP   zATestIterativeSubproblem.test_for_jac_equal_zero.<locals>.<lambda>c                    s
   t  S rQ   rR   rM   rS   r!   r"   rO      rP   c                    s
   t  S rQ   rR   rM   rT   r!   r"   rO      rP   rV   rW   rg   iG7㰱?l$WZ-O|οm/Tr]   rh   r!   rc   r"   test_for_jac_equal_zero   s*    

 z/TestIterativeSubproblem.test_for_jac_equal_zeroc              	      s   dddddgddddd	gddd
ddgdddddgdd	dddgg dddddgt ddd fdd fddddd}|d\}}t|dddddg t|d d S )Nrj   rk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   r   gV瞯<c                 S   s   dS rL   r!   rM   r!   r!   r"   rO   	  rP   zITestIterativeSubproblem.test_for_jac_very_close_to_zero.<locals>.<lambda>c                    s
   t  S rQ   rR   rM   rS   r!   r"   rO   
  rP   c                    s
   t  S rQ   rR   rM   rT   r!   r"   rO     rP   rV   rW   rg   ry   rz   r{   r|   r}   Tr]   rh   r!   rc   r"   test_for_jac_very_close_to_zero   s*    

 z7TestIterativeSubproblem.test_for_jac_very_close_to_zeroc                    s  t jd d}dD ]}dddddd	d
dg}|D ]x\}}t||||\ dddddddddg	}|D ]@}tddd fdd fddddd}||\}	}
dt |	t  |	 t |	 }dddg}|D ]\}}t|d dt | }d| }tddd fd d fd!d||d}||\}}dt |t  | t | }|rt	t 
t|| |d | kd" ntt||kd" t||| kd" qqhq2qd S )#Nr   r:   )Zeasyr   r   )ii))r   r   )r   r:   )r   r,   )r   r,   )r:   r,   )      皙?g333333?g333333?r*   g333333?gffffff
@g      @r,   r   c                 S   s   dS rL   r!   rM   r!   r!   r"   rO   2  rP   zATestIterativeSubproblem.test_for_random_entries.<locals>.<lambda>c                    s    S rQ   r!   rM   rS   r!   r"   rO   3  rP   c                    s    S rQ   r!   rM   rT   r!   r"   rO   4  rP   rV   )r[   r\         ?)r   r%   )r   rg   )g?g)\(?c                 S   s   dS rL   r!   rM   r!   r!   r"   rO   M  rP   c                    s    S rQ   r!   rM   rS   r!   r"   rO   N  rP   c                    s    S rQ   r!   rM   rT   r!   r"   rO   O  rP   T)r   r   seedr#   r   r^   r   minsqrtr
   r0   r	   r   )r1   r   r   Z
eig_limitsr   r   Ztrust_radius_listr_   Z
subprob_acZp_acZhits_boundary_acZJ_acZstop_criteriaZk_optZk_trfr[   r\   r`   ra   rb   Jr!   rc   r"   test_for_random_entries  sf    
	


$

$
z/TestIterativeSubproblem.test_for_random_entriesN)	r6   r7   r8   rd   rf   ri   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