o
    oha                     @   sd   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	 d	eZd
S )    )
_sympifyit)global_parameters)
fuzzy_bool)S)_sympify   )Set	FiniteSetSetKindc                       sl   e Zd ZdZd fdd	Zedd Zdd Zed	e	d
d Z
dd Zdd Zdd Zedd Z  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                    s<   |d u r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__ g/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/sympy/sets/powerset.pyr   E   s   
zPowerSet.__new__c                 C   s
   | j d S )Nr   )argsselfr   r   r   r   P   s   
zPowerSet.argc                 O   s   | j }|jr
| S d S N)r   is_FiniteSetpowerset)r   r   kwargsr   r   r   r   _eval_rewrite_as_FiniteSetT   s   z#PowerSet._eval_rewrite_as_FiniteSetotherc                 C   s   t |tsd S t| j|S r   )r   r   r   r   is_supersetr   r    r   r   r   	_containsZ   s   
zPowerSet._containsc                 C   s   t |tr| j|jS d S r   )r   r   r   	is_subsetr"   r   r   r   _eval_is_subseta   s   
zPowerSet._eval_is_subsetc                 C   s   dt | j S )N   )lenr   r   r   r   r   __len__e   s   zPowerSet.__len__c                 c   sZ    t jg}t jV  | jD ]}g }t|}|D ]}|| }|V  || q|| qd S r   )r   EmptySetr   r	   appendextend)r   foundxtempynewr   r   r   __iter__h   s   
zPowerSet.__iter__c                 C   s   t | jjS r   )r
   r   kindr   r   r   r   r2   u   s   zPowerSet.kindr   )__name__
__module____qualname____doc__r   propertyr   r   r   NotImplementedr#   r%   r(   r1   r2   __classcell__r   r   r   r   r   
   s    :

r   N)sympy.core.decoratorsr   sympy.core.parametersr   sympy.core.logicr   sympy.core.singletonr   sympy.core.sympifyr   setsr   r	   r
   r   r   r   r   r   <module>   s    