Wolfram EngineとJupyterで実現するMathematica類似環境

1. はじめに

Wolfram社のMathematicaは「数式処理システム」として知られています。「それ何?」って感じですが、「数値のみならず、文字も使うことができるプログラム言語」と言うことも可能です。例えば、「方程式ax^2+bx+c=0や連立方程式{3x+4y=a, 4x+y=b}を解け」と言われても、VBAやPythonではどうしたら良いか分からないのですが、Mathematicaは、x=〇〇と答えてくれます。今回紹介するプログラミング環境は、難しくてできないと思う課題に直面した時に、解決の糸口を与えてくれる可能性があります。(最後にある「動作テスト」を参照)

Mathematicaが有用であることは分かっているのですが、高価すぎて手が出ません。ところが、「Wolfram Engine」と「Jupyter」を使えば、Mathematicaに似た環境が無償で手に入ります(無償公開に感謝)。今回、このことを紹介します。

なお、「Wolfram Engine」はMathematicaの中核をなす「Wolfram言語」を実行するアプリで、「Jupyter」は汎用Notebookアプリです。

2. WolframLanguageForJupyter

MathematicaはWolfram Engineとそれを扱うためのNotebookを統合したアプリです。今回の取組は、Wolfram Engineを無償で入手し、NotebookとしてJupyterを使うという事です。Wolfram EngineとJupyterを接続するために、Wolfram社が公開している「WolframLanguageForJupyter」を使います。これを使うと、Jupyterの中にWolframLanguageのカーネルが追加されます。

▶ Jupyterの種類について

Jupyterと言えば「Jupyter Notebook」と思っていましたが、現在、後継として「Jupyter Lab」が存在します。これらはブラウザで動くWebアプリケーションです。一方、ディスクトップアプリケーションとして「Jupyter Lab Desktop」もあります。「Jupyter Lab Desktop」のほうが普通のアプリらしいので、まずは、これを用いることにしました。しかし、WolframLanguageForJupyterは「Jupyter Notebook専用」なのかもしれません。

3. 導入のはじめの段階(うまく行かなかった時の状況)

後で述べますが、WolframLanguageForJupyterのインストールには二つの方法(Method1とMethod2)があって、当初、Method1を行いました、それはうまくいかず、Method2でうまく行くことが分かりました。このセクションはうまく行かなかったときの話なのですが、最後のインストールに影響した可能性もあるので、状況を書き留めておきます。

  • (1) 「Jupyter Lab Desktop」と「Wolfram Engine」をインストールし、「WolframLanguageForJupyter」を適用(configure-jupyter.wls add)
  • (2) 「Jupyter Lab Desktop」をアンインストールし、「Miniconda」をインストールし「Jupyter Notebook」をいれ、「WolframLanguageForJupyter」を適用

上記二つの取り組みはうまくいきませんでした。

4. 最終的な導入法の説明

https://statmodeling.hatenablog.com/entry/2023/10/18/190459

の方法2を参考にしました(WolframLanguageForJupyterを入手するサイトの下の方にもMethod2の事は書いてありました)。基本的に説明通りなのですが、私が悩んだ部分を含めて少し詳しく導入時の様子を書いておきます。

▶ Jupyter Notebookの入手

 Anaconda(またはMiniconda)をインストールすると、自動的に「Jupyter Notebook」を入手できます。このアプリは普通とは違って、Cドライブに特殊なホルダを作ります。そのため、アンインストールが難しくなりますが、これに関しても多くのWebページが存在するので、神経質になりすぎる必要はないでしょう。

  • (1) Minicondaの導入は、例えば、下を参照
  • https://www.kemmy-it.com/2024/09/21/python_install-2/
  • (2) インストールが終了するとWindowsプログラムメニューの「Anaconda(miniconda3)」の中に「Jupyter Notebook」が現れます。
  • (3) Jupyter Notebookを起動し、新規Notebookを作成すると、「Python3」へのカーネルで立ち上がります。

▶ Wolfram Engineの入手とインストールとアクティベーション

  • (1) 下のサイトから「Wolfram Engine」をダウンロードする
  • https://www.wolfram.com/engine/」(今回の場合、「Windows10+」版)
  • (2) ダウンロードが終わると、「ライセンスを取得する」を押す
  • (3) 自分のメールアドレスを入力し、「Create one」でライセンス取得を始める
  • (4) ID、名、氏、パスワードを入力し、プライバシーポリシーに同意して、wolfram IDを作成する。
  • (5) ダウンロードした「WolframEngine_14.2.1_WIN_DLM.exe」を実行しインストールを開始
  • (6) 完了すると、Cドライブの「Program Files」の中に、「Wolfram Research」、その中に「Wolfram Engine」と「WolframScript」が生成されている。
  • (7) スタートメニューに「wolframscript (Wolfram Engine 14.2)」があるので、これを起動
  • (8) 1回目の起動で、IDとパスワードを聞かれる。設定したID(メールアドレス)とパスワードを入力する。パスワードの入力はモニターに反映されないので不安になるけど、まよわず入力しリターンする。正しければアクティベーションが完了する

▶ WolframLanguageForJupyterの入手

  • (1) 「https://github.com/WolframResearch/WolframLanguageForJupyter」にアクセス
  • (2) 右上の「<>Code」を押して、ZIPファイル(WolframLanguageForJupyter-master)をダウンロード
  • (3) ダウンロードファイルを展開し、展開ホルダをプログラムホルダの「wolfram Research」のに入れる(C:\Program Files\Wolfram Research)。ホルダ中の「configure-jupyter.wls」が重要なのです。

▶ pacletの入手(バージョンはその時で変わる)

  • (1) 方法2では、pacletを導入する必要があります。下のサイトに移動
  • https://github.com/WolframResearch/WolframLanguageForJupyter/releases
  • (2) Releaseの欄の下にある「Assets」を開くと(今回の場合)「WolframLanguageForJupyter-0.9.3.paclet」があるので、これをクリックするとダウンロードが始まります
  • (3) ダウンロードファイルを「wolframscript.exe」と同じホルダに入れます(「C:\Program Files\Wolfram Research\WolframScript」の中に入れる)
  • (4) pacletって何?と思う方は、下記を参照。(私には少し難しい)
  • https://reference.wolfram.com/language/tutorial/Paclets.html.ja

▶ 「Wolframscript」を起動し、以下の3行を実行

  • PacletInstall["WolframLanguageForJupyter-0.9.3.paclet"]
  • Needs["WolframLanguageForJupyter`"]
  • ConfigureJupyter["Add"]
   Pathの警告(何回かトライしてた後なので、すでに入っているとの警告も見える)

  • (1) 途中、JupyterへのPathがみつからないと警告がでると思います。
  • (2) Jupyterの実行ファイルの場所は下の通りでした。
  • 「C:\Users\ユーザ名\miniconda3\Scripts」。ここにPathを繋ぎます
  • (3) Pathの設定・変更は、下を参照
  • https://atmarkit.itmedia.co.jp/ait/articles/1805/11/news035.html
  • ユーザの環境変数のPathを編集→新規に「C:\Users\ユーザ名\miniconda3\Scripts」を入力。PCの再起動後に有効になる。

▶ kernelの確認

プログラム中に存在する「Anaconda prompt」を立ち上げて、“jupyter kernelspec list”を入力、「Python」と「wolfram language」が見えれば完了。

5. Jupyter Notebookの起動と入力の実行

  • (1) プログラムAnaconda(Miniconda3)の中にある「Jupyter Notebook」を起動
  • (2) ブラウザが立ち上がって、Jupyterが動き始める。
  • (3) File→New→Notebookを選ぶと新規Notebookが立ち上がる
  • (4) Kernelを選べるので、「Wolfram Language」を選ぶ
  • (5) セルに入力して、実行(Shift+Enter)

以上で、Mathematicaと同じような環境が実現できました。あえて名前をつけて「Wolfram Jupyter」の完成。

(JupyterNotebookでの動作状態、「4+3を入力し、Shift+Enterを押して、計算したところ」。右上に示されるカーネルが「Wolfram Language14.2」であることが分かる。また、このJupyterNotebookからJupyterLabに移動する事を示すアイコンも見える。)

▶ インストールに関する懸念

インストールに関し、一点懸念があります。それは、最終的なインストールの前に、方法1を試みた時点で、windowsのコマンドから「configure-jupyter.wls add」を実行しているという点です。これが最終のインストールに影響しているかもしれません。もし、インストールがうまく行かなかったら、これを検討してみてください。

▶ JupyterLab Desktopでは動かず

「Jupyter Notebook」で成功したので、最初に戻って「Jupyter Lab Desktop」を再インストールしてみました。Wolfram Languageのカーネルは現れましたが、計算はできませんでした。初めは動いたのに2回目は動かなくなったような気もします。何か方法があるのかもしれませんが、現状の認識は「Jupyter Lab Desktop」では動かないということです。

6. 動作テスト

簡単な使用例を三つ下に示します。わずか1行で答えを得ています。簡単な式なら人間でも分かるのですが、どんなに難しくなっても答えてくれます。世の中には、本質ではない「問題を解くためのテクニック」が難しいことが多くあります。その部分をWolfram Jupyterに任せれば、人間は本質に集中することができるようになります。

▶ 2次方程式ax^2+bx+c=0を解く(厳密ではないけど)
▶ 連立方程式{3x+4y=a, 4x+y=b}を解く
▶ Sin(x)の関数をプロットする