ó
Ê½÷Xc           @` s%  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 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 S(   s6   Test functions for the sparse.linalg.interface module
i    (   t   divisiont   print_functiont   absolute_import(   t   partial(   t   productN(   t   TestCaset   assert_t   assert_equalt   assert_raises(   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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   setUp   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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   '   s   t   rmatvecc         ` s   t  j ˆ  |  ƒ S(   N(   R   R   (   R   (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   ,   s    c         ` s   t  j ˆ  j j ƒ  |  ƒ S(   N(   R   R   R   R   (   R   (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   -   s    c         ` s   t  j ˆ  |  ƒ S(   N(   R   R   (   R   (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   .   s    t   matmat(   R   (   R   (    (   R   sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   p   s    c           ` s   ˆ  d S(   Ni   (    (    (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   q   s    i2   iq   iG   i\   c           ` s   ˆ  ˆ S(   N(    (    (   R   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR      s    c           ` s   ˆ  d S(   Ni   (    (    (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/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_R   t
   ValueErrorR   R   t   _ProductLinearOperatorR   t   _PowerLinearOperator(   R   R   t   matvecst   zt   matvecsAt   matvecsBt   matvecsCR   (    (   R   R   sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   —   s   R   c         ` s   t  j ˆ  j |  ƒ S(   N(   R   R   R   (   R   (   R   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR   ™   s    R   i   i   i   i   i   i   i   i   i	   i    (   t   TEST_MATMULt   noset   SkipTestR   R   R	   R   R   R   R   t   operatorR
   R   R)   (   R   t   DR   R   t   b(    (   R   sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   test_matmul‘   s    
(   t   __name__t
   __module__R   R1   R8   (    (    (    sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   __init__¾   s    c         ` s   ˆ  | |  j  ƒ S(   N(   R'   (   R   R   (   R=   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   _matvecÂ   s    (   R9   R:   R@   RA   (    (   R=   (    sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   _rmatvecÆ   s    (   R9   R:   RC   (    (   R>   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRB   Å   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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   _adjointÊ   s    	(   R9   R:   RE   (    (   R=   R>   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRD   É   s   (	   t   casest   appendR   R    R   t   sparset
   csr_matrixR	   R   (   R'   R?   RB   RD   (   R   (   R=   R>   sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt
   make_casesª   s    777		
t   int32t   float32t   float64(   RF   (   R   RJ   (    (   R   sG   /tmp/pip-build-7oUkmx/scipy/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'   (   RF   R	   t   aslinearoperatorR   R   R   R   R   R   R!   R   t   hasattrR'   (   R   t   MR   t   N(    (    sG   /tmp/pip-build-7oUkmx/scipy/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   (   RF   R	   RN   R   R   R   R   R   (   R   RP   R   RQ   (    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   test_dotô   s    .=0(   R9   R:   R   RR   RS   (    (    (    sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR     s    s   unspecified dtype(   i   i   (   R	   R   t   reprR   (   R   t   repr_A(    (    sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   always_four_ones  s    "R   i   R   R'   RA   (   i   i   (	   R	   RN   R   RX   R   R   R!   R   RO   (   R   R^   R   t   op(    (    sG   /tmp/pip-build-7oUkmx/scipy/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   /tmp/pip-build-7oUkmx/scipy/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(   Rc   Rb   R   t   sR   t   k(    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   test_pickle#  s    c          ` sø   d t  j f d „  ƒ  Y}  t t |  ƒ d 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(    (   R9   R:   (    (    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRm   /  s   t   Identityc           ` s    e  Z ‡  f d  †  Z d „  Z RS(   c         ` s)   t  ˆ  |  ƒ j d d  d | | f ƒ d  S(   NR'   R   (   t   superR@   t   None(   R   t   n(   Rn   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR@   5  s    c         S` s   | S(   N(    (   R   R   (    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRA   8  s    (   R9   R:   R@   RA   (    (   Rn   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRn   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(   Ro   R@   R'   R   R   (   R   R   (   Rr   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyR@   @  s    c         S` s   |  j  j | ƒ S(   N(   R   R   (   R   R   (    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   _matmatD  s    (   R9   R:   R@   Rs   (    (   Rr   (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyRr   ?  s   (   i   (   R	   R   R   t	   TypeErrorR   R   t   NotImplementedErrorR   R   t   randomt   randnR   (   Rm   t   id3t   mm(    (   Rn   Rr   sG   /tmp/pip-build-7oUkmx/scipy/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   Rv   t   randR	   RN   R   R'   RM   t
   complex128(   t   mat_complext   mat_realt   complex_operatort   real_operatort   sum_complext   sum_real(    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   test_dtypes_of_operator_sumJ  s    ,

(!   t   __doc__t
   __future__R    R   R   t	   functoolsR   t	   itertoolsR   R5   R3   t   numpy.testingR   R   R   R   t   numpyR   t   scipy.sparseRH   t   scipy.sparse.linalgR	   RO   R2   R   R;   RV   R[   R`   R   Rl   Rz   Rƒ   (    (    (    sG   /tmp/pip-build-7oUkmx/scipy/scipy/sparse/linalg/tests/test_interface.pyt   <module>   s&   "Ž\						