
    \h                         S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJr  S\
S	\4S
 jrS\\
\4   S	\4S jrS\
S	\4S jrS\
S	S4S jrS\
S	S4S jrg)    Eq)Expr)Integer)BooleanAnd)
MatrixExpr)
ShapeError)Unionargsreturnc            
          [        S U  5       6 u  p[        / S [        USS USS 5       5       QS [        USS USS 5       5       Q76 $ )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   8   #    U  H  oR                   v   M     g 7fNshape.0args     Y/var/www/auris/envauris/lib/python3.13/site-packages/sympy/matrices/expressions/_shape.py	<genexpr>"is_matadd_valid.<locals>.<genexpr>    s     1DSyyD   c              3   <   #    U  H  u  p[        X5      v   M     g 7fr   r   r   ijs      r   r   r   "        	87tq"Q((7   N   c              3   <   #    U  H  u  p[        X5      v   M     g 7fr   r   r   s      r   r   r   #   r   r   zipr   r   rowscolss      r   is_matadd_validr(   
   sc    , 1D12JD 	8s49d12h7	8	8s49d12h7	8     c            	      b    [        S U  5       6 u  p[        S [        USS USS 5       5       6 $ )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   h   #    U  H(  n[        U[        5      (       d  M  UR                  v   M*     g 7fr   )
isinstancer	   r   r   s     r   r   "is_matmul_valid.<locals>.<genexpr>=   s     PDSJsJ4OysyyDs   22c              3   <   #    U  H  u  p[        X5      v   M     g 7fr   r   r   s      r   r   r-   >   s     ?&>daA&>r   Nr    r!   r#   r%   s      r   is_matmul_validr/   '   s:    , PDPQJD?c$s)T!"X&>?@@r)   r   c                B    [        U R                  U R                  5      $ )aS  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_squarer1   A   s    ( chh!!r)   Nc                      [        S U  5       6 u  p[        [        [        S U5      5      5      S:  a  [	        SU 35      e[        [        [        S U5      5      5      S:  a  [	        SU 35      eg)z:Validate matrix shape for addition only for integer valuesc              3   8   #    U  H  oR                   v   M     g 7fr   r   )r   xs     r   r   *validate_matadd_integer.<locals>.<genexpr>Z   s     -1wwr   c                 .    [        U [        [        45      $ r   r,   intr   r4   s    r   <lambda>)validate_matadd_integer.<locals>.<lambda>[       
1sGn =r)   r!   z!Matrices have mismatching shape: c                 .    [        U [        [        45      $ r   r7   r9   s    r   r:   r;   ]   r<   r)   N)r$   lensetfilterr
   r%   s      r   validate_matadd_integerrA   X   st    --.JD
3v=tDEFJ<TFCDD
3v=tDEFJ<TFCDD Kr)   c                      [        U SS U SS 5       Hg  u  pUR                  UR                  pC[        U[        [
        45      (       d  M9  [        U[        [
        45      (       d  MV  X4:w  d  M]  [        SX45      e   g)z@Validate matrix shape for multiplication only for integer valuesNr    r!   zMatrices are not aligned)r$   r'   r&   r,   r8   r   r
   )r   ABr   r   s        r   validate_matmul_integerrE   a   sc    D"ItABx(vvqvv1a#w((ZC>-J-Jqv7>> )r)   )sympy.core.relationalr   sympy.core.exprr   sympy.core.numbersr   sympy.logic.boolalgr   r   "sympy.matrices.expressions.matexprr	   sympy.matrices.exceptionsr
   typingr   r(   r/   r1   rA   rE    r)   r   <module>rN      s    $   & , 9 0 : ' :A5T!12 Aw A4": "W ".E: E$ E?: ?$ ?r)   