§
    OŠtjö  ã                   ó¾   — 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/CA-Chatbot/venv/lib/python3.11/site-packages/sympy/matrices/expressions/_shape.pyú	<genexpr>z"is_matadd_valid.<locals>.<genexpr>    s$   è è € Ð1Ð1 S�s”yÐ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Ð	8‘t�q˜!�"ˆ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Ð1¨DÐ1Ñ1Ô1Ð2�J€Dˆ$Ýð Ø	8Ð	8�s 4¨¨¨¤9¨d°1°2°2¬hÑ7Ô7Ð	8Ñ	8Ô	8ðà	8Ð	8�s 4¨¨¨¤9¨d°1°2°2¬hÑ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ÐP SµJ¸sÅJÑ4OÔ4OÐP�s”yÐ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.   è è € Ð?Ð?™d˜a •�A�q‘”Ð?Ð?Ð?Ð?Ð?Ð?r   Nr   r   r!   r#   s      r   Úis_matmul_validr+   '   sU   € õ, ÐPÐP¨DÐPÑPÔPÐQ�J€Dˆ$ÝÐ?Ð?¥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   € õ( ˆcŒh˜œÑ!Ô!Ð!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$   è è € Ð-Ð- 1�q”wÐ-Ð-Ð-Ð-Ð-Ð-r   c                 ó:   — t          | t          t          f¦  «        S r   ©r)   Úintr   ©r0   s    r   ú<lambda>z)validate_matadd_integer.<locals>.<lambda>[   ó   € ¥
¨1­sµG¨nÑ =Ô =€ 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¨   € åÐ-Ð-¨Ð-Ñ-Ô-Ð.�J€Dˆ$Ý
�3�vÐ=Ð=¸tÑDÔDÑEÔEÑFÔFÈÒJÐJÝÐC¸TÐCÐCÑDÔDÐDÝ
�3�vÐ=Ð=¸tÑDÔDÑEÔEÑFÔFÈÒJÐJÝÐC¸TÐ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˜˜"˜”I˜t A B BœxÑ(Ô(ð ?ð ?‰ˆˆ1ØŒv�q”vˆ1ˆÝ�a�#�w˜Ñ(Ô(ð 	?­Z¸½CÅ¸>Ñ-JÔ-Jð 	?ÈqÐTUÊvÈvÝÐ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   