
    Ug	#                        d dl mc mZ d dlZd dlmZmZm	Z	 d dl
mZ d dl mZ d dlmZmZmZmZ d dlZd dlmZ d dlZej        dk     Z ej                    d             Z ej        ej        ej        g	          d
             Z ej                    d             Z ej                    d             Z G d d          ZdS )    N)hilbertsvdvalsnormaslinearoperator)interp_decomp)assert_assert_allcloseassert_equalassert_array_equal)raisesl        c               #      K   dV  d S )N-q= r       d/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/linalg/tests/test_interpolative.pyepsr   +   s      
KKKKKr   )paramsc              #   `   K   d}t          |                              | j                  V  d S )Ni,  )r   astypeparam)requestns     r   Ar   0   s5       	A
!**

GM
*
******r   c              #   ,   K   t          |           V  d S )Nr   )r   s    r   Lr   8   s       
1

r   c                     t           j                            | d          }	 t          j        ||k               d         d         }n# t          $ r | j        d         }Y nw xY w|S )NF)
compute_uvr   )nplinalgsvdnonzero
IndexErrorshape)r   r   Sranks       r   r&   r&   =   sl    
	aE**Az!c'""1%a(   wqzKs   $A A"!A"c                      e Zd Zej                            dg d          d             Zej                            dg d          d             Zej                            ddg          d             Zej                            dg d          d             Z	ej                            dg d          d             Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zej                            dej        ej        g          ej                            dddg          ej                            dddg          d                                     ZdS )TestInterpolativeDecompositionzrand,lin_op)FF)TF)TTc                 "   t           r+|j        t          j        k    r|rt	          j        d           |s|n|}t          j        |||          \  }}}	t          j        |d d |d |         f         ||	          }
t          ||
|d           d S Nbug in external fortran coderand:0yE>rtolatol
	_IS_32BITdtyper   
complex128pytestxfail
pymatrixidr   reconstruct_matrix_from_idr
   )selfr   r   r   r.   lin_opA_or_LkidxprojBs              r   test_real_id_fixed_precisionz;TestInterpolativeDecomposition.test_real_id_fixed_precisionI   s      	9BM11d1L7888 'a!/$GGG31!AAAs2A2wJ-dKK13U333333r   c                 $   t           r+|j        t          j        k    r|rt	          j        d           |}|s|n|}t          j        |||          \  }	}
t          j        |d d |	d |         f         |	|
          }t          |||d           d S r+   r3   )r;   r   r   r   r&   r.   r<   r>   r=   r?   r@   rA   s               r   test_real_id_fixed_rankz6TestInterpolativeDecomposition.test_real_id_fixed_rankV   s      	9BM11d1L7888 'a,VQTBBB	T1!AAAs2A2wJ-dKK13U333333r   r)   c                    |}|s|n|}t          j        |||          \  }	}
t          j        |	|
          }t          j        |||	          }t	          ||d d |	d |         f         |d           t	          ||z  ||d           d S )Nr-   r/   r0   )r9   r   reconstruct_interp_matrixreconstruct_skel_matrixr
   )r;   r   r   r   r&   r.   r<   r>   r=   r?   r@   PrA   s                r   %test_real_id_skel_and_interp_matriceszDTestInterpolativeDecomposition.test_real_id_skel_and_interp_matricesc   s      'a,VQTBBB	T0d;;.q!S991QQQBQBZ=s????Aqs777777r   c                    t           r+|j        t          j        k    r|rt	          j        d           |s|n|}t          j        |||          \  }}}	||z  |	j        	                                z  }
t          ||
|d           d S r+   r4   r5   r   r6   r7   r8   r9   r!   Tconjr
   )r;   r   r   r   r.   r<   r=   Ur%   VrA   s              r   test_svd_fixed_precisonz6TestInterpolativeDecomposition.test_svd_fixed_precisono   s      	9BM11d1L7888 'a.48881aEACHHJJ13U333333r   c                    t           r+|j        t          j        k    r|rt	          j        d           |}|s|n|}t          j        |||          \  }	}
}|	|
z  |j        	                                z  }t          |||d           d S r+   rK   )r;   r   r   r   r&   r.   r<   r>   r=   rN   r%   rO   rA   s                r   test_svd_fixed_rankz2TestInterpolativeDecomposition.test_svd_fixed_rank{   s      	9BM11d1L7888 'a.6661aEACHHJJ13U333333r   c                     |}t          j        ||d          \  }}t          j        |d d |d |         f         ||          \  }}}	||z  |	j                                        z  }
t          ||
|d           d S )NFr-   r/   r0   )r9   r   	id_to_svdrL   rM   r
   )r;   r   r   r&   r>   r?   r@   rN   r%   rO   rA   s              r   test_id_to_svdz-TestInterpolativeDecomposition.test_id_to_svd   s    ,Q>>>	T&qCG}c4@@1aEACHHJJ13U333333r   c                 ~    t          |          }t          j        |          }t          ||d         dd           d S )Nr   ư>r/   r0   )r   r9   estimate_spectral_normr
   )r;   r   s
norm_2_ests       r   test_estimate_spectral_normz:TestInterpolativeDecomposition.test_estimate_spectral_norm   s>    AJJ6q99

AaDt$??????r   c                     |                                 }|d d dfxx         dz  cc<   t          ||z
            }t          j        ||          }t	          ||d         dd           d S )Nr   g333333?rW   r/   r0   )copyr   r9   estimate_spectral_norm_diffr
   )r;   r   rA   rY   rZ   s        r    test_estimate_spectral_norm_diffz?TestInterpolativeDecomposition.test_estimate_spectral_norm_diff   sn    FFHH	!!!Q$3AENN;AqAA

AaDt$??????r   c                 >   t          j        g dg dg dg|j                  }||fD ]s}d}t           j                            |t          |d          |z            }t          j        ||          }t          ||k               t          ||dz   k               td S )N   rb   r   r   r   rb   r5   &.>   
   )	r   arrayr5   r    matrix_rankr   r9   estimate_rankr	   )r;   r   rA   Mrank_tolrank_nprank_ests          r   test_rank_estimates_arrayz8TestInterpolativeDecomposition.test_rank_estimates_array   s    HiiiIII6agFFFQ 	. 	.AHi++AtAqzzH/DEEG!/8<<HH'(((H",----	. 	.r   c                 b   t          j        g dg dg dg|j                  }||fD ]}t          |          }d}t           j                            |t          |d          |z            }t          j        ||          }t          ||dz
  k               t          ||dz   k               d S )Nra   rc   rd   re   rf      )
r   rh   r5   r   r    ri   r   r9   rj   r	   )r;   r   rA   rk   MLrl   rm   rn   s           r   test_rank_estimates_lin_opz9TestInterpolativeDecomposition.test_rank_estimates_lin_op   s    HiiiIII6agFFFQ 	- 	-A!!$$BHi++AtAqzzH/DEEG!/H==HH!+,,,H!+,,,,	- 	-r   c                    t          j        d           t          t          j        d          ddgdd           t          j        d           t          j        d          }t          |d	d
gdd           t          j                            d           t          j                     t          j        d          }t          j                            d           t          j        t          j                            d                     t          j        d          }t          ||           t          ||           d S )Ndefaultrf   g#$?g<P?g-C6?r/   r0   i  gdbR?g2@吱?7   )r9   seedr
   r.   r   random)r;   x1x2x3s       r   	test_randz(TestInterpolativeDecomposition.test_rand   s   	"""
**Y
,C!	. 	. 	. 	. 	_QY
3$TJJJJ
	t_Q
	t	r**+++_QBBr   c                     t          d                              t          j                  }t	          t
                    5  t          j        |dd           d d d            d S # 1 swxY w Y   d S )N   rW   Fr-   )r   r   r   float32assert_raises
ValueErrorr9   r   )r;   r   s     r   test_badcallz+TestInterpolativeDecomposition.test_badcall   s    AJJbj)):&& 	: 	:$Q59999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   A&&A*-A*c                     t          j        d          }t          t                    5  t	          j        |d           d d d            d S # 1 swxY w Y   d S )N)rq      rq   )r   onesr   r   r9   r!   )r;   as     r   test_rank_too_largez2TestInterpolativeDecomposition.test_rank_too_large   s    GFOO:&& 	! 	!N1a   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AAAc                    d}t           j                            dd          }t          j        ||          \  }}}t          ||j        d                    t          j        ||          }t          j        |||          }t          |||z             t          j        ||          \  }}t          j        ||          }t          j        |||          }t          |||z             d S )Nr         rb   )
r   rx   r.   r9   r   r   r$   rF   rG   r
   )r;   r   r   r>   r?   r@   rH   rA   s           r   test_full_rankz-TestInterpolativeDecomposition.test_full_rank   s     INN2q!!!/3773Q
###0d;;.q!S991q5!!! ,Q22	T0d;;.q!S991q5!!!!!r   r5   r.   TFr   rb   g?c                 "   t           r&|t          j        k    r|rt          j        d           t          j        g dg dg dg dg dg|d          }|                                }t          |j        ||	           t          ||           d S )
Nr,   )r   r   r   r   r   )r   r   r   rb   rb   rb   )rb   r   r   rb   r   r   )r   rb   r   r   rb   r   )r   r   rb   r   r   rb   C)r5   orderr-   )
r4   r   r6   r7   r8   rh   r]   r   rL   r   )r;   r5   r.   r   r   rA   s         r   test_bug_9793z,TestInterpolativeDecomposition.test_bug_9793   s      	9"-//D/L7888H+++((((((((((((	*
 !- - - FFHHac3T****1a     r   N)__name__
__module____qualname__r7   markparametrizerB   rD   rI   rP   rR   rU   r[   r_   ro   rs   r|   r   r   r   r   float64r6   r   r   r   r   r(   r(   G   s:       [5557 74 47 74 [5557 74 47 74 []^,<==	8 	8 >=	8 [5557 74 47 74 [5557 74 47 744 4 4@ @ @
@ @ @. . .	- 	- 	-     (: : :
! ! !" " "& [Wrz2=&ABB[VdE]33[UQH--! ! .- 43 CB! ! !r   r(   ) scipy.linalg.interpolativer    interpolativer9   numpyr   scipy.linalgr   r   r   scipy.sparse.linalgr   r   numpy.testingr	   r
   r   r   r7   r   r   sysmaxsizer4   fixturer   r   r6   r   r   r&   r(   r   r   r   <module>r      s  : 0 / / / / / / / /     / / / / / / / / / / 0 0 0 0 0 0 4 4 4 4 4 4/ / / / / / / / / / / /  * * * * * * 



[5 	    
BM2333+ + 43+      j! j! j! j! j! j! j! j! j! j!r   