Mathics 7.0 – Mathematicaのオープンソース代替
(github.com/Mathics3)- Mathics Core 7.0.0 は、Mathematica 互換のオープンソース計算システムの中核エンジンを整理し、今後の組み込み関数の遅延ロードに向けた基盤を整備
- 新しい組み込み関数として
ComplexExpand、ConjugateTranspose、LeviCivitaTensorなど、数式処理・線形代数・実数判定に関する機能を追加 Range[]、DirectedInfinity、Indeterminate、Graphicsのエラー表示、$CharacterEncodingの変更など、既存の互換性の隙間を補完- 組み込み関数の読み込みは、暗黙的な import 依存から離れ、
import_and_load_builtins()を明示的に呼び出す方式に変更 - Python 3.11 と SymPy 1.12 のサポートを含み、
Quantity、SparseArray、Derivative、Exit[]、BaseForm関連の修正も含まれる
リリース方針と内部整理
- Mathics Core 7.0.0 には、将来の組み込み関数の遅延ロードをサポートするための内部構造の整理が含まれる
- Python コードとスタイルをモダン化し、型注釈を増やし、複数のスペルミスを修正
- SymPy と Python の依存関係をより新しいバージョンに更新
- 初期ロード速度の向上と初期メモリ使用量の削減に向けた作業も進められた
新しい組み込み関数
- 今回のリリースで追加された組み込み関数は以下の通り
$MaxLengthIntStringConversionElementsComplexExpandConjugateTransposeLeviCivitaTensorRealAbs,RealSignRealValuedNumberQ
ドキュメントとテスト生成の改善
- PDF ドキュメントの書式上の問題が各所で修正
- 章および節の目次でセクション番号の間隔を拡大
- 組み込み関数定義の周辺余白を拡大
- ドキュメント全体のスペルミスを整理
- doctest 実行と LaTeX ドキュメント生成コードを改訂・リファクタリング
- 組み込み関数の増分更新を許可
- 重複コードを減らす方向で整理
- 「Expression Structure」に Section Head-Related Operations 節を新たに追加
- PDF タイトルは Mathics から Mathics3 に変更され、紹介文も更新
- 旧形式の非公開・非教育用 doctest は pytest に移行
互換性とユーザーに見える動作の変更
*Plotは評価中にメッセージを表示しないRange[]は負のdiを処理- 関連 PR: #951
DirectedInfinityとIndeterminateのサポートを改善GraphicsとGraphics3Dは、不正な primitive や directive を含む場合、ピンク色の背景で表示- Mathics-Django インターフェースではツールチップのエラーメッセージも併せて表示
$CharacterEncodingはセッション内で値を変更可能
内部実装と API の変更
AbsとSignではeval_abs、eval_signが分離され、mathics.eval.arithmeticに追加- 文字列内で許可される最大の数字桁数は 7000 に設定
- Python が自動調整しない pyston のような環境では、
MATHICS_MAX_STR_DIGITS環境変数で調整可能
- Python が自動調整しない pyston のような環境では、
- 実数比較の実装は内部的に
RealSignの実装へ移行 - Python 3.11 では
$MaxLengthIntStringConversionが大きな整数と文字列の間のリテラル変換の最大サイズを制御 - 組み込みコードの読み込みは暗黙的方式ではなく、明示的な指示方式に変更
- 将来的な組み込み関数の遅延ロードや GNU Emacs autoload 方式の「autoload」を可能にするための変更
- 新 API では
import_and_load_builtins()を明示的に呼び出す必要がある- 以前は import 順序に応じて組み込み関数の読み込みタイミングが暗黙的かつ不確定だった
mpmathに LRU キャッシュを追加
Quantity・SparseArray などのバグ修正
Definitionsが pickle と互換Quantity式のサポートを改善- 変換、書式指定、算術演算を含む
GraphicsとGraphics3DのBackgroundオプションが再び動作Stringを含む式に対する数値比較の問題を修正- 関連 issue: #797
Infinityを含むSwitch[]の問題を修正- 関連 issue: #956
SparseArrayに対するOuter[]の問題を修正- 関連 issue: #939
ArrayQ[]はSparseArrayを検出- 関連 PR: #947
BoxExpressionError例外を処理DerivativeがTrue、False、List[]を評価する動作を修正Combinatoricaパッケージの修正を含む- 動作しなかった
Exit[]を修正 BaseFormが$OutputFormsに含まれるように変更
パッケージのサポートバージョン
- Python 3.11 をサポート
- SymPy 1.12 をサポート
1件のコメント
Hacker Newsのコメント
このプロジェクトを何年も見てきたが、着実に順調に発展している。オープンソースのコンピュータ代数システムに関心があるなら、GNU OctaveやMaximaのような古典的な選択肢から、SAGEmath、Symbolics.jl、sympyのような現代的な選択肢まで、より成熟した解決策が多くある
GiNaCのような記号演算ライブラリから、SAGEmathのような全部入りのIDEまで幅広く、コミュニティも活発だ。たとえばSAGEmathはWebノートブックインターフェースを事実上切り開き、今日のさまざまな形のJupyterへとつながったと見ている
個人的にはMathematica(MMA)のLispっぽいスタイルが好きだが、MMAを強力にしているのはコアだけでなく巨大なライブラリだ。記号積分、2D/3Dグラフィックス、有限要素法のような基本分野で業界最高水準の解決策があり、バイオインフォマティクスのような特殊分野も多い
Mathicsはコアの再現はうまくやっているようだが、当然ながらそれらすべてのライブラリは不足している。Matlabと複数の「ツールキット」をnumpyクローンと比較するときも同じ理屈だが、Pythonの流れは今やMatlabでは動かない新しいコードを数多くnumpyの世界へ持ち込んでいる
5年ほど前に最初に出てきたとき、「記号評価エンジンは本当によくできているな、さてこれからどうなるか見てみよう」と思った。これから新しいプロジェクトを始めたくなるたびに、古いプロジェクトを磨き続けるこの例を思い出したい
相互補完的で、一緒に使われることも多い。MathematicaとMathicsは両方のパラダイムをサポートしているようだが、同じものではない
sympyベースのように見える: https://www.sympy.org/en/index.html
個人用途だけでよいなら、Wolfram Cloudは無料で使える。ファイルは30日ほどで削除されるようだ。Wolfram EngineもコマンドラインでMathematicaを無料で使う方法だ。まあ、ないよりはましだ
Mathicsについてのもっと簡単な紹介はこちらにある:
https://mathics.org/
なぜかこれがSageMathに統合される気がする :D
SageMathが最大のCythonプロジェクトである理由の一つも、CythonがSageで高速なC/C++ライブラリを活用できるようにするからだ
Mathicsは今のところ性能を深刻に気にしているようには見えない。たとえばMathicsで
"AbsoluteTiming[Sum[i, {i, 1, 100000}]]"のような小さなマイクロベンチマークを回してみるか、ロードマップを読めばよいもちろんこれは問題ない。Mathematicaプログラミング言語には、性能が重要でない興味深い応用が多くあり、たとえばある記号演算を式とともに慎重に段階的に追いかけるような用途もある
しかしSage開発者たちの主な動機は最先端の研究数学であり、そこではほとんど常に性能が非常に重要だ。Sageが単にsympyを使わず、似た機能を多く自前で実装しているのも性能のためだ。sympyはインストールの容易さを優先しているため比較的遅くなりうるが、SageMathではインストールのしやすさはまったく優先事項ではない
SageMathの使命はMathematica、Matlab、Magma、Mapleの実行可能な代替になることだが、それはクローンになるという意味ではなかった。たとえばMathematicaコードを直接実行するという意味ではなく、本来ならそうしたクローズドソースのプログラムで行っていた研究を、オープンソースの数学ソフトウェア上で支援できる代替という意味だ
ソフトウェアエンジニアはソフトウェアの費用を払わないためなら何でもする
Mathematica は Raspberry Pi で無料提供されており[1]、たいていの大学にはサイト全体ライセンスがある。"Home & Hobby" ライセンスもそれほど高くなく、サブスクリプションは年 195 ドル、永続ライセンスは 390 ドル、更新はわずか 175 ドルだ[2]
正直、いじることには興味があるけれどその価格を負担できない人なら、クラック版を見つけるのもインストールするのも難しくない
個人的には Mathematica、正確には "Wolfram Language" がかなり好きで、趣味用ライセンスの費用を払うことにも満足している。価格に見合う価値があると思うだけでなく、数学ソフトウェアを支援することはお金を使うに値する「良い名目」だとも思う
しかも、アマチュア写真家は Adobe CC のようなツールに、多くのプログラマーが自分のツール一式に使う金額よりも多く払っていることが珍しくないが、なぜそうなのか理解できない。複数のサブスクリプションサービスには月 20〜40 ドル以上使いながら、200〜400 ドルのライセンス費用にはためらうのも同じだ
ただ、私の場合はコンピュータに入っているほとんどどのプログラムよりも Mathematica で過ごす時間が長い
それでも オープンソースの数学ソフトウェア には依然として重要な居場所がある。Mathematica は全体として包括的ではあるが、高度な数学ではなお大きな欠陥がある
とりわけ、より「ニッチ」な数学分野まで満たしてくれるとは信じがたい理由が二つある。第一に、より高度または難解な分野へ進むほど投資対効果が急激に落ちる。第二に、Wolfram Language にはすでに 6000 個以上の組み込み関数があるのだから、群論のような分野を包括的に支援するためにさらに数百個追加するのは筋が悪い
パッケージとして対応することはできるが、カーネルで一級のサポートを受けられないため性能面のコストがかかり、ユーザーがわざわざ探して使わなければならないので使い勝手のコストも生じる
だからこそ、GAP、M2、PARI/GP のようなオープンソースソフトウェアは Wolfram Language の隙間を埋めるうえで重要な役割を果たす。私の場合、Mathematica ライセンスに使うのと同じくらい FOSS プロジェクトにも貢献している。金銭的な貢献が簡単でないプロジェクトには、時間と技術を投じて改善しようとしている
正直、Mathematica の機能を複製しようとするプロジェクトにはあまり関心がない。もちろん、そうしたプロジェクトも開発と改善は続いていくだろうし、少なくとも Wolfram Research に基本機能の改善を続けさせる圧力にはなりうる。しかし、そうしたプロジェクトが現在の Mathematica/WL に追いつくには、おそらく 10〜20 年はかかるだろう
[1]: https://www.wolfram.com/raspberry-pi/
[2]: https://www.wolfram.com/mathematica/pricing/home-hobby/
統合ノートブック、マウスオーバーで見られるドキュメント、そして驚くべきことに数千の関数が入った単一の巨大な名前空間が somehow 組み合わさって、私が使ったことのあるものとは違う、シンプルで生産的な体験を与えてくれる。ふだんは「重い」IDE が特に好きなわけでもないのに、そう感じる
Mathematica でいら立つ点の一つは、すべての関数が同じ 名前空間 に押し込まれていて、異なるパラメータ化オプションによるオーバーロードがないことだ
思いつく大きな重複は複数の Plot 関数くらいだ