
    sg                         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	 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)NonSquareMatrixError)
MatrixBasec                   @    e Zd ZdZdZd Zed        Zed        Z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     Y/var/www/html/venv/lib/python3.12/site-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                     | j                   }|j                  dd      r |j                  di |}|j                         }||S | S )NdeepT )r   getdoit_eval_determinant)r   hintsr   results       r   r&   zDeterminant.doit,   sJ    hh99VT"#((#U#C&&(Mr   N)
__name__
__module____qualname____doc__is_commutativer   propertyr   r    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   detr3   8   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__X   s8    cl}}BSXMNN}}S#&&r   c                      | j                   d   S r   r   r   s    r   r   zPermanent.arg_   r   r   c                 n    t        | j                  t              r| j                  j                         S | S r   )
isinstancer   r   per)r   expandr(   s      r   r&   zPermanent.doitc   s%    dhh
+88<<>!Kr   N)F)r*   r+   r,   r-   r   r/   r   r&   r$   r   r   r5   r5   H   s%    '  r   r5   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
    )r5   r&   r1   s    r   r:   r:   i   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      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.exceptionsr   sympy.matrices.matrixbaser   r
   r3   r5   r:   sympy.assumptions.askr=   r>   sympy.assumptions.refiner?   rH   r$   r   r   <module>rQ      sT    "   " & : 0,$ ,^'  B%& ) 2(  2m r   