2015-12-22 4 views
1

У меня есть финитный набор и символ, с которым я хочу связать Relation так, что символ находится в FiniteSet, возможно ли это с помощью sympy? symbol in FiniteSet не возвращает выражение, но вместо этого оценивает его:Символьный реляционный символ в наборе

>>> from sympy import * 
>>> s = FiniteSet(range(0,3)) 
>>> x = symbols('x') 
>>> x in s 
False 
>>> Eq(x,s) 
x == {0, 1, 2} 
>>> In(x,s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'In' is not defined 

Edit: Спасибо Охе за рассказывал мне о Contains. Я обновил мою версию sympy, кстати, в обновлении также изменился синтаксис FinitSet. Даю небольшой пример того, что я ожидал, чтобы работать в первую очередь для записи:

>>> from sympy import * 
>>> x = symbols('x') 
>>> s = FiniteSet(*range(0,3)) 
>>> init_printing() 
>>> Contains(x,s) 
x ∈ {0, 1, 2} 

ответ

2

Что вы ищете можете быть Contains функции.

+0

Можете ли вы дать ссылку на документацию? На самом деле не так просто найти функцию 'contains' :) – Emilien

+1

@Emilien, что вы хотите, действительно« Содержит », но для этого вам нужно хотя бы SymPy 0.7.6. – asmeurer

0

Ваш код не работает для меня. Выражение

x in s 

вызывает исключение. Вы должны сначала присвоить значение x. Тогда вы можете просто использовать «in».

Как это:

s = FiniteSet(range(0,3)) 
x = symbols('x') 
x=3 
x in s # False 

Вот полная установка:

>>> from sympy import * 
>>> s=FiniteSet(range(0,3)) 
>>> x=symbols("x") 
>>> x in s 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Users\lhk\Anaconda3\lib\site-packages\sympy\sets\sets.py", line 497, in __contains__ 
    raise TypeError('contains did not evaluate to a bool: %r' % symb) 
TypeError: contains did not evaluate to a bool: Contains(x, {range(0, 3)}) 
>>> x=3 
>>> x in s 
False 
>>> Contains(x,s) 
False 
>>> 
+0

Странно, но я использую его только для иллюстрации того, чего я не хочу. Для записи я использую sympy версию 0.7.5. – Emilien

+0

Извините, я просто понял, что результат для 'x in s' не был в моем вопросе, он отвечает False с моей версией sympy (но все же это не то, что я ищу) – Emilien