
    g                         d dl mZmZmZ d dlmZ  G d de          Zej                            ee          d             Z	ej                            ee          d             Z
dS )    )Kind_NumberKind
NumberKind)Mulc                   ,     e Zd ZdZef fd	Zd Z xZS )
MatrixKinda  
    Kind for all matrices in SymPy.

    Basic class for this kind is ``MatrixBase`` and ``MatrixExpr``,
    but any expression representing the matrix can have this.

    Parameters
    ==========

    element_kind : Kind
        Kind of the element. Default is
        :class:`sympy.core.kind.NumberKind`,
        which means that the matrix contains only numbers.

    Examples
    ========

    Any instance of matrix class has kind ``MatrixKind``:

    >>> from sympy import MatrixSymbol
    >>> A = MatrixSymbol('A', 2, 2)
    >>> A.kind
    MatrixKind(NumberKind)

    An expression representing a matrix may not be an instance of
    the Matrix class, but it will have kind ``MatrixKind``:

    >>> from sympy import MatrixExpr, Integral
    >>> from sympy.abc import x
    >>> intM = Integral(A, x)
    >>> isinstance(intM, MatrixExpr)
    False
    >>> intM.kind
    MatrixKind(NumberKind)

    Use ``isinstance()`` to check for ``MatrixKind`` without specifying the
    element kind. Use ``is`` to check the kind including the element kind:

    >>> from sympy import Matrix
    >>> from sympy.core import NumberKind
    >>> from sympy.matrices import MatrixKind
    >>> M = Matrix([1, 2])
    >>> isinstance(M.kind, MatrixKind)
    True
    >>> M.kind is MatrixKind(NumberKind)
    True

    See Also
    ========

    sympy.core.kind.NumberKind
    sympy.core.kind.UndefinedKind
    sympy.core.containers.TupleKind
    sympy.sets.sets.SetKind

    c                 Z    t                                          | |          }||_        |S )N)super__new__element_kind)clsr   obj	__class__s      O/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/matrices/kind.pyr   zMatrixKind.__new__@   s'    ggooc<00'
    c                     d| j         z  S )NzMatrixKind(%s))r   )selfs    r   __repr__zMatrixKind.__repr__E   s    $"333r   )__name__
__module____qualname____doc__r   r   r   __classcell__)r   s   @r   r   r      s\        7 7p #-      
4 4 4 4 4 4 4r   r   c                     t          |t                    s|| }} t          j        | |j                  }t          |          S )z
    Return MatrixKind. The element kind is selected by recursive dispatching.
    Do not need to dispatch in reversed order because KindDispatcher
    searches for this automatically.
    )
isinstancer   r   _kind_dispatcherr   k1k2elemks      r   num_mat_mulr!   I   sA     b*%% RB R_55Eer   c                 ^    t          j        | j        |j                  }t          |          S )zS
    Return MatrixKind. The element kind is selected by recursive dispatching.
    )r   r   r   r   r   s      r   mat_mat_mulr#   [   s(    
  "/BBEer   N)sympy.core.kindr   r   r   sympy.core.mulr   r   r   registerr!   r#    r   r   <module>r(      s    : 9 9 9 9 9 9 9 9 9      ?4 ?4 ?4 ?4 ?4 ?4 ?4 ?4D {J77  87" z:66  76  r   