Juliaのバージョン

手短に言うと

Juliaのバージョンによってdiagm()関数の動きが異なるというお話。1.0.3では要素に0が含まれるとエラーになる。1.4.1なら大丈夫。もちろん最新版は1.5が出ているので古い話になってしまうが、Debianの現行バージョンであるDebian10(buster)では1.0.3である。

diagm()関数とは

行列を定義するのに

A = [
  3 0 0
  0 2 0
  0 0 1
]

などと書くのだが、対角要素しかない行列では簡単に、

A = diagm([3,2,1])

と書ける。これは便利だ。

で、今回の問題は

最近はUbuntu 20.04を使っていて問題なかったのが、Debian10(buster)でやると、

p11 1 /p22 1.0 /p33 0.0 /
ERROR: LoadError: MethodError: no method matching diagm(::Array{Float64,1})
Closest candidates are:
  diagm(!Matched::Pair{#s576,#s575} where #s575<:(AbstractArray{T,1} where T)
 where #s576<:Integer...) at /build/julia-wJr69F/julia-1.0.3+dfsg/usr/share
 /julia/stdlib/v1.0/LinearAlgebra/src/dense.jl:313
Stacktrace:...以下略

1行目が検証のために出した行で、p33が0になったのでエラーが出たと判明。

juliaのバージョンは

adachi@fumita:~$ julia -v
julia version 1.0.3

うまく行くUbuntuでは

adachi@ebook:julia$ julia -v
julia version 1.4.1

OSとの関係。

OSバージョン OSリリース日 Juliaバージョン
Debian 10.0 2019年7月6日 1.0.3
Ubuntu 20.04 LTS 2020年4月23日 1.4.1

インストール日

DebianもUbuntuも現バージョンには最初からJuliaは入っていない。必要に応じてaptを使ってディストリビューションで用意してあるバージョンをインストールするのが標準。それが用意されていない場合は独自に入れる場合もある。インストールの記録を見るとどちらもディストリビューションの標準のものだった。

探し方は

adachi@fumita:~$ zcat /var/log/apt/history.log.11.gz|less

など。

Debianでは

Start-Date: 2020-06-16  11:40:23
Commandline: /usr/sbin/synaptic
Requested-By: adachi (1000)
Install: libc-ares2:amd64 (1.14.0-1, automatic),
fonts-font-awesome:amd64 (5.0.10+really4.7.0~dfsg-1, automatic),
julia:amd64 (1.0.3+dfsg-4),
libopenlibm2:amd64 (0.6.0+dfsg-2, automatic),
libopenblas-dev:amd64 (0.3.5+ds-3, automatic),
git-man:amd64 (1:2.20.1-2+deb10u3, automatic),
libutf8proc2:amd64 (2.3.0-1, automatic),
libjs-mathjax:amd64 (2.7.4+dfsg-1, automatic),
julia-doc:amd64 (1.0.3+dfsg-4),
libspqr2:amd64 (1:5.4.0+dfsg-1, automatic),
libdsfmt-19937-1:amd64 (2.2.3+dfsg-4, automatic),
fonts-mathjax:amd64 (2.7.4+dfsg-1, automatic),
nodejs:amd64 (10.21.0~dfsg-1~deb10u1, automatic),
git:amd64 (1:2.20.1-2+deb10u3, automatic),
node-highlight.js:amd64 (9.12.0+dfsg1-4, automatic),
fonts-inconsolata:amd64 (001.010-5, automatic),
libuv1:amd64 (1.24.1-1, automatic),
libjs-highlight.js:amd64 (9.12.0+dfsg1-4, automatic),
libjs-requirejs:amd64 (2.3.6-1, automatic),
libjs-jquery-ui:amd64 (1.12.1+dfsg-5, automatic),
libopenblas-base:amd64 (0.3.5+ds-3, automatic),
nodejs-doc:amd64 (10.21.0~dfsg-1~deb10u1, automatic),
libnode64:amd64 (10.21.0~dfsg-1~deb10u1, automatic),
julia-common:amd64 (1.0.3+dfsg-4, automatic),
libjulia1:amd64 (1.0.3+dfsg-4, automatic),
libjs-lodash:amd64 (4.17.11+dfsg-2+deb10u1, automatic),
liberror-perl:amd64 (0.17027-2, automatic)
End-Date: 2020-06-16  11:40:40

ubuntuの方は

Start-Date: 2021-04-05  00:51:31
Commandline: /usr/sbin/synaptic
Requested-By: adachi (1000)
Install: libssh2-1:amd64 (1.8.0-2.1build1, automatic),
libmbedtls12:amd64 (2.16.4-1ubuntu2, automatic),
julia:amd64 (1.4.1+dfsg-1),
libopenlibm3:amd64 (0.7.0+dfsg-1, automatic),
libllvm8:amd64 (1:8.0.1-9, automatic),
libmbedcrypto3:amd64 (2.16.4-1ubuntu2, automatic),
git-man:amd64 (1:2.25.1-1ubuntu3.1, automatic),
libutf8proc2:amd64 (2.5.0-1, automatic),
libdsfmt-19937-1:amd64 (2.2.3+dfsg-4, automatic),
git:amd64 (1:2.25.1-1ubuntu3.1, automatic),
libhttp-parser2.9:amd64 (2.9.2-2, automatic),
libmbedx509-0:amd64 (2.16.4-1ubuntu2, automatic),
julia-common:amd64 (1.4.1+dfsg-1, automatic),
libjulia1:amd64 (1.4.1+dfsg-1, automatic),
libgit2-28:amd64 (0.28.4+dfsg.1-2, automatic),
liberror-perl:amd64 (0.17029-1, automatic)
End-Date: 2021-04-05  00:51:46

DebianやUbuntuは基本的にはディストリビューションがアップグレードされるタイミングで含まれるソフトウェアのバージョンが上がる。以前は、これが不満でJavaやOpenOffice, mozcなどで最新のものを入れることをしていたが、最近はディストリビューションの用意したものでそれほど不満がなかった。独自に入れるとOSのバージョンアップのときに気にしなければならないものが増えることもあって独自に入れることは控えるようになっている。

今回は、Debianのアップグレードが近いので、そのまま待とうかと思っている。

情報源リンク

2021-5-30に軽く検索したもの。 新しい言語なので進化が速い。古い情報もあるので注意。

まず本家の
https://julialang.org/
そのドキュメント
Julia 1.6 Documentation
翻訳
Julia 1.3 のドキュメント
Julia 1.0 ドキュメント