U
    L?hw                     @   s<   d dl mZmZ d dlmZ d dlmZ G dd deZdS )    )BasicExpr)_sympify)	transposec                   @   s"   e Zd ZdZdd ZdddZdS )	
DotProductaC  
    Dot product of vector matrices

    The input should be two 1 x n or n x 1 matrices. The output represents the
    scalar dotproduct.

    This is similar to using MatrixElement and MatMul, except DotProduct does
    not require that one vector to be a row vector and the other vector to be
    a column vector.

    >>> from sympy import MatrixSymbol, DotProduct
    >>> A = MatrixSymbol('A', 1, 3)
    >>> B = MatrixSymbol('B', 1, 3)
    >>> DotProduct(A, B)
    DotProduct(A, B)
    >>> DotProduct(A, B).doit()
    A[0, 0]*B[0, 0] + A[0, 1]*B[0, 1] + A[0, 2]*B[0, 2]
    c                 C   sz   t ||f\}}|jstd|js,tdd|jkr>tdd|jkrPtdt|jt|jkrltdt| ||S )Nz(Argument 1 of DotProduct is not a matrixz(Argument 2 of DotProduct is not a matrix   z(Argument 1 of DotProduct is not a vectorz(Argument 2 of DotProduct is not a vectorz,DotProduct arguments are not the same length)r   Z	is_Matrix	TypeErrorshapesetr   __new__)clsZarg1Zarg2 r   W/var/www/html/venv/lib/python3.8/site-packages/sympy/matrices/expressions/dotproduct.pyr      s    

zDotProduct.__new__Fc                 K   s   | j d j| j d jkr`| j d jd dkrF| j d t| j d  }qt| j d | j d  }nF| j d jd dkr| j d | j d  }nt| j d t| j d  }|d S )Nr   r   )argsr	   r   )selfexpandhintsmulr   r   r   doit+   s    zDotProduct.doitN)F)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s   r   N)Z
sympy.corer   r   Zsympy.core.sympifyr   Z$sympy.matrices.expressions.transposer   r   r   r   r   r   <module>   s   