Deep Sky Memories

横浜の空で撮影した星たちの思い出

Galaxy Annotator が ValueError で動かない場合の対処法

僕が開発して後悔公開*1している銀河専用のアノテーションツール Galaxy Annotator ですが、ながらく更新していないのですが、Anaconda 環境が更新されている関係で動かない場合があるようです。以下に対処法をまとめます。

現在 Anaconda の最新バージョンは Anaconda3-2023.07-2 です。

しかし最近、この環境だと Galaxy Annotator のコマンド leda-votable-to-galaxy.py がエラーで終了してしまうという報告がありました。

$ leda-votable-to-galaxy.py -m 16 -d -j -i votable.xml 
Traceback (most recent call last):
  File "/home/rna/Projects/GalaxyAnnotator/leda-votable-to-galaxy.py", line 100, in <module>
    z = z_at_value(cosmo.luminosity_distance, ld)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/rna/anaconda3_2023/lib/python3.11/site-packages/astropy/cosmology/funcs.py", line 358, in z_at_value
    zs[...] = _z_at_scalar_value(func, fv * unit, zmin=zmn, zmax=zmx,
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/rna/anaconda3_2023/lib/python3.11/site-packages/astropy/cosmology/funcs.py", line 79, in _z_at_scalar_value
    res = minimize_scalar(f, method=method, bounds=(zmin, zmax),
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/rna/anaconda3_2023/lib/python3.11/site-packages/scipy/optimize/_minimize.py", line 887, in minimize_scalar
    raise ValueError(message)
ValueError: Use of `bounds` is incompatible with 'method=Brent'.

調べてみたところ、今年1月に astropy とその依存モジュール scipy のバージョン 1.10 以降との間に相性問題が報告されており、そこでの現象と同じ現象のようです。

これは astropy バージョン 5.2.1 で対応されたのですが、Anaconda の最新版で conda list '(astropy|scipy)' でモジュールのバージョンを確認すると、astropy が 5.1、scipy が 1.10.1 と、正に相性問題のある組み合わせでした。

この場合、ベストな対応は astropy を 5.2.1 以降にアップデートすることですが、残念ながら Anaconda の本家チャンネルでは 5.1 が最新です。サードパーティーの conda-forge チャンネルには 5.3 があるのですが、本家のモジュールを置き換えるのはややこしくなりそうです。

ここは scipy のバージョンを一つ前の 1.9.3 にダウングレードする方向で対処します。以下のコマンドを conda activate したシェルで実行します。

conda install scipy=1.9.3

これで正常に動作するようになりました。

ただし、他のソフトウェアを同じ Anaconda 環境で使っている場合は、今度は他のソフトウェアで相性問題が発生する可能性があるので、Galaxy Annotator 用に conda create で別の環境を作って、そちらの環境でだけ scipy をダウングレードした方が安心だと思います。

conda create の使い方は以下のブログなどを参考にするとよいと思います。

以上については github に issue も立てておきました。


追記: Galaxy Annotator のバグ報告について

バグ報告についてはいつでも歓迎です。github で issue を立ててもらうのが一番ですが、プログラマ以外にはハードルが高いと思いますので(そもそもアカウント持ってないだろうし…)、その場合は以下の方法でもかまいません。

  • Twitter で DM (僕がフォローしてる人の場合)
  • Twitter で @rna で言及
  • Mastodon で @rna@mstdn.jp で言及
  • このブログの Galaxy Annotator に関する記事へのコメント(匿名可)
    • この記事へのコメントで構いません。

いずれの場合も通知は見てますので対応可能です。ただしボランティアで公開しているソフトウェアなので対応が遅れたり忘れてしまったりはご容赦ください…

他のツールに関しても同様です。ブログでのコメントは各ツールに関する記事に対してコメントしてください。

*1:素で間違えました… 後悔はしてない、つもり…