+
    i                         ^ RI Ht ^ RIHt ^ RIHt ^ RIHtHt ^ RI	H
t
 ^ RIHt ^ RIHt R R	 ltR
 R ltR R ltR R ltR R ltR# )    Eq)Expr)Integer)BooleanAnd
MatrixExpr)
ShapeError)Unionc                0    V ^8  d   QhR\         R\        /#    argsreturnr
   r   )formats   "_/var/www/html/photoedit/myenv/lib/python3.14/site-packages/sympy/matrices/expressions/_shape.py__annotate__r   
   s      : '     c            	         \        R V  4       !  w  r\        . R \        VRR VR,          4       4       OR \        VRR VR,          4       4       O5!  # )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   "   T F  qP                   x  K  	  R # 5iNshape.0args   & r   	<genexpr>"is_matadd_valid.<locals>.<genexpr>    s     1DSyyD   c              3   <   "   T F  w  r\        W4      x  K  	  R # 5ir   r   r   ijs   &  r   r   r    "        	87tq"Q((7   N   NNc              3   <   "   T F  w  r\        W4      x  K  	  R # 5ir   r   r#   s   &  r   r   r    #   r&   r'   zipr   r   rowscolss   *  r   is_matadd_validr1   
   s_    , 1D12JD 	8s49d2h7	8	8s49d2h7	8 r   c                R    V ^8  d   QhR\         \        \        3,          R\        /# r   )r   r
   r   r   )r   s   "r   r   r   '   s(     A A5T!12 Aw Ar   c                 n    \        R V  4       !  w  r\        R \        VRR VR,          4       4       !  # )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   j   "   T F)  p\        V\        4      '       g   K  VP                  x  K+  	  R # 5ir   )
isinstancer
   r   r   s   & r   r   "is_matmul_valid.<locals>.<genexpr>=   s     PDSJsJ4OysyyDs   33c              3   <   "   T F  w  r\        W4      x  K  	  R # 5ir   r   r#   s   &  r   r   r6   >   s     ?&>daA&>r'   Nr(   r+   r,   r.   s   *  r   is_matmul_validr8   '   s8    , PDPQJD?c$s)T"X&>?@@r   c                0    V ^8  d   QhR\         R\        /# )r   r   r   r   )r   s   "r   r   r   A   s     " ": "W "r   c               B    \        V P                  V P                  4      # )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/   r0   )r   s   "r   	is_squarer;   A   s    ( chh!!r   c                (    V ^8  d   QhR\         RR/# r   r   r   Nr	   )r   s   "r   r   r   X   s     E E: E$ Er   c                     \        R V  4       !  w  r\        \        \        R V4      4      4      ^8  d   \	        RV 24      h\        \        \        R V4      4      4      ^8  d   \	        RV 24      hR# )z:Validate matrix shape for addition only for integer valuesc              3   8   "   T F  qP                   x  K  	  R # 5ir   r   )r   xs   & r   r   *validate_matadd_integer.<locals>.<genexpr>Z   s     -1wwr!   c                 .    \        V \        \        34      # r   r5   intr   r@   s   &r   <lambda>)validate_matadd_integer.<locals>.<lambda>[       
1sGn =r   z!Matrices have mismatching shape: c                 .    \        V \        \        34      # r   rC   rE   s   &r   rF   rG   ]   rH   r   N)r-   lensetfilterr   r.   s   *  r   validate_matadd_integerrM   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                (    V ^8  d   QhR\         RR/# r=   r	   )r   s   "r   r   r   a   s     ? ?: ?$ ?r   c                    \        V RR V R,          4       Fj  w  rVP                  VP                  rC\        V\        \
        34      '       g   K:  \        V\        \
        34      '       g   KX  W48w  g   K`  \        RW44      h	  R# )z@Validate matrix shape for multiplication only for integer valuesNr(   zMatrices are not alignedr+   )r-   r0   r/   r5   rD   r   r   )r   ABr$   r%   s   *    r   validate_matmul_integerrR   a   sa    D"ItBx(vvqvv1a#w((ZC>-J-Jqv7>> )r   N)sympy.core.relationalr   sympy.core.exprr   sympy.core.numbersr   sympy.logic.boolalgr   r   "sympy.matrices.expressions.matexprr
   sympy.matrices.exceptionsr   typingr   r1   r8   r;   rM   rR    r   r   <module>r[      s5    $   & , 9 0 :A4".E?r   