
    Eda                     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	 ddl
mZmZmZ  G d d	e          Zd
S )    )
_sympifyit)global_parameters)
fuzzy_bool)S)_sympify   )Set	FiniteSetSetKindc                        e Zd ZdZd fd	Zed             Zd Z ede	          d             Z
d Zd	 Zd
 Zed             Z xZS )PowerSetaE  A symbolic object representing a power set.

    Parameters
    ==========

    arg : Set
        The set to take power of.

    evaluate : bool
        The flag to control evaluation.

        If the evaluation is disabled for finite sets, it can take
        advantage of using subset test as a membership test.

    Notes
    =====

    Power set `\mathcal{P}(S)` is defined as a set containing all the
    subsets of `S`.

    If the set `S` is a finite set, its power set would have
    `2^{\left| S \right|}` elements, where `\left| S \right|` denotes
    the cardinality of `S`.

    Examples
    ========

    >>> from sympy import PowerSet, S, FiniteSet

    A power set of a finite set:

    >>> PowerSet(FiniteSet(1, 2, 3))
    PowerSet({1, 2, 3})

    A power set of an empty set:

    >>> PowerSet(S.EmptySet)
    PowerSet(EmptySet)
    >>> PowerSet(PowerSet(S.EmptySet))
    PowerSet(PowerSet(EmptySet))

    A power set of an infinite set:

    >>> PowerSet(S.Reals)
    PowerSet(Reals)

    Evaluating the power set of a finite set to its explicit form:

    >>> PowerSet(FiniteSet(1, 2, 3)).rewrite(FiniteSet)
    FiniteSet(EmptySet, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3})

    References
    ==========

    .. [1] https://en.wikipedia.org/wiki/Power_set

    .. [2] https://en.wikipedia.org/wiki/Axiom_of_power_set
    Nc                     |t           j        }t          |          }t          |t                    s"t          d                    |                    t                                          | |          S )Nz{} must be a set.)	r   evaluater   
isinstancer	   
ValueErrorformatsuper__new__)clsargr   	__class__s      3lib/python3.11/site-packages/sympy/sets/powerset.pyr   zPowerSet.__new__E   se     	0&/Hsmm#s## 	>077<<===wwsC(((    c                     | j         d         S )Nr   )argsselfs    r   r   zPowerSet.argP   s    y|r   c                 J    | j         }|j        r|                                S d S N)r   is_FiniteSetpowerset)r   r   kwargsr   s       r   _eval_rewrite_as_FiniteSetz#PowerSet._eval_rewrite_as_FiniteSetT   s'    h 	"<<>>!tr   otherc                 ~    t          |t                    sd S t          | j                            |                    S r   )r   r	   r   r   is_supersetr   r$   s     r   	_containszPowerSet._containsZ   s7    %%% 	4$(..u55666r   c                 n    t          |t                    r| j                            |j                  S d S r   )r   r   r   	is_subsetr'   s     r   _eval_is_subsetzPowerSet._eval_is_subseta   s6    eX&& 	18%%ei000	1 	1r   c                 0    dt          | j                  z  S )N   )lenr   r   s    r   __len__zPowerSet.__len__e   s    CMM!!r   c              #      K   t           j        g}t           j        V  | j        D ]K}g }t          |          }|D ] }||z   }|V  |                    |           !|                    |           Ld S r   )r   EmptySetr   r
   appendextend)r   foundxtempynews         r   __iter__zPowerSet.__iter__h   s      j 	 	AD!A ! !!e			C    LL	 	r   c                 4    t          | j        j                  S r   )r   r   kindr   s    r   r;   zPowerSet.kindu   s    tx}%%%r   r   )__name__
__module____qualname____doc__r   propertyr   r#   r   NotImplementedr(   r+   r/   r9   r;   __classcell__)r   s   @r   r   r   
   s        9 9t	) 	) 	) 	) 	) 	)   X   Z((7 7 )(71 1 1" " "   & & X& & & & &r   r   N)sympy.core.decoratorsr   sympy.core.parametersr   sympy.core.logicr   sympy.core.singletonr   sympy.core.sympifyr   setsr	   r
   r   r    r   r   <module>rJ      s    , , , , , , 3 3 3 3 3 3 ' ' ' ' ' ' " " " " " " ' ' ' ' ' ' ) ) ) ) ) ) ) ) ) )m& m& m& m& m&s m& m& m& m& m&r   