Ë
    täin/  ã                   ó’  — d dl mZ d dlmZ  G d„ de«      Z G d„ de«      Z G d„ de«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Z	 G d„ de«      Z
 G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Z G d!„ d"e«      Z G d#„ d$e«      Zy%)&é    )Ú	Predicate)Ú
Dispatcherc                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚSquarePredicateak  
    Square matrix predicate.

    Explanation
    ===========

    ``Q.square(x)`` is true iff ``x`` is a square matrix. A square matrix
    is a matrix with the same number of rows and columns.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix, Identity
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('X', 2, 3)
    >>> ask(Q.square(X))
    True
    >>> ask(Q.square(Y))
    False
    >>> ask(Q.square(ZeroMatrix(3, 3)))
    True
    >>> ask(Q.square(Identity(3)))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Square_matrix

    ÚsquareÚSquareHandlerzHandler for Q.square.©ÚdocN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Únamer   Úhandler© ó    út/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/sympy/assumptions/predicates/matrices.pyr   r      s   „ ñð< €DÙ˜Ð.EÔF�Gr   r   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚSymmetricPredicatea¥  
    Symmetric matrix predicate.

    Explanation
    ===========

    ``Q.symmetric(x)`` is true iff ``x`` is a square matrix and is equal to
    its transpose. Every square diagonal matrix is a symmetric matrix.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('Y', 2, 3)
    >>> Z = MatrixSymbol('Z', 2, 2)
    >>> ask(Q.symmetric(X*Z), Q.symmetric(X) & Q.symmetric(Z))
    True
    >>> ask(Q.symmetric(X + Z), Q.symmetric(X) & Q.symmetric(Z))
    True
    >>> ask(Q.symmetric(Y))
    False


    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Symmetric_matrix

    Ú	symmetricÚSymmetricHandlerzHandler for Q.symmetric.r	   Nr   r   r   r   r   r   '   s   „ ñð@ €DÙÐ+Ð1KÔL�Gr   r   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚInvertiblePredicatea­  
    Invertible matrix predicate.

    Explanation
    ===========

    ``Q.invertible(x)`` is true iff ``x`` is an invertible matrix.
    A square matrix is called invertible only if its determinant is 0.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('Y', 2, 3)
    >>> Z = MatrixSymbol('Z', 2, 2)
    >>> ask(Q.invertible(X*Y), Q.invertible(X))
    False
    >>> ask(Q.invertible(X*Z), Q.invertible(X) & Q.invertible(Z))
    True
    >>> ask(Q.invertible(X), Q.fullrank(X) & Q.square(X))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Invertible_matrix

    Ú
invertibleÚInvertibleHandlerzHandler for Q.invertible.r	   Nr   r   r   r   r   r   L   s   „ ñð: €DÙÐ,Ð2MÔN�Gr   r   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚOrthogonalPredicateao  
    Orthogonal matrix predicate.

    Explanation
    ===========

    ``Q.orthogonal(x)`` is true iff ``x`` is an orthogonal matrix.
    A square matrix ``M`` is an orthogonal matrix if it satisfies
    ``M^TM = MM^T = I`` where ``M^T`` is the transpose matrix of
    ``M`` and ``I`` is an identity matrix. Note that an orthogonal
    matrix is necessarily invertible.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, Identity
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('Y', 2, 3)
    >>> Z = MatrixSymbol('Z', 2, 2)
    >>> ask(Q.orthogonal(Y))
    False
    >>> ask(Q.orthogonal(X*Z*X), Q.orthogonal(X) & Q.orthogonal(Z))
    True
    >>> ask(Q.orthogonal(Identity(3)))
    True
    >>> ask(Q.invertible(X), Q.orthogonal(X))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Orthogonal_matrix

    Ú
orthogonalÚOrthogonalHandlerzHandler for key 'orthogonal'.r	   Nr   r   r   r   r   r   n   s   „ ñ!ðD €DÙÐ,Ð2QÔR�Gr   r   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚUnitaryPredicatea  
    Unitary matrix predicate.

    Explanation
    ===========

    ``Q.unitary(x)`` is true iff ``x`` is a unitary matrix.
    Unitary matrix is an analogue to orthogonal matrix. A square
    matrix ``M`` with complex elements is unitary if :math:``M^TM = MM^T= I``
    where :math:``M^T`` is the conjugate transpose matrix of ``M``.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, Identity
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('Y', 2, 3)
    >>> Z = MatrixSymbol('Z', 2, 2)
    >>> ask(Q.unitary(Y))
    False
    >>> ask(Q.unitary(X*Z*X), Q.unitary(X) & Q.unitary(Z))
    True
    >>> ask(Q.unitary(Identity(3)))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Unitary_matrix

    ÚunitaryÚUnitaryHandlerzHandler for key 'unitary'.r	   Nr   r   r   r   r"   r"   •   s   „ ñð> €DÙÐ)Ð/KÔL�Gr   r"   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚFullRankPredicateaA  
    Fullrank matrix predicate.

    Explanation
    ===========

    ``Q.fullrank(x)`` is true iff ``x`` is a full rank matrix.
    A matrix is full rank if all rows and columns of the matrix
    are linearly independent. A square matrix is full rank iff
    its determinant is nonzero.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix, Identity
    >>> X = MatrixSymbol('X', 2, 2)
    >>> ask(Q.fullrank(X.T), Q.fullrank(X))
    True
    >>> ask(Q.fullrank(ZeroMatrix(3, 3)))
    False
    >>> ask(Q.fullrank(Identity(3)))
    True

    ÚfullrankÚFullRankHandlerzHandler for key 'fullrank'.r	   Nr   r   r   r   r&   r&   ¹   s   „ ñð0 €DÙÐ*Ð0MÔN�Gr   r&   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚPositiveDefinitePredicatea  
    Positive definite matrix predicate.

    Explanation
    ===========

    If $M$ is a :math:`n \times n` symmetric real matrix, it is said
    to be positive definite if :math:`Z^TMZ` is positive for
    every non-zero column vector $Z$ of $n$ real numbers.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, Identity
    >>> X = MatrixSymbol('X', 2, 2)
    >>> Y = MatrixSymbol('Y', 2, 3)
    >>> Z = MatrixSymbol('Z', 2, 2)
    >>> ask(Q.positive_definite(Y))
    False
    >>> ask(Q.positive_definite(Identity(3)))
    True
    >>> ask(Q.positive_definite(X + Z), Q.positive_definite(X) &
    ...     Q.positive_definite(Z))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Positive-definite_matrix

    Úpositive_definiteÚPositiveDefiniteHandlerz$Handler for key 'positive_definite'.r	   Nr   r   r   r   r*   r*   Ö   s   „ ñð> €DÙÐ2Ð8^Ô_�Gr   r*   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚUpperTriangularPredicateaÓ  
    Upper triangular matrix predicate.

    Explanation
    ===========

    A matrix $M$ is called upper triangular matrix if :math:`M_{ij}=0`
    for :math:`i<j`.

    Examples
    ========

    >>> from sympy import Q, ask, ZeroMatrix, Identity
    >>> ask(Q.upper_triangular(Identity(3)))
    True
    >>> ask(Q.upper_triangular(ZeroMatrix(3, 3)))
    True

    References
    ==========

    .. [1] https://mathworld.wolfram.com/UpperTriangularMatrix.html

    Úupper_triangularÚUpperTriangularHandlerz#Handler for key 'upper_triangular'.r	   Nr   r   r   r   r.   r.   ú   ó   „ ñð0 €DÙÐ1Ð7\Ô]�Gr   r.   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚLowerTriangularPredicateaÓ  
    Lower triangular matrix predicate.

    Explanation
    ===========

    A matrix $M$ is called lower triangular matrix if :math:`M_{ij}=0`
    for :math:`i>j`.

    Examples
    ========

    >>> from sympy import Q, ask, ZeroMatrix, Identity
    >>> ask(Q.lower_triangular(Identity(3)))
    True
    >>> ask(Q.lower_triangular(ZeroMatrix(3, 3)))
    True

    References
    ==========

    .. [1] https://mathworld.wolfram.com/LowerTriangularMatrix.html

    Úlower_triangularÚLowerTriangularHandlerz#Handler for key 'lower_triangular'.r	   Nr   r   r   r   r3   r3     r1   r   r3   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚDiagonalPredicateaN  
    Diagonal matrix predicate.

    Explanation
    ===========

    ``Q.diagonal(x)`` is true iff ``x`` is a diagonal matrix. A diagonal
    matrix is a matrix in which the entries outside the main diagonal
    are all zero.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol, ZeroMatrix
    >>> X = MatrixSymbol('X', 2, 2)
    >>> ask(Q.diagonal(ZeroMatrix(3, 3)))
    True
    >>> ask(Q.diagonal(X), Q.lower_triangular(X) &
    ...     Q.upper_triangular(X))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Diagonal_matrix

    ÚdiagonalÚDiagonalHandlerzHandler for key 'diagonal'.r	   Nr   r   r   r   r7   r7   4  s   „ ñð6 €DÙÐ*Ð0MÔN�Gr   r7   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚIntegerElementsPredicateaT  
    Integer elements matrix predicate.

    Explanation
    ===========

    ``Q.integer_elements(x)`` is true iff all the elements of ``x``
    are integers.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.integer(X[1, 2]), Q.integer_elements(X))
    True

    Úinteger_elementsÚIntegerElementsHandlerz#Handler for key 'integer_elements'.r	   Nr   r   r   r   r;   r;   T  s   „ ñð$ €DÙÐ1Ð7\Ô]�Gr   r;   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚRealElementsPredicateaL  
    Real elements matrix predicate.

    Explanation
    ===========

    ``Q.real_elements(x)`` is true iff all the elements of ``x``
    are real numbers.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.real(X[1, 2]), Q.real_elements(X))
    True

    Úreal_elementsÚRealElementsHandlerz Handler for key 'real_elements'.r	   Nr   r   r   r   r?   r?   k  s   „ ñð$ €DÙÐ.Ð4VÔW�Gr   r?   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚComplexElementsPredicateaž  
    Complex elements matrix predicate.

    Explanation
    ===========

    ``Q.complex_elements(x)`` is true iff all the elements of ``x``
    are complex numbers.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.complex(X[1, 2]), Q.complex_elements(X))
    True
    >>> ask(Q.complex_elements(X), Q.integer_elements(X))
    True

    Úcomplex_elementsÚComplexElementsHandlerz#Handler for key 'complex_elements'.r	   Nr   r   r   r   rC   rC   ‚  s   „ ñð( €DÙÐ1Ð7\Ô]�Gr   rC   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚSingularPredicateaž  
    Singular matrix predicate.

    A matrix is singular iff the value of its determinant is 0.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.singular(X), Q.invertible(X))
    False
    >>> ask(Q.singular(X), ~Q.invertible(X))
    True

    References
    ==========

    .. [1] https://mathworld.wolfram.com/SingularMatrix.html

    ÚsingularÚSingularHandlerzPredicate fore key 'singular'.r	   Nr   r   r   r   rG   rG   ›  s   „ ñð* €DÙÐ*Ð0PÔQ�Gr   rG   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚNormalPredicatea^  
    Normal matrix predicate.

    A matrix is normal if it commutes with its conjugate transpose.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.normal(X), Q.unitary(X))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Normal_matrix

    ÚnormalÚNormalHandlerzPredicate fore key 'normal'.r	   Nr   r   r   r   rK   rK   µ  s   „ ñð& €DÙ˜Ð.LÔM�Gr   rK   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚTriangularPredicateaö  
    Triangular matrix predicate.

    Explanation
    ===========

    ``Q.triangular(X)`` is true if ``X`` is one that is either lower
    triangular or upper triangular.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.triangular(X), Q.upper_triangular(X))
    True
    >>> ask(Q.triangular(X), Q.lower_triangular(X))
    True

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Triangular_matrix

    Ú
triangularÚTriangularHandlerz Predicate fore key 'triangular'.r	   Nr   r   r   r   rO   rO   Í  s   „ ñð2 €DÙÐ,Ð2TÔU�Gr   rO   c                   ó(   — e Zd ZdZdZ edd¬«      Zy)ÚUnitTriangularPredicateaJ  
    Unit triangular matrix predicate.

    Explanation
    ===========

    A unit triangular matrix is a triangular matrix with 1s
    on the diagonal.

    Examples
    ========

    >>> from sympy import Q, ask, MatrixSymbol
    >>> X = MatrixSymbol('X', 4, 4)
    >>> ask(Q.triangular(X), Q.unit_triangular(X))
    True

    Úunit_triangularÚUnitTriangularHandlerz%Predicate fore key 'unit_triangular'.r	   Nr   r   r   r   rS   rS   ë  s   „ ñð$ €DÙÐ0Ð6]Ô^�Gr   rS   N)Úsympy.assumptionsr   Úsympy.multipledispatchr   r   r   r   r   r"   r&   r*   r.   r3   r7   r;   r?   rC   rG   rK   rO   rS   r   r   r   Ú<module>rX      s   ðÝ 'Ý -ô G�iô  GôF"M˜ô "MôJO˜)ô OôD$S˜)ô $SôN!M�yô !MôHO˜	ô Oô:!` 	ô !`ôH^˜yô ^ô:^˜yô ^ô:O˜	ô Oô@^˜yô ^ô.X˜Iô Xô.^˜yô ^ô2R˜	ô Rô4N�iô Nô0V˜)ô Vô<_˜iõ _r   