
    ^Mh!                        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  ej                    d             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)raisesc               #      K   dV  d S )N-q= r       e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/linalg/tests/test_interpolative.pyepsr   )   s      
KKKKKr   c               #   P   K   t           j                            d          } | V  d S )Nl   ,b30k0 )nprandomdefault_rngrngs    r   r   r   .   s)      
)

 0
1
1C
IIIIIr   )paramsc              #   `   K   d}t          |                              | j                  V  d S )Ni,  )r   astypeparam)requestns     r   Ar    4   s5       	A
!**

GM
*
******r   c              #   ,   K   t          |           V  d S )Nr   )r    s    r   Lr"   <   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   )r   linalgsvdnonzero
IndexErrorshape)r    r   Sranks       r   r+   r+   A   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ej                            dej        ej        g          ej                            dddg          ej                            dddg          d                                     Zd ZdS )TestInterpolativeDecompositionzrand,lin_op)FF)TF)TTc                     |s|n|}t          j        ||||          \  }}	}
t          j        |d d |	d |         f         |	|
          }t          |||d           d S N)randr   :0yE>rtolatol
pymatrixidr   reconstruct_matrix_from_idr
   )selfr    r"   r   r1   lin_opr   A_or_LkidxprojBs               r   test_real_id_fixed_precisionz;TestInterpolativeDecomposition.test_real_id_fixed_precisionM   sv    
 !'a!/$CPPP31!AAAs2A2wJ-dKK13U333333r   c                     |}|s|n|}	t          j        |	|||          \  }
}t          j        |d d |
d |         f         |
|          }t          |||d           d S r0   r6   )r9   r    r"   r   r+   r1   r:   r   r<   r;   r=   r>   r?   s                r   test_real_id_fixed_rankz6TestInterpolativeDecomposition.test_real_id_fixed_rankX   sy      'a,VQTsKKK	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 r0   )r7   r   reconstruct_interp_matrixreconstruct_skel_matrixr
   )r9   r    r"   r   r+   r1   r:   r   r<   r;   r=   r>   Pr?   s                 r   %test_real_id_skel_and_interp_matriceszDTestInterpolativeDecomposition.test_real_id_skel_and_interp_matricesc   s      'a,VQTsKKK	T0d;;.q!S991QQQBQBZ=s????Aqs777777r   c                     |s|n|}t          j        ||||          \  }}	}
||	z  |
j                                        z  }t	          |||d           d S r0   r7   r&   Tconjr
   )r9   r    r"   r   r1   r:   r   r;   Ur*   Vr?   s               r   test_svd_fixed_precisionz7TestInterpolativeDecomposition.test_svd_fixed_precisiono   se     !'a.4SAAA1aEACHHJJ13U333333r   c                     |}|s|n|}	t          j        |	|||          \  }
}}|
|z  |j                                        z  }t	          |||d           d S r0   rI   )r9   r    r"   r   r+   r1   r:   r   r<   r;   rL   r*   rM   r?   s                 r   test_svd_fixed_rankz2TestInterpolativeDecomposition.test_svd_fixed_ranky   sj      'a.3???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 )NFr1   r2   r3   )r7   r   	id_to_svdrJ   rK   r
   )r9   r    r   r+   r<   r=   r>   rL   r*   rM   r?   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   ư>r2   r3   )r   r7   estimate_spectral_normr
   )r9   r    r   s
norm_2_ests        r   test_estimate_spectral_normz:TestInterpolativeDecomposition.test_estimate_spectral_norm   sC    AJJ6qcBBB

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?r   rV   r2   r3   )copyr   r7   estimate_spectral_norm_diffr
   )r9   r    r   r?   rX   rY   s         r    test_estimate_spectral_norm_diffz?TestInterpolativeDecomposition.test_estimate_spectral_norm_diff   ss    FFHH	!!!Q$3AENN;AqcJJJ

AaDt$??????r   c                 B   t          j        g dg dg dg|j                  }||fD ]u}d}t           j                            |t          |d          |z            }t          j        |||          }t          ||k               t          ||dz   k               vd S )N   ra   r   r   r   ra   dtype&.>   r   
   )	r   arrayrd   r%   matrix_rankr   r7   estimate_rankr	   )r9   r    r   r?   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EEEHH'(((H",----	. 	.r   c                 f   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 )Nr`   rb   rc   re   rf   r      )
r   rh   rd   r   r%   ri   r   r7   rj   r	   )	r9   r    r   r?   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#FFFHH!+,,,H!+,,,,	- 	-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   rV   FrR   )r   r   r   float32assert_raises
ValueErrorr7   r   )r9   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   onesrw   rx   r7   r&   )r9   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         ra   )
r   r   r1   r7   r   r   r)   rD   rE   r
   )r9   r   r    r<   r=   r>   rF   r?   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   rd   r1   TFr   ra   g?c                     t          j        g dg dg dg dg dg|d          }|                                }t          |j        ||           t          ||           d S )	N)r   r   r   r   r   )r   r   r   ra   ra   ra   )ra   r   r   ra   r   r   )r   ra   r   r   ra   r   )r   r   ra   r   r   ra   C)rd   orderrR   )r   rh   r\   r   rJ   r   )r9   rd   r1   r   r    r?   s         r   test_bug_9793z,TestInterpolativeDecomposition.test_bug_9793   s     H+++((((((((((((	*
 !- - - FFHHac3T****1a     r   c                 @   t           j                            d          }|                    ddg          }t	          |          }t          j        |d          \  }}}t          |j        d           t          |j        d           t          |j        d           |                    d	d
g          }t	          |          }t          j        |d          \  }}}t          |j        d           t          |j        d           t          |j        d           d S )Nl   CaNJ1    ru   )sizer{   )r   r{   )r{   )ru   r{   rq   	   rf   )rq   rf   )rf   )r   rf   )	r   r   r   uniformr   r7   r&   r   r)   )r9   r   xxlurX   vs          r   %test_svd_aslinearoperator_shape_checkzDTestInterpolativeDecomposition.test_svd_aslinearoperator_shape_check   s    i##$455KKaVK$$a  .Q''1aQWf%%%QWd###QWf%%%KKaVK$$a  .Q''1aQWf%%%QWd###QWf%%%%%r   N)__name__
__module____qualname__pytestmarkparametrizer@   rB   rG   rN   rP   rT   rZ   r^   ro   rs   ry   r~   r   r   float64
complex128r   r   r   r   r   r-   r-   K   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%   interpolativer7   numpyr   scipy.linalgr   r   r   scipy.sparse.linalgr   r   numpy.testingr	   r
   r   r   r   r   rw   fixturer   r   r   r   r    r"   r+   r-   r   r   r   <module>r      s  : 0 / / / / / / / /     / / / / / / / / / / 0 0 0 0 0 0 4 4 4 4 4 4/ / / / / / / / / / / /  * * * * * *      
 
BM2333+ + 43+      ]& ]& ]& ]& ]& ]& ]& ]& ]& ]&r   