検索キーワード「Jupyter」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示
検索キーワード「Jupyter」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示

2023年5月22日月曜日

Maxima-Jupyter

一月ほど前にyujitachさんが,MathematicaでHopfバンドルの図示をしていて,MathematicaからオープンソースのJupyter Notebook版にできないかと呼びかけていた。

オープンソースというかフリーの数式処理アプリというとMaximaになる。JupyterでMaximaが動くのかと調べてみると,弘前大学の葛西真寿さんによる,Maxima-Jupyterによる数式処理というサイトがあった。

早速,インストールを試みるが途中で挫折。いろいろ調べて,なんとか動くところまできたが,どうも動作がおかしい。原因は,maxima側ではなくて,jupyter側にあった。jupyter labが4回ほどの入力でおかしくなってしまう。GPT-4に尋ねてみると,ブラウザを変えてみたらとのアドバイス。SafariからChromeに変えるとどうにか動いた。なお,Jupyter notebookならSafariでもうまく動作するのである。

Maxima-Jupyterのインストールに関しては,さきほどのページにあるmacOS に Maxima-Jupyter をインストールするによった。maximaを実行した段階でzmq.hが見当たらないとのエラーになり,これを解消するために,Maximaで綴る数学の旅の2022-01-20の記事が役に立った。 
% brew install sbcl gpg zmq gnuplot
% brew edit maxima
% brew install maxima -s

[quicklispをインストール(sbcl起動時の自動読み込みまで設定)]
quicklisp.lispをダウンロード。
% curl -O https://beta.quicklisp.org/quicklisp.lisp
% curl -O https://beta.quicklisp.org/quicklisp.lisp.asc
% gpg --verify quicklisp.lisp.asc quicklisp.lisp

% sbcl
* (load "quicklisp.lisp")
* (quicklisp-quickstart:install)
* (ql:system-apropos "vecto")
* (ql:quickload "vecto")
* (ql:add-to-init-file)
* (quit)

[maxima-jupyterをインストール]
そのgithubレポジトリをクローンし展開したディレクトリに移動
% cd ~/Library
% git clone https://github.com/robert-dodier/maxima-jupyter.git

% cd maxima-jupyter
% export C_INCLUDE_PATH="/opt/homebrew/include/"
% maxima
(%i1) load("load-maxima-jupyter.lisp");
(%i2) jupyter_install();
(%i3) quit();

[jupyterを起動]
% jupyter lab

これで,Maxima-Jupyterは動いたが,Jupyter labのところで引っかかったわけだ。

2025年7月23日水曜日

Jupyterつまづく

Jupyterからの続き

Mathematica ノートブックにインスパイアされて登場したJupyterは,自分のpythonやJuliaの実行環境になっている。とても便利だ。

ところが,homebrew で jupyterlab4.4.5に更新したところ,jupyter lab や jupyter notebook が動かなくなってしまった。困ったぞ。

いろいろ調べてみると,悪さをしているのはSafari のようだ。どうも最近「この接続は安全ではありません」というhttpsにかかわる警告が多いと感じていた。ChatGPT o3に聞いてみると,それが原因だった。
A(ChatGPT o3): 
(前後略)
Safari 18 以降(macOS Sonoma/iOS 18 ベータなど)には 「HTTP はブロックして常に HTTPS だけ許可」 という新機能があります。これが有効になっていると、たとえ localhost(127.0.0.1)でも http://… へのアクセスは遮断され、画像のようなエラー
Navigation failed because the request was for an HTTP URL with HTTPS‑Only enabled (WebKitErrorDomain: 305)
が表示されます。ローカル開発サーバや Jupyter Lab は既定で HTTP を使うため、Safari が弾いてしまうわけです。
解決方法も教えてくれたのだけれど,SSLの証明書を設定するところがどうもうまくいかない。困った。デフォルトのブラウザをSafari から Chrome にスイッチすると,Chrome では jupyter lab が起動したのでとりあえずはOKだが,それはそれで面倒な気もする。

四苦八苦してChatGPT o3を問いただした結果,次のようにすればよい。
Step 1 : Jupyter Lab を HTTP で起動
ターミナルを開く
つぎのコマンドを実行
# 証明書オプションを付けずに純粋な HTTP で起動
jupyter lab --port 8889 --ip 127.0.0.1 --no-browser

起動ログに
http://127.0.0.1:8889/lab?token=dfbc5bbd50a3b13f317435a1bfa1245684e3f0afd315ba96
が表示されれば サーバは準備完了(緑色の [I ... ServerApp] 行が目印)。

このURLをブラウザに直接貼付けたところうまくいったので,これでよしとする。

2019年3月25日月曜日

JupyterLab

JupyterLabのすすめ」という記事があったので,JupyterLabをさっそくインストールしてみた。

退職後の4月から非常勤講師としてこれまでと同じような授業を担当する。とりあえず,現在使用しているコンピュータ(MacProやMacBookProなど)を明け渡さなければならないので,MacBookAirに新しい環境を構築して移動作業をしている。その結果,現在の自分の環境は,次のようになっている。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
※mbaの設定
(1) homebrewの導入
    xcode-select —install (コマンドライン開発ツールの導入)
    sudo xcodebuild -license
    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
(2) homebrewの練習と基本環境の設定
    brew update
    brew upgrade
    brew doctor
    brew install wget
    brew install nkf
    brew cask reinstall xquartz
    brew install lynx
    brew install w3m
    brew install xxxx (xxxxをインストール)以下適当に繰り返した。
(3) python3環境(jupyterを含む)の設定
    brew install python3
    python3 -V
     Python 3.7.2
    pip3 -V
     pip 19.0.2 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
    python -V
     Python 2.7.10
    ・これで,python3がインストールできた。
    which python
     /usr/bin/python
    which python3
     /usr/local/bin/python3
    ・pip3のアップデート方法
    pip3 install --upgrade setuptools
     Requirement already up-to-date:...
    pip3 install --upgrade pip
     Collecting pip
    ...
     Successfully installed pip-19.0.3
    ・環境設定してその中で作業
    python3 -m venv env
    . env/bin/activate
    (env) … python -V
     Python 3.7.2
    (env) … pip -V
     pip 18.1 from /Users/admin/env/lib/python3.7/site-packages/pip (python 3.7)
    (env) ... pip install --upgrade pip
    (env) ... pip install --upgrade setuptools
    (env) ... pip install numpy
    (env) ... pip install scipy
    (env) ... pip install scikit-learn
    (env) ... pip install matplotlib
    (env) ... pip install Pillow
    (env) ... pip install sympy
    (env) ... pip install jupyter
    (env) ... deactivate
(4) julia環境の設定
    https://julialang.org/downloads/
    からダウンロードすればコマンドラインで実行可能に
    echo 'export PATH=$PATH:/Applications/
Julia-1.1.app/Contents/Resources/julia/bin' >> ~/.bashrc
    source ~/.bashrc
    julia
    julia> using Pkg
    julia> Pkg.add(“IJulia”)
    export PATH=$PATH:/Users/admin/env/bin
    jupyter notebook
    これで,jupyter が起動して,julia 1.1 が使えるようになった。
    versioninfo()
    using Pkg
    Pkg.update()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(5) jupyterlabの導入と起動は簡単であった。
    pip3 install jupyterlab
    jupyter lab
(付)JupyterLab環境での設定
Settings -> Advanced Settings Editor -> Notebook
codeCellConfigのlineNumbersをTrueにする。
Settings -> Advanced Settings Editor -> Extension Manager -> "enabled": trueにする。

Mathematicaノートブックを長らく使ってきたので,Jupyter Notebook(この記事もWikipedia中文はあるが日本語はない・・・)はすんなりと馴染むことができた。JupyterLabはJupyter Notebookの後継で,今後はこれに移行するのだそうだ。まだ違いがよくわからないが,Jupyter Notebook のことだってそれほどわかっていたわけではない。ぼちぼちやっていくことにしよう。

2019年6月3日月曜日

ウルフラムとペレス

辰己さんが,Jupyterの発音は,ジュパイターではなく,ジュピターじゃないのとFacebookでつぶやいていた。これに対して中野さんは,普通はジュピターでしょと。あれ・・・,pythonオリジンだからジュパイターだと思い込んでいた私はどうしよう・・・

ということでさっそくYouTubeに尋ねてみると,いきなりIPythonJupyterの開発者のフェルナンド・ペレス2017年のJupyterConの講演にぶちあたった。はい,正解はジュピターでした。Project Jupyterにもちゃんと Jupyter=/ˈdʒuːpɪtər/ と書いてある。

ところで,そのペレスは,Pythonの対話型環境であるIPythonを,Wolfram Notebookにインスパイアーされて開発したとある。つまり,ノートブック型インターフェースの始まりは,スティーブン・ウルフラムによるMathematicaであった。その後,IPythonからスピンオフしたプロジェクトがJupyterを創り出す。Jupyterの意義は単に特定の言語の対話型環境をつくることではなく,「Project Jupyterは,オープンソースソフトウェア,オープンスタンダード,そして何十ものプログラミング言語にわたるインタラクティブコンピューティングのためのサービスを開発するために存在します」であった。Jupyter+Julia+α連合軍をみて,Wolfram言語も開放政策に舵をきったのではないか。

スティーブン・ウルフラム(1959-)はイギリス生まれで,17歳でオックスフォードに入学し,ゲルマンに誘われて18歳でカリフォルニア工科大学に入り,1979年に20歳でPh. D.をとる。専門分野は素粒子物理学の理論であったが,1981年にはMathematicaの前身のSMP(Symbolic Manupilation Program)を商業化し,複雑系の物理学の研究(Celuller Automata)を進めた。

一方,フェルナンド・ペレスはコロンビア生まれで,コロンビアのアンティオキア大学で物理学を学び,コロラド大学で素粒子物理学(格子QCD理論)のPh. Dをとる。それ以前には,フラクタル,半古典カオスなども研究しているようだ。2008年にはカリフォルニア大学バークレー校に移り,ソフトウェア開発に主軸を置くことになる。

なんだかよく似たところがある2人である。

2021年12月1日水曜日

Julia 1.7.0

11月30日にJulia 1.7.0がリリースされた。普段は,しばらく様子を見てからインストールするのだけれど,macOS Apple Siliconにネイティブ対応したようなので,早速試してみる。

メジャーバージョンアップの際には,いつも困ってしまうのだが,今回もすんなりとはいかなかった。とりあえず手順を書いてみるが,何度もやり直しているので,ヒステリシスがあるかもしれない。

 (1) julia 1.7.0 packege ダウンロード&インストール
 (2) .zshrcのパス変更 % cat .zshrc
export PATH=/Applications/Julia-1.7.app/Contents/Resources/julia/bin
 (3) ln -s /Applications/Julia-1.7.app/Contents/Resources/julia/bin/julia julia
 (4) julia -> using Pkg -> Pkg.add(“IJulia”) -> Pkg.build(“IJulia”)
 (5) brew install jupyter
 (6) jupyter kernetspec list -> jupyter kernetspec uninstall julia1.6.0
 (7) jupyter notebook -> OK
 (8) pip3 uninstall jupyterlab -> pip3 install jupyterlab
 (9) jupyter lab build -> OK


とりあえず,jupyter notebook も jupyter lab も動いたが,パッケージの整合性などからか,これまでのコードがすべてそのまま動くというわけにはいかなかった。ボチボチ様子見よう。

P. S. とりあえず,Plots 周りの不整合はなんとかなった。たいした処理をしていなくても,ときどきカーネルが死んでしまうのが問題だ。

2019年5月26日日曜日

Wolfram Engine

MathematicaWolfram|Alphaでおなじみのウルフラム(昔はウルフラム・リサーチだった)が,それらのコアになる計算エンジンをWolfram Engineという名前で,開発者向けに無償で開放した。すごい。pythonやC++で開発するアプリにライブラリとして組込むことができ,Wolfram Knowledgebaseへのアクセスができるとのこと。

各プラットフォーム用に3GB程度のアプリケーションをダウンロードし,Wolfram IDを取得すれば使用ライセンスが得られる。Mathematicaをコマンドラインから利用できるだけでなく,jupyter notebookから使える。これらのノートブック・インターフェースも元々は,Mathematica Notebook に習ったものではないかと思う。

さて,twitterで教えてもらったjupyterを使えるようにする手順は次の通り。まずWolfram Engineをインストール,ライセンスを取得しコマンドラインで起動することを確認する。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
git clone github.com/WolframResearch/WolframLanguageForJupyter.git
cd WolframLanguageForJupyter
./configure-jupyter.wls add
jupyter notebook
 または
jupyter lab
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

黒木さんの「Free Wolfram EngineをJupyterで使う方法」が例題紹介も含めて詳しい。


2023年12月22日金曜日

astropy

Pythonで太陽系の天体位置を描画してみる」というのを見つけた。python上の天文学統合データ処理環境であるastropyというライブラリを使うものだ。

jupyter lab を起動して,さっそく試してみると,いきなりmatplotlibが見つからないというところでつまづいた。以前に試したpythonのコードでは,matplotlibを読み込んでちゃんと作図がでてている。その古いコードでもエラーがでてきた。

macbook air の環境は,基本的にはhomebrew で更新しているので安心できるのだが,問題は,python環境である。python は3.9〜3.12までの複数のバージョンが同居することになっている。これは基幹ソフトなので,下手に古いものを消してしまうとややこしいのだ。そこで,一般には,python環境を指定するpyenvとかvenvで仮想環境を設定した上で,様々なライブラリを加えていくことになる。

が,ですね,それはそれで面倒なので,アドホックにバージョンアップを繰り返しながら,pip install ホゲホゲをつづけているために,わけわかめ状態になっている今日この頃なのだ。jupyterlabもバージョンが上がるたびに,見えなくなってしまうので,毎回 brew link jupyterlabを繰り返す始末だ。70歳になると,自分の体の中のDNA情報システムだけでなく,外の電子情報システムまで老化が進んでくるということだ。

まあ,macOSの場合は,機種更新の際に新規インストールすればそれなりに,なんとかなるかもしれないけれど,複雑な記録や認証情報を引き継ぐのは厄介だ。特に,iOSでは,指紋認証を含め,現金が動く認証アプリがウヨウヨいるので,次期機種更新のことを考えただけで気が遠くなりそうだ。


話を戻して,astropyについて。jupyter環境でpython kernelを立ち上げているところから,!エスケープで!pip listをやってみると,matplotlibは存在している。!pip install matplotlib でも致命的エラーはでない。ChatGPTに相談してみると,カーネルがどうなっているか確認せよとのこと。
 jupyter kernelspec list
  python3              /opt/homebrew/Cellar/jupyterlab/4.0.9_2/libexec/lib/python3.12/site-packages/ipykernel/resources
  julia-1.9            /Users/koshi/Library/Jupyter/kernels/julia-1.9
  maxima               /Users/koshi/Library/Jupyter/kernels/maxima
  wolframlanguage12    /Users/koshi/Library/Jupyter/kernels/wolframlanguage12
はいはい,表に見えていたのは python3.11.6だったけれど,実は,python.12.1が使われており,ここにはmatplotlibが入っていませんでした。さっそく,このポイントで,matplotlibとかscipyとかastropyとかpytest-astropyとかをpipでインストールした。別の参考資料に指示があった,astropyが正しく導入できているかどうかのテストも,試行錯誤の後にOKとなった。

   cd /opt/homebrew/Cellar/jupyterlab/4.0.9_2/libexec/bin

   ./pip install astropy

   ./pip install ephem

import astropy as ap
>>> ap.test()
platform darwin -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0

Running tests with Astropy version 6.0.0.
Running tests in lib/python3.12/site-packages/astropy.

Date: 2023-12-19T22:26:53
Platform: macOS-14.2-arm64-arm-64bit
Executable: /opt/homebrew/Cellar/jupyterlab/4.0.9_2/libexec/bin/python
Full Python Version: 
3.12.1 (main, Dec  7 2023, 20:45:44) [Clang 15.0.0 (clang-1500.0.40.1)]
encodings: sys: utf-8, locale: UTF-8, filesystem: utf-8
byteorder: little
float info: dig: 15, mant_dig: 15

Package versions: 
Numpy: 1.26.2
Scipy: 1.11.4
Matplotlib: 3.8.2
h5py: not available
Pandas: not available
PyERFA: 2.0.1.1
Cython: not available
Scikit-image: not available
asdf-astropy: not available

Using Astropy options: remote_data: none.

rootdir: /opt/homebrew/Cellar/jupyterlab/4.0.9_2/libexec
plugins: astropy-0.11.0, remotedata-0.4.1, hypothesis-6.92.1, cov-4.1.0, filter-subpackage-0.1.2, astropy-header-0.2.2, anyio-4.1.0, mock-3.12.0, doctestplus-1.1.0, arraydiff-0.6.1
collected 28085 items / 5 skipped  

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
========== 27425 passed, 425 skipped, 240 xfailed, 80 warnings in 184.56s (0:03:04) ===========
<ExitCode.OK: 0>
ところが,やっぱりもとの太陽系の天体位置描画が動かない。最後に,Animation関数中のblit=False をblit=Trueにしてようやく何か表示されてほっとしたが,そこまでで内部にエラーがあるとのメッセージが出て異常終了してしまった。チーン。


図:ここまでは出たけれどアニメーションにはなっていなかった残念な図

astropyはイメージ処理やデータ処理を本業とした,プロ用の本格的なシステムだった。

2023年1月17日火曜日

Pythonのタートルグラフィックス

Π角形からの続き

Pythonで同じようなタートルグラフィックスが使えないかと調べると,turtleという呼ばれるライブラリがあらかじめ用意されており,楽勝かと思われた。

お絵書きでPythonを学ぶというページにしたがって,コマンドラインで実行してみると,画像が出ない。どうやら,pythonからtcl-tkへのつなぎが必要らしい。brew install python-tk とごそごそやっていたらすぐ動くようになった。

落とし穴があった。インタラクティブな実行ではなく,プログラムファイルを作って一括処理を試みたときだ。見本のファイル名をturtle.pyとしたのがまずくて,循環参照のエラーが出てしまった。その原因がわからなくて踠いていたが,こういうときはエラーメッセージで検索するのが一番である。ファイル名をkame.pyとして事無きを得た。

次により大きな罠が控えていた。jupyter環境でpythonを実行させるほうが便利だろうと,kame.pyのコードをjupyter lab で実行させたところ,_tkinterが見つからないエラーで一歩も進めない。ネットの記事にはpyenvコマンドを駆使して,pythonを一回アンインストールしてからtcl-tkをインストールした上で,再度pythonをインストールすればよいとある。

その手順通りのままには進めずに四苦八苦したものの,指示通りにコマンドラインからtcl-tkを使ったライブラリが正しくインストールできたようには見えた(これは最初の段階と本質的には変わっていない)。それでもjupyterでは同じエラーが出てだめなのだ。どうやら,jupyterのpythonではturtleが使えないということになっているらしい(未確認)。

ProcessingのプログラムをPythonに移植したものを次に示す。

#!/opt/homebrew/bin/python3

# usage ./kame.py m n 

import turtle

import sys


m = float(sys.argv[1])

n = float(sys.argv[2])

r = 0

g = 0

b = 0

turtle.colormode(255)


turtle.begin_fill()

for i in range(255):

    r = (r+3) % 25

    g = (g+5) % 255

    b = (b+7) % 255

    turtle.pencolor(r,g,b)

    turtle.forward(200)

    turtle.left(360/m*n)

turtle.end_fill()


turtle.done()

pythonのトレーニングをしたと思うことにする。コマンドラインでm,nは入力しているが,簡単な有理数でないものを入れたい場合は,m=3.1415926 n=1 を代入すればよい。

図:pythonのΠ角形タートルグラフィックスの途中

2021年5月18日火曜日

MacBook Air M1(4)

 MacBook Air M1(3)からの続き

4月18日にMacBook Air M1 がやってきてからちょうど1ヶ月になる。このところCPU負荷がつねに30-40%を越えて,CPU温度が70-80℃となっていた。Apple シリコンのM1チップを搭載したMacは発熱が少ないのが特徴だったはずなのになぜだ。すべてのアプリを終了させてスリープした状態で一晩寝かせ,朝を迎えてもパームレスト部分が暖かいのである。

さすがにおかしいと思って,アクティビティモニタで調べてみると,なんとアンチウィルスのSophosが非常に大きなCPUタイム消費の原因だった。さっそくこれを取り除いた。ウィルス対策は,ClearnMyMacのアンチウィルス機能に頼ることにする。おかげで,CPU負荷は5%,温度は35℃前後まで下がった。やれやれ。

なお,MacBook Air M1(2)で書いていた「jupyterlabが動かない問題」はしばらく前に以下のようにして解決した。これで残ったのは pythonの機械学習ライブラリ scikit-learn が動かないことくらいである。

/opt/homebrew/opt/python@3.9/bin/python3.9 -m pip install --upgrade pip
pip3 install jupyterlab
jupyter lab -> error
jupyter lab build -> error
brew install node.js
jupyter lab build
jupyter lab

2021年5月21日金曜日

Rをjupyterで

 ラベル付き散布図を描きたいのだ。なかなかうまく探しきれず,Rが一番手っ取り早そうなので,Rをjupyterから使えるようにすることを試みた。

とりあえず,brewでRをインストールすると最新のarm版だった。

brew install R
R —version
R version 4.1.0 (2021-05-18)
次にコマンドラインでRを起動し,R環境の中で3つのコマンドを実行する[1]。
>install.package(“devtools”) … CRAN ダウンロードは Japan/Tokyo 47 から

1つ目のコマンド(上記)で次のエラーが出てしまった。

>1: install.packages("devtools") で:
> installation of package ‘gert’ had non-zero exit status
>2: install.packages("devtools") で:
> installation of package ‘usethis’ had non-zero exit status
>3: install.packages("devtools") で:
> installation of package ‘devtools’ had non-zero exit status
>> Configuration failed to find libgit2 library. Try installing:
> * brew: libgit2 (MacOS)

そこで,brewでlibgit2をインストールしてから再挑戦する。
brew install libgit2
R
> install.packages("devtools")
> devtools::install_github("IRkernel/IRkernel")
> IRkernel::installspec()
jupyter lab … これで OK!
これでうまくいった。

写真:jupyterlabの起動画面

2021年5月22日土曜日

ラベル付き散布図

Rをjupyterでからの続き 

ラベル付き散布図と格闘している。

(1) Excel が一番簡単そうで,調べるとすぐに事例が見つかった。しかし,これはWindows版の場合であり,残念ながらMac版(Microsoft Office 2019 Home & Student)にはその機能がなかった。

(2) Rは統計グラフがお手の物のはずなので多分あるだろう。そこでRをjupyter上に持ってきた。これも簡単に事例が見つかった。見本通りにやってみると,

#今回使うライブラリ
library(maptools)
#データの準備
CC <- c("CAN","DNK","FIN","FRA","DEU","ITA","JPN","KOR","NLD","POL","SWE","GBR","USA")
PAR <- c(13.7,15.7,16.6,16.6,20.2,20.1,22.1,10.3,14.9,13.5,17.6,15.6,12.8)
SE <- c(3.8,7.4,8.6,11.5,8.5,12.2,9.3,1.9,5.4,8.9,9.4,6.2,5.5)
sample <- data.frame(PAR, SE)
rownames(sample) <- CC
以下のerrorが出て(これは例題に対しては実害はなかったが)日本語も化けてしまう。

Checking rgeos availability: FALSE
Note: when rgeos is not available, polygon geometry computations in maptools
depend on gpclib, which has a restricted licence. It is disabled by default;
to enable gpclib, type gpclibPermit()

ただ,日本語文字化けを避けるには(エラーは残るものの),次のようにすればよかった。
par(family= "HiraKakuProN-W3")
plot(sample$PAR, sample$SE, xlab="65歳以上人口比率(%)", ylab="対GDP比高齢者向け社会支出(%)")
pointLabel(x=sample$PAR, y=sample$SE, labels=rownames(sample))
図 R on jupyter のラベル付き散布図の例

(3) juliaではラベル付き散布図の例が探せなかったが,labelled scatter をキーワードとするといとも簡単に解が見つかってしまった。こちらは日本語もすんなり通ってくれる。

2023年5月23日火曜日

JuliaのPyCallとSymPy

Maxima-Jupyterからの続き

Mathematicaの代替となるフリーの数式処理言語として,Maximaが候補にはなったが,やはり何となく使いにくい。Jupyter上のmaximaで終端記号のコロンを忘れるだけで毎回大量のエラーメッセージが出るのにも閉口する。

とすれば,Juliaで数式処理ということになる。標準的な手法としては,Pythonの数式処理モジュールであるSymPyを使えばよいが,先日からPython 呼び出しのPyCallとSymPyがエラーになっている。実害がなかったので放置していたけれど,再度見直してみた。

これまでは,googleで問題解決を図っていたが,必要な情報にたどり着くまではいくつものサイトを渡り歩く必要があった。そこに登場したChatGPTはかなりよい仕事をしてくれるので助かる。問題は,PyCallにあったので,エラーコードを与えて尋ねてみた。
Q:User
Juliaで,PyCallとSymPy がうまく動きません。
例えば,
(中略)
Error building `PyCall`: 
どうしたらいいでしょう。

A:ChatGPT
問題は、おそらく libpython が見つからないために発生しているようです。以下の手順で問題を解決してみてください。

Julia REPLを終了して、再度起動してください。

次に、次のコマンドを実行して、PyCallを再構築し、環境変数を設定してください。
julia
Copy code
ENV["PYTHON"] = "/Users/koshi/.julia/conda/3/bin/python"
import Pkg
Pkg.build("PyCall")

もしまだ問題が解決しない場合、次の手順を試してください。
(中略)
もしまだ問題が解決しない場合、PYCALL_DEBUG_BUILD 環境変数を設定して、デバッグ情報を取得してみてください。
(中略)

これで、エラーが発生している理由に関する追加情報が得られるはずです。その情報を使用して、問題を特定し、解決策を見つけることができます。

SymPyの問題が解決しない場合、まずPyCallが正常に機能していることを確認してください。その後、SymPyの再構築を試みてください。

これらの手順のいずれかが、PyCallとSymPyの問題を解決するはずです。それでも問題が解決しない場合は、エラーメッセージとともに質問してください。

で最初のPYTHON環境変数を /opt/homebrew/bin/python3.11 に置き換えて(だったかな?) なんとかクリアすることができた。

2019年5月9日木曜日

スリンキーの自由落下(1)

@sekibunnteisuu @irobutsu @Yh_Taguchi @Hal_Tasaki @genkuroki などで以前から話題になっていたスリンキーの自由落下をようやくいまごろ目にした。最も簡単な力学モデルについて,田口さんがすでにQiitaに書いているのだけれど,自分でもやってみた。黒木さんのjuliaの計算は凄いし,田崎さんの物理的説明もわかりやすいし,前野さんの動画もおもしろいのだった。

質量$m_1$の粒子1と質量$m_2$の粒子2が,自然長 $L$,バネ定数 $k$ の軽いバネの両端に取り付けられている。粒子1を原点に置いて支えながら,鉛直下方に静かにバネを垂らすと粒子2は $x=L+m_2 g /k $の位置で静止する。時刻 $t=0$ で粒子1の支えを静かに取り去ると,2つの粒子は重力とバネの弾性力によって運動を開始する。

運動方程式と初期条件は,
\begin{equation}
\begin{aligned}
m_1 \ddot{x} _1 &= m_1 g + k (x_2 - x_1 - L)\\
m_2 \ddot{x} _2 &= m_2 g - k (x_2 - x_1 - L)\\
x_1(0) &= 0, \quad \dot{x}_1(0)=0\\
x_2(0) &= L+\frac{m_2 g}{k}, \quad \dot{x}_2(0)=0
\end{aligned}
\end{equation}
 ここで,重心座標 $x_G=(m_1 x_1 + m_2 x_2 )/M$ と相対座標 $x=x_2-x_1$ を導入する。ただし,全質量を $M=m_1+m_2$ ,換算質量を $\mu = m_1 m_2 /M $ とする。

運動方程式と初期条件は,
\begin{equation}
\begin{aligned}
M \ddot{x}_G &= M g \\
\mu \ddot{x} &=  - k (x - L)\\
x_G(0) &= \frac{m_2}{M} (L+\frac{m_2 g}{k}), \quad \dot{x}_G(0)=0\\
x(0) &= L+\frac{m_2 g}{k}, \quad \dot{x}(0)=0
\end{aligned}
\end{equation}これを解くと,$\omega = \sqrt{k/\mu}$として,
\begin{equation}
\begin{aligned}
x_G(t) &= g t^2 /2 + \frac{m_2}{M} (L+\frac{m_2 g}{k})\\
x(t) &= L+ \frac{m_2 g}{k} \cos \omega t\\
x_1(t) &= g t^2/2 + \frac{m_2 g}{k}(\frac{m_2}{M} - \frac{m_2}{M} \cos \omega t)\\
x_2(t) &= L+ g t^2/2 + \frac{m_2 g}{k}( \frac{m_2}{M} + \frac{m_1}{M} \cos \omega t)
\end{aligned}
\end{equation}

これをMathematicaでグラフ化すると,
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
x1[t_] := g/2 t^2 + m2 g/k 
(m2/(m1+m2) - m2/(m1+m2) Cos[Sqrt[(m1+m2)k/(m1*m2)]t])
x2[t_] := L + g/2 t^2 +  m2 g/ k

(m2/(m1+m2) + m1/(m1+m2) Cos[Sqrt[(m1+m2)k/(m1*m2)]t])
k = 5; m1 = 1; m2 = 1; g = 10; L = 1;
Plot[{-x1[t], -x2[t], -x2[t] + L}, {t, 0, Pi/4}]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


[1]積分定数:ばねの落下(togetterまとめ)https://togetter.com/li/1345873
[2]前野昌広:コイルバネの落下 https://twitter.com/irobutsu/status/1125581991645081600
[3]田口善弘:ばねの落下 https://qiita.com/Yh_Taguchi/items/e0d82f28447a8d5a2726
[4]W. G. Unluh:(堀田さん紹介)The Falling Slinky https://arxiv.org/abs/1110.4368
[5]田崎晴明:ばねでつながれた粒子の運動 http://www.gakushuin.ac.jp/~881791/mathbook/pdf/slinky20190509.pdf
[6]黒木玄:落下するバネ https://nbviewer.jupyter.org/gist/genkuroki/e317b4b2dd5c19e6b228b75f420aa699

スリンキーの自由落下(2)に続く

2021年4月24日土曜日

MacBook Air M1(3)

 MacBook Air M1(2)からの続き

前回,Processingが動かないと言ったが,正しいJDKが入っていなかったからなのかもしれない。arm対応のJDKが,AZULから入手できた。OpenJDK Runtime Environment Zulu16.28+11-CA (build 16+36) ということで,Processing 4.0α3をインストールしたところ無事に動作した。

その他は次のとおり

(1) Wolfram Engine 12の導入ができた。これをjupyterで実行したところ,無事にMathematicaが動作したが,バージョンが12.2かどうかはわからなかった。これが起動している状態では,カーネルの動作数が制限を越えたということで,元々インストールしていた Mathematica 12.0は動かなかった。

(2) iPad Proを sidecar で繋ぐことができた。ミラーリングでも別ディスプレイでも動くことは動くのだけれど,なぜか想像していた動作とは違うのと,本体の解像度が勝手に変わったりして微妙に使いにくい。macOSX用の GoodNotes 5 があるので,なんとかタブレット代わりには使えるとは思うが,AirDrop が優秀なのでつながなくても十分に使えてしまう。

(3) Time Capsuleのタイムマシンが動いた。無線でつながっている上に,2TBのハードディスクが遅いので,フルバックアップに10時間ほどかかるがそれでも一応の安心感は得られる。

(4) Apple USB スーバードライブがつながった。ドライブが空の状態ではデスクトップにアイコンが表示できないのでどうかと思ったが,ディスクを入れると無事に認識してアイコンが表示された。

(5) iPhone SE2 のバックアップができた。このためMacBook Air M1の1TBストレージの使用量は330GB,残量は700GBを切った。

(6) 環境設定のキーボードで指定した後も,標準の日本語入力で\と¥の入れ替えがうまくいかないような気がしたが,今日は正しく動作している。なんだったのか?



2024年7月11日木曜日

サイコロの雌雄

70年以上生きていても知らないことがたくさんある。サイコロには雌雄がある(普通のサイコロは雌)というのだ。まあ,いわれてみれば,サイコロの鏡像は自分自身とは重ならない。学部の4回生のセミナーでLeeとYangのパリティ非保存の論文をさんざん読み込まされた割には,自らの不明を恥じるしかない。

さっそく,図示するため生成AIに頼るのだが,これが一筋縄では行かない。最近,巷で流行る石○構文のようなもので,空気が読み切れない部分的に論理的な無駄なやりとりの行き違いが山のように蓄積していく。ときどき一発で正解がでることもあるが,ちょっと相手の機嫌を損ねると,三途の河原送りで石を積み上げ続ける羽目に陥る。
Q(koshix):
立方体のサイコロの展開図を描画するpythonプログラムを下さい。
展開図は6つの正方形の面が接して並ぶものです。
各面には1〜6の数が適当は大きさの小丸(ドット)で表現されます。
展開図を組み立てたときに向かいあう面の数の和が7になるように配置されます。
1の面の小丸は少し大きい赤色ですが,他の面の2-6の小丸は黒です。 
A(Claude 3.5 Sonnet):
→SVGファイルが生成されて保存されるはずが失敗
→画面にも表示されないので,pngファイルに変更
→画面に出力された(OK)ので,雌雄を判定させる。

Q(koshix):
以下の定義からこのサイコロの展開図の雌雄を判定してください。

サイコロの目の割り振りは、ほぼ「天一地六東五西二南三北四」(雌サイコロ)と決まっている。これは、日本だけの特徴ではなく、世界的な共通点である。ただし、「南三」でなく「北三」になっているサイコロもあり、「南三」を雌サイコロ、「北三」を雄サイコロと呼ぶこともある(異性)。サイコロの雌雄の見分け方は、1・2・3の面が集まる頂点を正面に置き、1→2→3の順に見たときに時計回りになるのが雄サイコロ、反時計回りになるのが雌サイコロである。

→ただしく雌であると判定できた,エライ
→雌雄の両方の展開図を上下に出力させる
→日本語ラベルが文字化けしているので修正させる
→なかなか修正できず何度も失敗する
→こちらから日本語設定のサンプルコードを与える
→できた!日本語ラベルと展開図が重なっているので右シフトを依頼
→Claude 3.5 Sonnetの無料制限オーバーで停止,PROへの移行を勧められる

ChatGPT-4oに移動
Q(koshix):
サイコロの雌雄の展開図を表示する以下のpythonプログラムで,日本語ラベルと展開図が少し重なっているので,展開図を少し右に動かしてください。
Q(koshix):
今度は,展開図の右側が画面からはみ出して欠けてしまいました。なんとかなりませんか。
Q(koshix):
雄サイコロの方は向かいあう目の数の和が7になっていないところがあります。
4の目と5の目を入れ替えてください。
Q(koshix):
いや、そうではなくて,1,2,3の配置は元のままでよかったのです。それらと6はそのままで,4の目と5の目だけを入れ替えてという意味です。
Q(koshix):
雄のサイコロの2の目と3の目も入れ替わりましたよ。そこは元のままなのです。
Q(koshix):
雄サイコロはまだ直っていませんよ
この辺で,人間のほうが力尽きてしまったので,自分で修正したのが以下のコードである。賢いような・・・そうでもないような・・・プログラミングにおいて人間に最も必要とされるのは忍耐強い対話力だ。いわゆるプログラミング的思考力や論理的思考力ではない。

from PIL import Image, ImageDraw, ImageFont
from IPython.display import display
from matplotlib import rcParams
import matplotlib.font_manager as fm

def create_dice_face(draw, x, y, size, number):
    # 正方形を描画
    draw.rectangle([x, y, x + size, y + size], outline="black", width=2, fill="white")
    
    dot_positions = {
        1: [(0.5, 0.5)],
        2: [(0.25, 0.75), (0.75, 0.25)],
        3: [(0.25, 0.75), (0.5, 0.5), (0.75, 0.25)],
        4: [(0.25, 0.25), (0.25, 0.75), (0.75, 0.25), (0.75, 0.75)],
        5: [(0.25, 0.25), (0.25, 0.75), (0.5, 0.5), (0.75, 0.25), (0.75, 0.75)],
        6: [(0.25, 0.25), (0.25, 0.5), (0.25, 0.75), (0.75, 0.25), (0.75, 0.5), (0.75, 0.75)]
    }    
    dot_size = int(size * 0.15) if number == 1 else int(size * 0.1)
    dot_color = "red" if number == 1 else "black"
    
    for px, py in dot_positions[number]:
        cx, cy = int(x + px * size), int(y + py * size)
        draw.ellipse([cx - dot_size//2, cy - dot_size//2, cx + dot_size//2, cy + dot_size//2], fill=dot_color)

def create_dice_net(draw, start_x, start_y, size, is_female):
    # 展開図の配置: 
    #     [4]
    # [2][1][5][6]
    #     [3]
    faces_female = [
        (4, size, 0),        # 上面
        (2, 0, size),        # 左面
        (1, size, size),     # 前面
        (5, size * 2, size), # 右面
        (6, size * 3, size), # 後面
        (3, size, size * 2)  # 下面
    ]    
    faces_male = [
        (5, size, 0),        # 上面(4と5を入れ替え)
        (3, 0, size), # 左面
        (1, size, size),     # 前面
        (4, size * 2, size), # 右面(4と5を入れ替え)
        (6, size * 3, size), # 後面
        (2, size, size * 2)  # 下面
    ]    
    faces = faces_female if is_female else faces_male
    
    for number, x, y in faces:
        create_dice_face(draw, start_x + x, start_y + y, size, number)

def create_both_dice_nets(size=100):
    # フォントの設定
    font_path = '/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc'  # 適切な日本語フォントファイルを指定してください
    font_prop = fm.FontProperties(fname=font_path)
    rcParams['font.family'] = font_prop.get_name()
    
    # PILで使用するフォントを設定
    pil_font = ImageFont.truetype(font_path, 20)

    # 展開図の全体サイズを設定
    img_width, img_height = size * 5, size * 7 # 高さを2倍+余白に
    img = Image.new('RGB', (img_width, img_height), color='white')
    draw = ImageDraw.Draw(img)
    
    # 雌サイコロの展開図を描画
    create_dice_net(draw, 50, 20, size, True)
    draw.text((10, 10), "雌サイコロ", fill="black", font=pil_font)
    
    # 雄サイコロの展開図を描画
    create_dice_net(draw, 50, 20 + size * 3 + 50, size, False)  # 50ピクセルの余白を追加
    draw.text((10, size * 3 + 60), "雄サイコロ", fill="black", font=pil_font)
    
    return img

# 画像を生成し、Jupyter Notebookに表示
both_dice_nets = create_both_dice_nets(size=100)
display(both_dice_nets)

# PNG画像として保存(オプション)
both_dice_nets.save("both_dice_nets.png")
print("both_dice_nets.png が生成されました。")


図:サイコロの雌雄(雌 1→2→3 反時計回り,雄 1→2→3 時計回り)

P. S. 上記の配置はサイコロキャラメルで確認した。実際には,2の目,3の目,6の目の配置がそれぞれ2パターンあるので,1つの性別に対して8パターンの配置がある。普通のサイコロは,1-2-3の頂点から見て,2や3の目が頂点から放射状に配列するのではなく,頂点のまわりを取り囲むように配列していることになる。

2023年2月23日木曜日

wolframscript

Wolfram Engine からの続き

ChatGPTは,因数分解ができないので,Wolfram Alphaと連携すればよいという話について。

ChatGPT数学が苦手である。Stephen Wolframもそう言っている。BingChatに聞いてみると,WolframAlphaのAPIを使う必要があるようだ…というかそんなことは先刻承知。それにはライセンスが必要なので少々ためらう。何か他の方法はないものかと眺めていると,wolframscriptというWolfram言語のコマンドライン版が見つかった。

とりあえずインストールしてみようと(すでに当初の目的から話がずれつつある),確かめてみれば,自分のMacBook Air M1には既にインストール済みだった。以前,JupyterでWolfram言語を使うためにWolfram Engineを導入した時にインストールしていたらしい。うかつなことだ。

最近,Mathematica本体を立ち上げるのが億劫な場合,コマンドラインでフリーのMathicsを使うことが多かった。ただ機能はかなり制限されている。今回,はじめて wolframscript を実行してみると,Mathicsよりは大分制限が少ないというか,インストール済みのMathematica 12.0 の機能がフルに使えるのかもしれない。そこで次のような単独で実行可能なスクリプトも組めるのだった。拡張子は .wls である

#!/usr/local/bin/wolframscript


(* ::Package:: *)


n=ToExpression[$ScriptCommandLine[[2]]]

Print[RandomInteger[{1,6},n^2]]

コマンドライン引数(文字列変数)が,$ScriptCommandLine[[2]]以下で取得できる。これを整数型に変換するために,ToExpression[] 関数を使った。これで,プログラム外から与えた変数に対して,Wolfram言語での処理が可能になる。

[2]WolframScript(Wolfram言語&システム ドキュメントセンター

2019年1月14日月曜日

Juliaにおける変数のクリア

Jupyter 上の Juliaでいろいろな作業をしていると,使用している変数や関数の名前が重なってしまうことがある。Ver. 0.6には,workspace() というコマンドがあって,変数のバインディングをクリアできたようだが,Ver. 1.0ではこの機能がなくなっている。対処法を調べてみたのだが・・・

(1) Revise.jl を用いる。ちょっと違うような感じ。

(2) a=nothing  とする。ちょっと違うような感じ。

(3) 以下のコードを実行する(Startup.jl に導入),ちょっと違うような感じ。

function workspace()
 atexit() do
  run(`$(Base.julia_cmd())`)
 end
 exit()
end

これならば,Kernelの再起動でよいのか。


2022年3月20日日曜日

マークダウン(2)

 マークダウン(1)からの続き

markdownを使うためのエディタとして何がいいのかを調べてみた。【2022年版】Markdown(マークダウン)エディタ厳選まとめなど色々ある。

一つは,Visual Code StudioAtom などの高機能プログラム開発用ソースコードエディタである。元々日常的に使っているのであればこれで良いのだけれど,このためだけに大掛かりな道具立てを持ってくるのは,ちょっと本末転倒な感じがして,markdown の簡素さと相容れない。

そうなると,ウェブアプリとかローカルアプリになる。Boostnote,Joplin,Bear,Quiverなどを眺めてみたけれど,どれも面倒な印象だ。その中では,有償ではあるが Typoraがデザインもすっきりしていて相対的にマシなように感じた。$14.99なのでそれほど高額ではない。とりあえず,3週間は無料でお試しできるので導入してみた。

一通りのことはできるが,inlineの数式ができない。調べてみると,環境設定に1つチェックをすればOKなので,これでほぼ目的は達成できそうだ。使い込んではいないので,もう少し様子を見ることに。

そうこうしていたら,なんのことはない,Jupyter notebookに Code モードとMarkdown モードがあることがわかった。モードを切り替えてみれば,簡単な数式入力は問題なかった。これでいいのだ。最も,その先のことや pdf 出力のことを考えると,Typoraの方が良いかもしれない。


図:Typoraの購入画面 (3端末で使えるよ)

2020年11月17日火曜日

Mathics

Mahtematicaについてからの続き

Mathematicaを使い始めて30年くらいになるが,アカデミック価格の年間契約からはずれたため,2019年の12.0.0.0でバージョンアップが止まってしまった。最新のMathematicaは12.1だと思われる。Mathematicaは家庭・趣味用デスクトップライセンスでも45,000円なので今となってはかなり高額である。学生用ライセンスこそ21,000円だけれど,大学だとその10倍の210,000円,普通の企業だと,469,000円もするわけで相当厳しいのであった。

で,普通はMathematicaの代替はないかと考えてSegeMathだとかいうことになる。いっときこれをインストールしていたのだけれどかなりサイズが大きいので,SSD領域確保のために消去してしまった。Mathematicaのほうが慣れている分使いやすいことでもあるし。M1マシンとBigSurに移行したらどうなるかはわからない。Jupyter上のJuliaが登場したことによって,かなりの部分はこれで代替できるのだけれど,それでもMathematicaの方がコーディングの負荷が少ない。

さて,そんな中で今日発見したのが,フリーのMathematica文法互換ソフトウェアのMathicsである。円周率は4000桁くらいまでしか計算できなかったので,あくまでも教育用という位置づけになるかもしれない。それでもちょっと安心でWolframAlphaよりはましかもしれない。

インストールは簡単で,(1) pip3 install Mathics3, (2) brew install sqlite (macOSの場合),(3) \$ mathics でコマンドライン版起動,(4) \$ mathics server でGUI版起動 (localhost:8000) であった。List of computer algebra systems にはリストアップされていないのだけれどどうしてかな?


Mathics 1.1.0 on CPython 3.8.6 (default, Oct 27 2020, 08:57:44) using SymPy 1.6.2, mpmath 1.1.0

Copyright (C) 2011-2020 The Mathics Team.

This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute itunder certain conditions. See the documentation for the full license.

Quit by pressing CONTROL-D

2024年5月21日火曜日

散歩地図

チョイソコてんり(2)からの続き

朝の散歩,今日の目標は北東にあるチョイソコてんりの小田中町公民館だったので,片道35分ほどだった。グーグルマップを見誤ったせいでちょっと遠回りになり40分かかった。

そんなわけで,自宅を中心として地図上に一定距離の半径の円を描いたものがあるとなんとなくうれしいような気がした。こういうときは,地理情報システムGISに対応したアプリとかデータとかプログラムを駆使することになる。Mathematicaの該当部分の関数を眺めたところ,それだけでおなかが一杯になって挫折した。

さあ,ChatGPT-4oの出番である。早速お願いしたところ一発で目的が達成できた。ゴイゴイスー(津田さんは中田先生の女婿だって知ってました?)。
Q(koshix):
 天理市の地図のうえで,自宅を中心として半径が500mの倍数となる円を1倍から6倍まで描画したいのです。なるべく簡単で具体的な手順や方法あるいはプログラムを一つ教えてください。言語は,JuliaでもMathematicaでもPythonでもRでも構いません

A(GPT-4o):
Pythonを使用して天理市の地図上に自宅を中心として半径が500mの倍数となる円を描画する方法を示します。この手順では、以下のライブラリを使用します。
・folium: インタラクティブな地図の作成
・geopy: 緯度経度の計算

以下の手順に従ってください。
1.必要なライブラリをインストールします。
(sh)
pip install folium geopy

2.次に、Pythonスクリプトを作成します。以下のコードをコピーして実行してください。
(python)
import folium
from geopy.distance import geodesic
# 自宅の緯度と経度を設定(天理市の例として)
home_location = (34.596047, 135.819249)
# フォリウムマップの作成
m = folium.Map(location=home_location, zoom_start=15)
# 半径500mの倍数となる円を1倍から6倍まで描画
for i in range(1, 7):
    radius = 500 * i
    folium.Circle(
        location=home_location,
        radius=radius,
        color='blue',
        fill=True,
        fill_opacity=0.1
    ).add_to(m)
# 自宅のマーカーを追加
folium.Marker(location=home_location, popup="Home").add_to(m)
# 地図を保存
m.save('tenri_map.html')

このコードは、以下の手順で動作します。

1.home_locationに自宅の緯度と経度を設定します。この例では天理市の中心付近の座標を使用していますが、実際の自宅の座標に置き換えてください。
2.folium.Mapを使用して地図を作成し、初期の表示位置とズームレベルを設定します。
3.半径500mの倍数となる円を1倍から6倍まで描画します。folium.Circleを使用して円を描画し、radius引数で半径をメートル単位で指定します。
4.自宅の位置にマーカーを追加します。
5.作成した地図をHTMLファイルとして保存します。

保存されたtenri_map.htmlファイルをブラウザで開くと、自宅を中心とした円が描かれた地図が表示されます。
ということで,説明も十分読まずに,pythonプログラムをコピペしてjupyter環境で実行すると,アラ不思議,あっというまにインタラクティブな地図上に同心円が書けてしまった。見栄えのために修正したのは透明度だけだ。


図:散歩地図(GPT-4oがつくったpythonプログラムの出力)