2017-01-27 10 views
1

Команда isympy запускает интерпретатор с импортированным sympy. Я могу дополнительно предлагает эти варианты запуска интерпретатора в «интерактивном режиме»:Включить режим автосимволов Sympy из работающего интерпретатора

-a, --auto-symbols automatically construct missing symbols 
    -i, --int-to-Integer automatically wrap int literals with Integer 
    -I, --interactive  equivalent to -a -i 

Есть ли способ, чтобы включить эту модель после импорта SymPy в стандартном Python или интерпретатор IPython? Это было бы особенно полезно для работы с ноутбуками Jupyter.

ответ

2

Если вы посмотрите на исходный код isympy, вы увидите, что он просто разбирает параметры командной строки в аргументах для функции sympy.interactive.init_session(). Поэтому вы можете запустить эту функцию с необходимыми аргументами в своей сессии ноутбука Jupyter, которая также является suggested in the docs.

+0

Это ответ, но он не работает из-за ошибки https://github.com/sympy/sympy/issues/2839 –

+0

Извините, что услышал это. По крайней мере, похоже, они работают над этим. –

+0

Я не понимаю, как работает скрипт isympy. Я подтвердил, что 'sympy.interactive.init_session (ipython = True, auto_int_to_Integer = True, auto_symbols = True)' не имеет желаемого эффекта, но это все, что делает скрипт isympy. –

0

я вырыл немного больше в коду следующего ответа Ондржи и нашел способ обойти ошибку:

Althoug призывающий:

ipython.interactive.init_session(ipython=None, auto_symbols=True, auto_int_to_Integer=True) 

не работает в управлении IPython, в стандартной консоли Python он запускает сеанс IPython и инициализирует его, как ожидалось.

Причина, по которой он не работает с IPython, заключается в том, что основная часть работы по инициализации в init_session выполняется при вызове ipython.interactive.session.init_ipython_session. Однако init_session проверяет, находится ли он уже в сеансе IPython и пропускает вызов init_ipython_session, если он есть. Поскольку init_ipython_session является первым значимым вещь init_ipython может сделать, то проблема может быть решена явным вызовом init_ipython_session` первым:

from sympy.interactive import init_session 
from sympy.interactive.session import init_ipython_session 
init_ipython_session(auto_symbols=True, auto_int_to_Integer=True) 
init_session(ipython=None, auto_symbols=True, auto_int_to_Integer=True) 

Это ставит под управлением IPython сессии в нужный режим. Однако иналибация вступает в силу только в следующей «ячейке». Например, вставка вышеприведенного кода в консоль IPython вместе с кодом, который опирается на инициализацию, не удастся. Инициализация и код, основанный на ней, должны быть вставлены отдельно. В ноутбуке jupyter вышеуказанный код должен быть в отдельной ячейке.

 Смежные вопросы

  • Нет связанных вопросов^_^