
    g                     v   d dl Z d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZ ej                  dej                  dej                  dej                   diZd Zg Zej)                         D ]Q  Zg Z ee      rej.                  j0                  gZej3                   ej4                  eeej6                  	             S  ee      Zed fd
Zd ZddZ ej.                  jC                  dejD                  eef      ej.                  jC                  de      ej.                  jC                  dd      ej.                  jC                  dd      d                             Z#ej.                  jH                  ej.                  jC                  de      ej.                  jC                  dd      d                      Z%ej.                  jC                  dd      ej.                  jC                  dedd       d               Z&ej.                  j0                  ej.                  jO                         d               Z(y)    N)assert_allclose)raises)_svdp)	csr_array	csc_arrayg-C6?g:0yE>c                 F    t        j                  |       j                  dk(  S )Nc)npdtypekind)r   s    Y/var/www/html/venv/lib/python3.12/site-packages/scipy/sparse/linalg/tests/test_propack.pyis_complex_typer      s    88E?3&&    )marksidc                 h   t         j                  j                  |      }t        |      rAdd|j	                  ||      z  z   dz
  d|j	                  ||      z  z   j                  |      }n'dd|j	                  ||      z  z   j                  |      }d||j                  d|z  dz
  kD  <    | |fi |S )zGenerate a random sparse array
   y              @y              $@r      )r
   randomRandomStater   randastypereal)	constructornmfr   rseedkwargsrngMs	            r   generate_matrixr#   "   s     ))


&Cu2A&&#((1a.()*0&- 	
 "sxx1~%%--e4AaffrAvzq#F##r   c                     t        t        j                  | j                         j                  |            }t        |t        j                  | j                  d   |j                  d         ||       y)z7Check that the first k rows of u1 and u2 are orthogonal   rtolatolN)absr
   dotconjTr   eyeshape)u1u2r'   r(   As        r   assert_orthogonalr2   /   sJ    BFF2779;;#$AArvvbhhqk288A;7dNr   c           
      F   t         |   }t        t        j                  | |||      }	 ||	      }
t        j                  j                  |	d      \  }}}t        |
||||t        j                  j                  d            \  }}}}|j                         dk(  rDt        j                  ||d      }t        j                  ||d      }t        j                  ||      }t        |d | |||       t        ||||       t        |j                  |j                  ||       y )NF)full_matricesr   )kwhichirl_modetolr!   SMr%   r&   )TOLSr#   r
   asarraylinalgsvdr   r   default_rngupperrollr   r2   r,   )r   r   r   r   r5   r7   r6   r   r8   r"   Mspr/   sigma1vt1r0   sigma2vt2_s                     r   
check_svdprG   5   s    
u+C

Aq!U3A
a.CiimmAUm;OBsaux#&BII,A,A!,DFBQ {{}WWRAggc1a # F2AJSs; b"3S1ceeSUU37r   ctorr   irl)TFr6   )LMr9   c           
          t         j                  j                  d       d\  }}}|dk(  r0|s.d}t        t        |      5  t        ||| ||||       d d d        y t        ||| ||||       y # 1 sw Y   y xY w)Nr   )r         r9   z#`which`='SM' requires irl_mode=True)match)r
   r   seedassert_raises
ValueErrorrG   )rH   r   rI   r6   r   r   r5   messages           r   	test_svdprS   M   s{    
 IINN1GAq!}S7:W5 	9q!T5!S%8	9 	9 	1auae4	9 	9s    A--A6)FTc                 P   t         j                  dt         j                  dt         j                  dt         j                  di|    }t
        j                  j                  t              }d}t
        j                  j                  ||      }t        j                  |d      5 }t        |       r#|d   j                         j                  |       }n"|d   j                         j                  |       }d d d        d	}t        ||t         j                  j!                  d
            \  }	}
}}t        |       rdn|}|	d d d |f   }	|d |d d f   }|
d | }
t#        t        j$                  |	j&                  d         |	j)                         j*                  |	z  |       t#        t        j$                  |j&                  d
         ||j)                         j*                  z  |       t         j,                  j/                  |j1                               \  }}}|d d d |f   }|d | }|d |d d f   }|t        j2                  |      z  |z  }|	t        j2                  |
      z  |z  }t#        t         j,                  j5                  ||z
        d
|       y # 1 sw Y   xY w)NgC8
!?g&.>gMbP?zpropack_test_data.npzT)allow_pickle	A_complexA_real   r   )r7   r!      r%   )r(   )r
   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr   r   r   r>   r   r-   r.   r+   r,   r<   r=   todensediagnorm)r   rI   r(   path_prefixrelative_pathfilenamedatar1   r5   usvhrF   sv_checku3s3vh3A3recons                      r   test_examplesru   \   s.    	

F


D
d
t	
 D ''//(+K ,Mww||K7H		- 45![!&&(//6AX##%,,U3A	4 	A1s		0E0Ea0HIKAq"a %U+rH	!YhY,A	IXIqL	B	)8A BFF1771:&

QTBBFF288A;'bggikk)9E ))--		,KBC	AyyL	B	IXB
ixil
C	bggbk	C	B
NREBIINN2:.=94 4s   "AJJ%shifts)Nir   r%   r   F      c           	      X   t         j                  j                  d      }d\  }}|j                  ||f      }| Q| dk  s|t        |dz
  | z
  |      kD  r7t	        j
                  t              5  t        ||| d|z  d|       d d d        y t        ||| d|z  d|       y # 1 sw Y   y xY w)Nr   rw   r   r%   r   T)rv   kmaxr7   r!   )r
   r   r>   minpytestr   rQ   r   )rv   r   r!   r   r5   r1   s         r   test_shiftsr~      s     ))


"CDAq

Aq6A
C!F
A4F0F]]:& 	I!QvAaC$CH	I 	I 	a6!dD	I 	Is   -B  B)c                     t         j                  j                  d      } d\  }}| j                  ||f      j                  t         j                        }t        ||d dd|       \  }}}}t        ||ddd|       \  }}	}
}t        ||	       y )Nr   rz   r9   T)rv   r6   r7   r!       )r
   r   r>   r   r[   r   r   )r!   r   r5   r1   r/   s1rC   rF   r0   s2rE   s              r   test_shifts_accuracyr      s     ))


"CDAq

Aq6!!"**-A1aD4SQNBC1a$3ONBC Br   )g?))r^   r}   numpyr
   numpy.testingr   r   rP   scipy.sparse.linalg._svdpr   scipy.sparser   r   rZ   r[   r\   r]   r:   r   _dtypeskeysdtype_flavourr   markslowappendparam__name__tuplefloatr#   r2   rG   parametrizearrayrS   xslowru   r~   xfailr    r   r   <module>r      s   	   ) * + -
 JJJJLL$MM4	' YY[ <ME}%!!"NN<6<<U#0#9#9; <	< .  q
$O80 "((Iy!AB'*.,/5 0 / + C5 '*.,> / + ,>^ #<='"1+.E / >E   r   