
    Ed                     z    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dS )    )check_assumptions)	fuzzy_and)_sympify)
MatrixKind)SetSetKind)
NumberKind   )
MatrixExprc                   j    e Zd ZdZdZd Zed             Zed             Zd Z	e
d             Zd Zd	S )
	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                 L   t          |          t          |          t          |          }}}|                     |           |                     |           t          |t                    s"t	          d                    |                    t          j        | |||          S )Nz {} should be an instance of Set.)r   
_check_dim
isinstancer   	TypeErrorformat__new__)clsnmsets       ?lib/python3.11/site-packages/sympy/matrices/expressions/sets.pyr   zMatrixSet.__new__   s    QKK!hsmmc1qq#s## 	L>EEcJJKKK{31c***    c                      | j         d d         S N   argsselfs    r   shapezMatrixSet.shape'   s    y!}r   c                     | j         d         S r   r   r   s    r   r   zMatrixSet.set+   s    y|r   c                      t          |t                    s"t          d                    |                    |j         j        k    r,t          d |j         j        z   D                       }|rd S dS t           fd|D                       S )Nz'{} should be an instance of MatrixExpr.c              3   >   K   | ]}t          |          j        V  d S N)r   	is_Symbol).0xs     r   	<genexpr>z&MatrixSet._contains.<locals>.<genexpr>3   s+      WWx{{4WWWWWWr   Fc              3   L   K   | ]}j                             |          V  d S r%   )r   contains)r'   r(   r    s     r   r)   z&MatrixSet._contains.<locals>.<genexpr>7   s3      ==!**1--======r   )r   r   r   r   r!   anyr   )r    otherare_symbolics   `  r   	_containszMatrixSet._contains/   s    %,, 	UELLUSSTTT;$*$ 	WWekDJ>VWWWWWL t5====u======r   c                 v    t          |dd          }|du r"t          d                    |                    dS )z2Helper function to check invalid matrix dimensionsT)integernonnegativeFz?The dimension specification {} should be a nonnegative integer.N)r   
ValueErrorr   )r   dimoks      r   r   zMatrixSet._check_dim9   sP     sDdCCC; 	6))/6 6 6	6 	6r   c                 D    t          t          t                              S r%   )r   r   r	   r   s    r   _kindzMatrixSet._kindB   s    z*--...r   N)__name__
__module____qualname____doc__is_emptyr   propertyr!   r   r/   classmethodr   r7    r   r   r   r   
   s         $ H+ + +   X   X> > > 6 6 [6/ / / / /r   r   N)sympy.core.assumptionsr   sympy.core.logicr   sympy.core.sympifyr   sympy.matrices.commonr   sympy.sets.setsr   r   sympy.core.kindr	   matexprr   r   r?   r   r   <module>rG      s    4 4 4 4 4 4 & & & & & & ' ' ' ' ' ' , , , , , , ( ( ( ( ( ( ( ( & & & & & &      9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/ 9/r   