LINUX.ORG.RU
 
pevzi

SymPy 0.7.0


0

1

После более года активной разработки вышла новая версия SymPy — Python-библиотеки для символьных вычислений.

Авторы SymPy ставят перед собой цель создать полноценную систему компьютерной алгебры, написанную полностью на языке Python, сохраняя при этом код как можно более понятным и расширяемым.

Сейчас проект включает в себя около 86000 строк кода, и в число его возможностей входят:

  • выполнение арифметических операций над многочленами;
  • упрощение многочленов;
  • раскрытие скобок;
  • факторизация;
  • дифференцирование;
  • интегрирование;
  • нахождение пределов;
  • решение уравнений и систем уравнений;
  • работа с матрицами;
  • многое другое.

В версии 0.7.0 было внесено большое количество улучшений, с полным списком которых можно ознакомиться здесь.

Следует отметить, что на данный момент для работы SymPy необходим Python 2 версии не ниже 2.4, а со следующей после 0.7.0 версии - Python 2.5. Поддержку Python 3 планируется реализовать уже в версии 0.8.0.

>>> Документация

>>> Полный список изменений


[#]  
pevzi

Просьба говорить что не так в тексте новости (:

**** ()
[#] Ответ на: комментарий от pevzi 28.06.2011 18:45:17  
adriano32

>>выполнение арифметических операций над многочленами, упрощение многочленов, раскрытие скобок, дифференцирование, нахождение пределов, интегрирование, факторизация, решение уравнений и систем уравнений, работа с матрицами и многое другое.

Списком сделай. И да, раскрытие скобок и факторизацию рядом надо поставить ИМХО.

*** ()
[#]  
pylin

Если не сочтешь за труд, то напиши что SymPy работает с Python2,а работа по поддержке 3-его активно ведутся

** ()
[#] Ответ на: комментарий от adriano32 28.06.2011 18:50:15  
pevzi

> раскрытие скобок и факторизацию рядом надо поставить

Просто первое — фича ядра, а второе уже из модуля polys, поэтому так получилось. Спасибо, исправил.

**** ()
[#] Ответ на: комментарий от pevzi 28.06.2011 19:02:07  
adriano32

>>Следует отметить, что в данный момент библиотека работает только со второй веткой Python, но уже ведется работа по портированию её на Python 3.

Следует отметить, что на данный момент для работы SymPy необходим Python 2 версии не ниже 2.4, а со следующей после 0.7 версии - Python 2.5. Поддержку Python 3 планируется реализовать уже в версии 0.8.

Так лучше имхо

*** ()
[#] Ответ на: комментарий от adriano32 28.06.2011 19:34:57  
pylin

Оперативно работают ребята )

** ()
[#] Ответ на: комментарий от pylin 28.06.2011 21:11:18  
adriano32

А табличка "Сарказм" была или нет?
Если что, так в Roadmap написано :)

*** ()
[#] Ответ на: комментарий от adriano32 28.06.2011 21:15:36  
pylin

Да не я не иронизирую, они действительно довольно быстро фиксят и расширяют функциональность

** ()
[#]  
RCV

Чем оно лучше maxima?

*** ()
[#] Ответ на: комментарий от RCV 28.06.2011 22:08:47  
pylin

Она полезна тем что позволяет проводить различные вычисления, объединять в программе свои возможности с иными математическими библиотеками Python

** ()
[#] Ответ на: комментарий от sanuda 28.06.2011 22:16:56  
RCV

По поводу axiom был тред, выяснили: пока она не пригодна для жизни

*** ()
[#]  
iVS

Maxima и SymPy основаны на динамически типизированных языках Lisp и Python, соответственно. Как результат, при увеличении кол-ва кода увеличивается кол-во багов, что очень плохо для мат. пакетов. Более перспективным видится реализации со стат. типизацией - Axiom, по отношению к языкам - Haskell. Кстати, на последнем написана морда к Axiom - DoCon. Но пока, похоже, для жизни непригодное.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 1:07:33  
pevzi

> Как результат, при увеличении кол-ва кода увеличивается кол-во багов

И при чем здесь динамическая типизация?

**** ()
[#] Ответ на: комментарий от pevzi 29.06.2011 1:10:25  
iVS

Отсутствие проверки преобразования типов, сравни с Haskell.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 1:25:06  
XVilka

Axiom очень трудно "кастомизировать" под задачу, по крайней мере, мне это не удалось. Хотя да, по поддерживаемым возможностям, она - впереди планеты всей.

** ()
[#] Ответ на: комментарий от iVS 29.06.2011 1:07:33  

>на последнем написана морда к Axiom - DoCon

блджад, достали с этим доконом. Он же ни на что не годен. Они не потрудились даже запилить тип Expression a и включить в свою иерархию. Чем он лучше Numeric.Prelude? Та хотя бы жива ещё и иерархия побогаче.

И уж точно он такая же морда к аксиоме, как моя жопа морда макскому.

()
[#] Ответ на: комментарий от iVS 29.06.2011 1:25:06  
fr_butch

пример по ссылке мягка скажем идиотский.
кто в реальном приложении будет собирать ввод и передавать не обработку без предварительной проверки типа введенных данных? тот ССЗБ.
после определения типа данных ты уже не сможешь сложить str и int

In [2]: "1" + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/tmp/<ipython console> in <module>()

TypeError: cannot concatenate 'str' and 'int' objects

хотя кнчно ты можешь и после определения типа сделать так(тоже вариант ССЗБ):

In [7]: a="1"; type(a)
Out[7]: <type 'str'>

In [8]: a=1; type(a)
Out[8]: <type 'int'>

* ()
[#] Ответ на: комментарий от qrqrqr 29.06.2011 8:13:06  
iVS

WTF? Я же писал: "Но пока, похоже, для жизни непригодное".

* ()
[#] Ответ на: комментарий от fr_butch 29.06.2011 8:21:00  
iVS

Пример у тебя в духе К.О. Пример, приведенный по ссылке, содержал ошибку, которая проявлялась только при одном значении параметра и до этого никак себя не проявляла. На практике получается, что приложение нужно покрыть кучей юнит-тестов. Однако, в случае такого мат. пакета как SymPy эти ваши юнит-тесты попросту бесполезны.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 11:07:35  
sanuda

Простота языка Python покрывает подобные недостатки с лихвой. Да и вроде как при любых расчетах принято делать проверку полученных результатов — это не юнит-тесты, это гораздо проще и бьет точно в цель. Поэтому не так уж принципиальна статичность системы типов.

()
[#] Ответ на: комментарий от adriano32 29.06.2011 1:04:56  
sanuda

То есть этот мсье просто унылая тролота? Ну и хрен с ним.

()
[#] Ответ на: комментарий от sanuda 29.06.2011 12:09:13  
iVS

Тогда и начни проверку с простого примера: пусть даны многочлены P_n(x) и Q_n(x) с рациональными коэффициентами. Причем, P_n(x) определяется из равенства:

P_{n+1}(x) = (x + a_n) P_n(x + b_n) + Q_n(x + c_n).

Покажи, что все P_n(x) будут иметь рациональные коэффициенты. Сколько unit-тестов по n нужно сделать? 10, 1000, 1000000? Может из-за какой ошибки именно в 1000001 решении коэффиценты перестанут давать правильный результат? В Haskell же есть библиотека как раз для множества рациональных чисел.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 12:24:16  
sanuda

Ты точно уверен, что про CAS'ы говоришь, а не про proof assistant'ы, например?

()
[#] Ответ на: комментарий от sanuda 29.06.2011 12:45:13  
iVS

Уверен, а то. То, что коэффициенты будут рациональными, я знаю. Получить по известным a_n, b_n, c_n коэффициенты при P_{n+1}(x) CAS должна уметь. Где гарантия, что полученные значения будут рациональными? И сколько юнит-тестов нужно, чтобы отловить возможные баги? Мне кажется, что при стат. типизации можно сделать проверку на рациональность. Чтобы по входящим рациональным a_n, b_n, c_n на выходе заведомо получались рациональные коэффициенты у P_{n+1}(x). Наличие такой простой проверки - огромный плюс. Ну, или та же задача, но для только целых или только действительных коэффициентов.

* ()
[#]  

раскрытие скобок это безусловно мощное свойство

**** ()
[#] Ответ на: комментарий от iVS 29.06.2011 15:05:28  
sanuda

> То, что коэффициенты будут рациональными, я знаю. Получить по известным a_n, b_n, c_n коэффициенты при P_{n+1}(x) CAS должна уметь. Где гарантия, что полученные значения будут рациональными?

А где гарантия, например, что ты получишь эти значения вообще? Гарантия что программа вообще завершится.

> И сколько юнит-тестов нужно, чтобы отловить возможные баги?

Да. Сколько юнит-тестов нужно, чтобы узнать, что программа на любых входных данных завершится?

> Мне кажется, что при стат. типизации можно сделать проверку на рациональность. Чтобы по входящим рациональным a_n, b_n, c_n на выходе заведомо получались рациональные коэффициенты у P_{n+1}(x).

ОК. Почти 100% гарантия, что в случае получения результата он будет именно рациональным числом.

> Наличие такой простой проверки - огромный плюс.

Плюс, но не такой огромный. Он спасает от тех багов, которые почти все вылавливаются еще при тестировании. Да, есть шанс, что некоторые из них попадут в релиз, но это еще никого не останавливало.

Чесслово, не понимаю сути твоей претензии.

()
[#] Ответ на: комментарий от sanuda 29.06.2011 17:45:34  
iVS

> А где гарантия, например, что ты получишь эти значения вообще? Гарантия что программа вообще завершится.

> Да. Сколько юнит-тестов нужно, чтобы узнать, что программа на любых входных данных завершится?

Не завершится - буду знать, что есть баг. Попробую получить результат другим способом. Например, при расчетах космического корабля программа отработала, данные получены, корабль запущен. Фигня, что была небольшая ошибка, в результате которой корабль взорвался прямо в воздухе. В итоге, миллиардные потери, куча людей погибло. Ни того, ни другого не было, если бы программа _не_завершилась_. Так понятно?

> ОК. Почти 100% гарантия, что в случае получения результата он будет именно рациональным числом.

Откуда гарантия? Оно будет рациональным, если программа находит коэффициенты реккурентно, каждый раз понижая порядок степени многочлена P_n(x) на 1, т.е. нужно n шагов реккурсии. Какой-нибудь умник мог сообразить, что P_n(0) дает коэффициент при нулевой степени без реккурсии и ввел в программу для упрощения счета. При этом, из-за отсутствия проверки типов получил действительное значение.

Причем, данный пример - очень простой. Случаи, когда реально прибегают к помощи CAS, во много раз сложнее.

> Да, есть шанс, что некоторые из них попадут в релиз, но это еще никого не останавливало.

Если очередной плеер, попавший в релиз, будет немного искажать звук - никого не волнует, большинство и так будут слушать его в метро или на улице. Но я против подобного подхода к CAS, здесь ответственность куда выше.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 11:07:35  
pevzi

> Пример у тебя в духе К.О

У тебя по ссылке тоже.

> На практике получается, что приложение нужно покрыть кучей юнит-тестов


ЛЮБОЕ приложение нужно покрывать кучей юнит-тестов, иначе оно не считается работоспособным.

> Однако, в случае такого мат. пакета как SymPy эти ваши юнит-тесты попросту бесполезны.


4.2.

Вообще в чем претензия состоит? В SymPy есть класс, представляющий собой рациональные числа, и проверить, является ли число рациональным, не составляет труда. И да, на всякий случай: питон динамически типизируемый, но типизация строгая, неявных преобразований типов нет.

**** ()
[#] Ответ на: комментарий от pevzi 29.06.2011 19:56:49  
iVS

> ЛЮБОЕ приложение нужно покрывать кучей юнит-тестов, иначе оно не считается работоспособным.

Пример из области аналитических функций: равенство верно на всей области определения функций (внутри комплексной плоскости), если оно выполняется на счетном множестве точек, находящихся внутри границы области. Даже такой простецкий пример требует счетное количество точек. А если надо проверить корректность на всей области комплексных чисел?

> В SymPy есть класс, представляющий собой рациональные числа, и проверить, является ли число рациональным, не составляет труда.

А проверить, что все преобразования типов были проделаны корректно?

> И да, на всякий случай: питон динамически типизируемый, но типизация строгая, неявных преобразований типов нет.

Я бы не придирался, если бы альтернатив не было. Однако все это ни в какое сравнение не идет с проверкой типов в Haskell.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 10:51:53  

ok, хотел сказать, что докон --- не морда к аксиоме, это отдельный продукт, довольно мёртвый и с практически отсутсвующим функционалом.

()
[#] Ответ на: комментарий от iVS 29.06.2011 20:19:08  
sanuda

А есть CAS на хацкеле? Срочно ссылку в студию!

()
[#] Ответ на: комментарий от sanuda 29.06.2011 21:34:02  
iVS

Уже обсудили DoCon, правда, проект никакой, пилит его какой-то PhD of Computer Science. Принципиально, никто не запрещает сделать на Haskell систему типов как в Axiom, обсуждения этого вопроса мне уже как-то попадались.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 21:54:48  
sanuda

К сожалению, повторить систему типов axiom не получится. А DoCon не рабочий, да и с последним релизом четырехлетней давности.

()
[#] Ответ на: комментарий от sanuda 29.06.2011 22:20:02  
iVS

> К сожалению, повторить систему типов axiom не получится.

Можно узнать, почему? По запросу "Haskell + Axiom" гугл выдает ссылки даже на какие-то научные статьи, я думал, у них всё там пучком.

* ()
[#] Ответ на: комментарий от iVS 29.06.2011 22:29:30  
sanuda

Да у них разные же системы типов. Например, насколько я помню, ad-hoc полиморфизм в Axiom достигается тем, что разные функции с одним названием вносятся в единую область видимости, а выбор конкретной функции происходит по сигнатурам и типу применяемых аргументов. Крайне противоположная ситуация с тем, как это происходит в хацкеле.

Будь все пучком, давно бы уже кто-нибудь переносил код из одного чудовища в другое.

()
[#] Ответ на: комментарий от sanuda 30.06.2011 1:23:43  
iVS

Вот например проект, на который я наткнулся: ссылка.

>>-----Цитата---->>

As part of a project to include reasoning capabilities in the Aldor computer algebra system it is necessary to modify the type checking algorithm in Aldor. This paper reports on work to write Aldor abstract syntax trees as elements of Haskell data types, and to implement a prototype modified type checker for Aldor in Haskell.

<<-----Цитата----<<
* ()
[#] Ответ на: комментарий от sanuda 29.06.2011 22:20:02  

>К сожалению, повторить систему типов axiom не получится.

тебе Numeric Prelude мало?

()
[#] Ответ на: комментарий от qrqrqr 30.06.2011 17:49:33  

тем более, с одной правильной системой типов далеко не уедешь. Самое тоскливое на самом деле писать различные функции для работы с типом expression, упрощения, приведения выражений к определенному виду, повесится можно. Если это есть, то даже простенькое символьное интегрированное пишется строк в 100-150. CAS без алгоритмов "упрощений", по сути бесполезна, иначе размер выражений растет невероятно быстро.

Конечно, остальной функционал CAS (без возни с expression) пишется не так геморройно, там только и надо, что хорошая система типа. Но без выражений кас не кас.

()
[#] Ответ на: комментарий от pevzi 29.06.2011 19:56:49  

> ЛЮБОЕ приложение нужно покрывать кучей юнит-тестов, иначе оно не считается работоспособным.

Покажи мне, где лежат юнит-тесты ядра :) И gcc тоже.

***** ()
[#] Ответ на: комментарий от sanuda 29.06.2011 21:34:02  

>А есть CAS на хацкеле? Срочно ссылку в студию!

Будь мужиком, напиши! А если серьезно, предлагаю написать такую. Хуже SymPy не будет точно, Хаскелл всё же. Можно в хаскелл-кафе найти ещё кого и напишем, вдохновляясь аксиомой.

()
[#] Ответ на: комментарий от qrqrqr 30.06.2011 18:15:54  

> Хуже SymPy не будет точно

Предрекаю, будет гораздо хуже даже вот этого.

** ()
[#] Ответ на: комментарий от qrqrqr 30.06.2011 18:15:54  
pevzi

> Хуже SymPy не будет точно, Хаскелл всё же

Программа, написанная на хаскеле, автоматически становится крутой из-за того, что написана на хаскеле?

**** ()
[#] Ответ на: комментарий от baverman 30.06.2011 18:20:55  
iVS

> Предрекаю, будет гораздо хуже даже вот этого.

Ты про тормоза питона и необъятное потребление памяти? Тогда, пока ядро SymPy на Си не перепишут, его никто не догонит, ога. Если ядро все же перепишут, то включить его в тот же Haskell труда не составит. Настоящий мужик сам допишет нужный функционал.

* ()
[#] Ответ на: комментарий от iVS 30.06.2011 18:33:55  

> Ты про тормоза питона и необъятное потребление памяти?

Я про приземленные человеко-часы. Даже хаскель над ними не властен.

** ()
[#] Ответ на: комментарий от baverman 30.06.2011 18:53:15  
iVS

> Я про приземленные человеко-часы. Даже хаскель над ними не властен.

Тогда почему все не пишут на Java, C#, продпочитая столь "уродливые" языки как С/C++? Почему, если сейчас мода на Питон, то все нужно писать на нем? Не уверен, что у того же Питона больше плюсов, чем у Лиспа. В Maxima до сих пор полно багов. Писать, может, и легче на динамически типизируемом языке, но отлавливать и исправлять баги - одно из страшнейших наказаний. ИМХО, димамическая типизация хороша при написании небольших скриптов, но не для серьезных мат. проектов, где цена багов слишком высока.

* ()
[#] Ответ на: комментарий от iVS 30.06.2011 19:08:05  

> Тогда почему…

Ты слишком много вычитал между строк. Ничего, кроме оценки поделки студента-хаскелиста, я не давал. На чем писать, каждый выбирает сам, и никого, ни на что не агитирую.

** ()