Ë
    7^(hö  ã                   ó¶   — 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y)é    ©Ú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 «       ¢­Ž 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   ó4   K  — | ]  }|j                   –— Œ y ­w©N©Úshape©Ú.0Úargs     ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sympy/matrices/expressions/_shape.pyú	<genexpr>z"is_matadd_valid.<locals>.<genexpr>    s   è ø€ Ò1 S�s—y•yÑ1ùó   ‚c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wr   r   ©r   ÚiÚjs      r   r   z"is_matadd_valid.<locals>.<genexpr>"   ó   è ø€ Ò	8‘t�q˜!Œ"ˆQ��(Ñ	8ùó   ‚Néÿÿÿÿé   c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wr   r   r   s      r   r   z"is_matadd_valid.<locals>.<genexpr>#   r   r   ©Úzipr   ©r   ÚrowsÚcolss      r   Úis_matadd_validr'   
   se   € ô, Ñ1¨DÔ1Ð2�J€Dˆ$Üð Ù	8œs 4¨¨ 9¨d°1°2¨hÓ7Ô	8ðá	8œs 4¨¨ 9¨d°1°2¨hÓ7Ô	8òð ó    c            	      ód   — 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   óV   K  — | ]!  }t        |t        «      sŒ|j                  –— Œ# y ­wr   )Ú
isinstancer	   r   r   s     r   r   z"is_matmul_valid.<locals>.<genexpr>=   s   è ø€ ÒP S´J¸sÄJÕ4O�s—y•yÑPùs   ‚)˜)c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­w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-   '   s<   € ô, ÑP¨DÔPÐQ�J€Dˆ$ÜÑ?¤c¨$¨s°¨)°T¸!¸"°XÓ&>Ô?Ð@Ð@r(   r   c                óB   — 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‰h˜Ÿ™Ó!Ð!r(   Nc                  óè   — t        d„ | D «       Ž \  }}t        t        t        d„ |«      «      «      dkD  rt	        d|› �«      ‚t        t        t        d„ |«      «      «      dkD  rt	        d|› �«      ‚y)z:Validate matrix shape for addition only for integer valuesc              3   ó4   K  — | ]  }|j                   –— Œ y ­wr   r   )r   Úxs     r   r   z*validate_matadd_integer.<locals>.<genexpr>Z   s   è ø€ Ò- 1�q—w•wÑ-ùr   c                 ó.   — t        | t        t        f«      S r   ©r+   Úintr   ©r2   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   r4   r6   s    r   r7   z)validate_matadd_integer.<locals>.<lambda>]   r8   r(   N)r#   ÚlenÚsetÚfilterr
   r$   s      r   Úvalidate_matadd_integerr=   X   sv   € äÑ-¨Ô-Ð.�J€Dˆ$Ü
Œ3ŒvÑ=¸tÓDÓEÓFÈÒJÜÐ<¸T¸FÐCÓDÐDÜ
Œ3ŒvÑ=¸tÓDÓEÓFÈÒJÜÐ<¸T¸FÐCÓDÐDð Kr(   c                  óè   — t        | dd | dd «      D ]]  \  }}|j                  |j                  }}t        |t        t
        f«      sŒ5t        |t        t
        f«      sŒL||k7  sŒRt        d||«      ‚ y)z@Validate matrix shape for multiplication only for integer valuesNr   r    zMatrices are not aligned)r#   r&   r%   r+   r5   r   r
   )r   ÚAÚBr   r   s        r   Úvalidate_matmul_integerrA   a   sk   € ä�D˜˜"�I˜t A B˜xÓ(ò ?‰ˆˆ1Ø�v‰v�q—v‘vˆ1ˆÜ�aœ#œw˜Õ(¬Z¸¼CÄ¸>Õ-JÈqÐTUË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=   rA   © r(   r   ú<module>rJ      s‰   ðÝ $Ý  Ý &ß ,Ý 9Ý 0Ý ð˜:ð ¨'ó ð:A˜5 ¨TÐ!1Ñ2ð A°wó Að4"�:ð " Wó "ð.E :ð E°$ó Eð? :ð ?°$ô ?r(   