
    \hp                         S SK Jr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJrJr  S SKJr  SSKJr  SSKJrJrJrJ r   \" S5      r! " S S\5      r"g)    )S)Basic)Tuple)LambdaBadSignatureError)
fuzzy_boolEq)Dummy)_sympify)And
as_Boolean)siftflattenhas_dups)sympy_deprecation_warning   )Contains)SetUnion	FiniteSetSetKindconditionsetc                       \ rS rSrSr\R                  4S jr\" S 5      r	\" S 5      r
\" S 5      r\S 5       r\S 5       rS	 rS
 rS rS rSrg)ConditionSet   a  
Set of elements which satisfies a given condition.

.. math:: \{x \mid \textrm{condition}(x) = \texttt{True}, x \in S\}

Examples
========

>>> from sympy import Symbol, S, ConditionSet, pi, Eq, sin, Interval
>>> from sympy.abc import x, y, z

>>> sin_sols = ConditionSet(x, Eq(sin(x), 0), Interval(0, 2*pi))
>>> 2*pi in sin_sols
True
>>> pi/2 in sin_sols
False
>>> 3*pi in sin_sols
False
>>> 5 in ConditionSet(x, x**2 > 4, S.Reals)
True

If the value is not in the base set, the result is false:

>>> 5 in ConditionSet(x, x**2 > 4, Interval(2, 4))
False

Notes
=====

Symbols with assumptions should be avoided or else the
condition may evaluate without consideration of the set:

>>> n = Symbol('n', negative=True)
>>> cond = (n > 0); cond
False
>>> ConditionSet(n, cond, S.Integers)
EmptySet

Only free symbols can be changed by using `subs`:

>>> c = ConditionSet(x, x < 1, {x, z})
>>> c.subs(x, y)
ConditionSet(x, x < 1, {y, z})

To check if ``pi`` is in ``c`` use:

>>> pi in c
False

If no base set is specified, the universal set is implied:

>>> ConditionSet(x, x < 1).base_set
UniversalSet

Only symbols or symbol-like expressions can be used:

>>> ConditionSet(x + 1, x + 1 < 1, S.Integers)
Traceback (most recent call last):
...
ValueError: non-symbol dummy not recognized in condition

When the base set is a ConditionSet, the symbols will be
unified if possible with preference for the outermost symbols:

>>> ConditionSet(x, x < y, ConditionSet(z, z + y < 2, S.Integers))
ConditionSet(x, (x < y) & (x + y < 2), Integers)

c                   ^ ^^ [        T5      m[        T/5      n[        U5      (       a  [        S5      e[        U5      n[	        U[
        5      (       d  [        SU-  5      e[        T5      m[	        T[        5      (       a%  TnS T 5       n[        U6 m[        SU ST S3SSS	9  [        T5      mT[        R                  L a  U$ T[        R                  L a  [        R                  $ U[        R                  L a  [        R                  $ U H#  n[        US
S5      (       a  M  [!        SU-  5      e   UR#                  T5      [        R                  L a  [        ST< SU< S35      eS n[	        U[        5      (       a=  [%        UUU4S j5      n	U	S    (       a  [        U	S   6 n[        U	S    6 nO[        U	S   6 $ [	        UT 5      (       Ga!  UR&                  u  pnU 4S jn[)        UTU
45      u  pX:w  a  [        S5      e[+        [-        [        T/5      [        U
/5      5      5      nU
T:X  a  [        TU5      mUnOUR.                  TR.                  -  (       dD  UR1                  5        VVs0 s H	  u  nnUU_M     nnn[        TUR3                  U5      5      mUnOLTR.                  U
R.                  -  (       d.  TR3                  U5      m[        TR3                  U5      U5      mUn[	        T[4        5      (       aS  TTR&                  S   :X  a@  [	        TR&                  S   [
        5      (       a  TR&                  S   R7                  U5      $ [8        R:                  " T TTU5      nUc  U$ [=        UU5      $ s  snnf )NzDuplicate symbols detectedz'base set should be a Set object, not %sc              3   :   #    U  H  n[        US 5      v   M     g7f)r   Nr	   ).0lhss     O/var/www/auris/envauris/lib/python3.13/site-packages/sympy/sets/conditionset.py	<genexpr>'ConditionSet.__new__.<locals>.<genexpr>e   s     4)3BsAJJ)s   zq
Using a set for the condition in ConditionSet is deprecated. Use a boolean
instead.

In this case, replace

    z

with

    
z1.5zdeprecated-conditionset-set)deprecated_since_versionactive_deprecations_target	_diff_wrtFz`%s` is not symbol-likezsym `z` is not in base_set ``c                 :   > [        TR                  TU 5      5      $ N)r   subs)_	conditionsyms    r!   <lambda>&ConditionSet.__new__.<locals>.<lambda>   s    Jy~~c1/E$F    Tc                 b   > T" U [        [        S5      5      R                  5       R                  $ Nr   )r
   adummyas_dummyr.   )sclss    r!   sig!ConditionSet.__new__.<locals>.sig   s%    1bm,557;;;r1   z"sym does not match sym of base setr   r   )r   r   r   r   
isinstancer   	TypeErrorr   r   r   r   r   truefalseEmptySetgetattr
ValueErrorcontainsr   argsmapdictzipfree_symbolsitemsxreplacer   	intersectr   __new__r   )r7   r.   r-   base_setflatcondition_origtempiknowsiftedr6   cbr8   sasbrepskvrvs   ```                 r!   rJ   ConditionSet.__new__X   s-   smu~D>>#$@AAH%(C((9HDF FY'	i++&N4)4DT
I%   K  */+H" y)	O::qzz!:: A1k511 !:Q!>??  S!QWW,#xPQQh	**FHFd| &,/$fTl3 &,//h$$mmGA!<sAh'FBx'(LMMGSENGQCL9:DCx	1-	^^c&6&66)-6A16	1::d+;<	++ann<ll4(	 2 24 8!<	 i**y~~a7H0H)..+S11 ~~a(228<<]]3Y9\r6uT26 7s   8Nc                      U R                   S   $ r3   rB   selfs    r!   r/   ConditionSet.<lambda>   s    		!r1   c                      U R                   S   $ )Nr   r\   r]   s    r!   r/   r_      s    diilr1   c                      U R                   S   $ )N   r\   r]   s    r!   r/   r_      s    TYYq\r1   c                     U R                   R                  U R                  R                  -
  nXR                  R                  -  $ r*   )r-   rF   r.   rK   )r^   	cond_symss     r!   rF   ConditionSet.free_symbols   s3    NN//$((2G2GG	==5555r1   c                 .    [        U R                  /5      $ r*   )r   r.   r]   s    r!   bound_symbolsConditionSet.bound_symbols   s    z""r1   c                 Z  ^ U4S jmT" U R                   U5      (       d  [        R                  $ [        XR                  5      nU[        R                  L a  [        R                  $ [        U R                   4U R                  5      n U" U5      n[        X$5      $ ! [         a     g f = f)Nc                   > X4 Vs/ s H  n[        U[        5      PM     nnUR                  S5      nUS:X  a  gUS:X  a  g[        U 5      [        U5      :H  =(       a    [	        U4S j[        X5       5       5      $ s  snf )NTr   Fr   c              3   8   >#    U  H  u  pT" X5      v   M     g 7fr*    )r   rO   jok_sigs      r!   r"   9ConditionSet._contains.<locals>.ok_sig.<locals>.<genexpr>   s      ,4)2qs   )r:   r   countlenallrE   )arS   rO   tuplesrR   rn   s        r!   rn   &ConditionSet._contains.<locals>.ok_sig   sy    56F;FqjE*FF;T"AAvAvq6SV# 4 ,4),Q,4 )4 4 <s   A>)	r.   r   r=   r   rK   r   r-   r   r;   )r^   other	base_condlamdalambda_condrn   s        @r!   	_containsConditionSet._contains   s    	4 dhh&&77N UMM2	77N {DNN3	/,K y..  		s   
B 
B*)B*c                     [        U R                  U R                  5      n[        U R                  [        5      (       a  U" U6 nOU" U5      n[        X R                  R                  U5      5      $ r*   )r   r.   r-   r:   r   r   rK   rA   )r^   rv   fs      r!   as_relationalConditionSet.as_relational   sS    488T^^,dhh&&5	A%A1mm,,U344r1   c                 t   U R                   u  p4nUR                  U[        5      nUR                  [        5      nUR                  X5      nX:w  a*  U(       d  UR                  X5      nU R	                  X4U5      $ U(       a  O%[        USS5      (       a  UR                  X5      nO U R	                  X4U5      $ )Nr'   F)rB   r+   r4   hasfuncr?   )	r^   oldnewr.   condbasedsyminsymnewbases	            r!   
_eval_subsConditionSet._eval_subs   s    ))4xxV$ ))C%?yy*99S00S+u--99S&DyyD))r1   c                 @    [        U R                  R                  5      $ r*   )r   r.   kindr]   s    r!   _kindConditionSet._kind   s    txx}}%%r1   rl   N)__name__
__module____qualname____firstlineno____doc__r   UniversalSetrJ   propertyr.   r-   rK   rF   rg   rz   r~   r   r   __static_attributes__rl   r1   r!   r   r      sv    CH /0nn W7r ,
-C23I12H6 6 # #/:5*$&r1   r   N)#sympy.core.singletonr   sympy.core.basicr   sympy.core.containersr   sympy.core.functionr   r   sympy.core.logicr   sympy.core.relationalr
   sympy.core.symbolr   sympy.core.sympifyr   sympy.logic.boolalgr   r   sympy.utilities.iterablesr   r   r   sympy.utilities.exceptionsr   rA   r   setsr   r   r   r   r4   r   rl   r1   r!   <module>r      sL    " " ' 9 ' $ # ' / = = @  0 0 
~	c&3 c&r1   