
    g                         d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ de
d	efd
Zdee
ef         d	efdZde
d	efdZde
d	dfdZde
d	dfdZdS )    Eq)Expr)Integer)BooleanAnd)
MatrixExpr)
ShapeError)Unionargsreturnc            
          t          d | D              \  }}t          g d t          |dd         |dd                   D             d t          |dd         |dd                   D             R  S )a  Return the symbolic condition how ``MatAdd``, ``HadamardProduct``
    makes sense.

    Parameters
    ==========

    args
        The list of arguments of matrices to be tested for.

    Examples
    ========

    >>> from sympy import MatrixSymbol, symbols
    >>> from sympy.matrices.expressions._shape import is_matadd_valid

    >>> m, n, p, q = symbols('m n p q')
    >>> A = MatrixSymbol('A', m, n)
    >>> B = MatrixSymbol('B', p, q)
    >>> is_matadd_valid(A, B)
    Eq(m, p) & Eq(n, q)
    c              3   $   K   | ]}|j         V  d S Nshape.0args     ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/sympy/matrices/expressions/_shape.py	<genexpr>z"is_matadd_valid.<locals>.<genexpr>    s$      11Ssy111111    c              3   <   K   | ]\  }}t          ||          V  d S r   r   r   ijs      r   r   z"is_matadd_valid.<locals>.<genexpr>"   .      	8	8tq!"Q((	8	8	8	8	8	8r   N   c              3   <   K   | ]\  }}t          ||          V  d S r   r   r   s      r   r   z"is_matadd_valid.<locals>.<genexpr>#   r   r   zipr   r   rowscolss      r   is_matadd_validr&   
   s    , 11D1112JD$ 	8	8s49d122h77	8	8	8	8	8s49d122h77	8	8	8   r   c            	          t          d | D              \  }}t          d t          |dd         |dd                   D              S )a  Return the symbolic condition how ``MatMul`` makes sense

    Parameters
    ==========

    args
        The list of arguments of matrices and scalar expressions to be tested
        for.

    Examples
    ========

    >>> from sympy import MatrixSymbol, symbols
    >>> from sympy.matrices.expressions._shape import is_matmul_valid

    >>> m, n, p, q = symbols('m n p q')
    >>> A = MatrixSymbol('A', m, n)
    >>> B = MatrixSymbol('B', p, q)
    >>> is_matmul_valid(A, B)
    Eq(n, p)
    c              3   N   K   | ] }t          |t                    |j        V  !d S r   )
isinstancer	   r   r   s     r   r   z"is_matmul_valid.<locals>.<genexpr>=   s3      PPSJsJ4O4OPsyPPPPPPr   c              3   <   K   | ]\  }}t          ||          V  d S r   r   r   s      r   r   z"is_matmul_valid.<locals>.<genexpr>>   s.      ??daAq??????r   Nr   r   r!   r#   s      r   is_matmul_validr+   '   sU    , PPDPPPQJD$??c$ss)T!""X&>&>???@@r   r   c                6    t          | j        | j                  S )a  Return the symbolic condition how the matrix is assumed to be square

    Parameters
    ==========

    arg
        The matrix to be tested for.

    Examples
    ========

    >>> from sympy import MatrixSymbol, symbols
    >>> from sympy.matrices.expressions._shape import is_square

    >>> m, n = symbols('m n')
    >>> A = MatrixSymbol('A', m, n)
    >>> is_square(A)
    Eq(m, n)
    )r   r$   r%   )r   s    r   	is_squarer-   A   s    ( ch!!!r   Nc                  6   t          d | D              \  }}t          t          t          d |                              dk    rt	          d|           t          t          t          d |                              dk    rt	          d|           dS )z:Validate matrix shape for addition only for integer valuesc              3   $   K   | ]}|j         V  d S r   r   )r   xs     r   r   z*validate_matadd_integer.<locals>.<genexpr>Z   s$      --1qw------r   c                 :    t          | t          t          f          S r   r)   intr   r0   s    r   <lambda>z)validate_matadd_integer.<locals>.<lambda>[       
1sGn = = r   r   z!Matrices have mismatching shape: c                 :    t          | t          t          f          S r   r2   r4   s    r   r5   z)validate_matadd_integer.<locals>.<lambda>]   r6   r   N)r"   lensetfilterr
   r#   s      r   validate_matadd_integerr;   X   s    -----.JD$
3v==tDDEEFFJJCTCCDDD
3v==tDDEEFFJJCTCCDDD KJr   c                     t          | dd         | dd                   D ]b\  }}|j        |j        }}t          |t          t
          f          r3t          |t          t
          f          r||k    rt          d||          cdS )z@Validate matrix shape for multiplication only for integer valuesNr   r   zMatrices are not aligned)r"   r%   r$   r)   r3   r   r
   )r   ABr   r   s        r   validate_matmul_integerr?   a   s    D"ItABBx(( ? ?1vqv1a#w(( 	?ZC>-J-J 	?qTUvv7A>>>? ?r   )sympy.core.relationalr   sympy.core.exprr   sympy.core.numbersr   sympy.logic.boolalgr   r   "sympy.matrices.expressions.matexprr	   sympy.matrices.exceptionsr
   typingr   r&   r+   r-   r;   r?    r   r   <module>rH      sS   $ $ $ $ $ $             & & & & & & , , , , , , , , 9 9 9 9 9 9 0 0 0 0 0 0      : '    :A5T!12 Aw A A A A4": "W " " " ".E: E$ E E E E?: ?$ ? ? ? ? ? ?r   