
    xfp#                        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d dlZej.                  dk  Z ej2                         d        Z ej2                  ej6                  ej8                  g	      d
        Z ej2                         d        Z ej2                         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       G/usr/lib/python3/dist-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   1   s&      	A
!*

GMM
**s   *,c              #   &   K   t        |        y w)Nr   )r   s    r   Lr   9   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ej                  j                   ej                         j!                  d      d      d        Zd Zd Zd Zd Zd Zd Zej                  j                  dej2                  ej4                  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   complex_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_precisionJ   sx     BKK/D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_rankW   s{     BKK/D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_matricesd   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_precisonp   sl     BKK/D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     BKK/D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   armztest known to fail on armhf)reasonc                     |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   rd   r   r   r   rd   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 )Nrc   re   rf   rg   rh      )
r   rj   r5   r   r    rk   r   r9   rl   r	   )r;   r   rA   rm   MLrn   ro   rp   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defaultrh   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   sI    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)rs      rs   )r   onesr   r   r9   r!   )r;   as     r   test_rank_too_largez2TestInterpolativeDecomposition.test_rank_too_large   s:    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         rd   )
r   rz   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   rd   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   rd   rd   rd   )rd   r   r   rd   r   r   )r   rd   r   r   rd   r   )r   r   rd   r   r   rd   C)r5   orderr-   )
r4   r   r6   r7   r8   rj   r_   r   rL   r   )r;   r5   r.   r   r   rA   s         r   test_bug_9793z,TestInterpolativeDecomposition.test_bug_9793   sq     "++-$LL78HH+((((	*
 !- FFHacc3T*1a r   N)__name__
__module____qualname__r7   markparametrizerB   rD   rI   rP   rR   rU   r[   skipifplatformmachine
startswithra   rq   ru   r~   r   r   r   r   float_r6   r   r   r   r   r(   r(   H   s   [[57474 [[57474 [[]^,<=	8 >	8 [[57474 [[574744@
 [[(((*55e<Ebc@ d@.	- (:
!"& [[Wryy"++&>?[[VdE]3[[UQH-! . 4 @!r   r(   )!scipy.linalg.interpolativer    interpolativer9   numpyr   scipy.linalgr   r   r   scipy.sparse.linalgr   r   numpy.testingr	   r
   r   r   r7   r   r   r   sysmaxsizer4   fixturer   float64
complex128r   r   r&   r(   r   r   r   <module>r      s   : 0 /  / / 0 4/ /  *  
[[5 	   

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