
    \hn/                        S SK Jr  S SKJr   " S S\5      r " S S\5      r " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      r	 " S S\5      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S \5      r " S! S"\5      r " S# S$\5      rg%)&    )	Predicate)
Dispatcherc                   *    \ rS rSrSrSr\" SSS9rSrg)	SquarePredicate   a  
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.doc N	__name__
__module____qualname____firstlineno____doc__namer   handler__static_attributes__r       ]/var/www/auris/envauris/lib/python3.13/site-packages/sympy/assumptions/predicates/matrices.pyr   r      s    < D.EFGr   r   c                   *    \ rS rSrSrSr\" SSS9rSrg)	SymmetricPredicate'   aQ  
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
   r   Nr   r   r   r   r   r   '   s    @ D+1KLGr   r   c                   *    \ rS rSrSrSr\" SSS9rSrg)	InvertiblePredicateL   aY  
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
   r   Nr   r   r   r   r   r   L   s    : D,2MNGr   r   c                   *    \ rS rSrSrSr\" SSS9rSrg)	OrthogonalPredicaten   a  
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
   r   Nr   r   r   r   r#   r#   n   s    !D D,2QRGr   r#   c                   *    \ rS rSrSrSr\" SSS9rSrg)	UnitaryPredicate   a  
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
   r   Nr   r   r   r   r(   r(      s    > D)/KLGr   r(   c                   *    \ rS rSrSrSr\" SSS9rSrg)	FullRankPredicate   a  
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
   r   Nr   r   r   r   r-   r-      s    0 D*0MNGr   r-   c                   *    \ rS rSrSrSr\" SSS9rSrg)	PositiveDefinitePredicate   a  
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
   r   Nr   r   r   r   r2   r2      s    > D28^_Gr   r2   c                   *    \ rS rSrSrSr\" SSS9rSrg)	UpperTriangularPredicate   a  
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
   r   Nr   r   r   r   r7   r7          0 D17\]Gr   r7   c                   *    \ rS rSrSrSr\" SSS9rSrg)	LowerTriangularPredicatei  a  
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
   r   Nr   r   r   r   r=   r=     r;   r   r=   c                   *    \ rS rSrSrSr\" SSS9rSrg)	DiagonalPredicatei4  a  
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
   r   Nr   r   r   r   rA   rA   4  s    6 D*0MNGr   rA   c                   *    \ rS rSrSrSr\" SSS9rSrg)	IntegerElementsPredicateiT  a$  
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
   r   Nr   r   r   r   rE   rE   T  s    $ D17\]Gr   rE   c                   *    \ rS rSrSrSr\" SSS9rSrg)	RealElementsPredicateik  a  
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
   r   Nr   r   r   r   rI   rI   k  s    $ D.4VWGr   rI   c                   *    \ rS rSrSrSr\" SSS9rSrg)	ComplexElementsPredicatei  af  
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
   r   Nr   r   r   r   rM   rM     s    ( D17\]Gr   rM   c                   *    \ rS rSrSrSr\" SSS9rSrg)	SingularPredicatei  af  
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
   r   Nr   r   r   r   rQ   rQ     s    * D*0PQGr   rQ   c                   *    \ rS rSrSrSr\" SSS9rSrg)	NormalPredicatei  a.  
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
   r   Nr   r   r   r   rU   rU     s    & D.LMGr   rU   c                   *    \ rS rSrSrSr\" SSS9rSrg)	TriangularPredicatei  a  
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
   r   Nr   r   r   r   rY   rY     s    2 D,2TUGr   rY   c                   *    \ rS rSrSrSr\" SSS9rSrg)	UnitTriangularPredicatei  a  
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
   r   Nr   r   r   r   r]   r]     s    $ D06]^Gr   r]   N)sympy.assumptionsr   sympy.multipledispatchr   r   r   r   r#   r(   r-   r2   r7   r=   rA   rE   rI   rM   rQ   rU   rY   r]   r   r   r   <module>rb      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   