
    tKg	#                        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j0                         d        Z ej0                  ej4                  ej6                  g	      d
        Z ej0                         d        Z ej0                         d        Z G d d      Zy)    N)hilbertsvdvalsnormaslinearoperator)interp_decomp)assert_assert_allcloseassert_equalassert_array_equal)raisesl        c               #      K   d y w)N-q= r       i/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/linalg/tests/test_interpolative.pyepsr   +   s     
Ks   )paramsc              #   \   K   d}t        |      j                  | j                         y w)Ni,  )r   astypeparam)requestns     r   Ar   0   s&      	A
!*

GMM
**s   *,c              #   &   K   t        |        y w)Nr   )r   s    r   Lr   8   s     
1
s   c                     t         j                  j                  | d      }	 t        j                  ||k        d   d   }|S # t        $ r | j
                  d   }Y |S w xY w)NF)
compute_uvr   )nplinalgsvdnonzero
IndexErrorshape)r   r   Sranks       r   r&   r&   =   sc    
		aE*Azz!c'"1%a( K  wwqzKs   A AAc                      e Zd Zej                  j                  dg d      d        Zej                  j                  dg d      d        Zej                  j                  ddg      d        Zej                  j                  dg d      d        Z	ej                  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                  j                  dej*                  ej,                  g      ej                  j                  dddg      ej                  j                  dddg      d                      Zy)TestInterpolativeDecompositionzrand,lin_op)FF)TF)TTc                    t         r4|j                  t        j                  k(  r|rt	        j
                  d       |s|n|}t        j                  |||      \  }}}	t        j                  |d d |d | f   ||	      }
t        ||
|d       y 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   sx     BMM1dLL78 a!//$G311!As2AwJ-dK13U3r   c                    t         r4|j                  t        j                  k(  r|rt	        j
                  d       |}|s|n|}t        j                  |||      \  }	}
t        j                  |d d |	d | f   |	|
      }t        |||d       y 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{     BMM1dLL78 a,,VQTB	T11!As2AwJ-dK13U3r   r)   c                     |}|s|n|}t        j                  |||      \  }	}
t        j                  |	|
      }t        j                  |||	      }t	        ||d d |	d | f   |d       t	        ||z  ||d       y )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	T00d;..q!S91QBQZ=s?Aqs7r   c                    t         r4|j                  t        j                  k(  r|rt	        j
                  d       |s|n|}t        j                  |||      \  }}}	||z  |	j                  j                         z  }
t        ||
|d       y 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   sl     BMM1dLL78 a..481aEACCHHJ13U3r   c                    t         r4|j                  t        j                  k(  r|rt	        j
                  d       |}|s|n|}t        j                  |||      \  }	}
}|	|
z  |j                  j                         z  }t        |||d       y 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{   sq     BMM1dLL78 a..61aEACCHHJ13U3r   c                     |}t        j                  ||d      \  }}t        j                  |d d |d | f   ||      \  }}}	||z  |	j                  j	                         z  }
t        ||
|d       y )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   sm    ,,Q>	T&&qCG}c4@1aEACCHHJ13U3r   c                 h    t        |      }t        j                  |      }t        ||d   dd       y )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-    AJ66q9

AaDt$?r   c                     |j                         }|d d dfxx   dz  cc<   t        ||z
        }t        j                  ||      }t	        ||d   dd       y )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   sO    FFH	!Q$3AEN;;AqA

AaDt$?r   c                 2   t        j                  g dg dg dg|j                        }||fD ]f  }d}t         j                  j	                  |t        |d      |z        }t        j                  ||      }t        ||k\         t        ||dz   k         h y )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    HHiI6aggFQAHii++AtAqzH/DEG!//8<HH'(H",- r   c                 N   t        j                  g dg dg dg|j                        }||fD ]t  }t        |      }d}t         j                  j                  |t        |d      |z        }t        j                  ||      }t        ||dz
  k\         t        ||dz   k         v y )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    HHiI6aggFQA!!$BHii++AtAqzH/DEG!//H=HH!+,H!+, r   c                 x   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
                  j                  d       t        j                          t        j                  d      }t        j
                  j                  d       t        j                  t        j
                  j                  d             t        j                  d      }t        ||       t        ||       y )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
		t__Q
		t		r*+__QBBr   c                     t        d      j                  t        j                        }t	        t
              5  t        j                  |dd       d d d        y # 1 sw Y   y xY w)N   rW   Fr-   )r   r   r   float32assert_raises
ValueErrorr9   r   )r;   r   s     r   test_badcallz+TestInterpolativeDecomposition.test_badcall   s@    AJbjj):&$$Q59 '&&s   AA#c                     t        j                  d      }t        t              5  t	        j
                  |d       d d d        y # 1 sw Y   y xY w)N)rq      rq   )r   onesr   r   r9   r!   )r;   as     r   test_rank_too_largez2TestInterpolativeDecomposition.test_rank_too_large   s1    GGFO:&NN1a  '&&s   AAc                    d}t         j                  j                  dd      }t        j                  ||      \  }}}t        ||j                  d          t        j                  ||      }t        j                  |||      }t        |||z         t        j                  ||      \  }}t        j                  ||      }t        j                  |||      }t        |||z         y )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     IINN2q!!//373Q
#00d;..q!S91q5! ,,Q2	T00d;..q!S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      }|j                         }t        |j                  ||	       t        ||       y )
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   sq     "--/DLL78HH+((((	*
 !- FFHacc3T*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   sh   [[57474 [[57474 [[]^,<=	8 >	8 [[57474 [[574744@
@.	- (:
!"& [[Wrzz2==&AB[[VdE]3[[UQH-! . 4 C!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 4/ /  * 
[[5 	   

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