
    e!h!                        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j0                  ej2                  g	      d
        Z ej*                         d        Z ej*                         d        Z G d d      Zy)    N)hilbertsvdvalsnormaslinearoperator)interp_decomp)assert_assert_allcloseassert_equalassert_array_equal)raisesc               #      K   d y w)N-q= r       m/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/scipy/linalg/tests/test_interpolative.pyepsr   )   s     
Ks   c               #   R   K   t         j                  j                  d      } |  y w)Nl   ,b30k0 )nprandomdefault_rngrngs    r   r   r   .   s      
))

 0
1C
Is   %')paramsc              #   \   K   d}t        |      j                  | j                         y w)Ni,  )r   astypeparam)requestns     r   Ar    4   s&      	A
!*

GMM
**s   *,c              #   &   K   t        |        y w)Nr   )r    s    r   Lr"   <   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   )r   linalgsvdnonzero
IndexErrorshape)r    r   Sranks       r   r+   r+   A   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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d Zy)TestInterpolativeDecompositionzrand,lin_op)FF)TF)TTc                     |s|n|}t        j                  ||||      \  }}	}
t        j                  |d d |	d | f   |	|
      }t        |||d       y 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   sY    
 !a!//$CP311!As2AwJ-dK13U3r   c                     |}|s|n|}	t        j                  |	|||      \  }
}t        j                  |d d |
d | f   |
|      }t        |||d       y 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   s\      a,,VQTsK	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 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	T00d;..q!S91QBQZ=s?Aqs7r   c                     |s|n|}t        j                  ||||      \  }}	}
||	z  |
j                  j                         z  }t	        |||d       y 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   sM     !a..4SA1aEACCHHJ13U3r   c                     |}|s|n|}	t        j                  |	|||      \  }
}}|
|z  |j                  j                         z  }t	        |||d       y 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   sR      a..3?1aEACCHHJ13U3r   c                     |}t        j                  ||d      \  }}t        j                  |d d |d | f   ||      \  }}}	||z  |	j                  j	                         z  }
t        ||
|d       y )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   sm    ,,Q>	T&&qCG}c4@1aEACCHHJ13U3r   c                 l    t        |      }t        j                  ||      }t        ||d   dd       y )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   s/    AJ66qcB

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?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   sQ    FFH	!Q$3AEN;;AqcJ

AaDt$?r   c                 6   t        j                  g dg dg dg|j                        }||fD ]h  }d}t         j                  j	                  |t        |d      |z        }t        j                  |||      }t        ||k\         t        ||dz   k         j y )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    HHiI6aggFQ 	.AHii++AtAqzH/DEG!//8EHH'(H",-	.r   c                 R   t        j                  g dg dg dg|j                        }||fD ]v  }t        |      }d}t         j                  j                  |t        |d      |z        }t        j                  |||      }t        ||dz
  k\         t        ||dz   k         x y )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    HHiI6aggFQ 	-A!!$BHii++AtAqzH/DEG!//H#FHH!+,H!+,	-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   rV   FrR   )r   r   r   float32assert_raises
ValueErrorr7   r   )r9   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)rq      rq   )r   onesrw   rx   r7   r&   )r9   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         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     IINN2q!!//373Q
#00d;..q!S91q5! ,,Q2	T00d;..q!S91q5!r   rd   r1   TFr   ra   g?c                     t        j                  g dg dg dg dg dg|d      }|j                         }t        |j                  ||       t        ||       y )	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   sT     HH+((((	*
 !- FFHacc3T*1a r   c                 .   t         j                  j                  d      }|j                  ddg      }t	        |      }t        j                  |d      \  }}}t        |j                  d       t        |j                  d       t        |j                  d       |j                  d	d
g      }t	        |      }t        j                  |d      \  }}}t        |j                  d       t        |j                  d       t        |j                  d       y )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    ii##$45KKaVK$a ..Q'1aQWWf%QWWd#QWWf%KKaVK$a ..Q'1aQWWf%QWWd#QWWf%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   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%   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 4/ /  *    
 

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