
    sg                     r    d dl mZ 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  G d	 d
e	      Zy)    )check_assumptions)	fuzzy_and)_sympify)
MatrixKind)SetSetKind)
NumberKind   )
MatrixExprc                   V    e Zd ZdZdZd Zed        Zed        Zd Z	e
d        Zd Zy	)
	MatrixSetaw  
    MatrixSet represents the set of matrices with ``shape = (n, m)`` over the
    given set.

    Examples
    ========

    >>> from sympy.matrices import MatrixSet
    >>> from sympy import S, I, Matrix
    >>> M = MatrixSet(2, 2, set=S.Reals)
    >>> X = Matrix([[1, 2], [3, 4]])
    >>> X in M
    True
    >>> X = Matrix([[1, 2], [I, 4]])
    >>> X in M
    False

    Fc                    t        |      t        |      t        |      }}}| j                  |       | j                  |       t        |t              st	        dj                  |            t        j                  | |||      S )Nz {} should be an instance of Set.)r   
_check_dim
isinstancer   	TypeErrorformat__new__)clsnmsets       R/var/www/html/venv/lib/python3.12/site-packages/sympy/matrices/expressions/sets.pyr   zMatrixSet.__new__   si    QK!hsmc1qq#s#>EEcJKK{{31c**    c                      | j                   d d S N   argsselfs    r   shapezMatrixSet.shape'   s    yy!}r   c                      | j                   d   S r   r   r   s    r   r   zMatrixSet.set+   s    yy|r   c                     t        |t              st        dj                  |            |j                   j                  k7  r-t        d |j                   j                  z   D              }|ry yt         fd|D              S )Nz'{} should be an instance of MatrixExpr.c              3   F   K   | ]  }t        |      j                    y wN)r   	is_Symbol).0xs     r   	<genexpr>z&MatrixSet._contains.<locals>.<genexpr>3   s     Wx{44Ws   !Fc              3   T   K   | ]  }j                   j                  |       ! y wr%   )r   contains)r'   r(   r    s     r   r)   z&MatrixSet._contains.<locals>.<genexpr>7   s      =!**1-=s   %()r   r   r   r   r!   anyr   )r    otherare_symbolics   `  r   	_containszMatrixSet._contains/   sk    %,ELLUSTT;;$**$WekkDJJ>VWWL=u===r   c                 z    |j                    xr t        |dd      }|du rt        dj                  |            y)z2Helper function to check invalid matrix dimensionsT)integernonnegativeFz?The dimension specification {} should be a nonnegative integer.N)is_Floatr   
ValueErrorr   )r   dimoks      r   r   zMatrixSet._check_dim9   sK      1"34#1;))/6 6 r   c                 2    t        t        t                    S r%   )r   r   r	   r   s    r   _kindzMatrixSet._kindC   s    z*-..r   N)__name__
__module____qualname____doc__is_emptyr   propertyr!   r   r/   classmethodr   r8    r   r   r   r   
   sY    $ H+    > 6 6/r   r   N)sympy.core.assumptionsr   sympy.core.logicr   sympy.core.sympifyr   sympy.matrices.kindr   sympy.sets.setsr   r   sympy.core.kindr	   matexprr   r   r@   r   r   <module>rH      s&    4 & ' * ( & :/ :/r   