ó
~9­\c           @  sÀ   d  d l  m Z m Z d  d l m Z m Z d  d l m Z m Z m	 Z	 m
 Z
 m Z d  d l m Z m Z d „  Z d e f d „  ƒ  YZ d „  Z e e f Z e
 e	 d	 „  e e Œ  ƒ ƒ Z d
 S(   iÿÿÿÿ(   t   print_functiont   division(   t   Mult   sympify(   t   unpackt   flattent	   conditiont   exhaustt   do_one(   t
   MatrixExprt
   ShapeErrorc          G  sM   |  s t  d ƒ ‚ n  t |  Œ  t |  ƒ d k r9 |  d St |  Œ  j ƒ  Sd S(   sm  
    Return the elementwise (aka Hadamard) product of matrices.

    Examples
    ========

    >>> from sympy.matrices import hadamard_product, MatrixSymbol
    >>> A = MatrixSymbol('A', 2, 3)
    >>> B = MatrixSymbol('B', 2, 3)
    >>> hadamard_product(A)
    A
    >>> hadamard_product(A, B)
    A.*B
    >>> hadamard_product(A, B)[0, 1]
    A[0, 1]*B[0, 1]
    s#   Empty Hadamard product is undefinedi   i    N(   t	   TypeErrort   validatet   lent   HadamardProductt   doit(   t   matrices(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyt   hadamard_product   s    
R   c           B  sG   e  Z d  Z e Z d „  Z e d „  ƒ Z d „  Z d „  Z	 d „  Z
 RS(   s¼  
    Elementwise product of matrix expressions

    This is a symbolic object that simply stores its argument without
    evaluating it. To actually compute the product, use the function
    ``hadamard_product()``.

    >>> from sympy.matrices import hadamard_product, HadamardProduct, MatrixSymbol
    >>> A = MatrixSymbol('A', 5, 5)
    >>> B = MatrixSymbol('B', 5, 5)
    >>> isinstance(hadamard_product(A, B), HadamardProduct)
    True
    c         O  sS   t  t t | ƒ ƒ } | j d t ƒ } | r: t | Œ  n  t t |  ƒ j |  | Œ S(   Nt   check(	   t   listt   mapR   t   gett   TrueR   t   superR   t   __new__(   t   clst   argst   kwargsR   (    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   2   s
    c         C  s   |  j  d j S(   Ni    (   R   t   shape(   t   self(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   9   s    c         C  s,   t  g  |  j D] } | j | | ƒ ^ q Œ  S(   N(   R   R   t   _entry(   R   t   it   jt   arg(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   =   s    c         C  s,   d d l  m } t t t | |  j ƒ ƒ Œ  S(   Niÿÿÿÿ(   t	   transpose(   t$   sympy.matrices.expressions.transposeR"   R   R   R   R   (   R   R"   (    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyt   _eval_transpose@   s    c         K  s
   t  |  ƒ S(   N(   t   canonicalize(   R   t   ignored(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   D   s    (   t   __name__t
   __module__t   __doc__R   t   is_HadamardProductR   t   propertyR   R   R$   R   (    (    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   "   s   			c          G  ss   t  d „  |  Dƒ ƒ s% t d ƒ ‚ n  |  d } x= |  d D]1 } | j | j k r: t d | | f ƒ ‚ q: q: Wd  S(   Nc         s  s   |  ] } | j  Vq d  S(   N(   t	   is_Matrix(   t   .0R!   (    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pys	   <genexpr>H   s    s    Mix of Matrix and Scalar symbolsi    i   s"   Matrices %s and %s are not aligned(   t   allR   R   R
   (   R   t   At   B(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyR   G   s    
c         C  s   t  |  t ƒ S(   N(   t
   isinstanceR   (   t   x(    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyt   <lambda>R   t    N(   t
   __future__R    R   t
   sympy.coreR   R   t   sympy.strategiesR   R   R   R   R   t"   sympy.matrices.expressions.matexprR	   R
   R   R   R   t   rulesR%   (    (    (    sB   lib/python2.7/site-packages/sympy/matrices/expressions/hadamard.pyt   <module>   s   (	%		