ó
î&]\c           @` sA  d  Z  d d l m Z m Z m Z d d l m Z d d l m Z d d l	 Z	 d d l
 Z
 d d l
 m Z m Z d d l m Z m Z d d l Z d d l j Z d d l m Z e e	 d	 ƒ Z d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d S(   s6   Test functions for the sparse.linalg.interface module
i    (   t   divisiont   print_functiont   absolute_import(   t   partial(   t   productN(   t   raisest   warns(   t   assert_t   assert_equal(   t	   interfacet   matmult   TestLinearOperatorc           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C` s   t  j d d d g d d d g g ƒ |  _ t  j d d g d d g d d g g ƒ |  _ t  j d d g d d g g ƒ |  _ d  S(   Ni   i   i   i   i   i   (   t   npt   arrayt   At   Bt   C(   t   self(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   setup_method   s    	c      	   ` s‡  d „  } xá| |  j  ƒ D]Ð} t j |   ‰  t ˆ  j d k ƒ t ˆ  j t j d d d g ƒ ƒ d d g ƒ t ˆ  j t j d g d g d g g ƒ ƒ d g d g g ƒ t ˆ  t j d d d g ƒ d d g ƒ t ˆ  t j d g d g d g g ƒ d g d g g ƒ t ˆ  j	 t j d d d g ƒ ƒ d d g ƒ t ˆ  j	 t j d g d g d g g ƒ ƒ d g d g g ƒ t ˆ  j t j
 d g d g d g g ƒ ƒ d g d g g ƒ t ˆ  t j
 d g d g d g g ƒ d g d g g ƒ t ˆ  j	 t j
 d g d g d g g ƒ ƒ d g d g g ƒ t d ˆ  d d d g d d g ƒ t d ˆ  j d d g ƒ d	 d d
 g ƒ t d ˆ  j j d d g ƒ d	 d d
 g ƒ t d ˆ  d g d g d g g d g d g g ƒ t d ˆ  j d g d g d g g ƒ d g d g g ƒ t ˆ  d d d d g d d g ƒ t ˆ  d d g d g d g g d g d g g ƒ t d ˆ  d d d g d d g ƒ t ˆ  ˆ  d d d g d d g ƒ t ˆ  ˆ  j d d g ƒ d	 d d
 g ƒ t ˆ  ˆ  j j d d g ƒ d	 d d
 g ƒ t ˆ  ˆ  d g d g d g g d g d g g ƒ t ˆ  ˆ  j d g d g d g g ƒ d g d g g ƒ t ˆ  d d d g d d g ƒ t ˆ  d g d g d g g d g d g g ƒ t ˆ  ˆ  d d d g d d g ƒ t ˆ  ˆ  d g d g d g g d g d g g ƒ ˆ  ˆ  } t t | j ƒ d k oZ| j d ˆ  k oZ| j d ˆ  k ƒ d ˆ  } t t | j ƒ d k o£| j d ˆ  k o£| j d d k ƒ t t ˆ  j d d d g ƒ t j ƒ ƒ t t ˆ  j t j d g d g d g g ƒ ƒ t j ƒ ƒ t t ˆ  t j d d d g ƒ t j ƒ ƒ t t ˆ  t j d g d g d g g ƒ t j ƒ ƒ t t ˆ  j	 t j d d d g ƒ ƒ t j ƒ ƒ t t ˆ  j	 t j d g d g d g g ƒ ƒ t j ƒ ƒ t t ˆ  j t j
 d g d g d g g ƒ ƒ t j ƒ ƒ t t ˆ  t j
 d g d g d g g ƒ t j ƒ ƒ t t ˆ  j	 t j
 d g d g d g g ƒ ƒ t j ƒ ƒ t t d ˆ  t j ƒ ƒ t t d ˆ  t j ƒ ƒ t t ˆ  ˆ  t j ƒ ƒ t t ˆ  t j ƒ ƒ t t ˆ  ˆ  t j ƒ ƒ t d ˆ  j t j k ƒ t t ˆ  j t j d d g ƒ ƒ t t ˆ  j t j d d d d g ƒ ƒ t t ˆ  j t j d g d g g ƒ ƒ t t ˆ  j t j d g d g d g d g g ƒ ƒ t t ‡  f d †  ƒ t t ‡  f d †  ƒ q Wx®t | |  j  ƒ | |  j ƒ ƒ D]‹\ } } t j |   ‰  t j |   ‰ t ˆ  ˆ d d g d d g ƒ t ˆ  ˆ d g d g g d g d g g ƒ t ˆ  ˆ j d g d g g ƒ d g d g g ƒ t ˆ  ˆ j d d g ƒ d d g ƒ t ˆ  ˆ j j d d g ƒ d d g ƒ t t ˆ  ˆ t j ƒ ƒ t t ‡  ‡ f d †  ƒ t t ‡  f d †  ƒ ˆ  ˆ } t t | j ƒ d k o–
| j d ˆ  k o–
| j d ˆ k ƒ q	Wxâ | |  j ƒ D]Ñ } t j |   } t | d d d g d d g ƒ t | d j d d g ƒ d d g ƒ t | d j j d d g ƒ d d g ƒ t | d j d g d g g ƒ d g d g g ƒ t t | d t j ƒ ƒ q®
Wd  S(   Nc         ` sn   i ˆ  j  d 6‡  f d †  d 6‡  f d †  d 6i ˆ  j  d 6‡  f d †  d 6‡  f d †  d 6‡  f d †  d	 6g S(
   Nt   shapec         ` s    t  j ˆ  |  ƒ j ˆ  j d ƒ S(   Ni    (   R   t   dott   reshapeR   (   t   x(   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   <lambda>%   s    t   matvecc         ` s)   t  j ˆ  j j ƒ  |  ƒ j ˆ  j d ƒ S(   Ni   (   R   R   t   Tt   conjR   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   &   s   t   rmatvecc         ` s   t  j ˆ  |  ƒ S(   N(   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   +   s    c         ` s   t  j ˆ  j j ƒ  |  ƒ S(   N(   R   R   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   ,   s    c         ` s   t  j ˆ  |  ƒ S(   N(   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   -   s    t   matmat(   R   (   R   (    (   R   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   get_matvecs"   s    

i   i   i   i   i    i   i   i
   i   y               @y              (@y              >@iúÿÿÿiñÿÿÿi    i   c           ` s   ˆ  ˆ  S(   N(    (    (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   o   s    c           ` s   ˆ  d S(   Ni   (    (    (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   p   s    i2   iq   iG   i\   c           ` s   ˆ  ˆ S(   N(    (    (   R   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   €   s    c           ` s   ˆ  d S(   Ni   (    (    (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR      s    i   i%   i   (    (   R   R	   t   LinearOperatorR   t   argsR   R   R   R   R   t   matrixR   t   HR   t   lent
   isinstancet   ndarrayt   _ScaledLinearOperatort   _SumLinearOperatort   dtypet   complex_t   assert_raisest
   ValueErrorR   R   t   _ProductLinearOperatorR   t   _PowerLinearOperator(   R   R   t   matvecst   zt   matvecsAt   matvecsBt   matvecsCR   (    (   R   R   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_matvec!   s˜    	.=)8.==8=$),38$3$$),38!0$3
?
?(:,51::5:"((4!-2&)
C!&)2c         ` s  t  s t j d ƒ n  i ˆ  j j d 6‡  f d †  d 6‡  f d †  d 6‡  f d †  d 6} t j |   } t j d	 d
 d g d d d g d d d g g ƒ } | d } t	 t
 j | | ƒ | | ƒ t	 t
 j | | ƒ | | ƒ t t t
 j | d
 ƒ t t t
 j d
 | ƒ d  S(   Ns$   matmul is only tested in Python 3.5+R   c         ` s&   t  j ˆ  j |  ƒ j ˆ  j j d ƒ S(   Ni    (   R   R   R   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   •   s    R   c         ` s/   t  j ˆ  j j j ƒ  |  ƒ j ˆ  j j d ƒ S(   Ni   (   R   R   R   R   R   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   –   s   R   c         ` s   t  j ˆ  j |  ƒ S(   N(   R   R   R   (   R   (   R   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   ˜   s    R   i   i   i   i   i   i   i   i   i	   i    (   t   TEST_MATMULt   pytestt   skipR   R   R	   R   R   R   R   t   operatorR
   R)   R*   (   R   t   DR   R   t   b(    (   R   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_matmul   s    
(   t   __name__t
   __module__R   R2   R9   (    (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR      s   			ot   TestAsLinearOperatorc           B` s#   e  Z d  „  Z d „  Z d „  Z RS(   c         ` s:   g  ˆ  _  ‡  f d †  } | d ƒ | d ƒ | d ƒ d  S(   Nc         ` sA  ˆ j  j t j d d d g d d d g g d |  ƒƒ ˆ j  j t j d d d g d d d g g d |  ƒƒ ˆ j  j t j d d d g d d d g g d |  ƒƒ d „  ‰  d	 „  ‰ d
 t j f ‡  f d †  ƒ  Y} d | f ‡ f d †  ƒ  Y} d | f ‡  ‡ f d †  ƒ  Y} ˆ j  j | |  ƒ ƒ ˆ j  j | |  ƒ ƒ d  S(   Ni   i   i   i   i   i   R'   c         S` s‰   t  j d |  d d |  d d |  d d |  d d |  d d |  d g d | ƒ} t |  j ƒ d k r… | j d	 d ƒ } n  | S(
   Ni   i    i   i   i   i   i   R'   iÿÿÿÿ(   R   R   R"   R   R   (   R   R'   t   y(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   mv°   s
    )2c         S` sX   t  j d |  d d |  d d |  d d |  d d |  d d |  d g d | ƒS(	   Ni   i    i   i   i   i   i   R'   (   R   R   (   R   R'   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   rmv·   s    t   BaseMatlikec           ` s    e  Z d  „  Z ‡  f d †  Z RS(   c         S` s   t  j | ƒ |  _ d |  _ d  S(   Ni   i   (   i   i   (   R   R'   R   (   R   R'   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   __init__½   s    c         ` s   ˆ  | |  j  ƒ S(   N(   R'   (   R   R   (   R>   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   _matvecÁ   s    (   R:   R;   RA   RB   (    (   R>   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR@   ¼   s   	t
   HasRmatvecc           ` s   e  Z ‡  f d  †  Z RS(   c         ` s   ˆ  | |  j  ƒ S(   N(   R'   (   R   R   (   R?   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   _rmatvecÅ   s    (   R:   R;   RD   (    (   R?   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRC   Ä   s   t
   HasAdjointc           ` s   e  Z ‡  ‡ f d  †  Z RS(   c      	   ` si   |  j  d |  j  d f } t ˆ d |  j ƒ} t ˆ  d |  j ƒ} t j d | d | d |  j d | ƒ S(   Ni   i    R'   R   R   R   (   R   R   R'   R	   R   (   R   R   R   R   (   R>   R?   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   _adjointÉ   s    	(   R:   R;   RF   (    (   R>   R?   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRE   È   s   (	   t   casest   appendR   R    R   t   sparset
   csr_matrixR	   R   (   R'   R@   RC   RE   (   R   (   R>   R?   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt
   make_cases©   s    777		
t   int32t   float32t   float64(   RG   (   R   RK   (    (   R   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   ¦   s
    	,

c         C` s–  x|  j  D]„} t j | ƒ } | j \ } } t | j t j d d d g ƒ ƒ d d g ƒ t | j t j d g d g d g g ƒ ƒ d g d g g ƒ t | t j d d d g ƒ d d g ƒ t | t j d g d g d g g ƒ d g d g g ƒ t | j t j d d g ƒ ƒ d d d g ƒ t | j t j d g d g g ƒ ƒ d g d g d g g ƒ t | j	 j t j d d g ƒ ƒ d d d g ƒ t | j	 j t j d g d g g ƒ ƒ d g d g d g g ƒ t | j
 t j d d	 g d d
 g d d g g ƒ ƒ d d g d d g g ƒ t | t j d d	 g d d
 g d d g g ƒ d d g d d g g ƒ t | d ƒ r
 t | j | j ƒ q
 q
 Wd  S(   Ni   i   i   i   i    i	   i   i   i   i   i   iM   R'   (   RG   R	   t   aslinearoperatorR   R   R   R   R   R   R!   R   t   hasattrR'   (   R   t   MR   t   N(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt
   test_basicÙ   s"    .=)8.=1@0Gc         C` sí   xæ |  j  D]Û } t j | ƒ } | j \ } } t | j t j d d d g ƒ ƒ d d g ƒ t | j t j d g d g d g g ƒ ƒ d g d g g ƒ t | j t j d d g d d g d d g g ƒ ƒ d d g d d	 g g ƒ q
 Wd  S(
   Ni   i   i   i   i    i   i   i   iM   (   RG   R	   RO   R   R   R   R   R   (   R   RQ   R   RR   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_dotó   s    .=0(   R:   R;   R   RS   RT   (    (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR<   ¥   s   	3	c          C` s>   t  j d d d d „  ƒ }  t |  ƒ } t d | k | ƒ d  S(   NR   i   R   c         S` s   d S(   Ni   (    (   R   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR     s    s   unspecified dtype(   i   i   (   R	   R   t   reprR   (   R   t   repr_A(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt	   test_repr  s    c          C` s   t  j d ƒ }  t |  d d d g d d d g ƒ t |  j t j d ƒ j d d ƒ ƒ j ƒ  t j d ƒ ƒ t t	 |  j
 d d d d g ƒ d  S(   Ni   i   i   i	   i   (   i   i   (   R	   t   IdentityOperatorR   R   R   t   arangeR   t   ravelR)   R*   R   (   t   ident(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_identity  s    #:c          C` s»   t  j t j d ƒ j d d ƒ ƒ }  d „  } t  j d d	 d | ƒ } xo |  | |  | |  j |  |  | | |  d g D]? } t t | d ƒ ƒ t t | d ƒ ƒ t t | d ƒ ƒ qt Wd  S(
   Ni   i   c         S` s>   t  j |  ƒ }  t |  j d k p- |  j d k ƒ t  j d ƒ S(   Ni   i   i   (   i   (   i   i   (   R   t   asarrayR   R   t   ones(   R   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   always_four_ones  s    "R   i   R   R'   RB   (   i   i   (	   R	   RO   R   RY   R   R   R!   R   RP   (   R   R_   R   t   op(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_attributes  s    $	5c         C` s   t  j d ƒ S(   s>    Needed for test_pickle as local functions are not pickleable i   (   R   t   zeros(   R   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR     s    c          C` s—   d d  l  }  x„ t |  j d ƒ D]o } t j d t ƒ } |  j | d | ƒ} |  j | ƒ } x0 | j D]% } t	 t
 | | ƒ t
 | | ƒ ƒ qf Wq  Wd  S(   Ni    i   i   t   protocol(   i   i   (   t   picklet   ranget   HIGHEST_PROTOCOLR	   R   R   t   dumpst   loadst   __dict__R   t   getattr(   Rd   Rc   R   t   sR   t   k(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_pickle"  s    c          ` s  d t  j f d „  ƒ  Y}  t t d d ƒ t t |  ƒ Wd  QXd t  j f ‡  f d †  ƒ  Y‰  ˆ  d ƒ } t | j d d	 d g ƒ d d	 d g ƒ t t | j	 d
 d d g ƒ d t  j f ‡ f d †  ƒ  Y‰ ˆ t
 j j d d ƒ ƒ } t | j t
 j j d ƒ ƒ j d ƒ d  S(   Nt   Emptyc           B` s   e  Z RS(    (   R:   R;   (    (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRn   .  s   t   matchs   should implement at leastt   Identityc           ` s    e  Z ‡  f d  †  Z d „  Z RS(   c         ` s)   t  ˆ  |  ƒ j d d  d | | f ƒ d  S(   NR'   R   (   t   superRA   t   None(   R   t   n(   Rp   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRA   5  s    c         S` s   | S(   N(    (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRB   8  s    (   R:   R;   RA   RB   (    (   Rp   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRp   4  s   i   i   i   i   i   i   t
   MatmatOnlyc           ` s    e  Z ‡  f d  †  Z d „  Z RS(   c         ` s,   t  ˆ  |  ƒ j | j | j ƒ | |  _ d  S(   N(   Rq   RA   R'   R   R   (   R   R   (   Rt   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRA   @  s    c         S` s   |  j  j | ƒ S(   N(   R   R   (   R   R   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   _matmatD  s    (   R:   R;   RA   Ru   (    (   Rt   (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyRt   ?  s   (   i   (   R	   R   R   t   RuntimeWarningR)   t	   TypeErrorR   R   t   NotImplementedErrorR   R   t   randomt   randnR   (   Rn   t   id3t   mm(    (   Rp   Rt   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_inheritance-  s    (c          C` s   t  j j d d ƒ d t  j j d d ƒ }  t  j j d d ƒ } t j |  ƒ } t j | ƒ } | | } | | } t | j t  j ƒ t | j t  j ƒ d  S(   Ni   y              ð?(	   R   Ry   t   randR	   RO   R   R'   RN   t
   complex128(   t   mat_complext   mat_realt   complex_operatort   real_operatort   sum_complext   sum_real(    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_dtypes_of_operator_sumJ  s    ,

c          ` sB   d g ‰  ‡  f d †  }  t  j d d |  ƒ} t ˆ  d d ƒ d  S(   Ni    c         ` s   ˆ  d c d 7<|  S(   Ni    i   (    (   t   v(   t
   call_count(    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyR   \  s    i   R   i   (   i   i   (   R	   R   R   (   R   R   (    (   Rˆ   sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_no_double_initY  s    	c          C` s˜   t  j d g g ƒ }  t j |  ƒ } d | } d |  } t  j d g ƒ } t | j | ƒ | j | ƒ ƒ t | j j | ƒ | j j ƒ  j | ƒ ƒ d  S(   Ny              ð?i   (	   R   R   R	   RO   R   R   R!   R   R   (   t   XR   R   t   YR‡   (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   test_adjoint_conjugatee  s    

(%   t   __doc__t
   __future__R    R   R   t	   functoolsR   t	   itertoolsR   R6   R4   R   R)   R   t   numpy.testingR   R   t   numpyR   t   scipy.sparseRI   t   scipy.sparse.linalgR	   RP   R3   t   objectR   R<   RW   R\   Ra   R   Rm   R}   R†   R‰   RŒ   (    (    (    sG   lib/python2.7/site-packages/scipy/sparse/linalg/tests/test_interface.pyt   <module>   s,   Ž\								