o
    Xi"                     @   s   d dl Zd dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZ zd dlmZ dZdZW n ey;   dZd	ZY nw d
ZG dd de
ZG dd de
ZdS )    N)
csc_matrix)projectionsorthogonality)TestCaseassert_array_almost_equalassert_equalassert_allclose)cholesky_AAtT)NormalEquationAugmentedSystemF)r   )QRFactorizationSVDFactorizationc                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestProjectionsc                 C   s   t g dg dg dg}|j}t|}g dg dg df}tD ]7}t||\}}}|D ]*}	||	}
t||
d tt	||
d ||	}
t
j||	d }t|
| q.q"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   r   r   r   r   r   Q?r   r   r   i r   gffffff?r   r   )nparrayTr   available_sparse_methodsr   matvecr   dotr   scipylinalglstsq)selfA_denseAt_denseAtest_pointsmethodZLS_zxx2 r6   `/tmp/pip-target-1s0edx8b/lib/python/scipy/optimize/_trustregion_constr/tests/test_projections.py'test_nullspace_and_least_squares_sparse   s*   


z7TestProjections.test_nullspace_and_least_squares_sparsec                 C   s   t g dg dg dg}t|}g dg dg dg df}tD ]3}t||dd	d
\}}}|D ]#}||}	dt|	  }
t|	|	d|
d tt
||	ddd q1q"d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r   go   @C]r2<d   orth_tol	max_refingvIh%<=r   )atol)r!   r"   r   r$   r   r%   absmaxr   r&   r   )r*   r+   r-   r.   r/   r0   r1   r2   r3   r4   r?   r6   r6   r7   !test_iterative_refinements_sparse,   s&   

z1TestProjections.test_iterative_refinements_sparsec           
      C   s   t g dg dg dg}t|}g dg dg df}tD ]0}t||\}}}|D ]#}||}t||| t ||f}	t	t j
|t j
|	 q+qd S Nr   r   r   )r   r   r   )r   r   r   )r    r   r   )r!   r"   r   r$   r   r%   r   r&   vstackr   r(   matrix_rank)
r*   r+   r-   r.   r/   r2   Yr3   r4   A_extr6   r6   r7   test_rowspace_sparse@   s(   


z$TestProjections.test_rowspace_sparsec                 C   s   t g dg dg dg}|j}g dg dg df}tD ]7}t||\}}}|D ]*}||}	t||	d tt||	d ||}	t	j
||d }
t|	|
 q*qd S r   )r!   r"   r#   available_dense_methodsr   r%   r   r&   r   r'   r(   r)   )r*   r-   Atr.   r/   r0   r1   r2   r3   r4   r5   r6   r6   r7   &test_nullspace_and_least_squares_denseT   s(   


z6TestProjections.test_nullspace_and_least_squares_densec                 C   s   t tdd}t ||||g}t|}t jd t|\}}}t|\}}}	tdD ]1}
t jjdd}t	|
||
| t	|
||
| t jjdd}t	|
||	
| q-d S )Nr   e   r      )i  size)r;   )r!   diagrangehstackr   randomseedr   normalr   r&   )r*   Dr-   A_sparser0   r1   rF   Z_sparse	LS_sparseY_sparsekr3   r4   r6   r6   r7   test_compare_dense_and_sparsej   s   z-TestProjections.test_compare_dense_and_sparsec                 C   s   t g d}t g d}t g d}t |||g}t|}t jd t|\}}}t|\}	}
}tdD ]1}t jjdd}t	|
||	
| t	|
||

| t jjdd}t	|
||
| q9d S )	N)g333333r   g      ?)r   g333333333333ӿ)r]   g      r   r   r   )r   rN   )r   )r!   rP   rR   r   rS   rT   r   rQ   rU   r   r&   )r*   D1D2D3r-   rW   r0   r1   rF   rX   rY   rZ   r[   r3   r4   r6   r6   r7   test_compare_dense_and_sparse2y   s   z.TestProjections.test_compare_dense_and_sparse2c           	      C   s   t g dg dg dg}g dg dg df}tD ]-}t||ddd	\}}}|D ]}||}t||d
d
dd tt||d
d
dd q*qd S )Nr   r   r   r   r   r9   r:   r   r<   r   gvIh%=)rtolr?   gV瞯<)r!   r"   rI   r   r%   r   r&   r   )	r*   r-   r.   r/   r0   r1   r2   r3   r4   r6   r6   r7    test_iterative_refinements_dense   s    

z0TestProjections.test_iterative_refinements_densec           	      C   s   t g dg dg dg}g dg dg df}tD ]0}t||\}}}|D ]#}||}t||| t ||f}tt j	
|t j	
| q'qd S rC   )r!   r"   rI   r   r%   r   r&   rD   r   r(   rE   )	r*   r-   r.   r/   r2   rF   r3   r4   rG   r6   r6   r7   test_rowspace_dense   s&   


z#TestProjections.test_rowspace_denseN)__name__
__module____qualname__r8   rB   rH   rK   r\   ra   rc   rd   r6   r6   r6   r7   r      s    r   c                   @   s   e Zd Zdd Zdd ZdS )TestOrthogonalityc                 C   sf   t g dg dg dg}g dg df}d}tt|D ]}|| }|| }tt||| qd S Nr   r   r   )g;8gyGg	vgJ@g]7e@g6PƷ?g70?gA%hҿ)g}	llυ@gn;bMg;ݨg5&@gn"ԯF@g>ޒg7gLp@)r   r   )r!   r"   rQ   lenr   r   r*   r-   test_vectorstest_expected_orthir4   orthr6   r6   r7   test_dense_matrix   s   
z#TestOrthogonality.test_dense_matrixc                 C   sn   t g dg dg dg}t|}g dg df}d}tt|D ]}|| }|| }tt||| q"d S ri   )r!   r"   r   rQ   rj   r   r   rk   r6   r6   r7   test_sparse_matrix   s   
z$TestOrthogonality.test_sparse_matrixN)re   rf   rg   rp   rq   r6   r6   r6   r7   rh      s    rh   )numpyr!   scipy.linalgr'   scipy.sparser   .scipy.optimize._trustregion_constr.projectionsr   r   numpy.testingr   r   r   r   sksparse.cholmodr	   sksparse_availabler$   ImportErrorrI   r   rh   r6   r6   r6   r7   <module>   s"     