ó
¡¼™\c           @  s|   d  d l  m Z m Z d d l m Z d  d l m Z m Z d  d l m	 Z	 d  d l
 m Z m Z d e f d „  ƒ  YZ d	 S(
   iÿÿÿÿ(   t   print_functiont   divisioni   (   t
   MatrixExpr(   t   Basict   sympify(   t   Matrix(   t   ret   imt   FunctionMatrixc           B  sP   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z	 RS(   s"  
    Represents a Matrix using a function (Lambda)

    This class is an alternative to SparseMatrix

    >>> from sympy import FunctionMatrix, symbols, Lambda, MatPow, Matrix
    >>> i, j = symbols('i,j')
    >>> X = FunctionMatrix(3, 3, Lambda((i, j), i + j))
    >>> Matrix(X)
    Matrix([
    [0, 1, 2],
    [1, 2, 3],
    [2, 3, 4]])

    >>> Y = FunctionMatrix(1000, 1000, Lambda((i, j), i + j))

    >>> isinstance(Y*Y, MatPow) # this is an expression object
    True

    >>> (Y**2)[10,10] # So this is evaluated lazily
    342923500
    c         C  s/   t  | ƒ t  | ƒ } } t j |  | | | ƒ S(   N(   R   R   t   __new__(   t   clst   rowst   colst   lamda(    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyR	      s    c         C  s   |  j  d d !S(   Ni    i   (   t   args(   t   self(    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyt   shape#   s    c         C  s   |  j  d S(   Ni   (   R   (   R   (    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyR   '   s    c         C  s   |  j  | | ƒ S(   N(   R   (   R   t   it   j(    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyt   _entry+   s    c         C  s9   d d l  m } d d l m } | |  ƒ j | ƒ j ƒ  S(   Niÿÿÿÿ(   t   Trace(   t   Sum(   t    sympy.matrices.expressions.traceR   t   sympyR   t   rewritet   doit(   R   R   R   (    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyt   _eval_trace.   s    c         C  s"   t  t |  ƒ ƒ t t |  ƒ ƒ f S(   N(   R   R   R   (   R   (    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyt   as_real_imag3   s    (
   t   __name__t
   __module__t   __doc__R	   t   propertyR   R   R   R   R   (    (    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyR      s   			N(   t
   __future__R    R   t   matexprR   R   R   R   t   sympy.matricesR   t$   sympy.functions.elementary.complexesR   R   R   (    (    (    sD   lib/python2.7/site-packages/sympy/matrices/expressions/funcmatrix.pyt   <module>   s
   