
    MZde                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	  G d de      Z
d Z G d	 d
e      Zd Zd dlmZmZ d dlmZ d Zeed<   y)    )Basic)Expr)S)sympify)NonSquareMatrixErrorc                   B    e Zd ZdZdZd Zed        Zed        ZddZ	y)	Determinanta  Matrix Determinant

    Represents the determinant of a matrix expression.

    Examples
    ========

    >>> from sympy import MatrixSymbol, Determinant, eye
    >>> A = MatrixSymbol('A', 3, 3)
    >>> Determinant(A)
    Determinant(A)
    >>> Determinant(eye(3)).doit()
    1
    Tc                     t        |      }|j                  st        dt        |      z        |j                  du rt        d      t        j                  | |      S )Nz&Input to Determinant, %s, not a matrixFzDet of a non-square matrix)r   	is_Matrix	TypeErrorstr	is_squarer   r   __new__clsmats     H/usr/lib/python3/dist-packages/sympy/matrices/expressions/determinant.pyr   zDeterminant.__new__   sP    cl}}Ds3xOPP==E!&'CDD}}S#&&    c                      | j                   d   S Nr   argsselfs    r   argzDeterminant.arg#       yy|r   c                 B    | j                   j                  j                  S N)r   kindelement_kindr   s    r   r   zDeterminant.kind'   s    xx}})))r   c                 f    	 | j                   j                         S # t        t        f$ r | cY S w xY wr   )r   _eval_determinantAttributeErrorNotImplementedErrorr   expandhintss      r   doitzDeterminant.doit+   s4    	88--// 34 	K	    00NF)
__name__
__module____qualname____doc__is_commutativer   propertyr   r   r(    r   r   r	   r	      s@     N'   * *r   r	   c                 4    t        |       j                         S )z Matrix Determinant

    Examples
    ========

    >>> from sympy import MatrixSymbol, det, eye
    >>> A = MatrixSymbol('A', 3, 3)
    >>> det(A)
    Determinant(A)
    >>> det(eye(3))
    1
    )r	   r(   matexprs    r   detr5   1   s     w$$&&r   c                   .    e Zd ZdZd Zed        ZddZy)	Permanenta  Matrix Permanent

    Represents the permanent of a matrix expression.

    Examples
    ========

    >>> from sympy import MatrixSymbol, Permanent, ones
    >>> A = MatrixSymbol('A', 3, 3)
    >>> Permanent(A)
    Permanent(A)
    >>> Permanent(ones(3, 3)).doit()
    6
    c                     t        |      }|j                  st        dt        |      z        t	        j
                  | |      S )Nz$Input to Permanent, %s, not a matrix)r   r   r   r   r   r   r   s     r   r   zPermanent.__new__Q   s8    cl}}BSXMNN}}S#&&r   c                      | j                   d   S r   r   r   s    r   r   zPermanent.argX   r   r   c                 f    	 | j                   j                         S # t        t        f$ r | cY S w xY wr   )r   perr#   r$   r%   s      r   r(   zPermanent.doit\   s1    	88<<>! 34 	K	r)   Nr*   )r+   r,   r-   r.   r   r0   r   r(   r1   r   r   r7   r7   A   s%    '  r   r7   c                 4    t        |       j                         S )a   Matrix Permanent

    Examples
    ========

    >>> from sympy import MatrixSymbol, Matrix, per, ones
    >>> A = MatrixSymbol('A', 3, 3)
    >>> per(A)
    Permanent(A)
    >>> per(ones(5, 5))
    120
    >>> M = Matrix([1, 2, 5])
    >>> per(M)
    8
    )r7   r(   r3   s    r   r;   r;   b   s    " W""$$r   )askQ)handlers_dictc                 \   t        t        j                  | j                        |      rt        j
                  S t        t        j                  | j                        |      rt        j                  S t        t        j                  | j                        |      rt        j
                  S | S )z
    >>> from sympy import MatrixSymbol, Q, assuming, refine, det
    >>> X = MatrixSymbol('X', 2, 2)
    >>> det(X)
    Determinant(X)
    >>> with assuming(Q.orthogonal(X)):
    ...     print(refine(det(X)))
    1
    )	r=   r>   
orthogonalr   r   OnesingularZerounit_triangular)exprassumptionss     r   refine_DeterminantrH   y   sk     1<<!;/uu	QZZ!;	/vv	Qtxx(+	6uuKr   N)sympy.core.basicr   sympy.core.exprr   sympy.core.singletonr   sympy.core.sympifyr   sympy.matrices.commonr   r	   r5   r7   r;   sympy.assumptions.askr=   r>   sympy.assumptions.refiner?   rH   r1   r   r   <module>rP      sQ    "   " & 6'$ 'R'  B%& ) 2(  2m r   