
    xf                     N   d dl Z 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d	 Zd
 Zg Zej/                         D ]  Zg Z ee      rt e       rej4                  j6                  gZnU e       r7 ej8                  e      j:                  dk(  rej4                  j6                  gZnej4                  j<                  gZej?                   ej@                  eeejB                                 e"e      Ze#d fdZ$d Z%ddZ&ej4                  jO                  dejP                  eef      ej4                  jO                  de      ej4                  jO                  dd      ej4                  jO                  dd      d                             Z)ej4                  jO                  de      ej4                  jO                  dd      ej4                  jU                  d      d                      Z+ej4                  jO                  dd      ej4                  jO                  dedd       d               Z,ej4                  j<                  ej4                  j[                         d               Z.y)     N)assert_allclose)raises)_svdp)
csr_matrix
csc_matrixg-C6?g:0yE>c                 F    t        j                  |       j                  dk(  S )Nc)npdtypekind)r   s    H/usr/lib/python3/dist-packages/scipy/sparse/linalg/tests/test_propack.pyis_complex_typer      s    88E?3&&    c                  (    t         j                  dk  S )Nl        )sysmaxsize r   r   is_32bitr      s    ;;%r   c                  &    dt         j                  v S )Nwin32)r   platformr   r   r   
is_windowsr      s    cll""r      )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 matrix
   y              @y              $@r      )r
   randomRandomStater   randastypereal)	constructornmfr   rseedkwargsrngMs	            r   generate_matrixr-   2   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u2r1   r2   As        r   assert_orthogonalr<   ?   sJ    BFF2779;;#$AArvvbhhqk288A;7dNr   c                 
   t         |   }t        t        j                  | |||      }	 ||	      }
t        j                  j                  |	d      \  }}}t        |
||||      \  }}}}|j                         dk(  rDt        j                  ||d      }t        j                  ||d      }t        j                  ||      }t        |d | |||       t        ||||       t        |j                  |j                  ||       y )NF)full_matrices)kwhichirl_modetolSMr/   r   r0   )TOLSr-   r
   asarraylinalgsvdr   upperrollr   r<   r6   )r&   r'   r%   r   r?   rA   r@   r(   rB   r,   Mspr9   sigma1vt1r:   sigma2vt2_s                     r   
check_svdprP   E   s    
u+C

Aq!U3A
a.CiimmAUm;OBsaux#&(BQ {{}WWRAggc1a # F2AJSs; b"3S1ceeSUU37r   ctorr   irl)TFr@   )LMrC   c           
         t         j                  j                  d       d\  }}}|dk(  r0|s.d}t        t        |      5  t        ||| ||||       d d d        y t               r9t        |      r.d}t        t        |      5  t        ||| ||||       d d d        y t        ||| ||||       y # 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   )r         rC   z#`which`='SM' requires irl_mode=True)matchz1PROPACK complex-valued SVD methods not available )	r
   r    seedassert_raises
ValueErrorrP   r   r   	TypeError)rQ   r   rR   r@   r&   r'   r?   messages           r   	test_svdpr]   ]   s    
 IINN1GAq!}S7:W5 	9q!T5!S%8	9 	9 :/%0IGy8 =1auae<= = q!T5!S%8	9 	9
= =s    B0B<0B9<C)FTx   c                    t         j                  dt         j                  dt         j                  dt         j                  di|    }t
        j                  j                  t              }d}t
        j                  j                  ||      }t        j                  |d      }t        |       r#|d   j                         j                  |       }n"|d   j                         j                  |       }d	}t        |||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+                  |j-                               \  }}}|d d d |f   }|d | }|d |d d f   }|t        j.                  |      z  |z  }|	t        j.                  |
      z  |z  }t        t         j(                  j1                  ||z
        d
|       y )NgC8
!?g&.>gMbP?zpropack_test_data.npzT)allow_pickle	A_complexA_real   r   )rA   random_state   r/   )r2   )r
   float32float64	complex64
complex128ospathdirname__file__joinloadr   itemr#   r   r   r7   r8   r5   r6   rF   rG   todensediagnorm)r   rR   r2   path_prefixrelative_pathfilenamedatar;   r?   usvhrO   sv_checku3s3vh3A3recons                      r   test_examplesr   q   s    	

F


D
d
t	
 D ''//(+K ,Mww||K7H778$/Du""$++E2N!((/A1s;KAq"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:.=r   shifts)Nir   r/   r   F      c                 p   t         j                  j                  d       d\  }}t         j                  j                  ||f      }| P| dk  s|t        |dz
  | z
  |      kD  r6t	        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   r   r   r/   r   T)r   kmaxrA   )r
   r    rX   minpytestr   rZ   r   )r   r   r&   r?   r;   s        r   test_shiftsr      s     IINN1DAq
		!Q A
C!F
A4F0F]]:& 	@!QvAaC$?	@ 	@ 	a6!d;	@ 	@s   ;B,,B5c                  4   t         j                  j                  d       d\  } }t         j                  j                  | | f      j                  t         j                        }t        ||d dd      \  }}}}t        ||ddd      \  }}}	}t        ||       y )Nr   r   rC   T)r   r@   rA       )r
   r    rX   r#   doubler   r   )
r&   r?   r;   r9   s1rL   rO   r:   s2rN   s
             r   test_shifts_accuracyr      s     IINN1DAq
		!Q ''		2A1aD4HNBC1a$FNBC Br   )g?)/rj   r   r   numpyr
   numpy.testingr   r   rY   scipy.sparse.linalg._svdpr   scipy.sparser   r   rf   rg   rh   ri   rD   r   r   r   _dtypeskeysdtype_flavourr   markskipr   itemsizeslowappendparam__name__tuplefloatr-   r<   rP   parametrizearrayr]   timeoutr   r   xfailr   r   r   r   <module>r      sl   	  
  ) * + /
 JJJJLL$MM4	' # YY[ <ME}%:[[%%&E\hbhh}5>>"D[[%%&E[[%%&ENN<6<<U#0#9#9; << .  q
$O80 "((J
!CD'*.,/9 0 / + E9  '*.S->  / +->` #<='"1+.< / ><   r   