点群・空間群の既約表現ライブラリを作った+私的Python開発環境2022
既約表現は結晶の対称性を扱うときに強力なツールだが、自分の用途に使えそうなライブラリを見つけられなかった1。 ということで作った:
実装したアルゴリズムや使い方はドキュメントに書いたので、ここでは実装(python)の環境を忘れないうちに書き残しておく。
Pythonパッケージ開発環境
以下、最近使っているPythonのパッケージング周りのライブラリのリンクと雑感
setuptools
pyproject.toml
だけで設定できるらしいと聞きつつもsetup.py
を併用している。
Optional dependency (setup.py
ならextra_require
)を設定しておくと
pip install -e .[dev,doc]
みたいな感じで必須ではない依存ライブラリを管理できてよい。
setuptools-scm
git tag からversion stringを生成してくれる。
pre-commit
black, flake8, mypy, isort など有名なやつは最低限入れている。
今回はjupyter notebook にリンターをかけるためにnbQAを使ってみたがかなり便利だった github.com
pre-commit.ci も設定しておいて損はない。 pre-commit.ci
テスト
pytest一択
ドキュメント
定式化がバックグラウンドにあるときは、まず実装メモを書いてそれを読みながら実装するのがベストプラクティスだと思っている。 このときメモと実装が近ければ近いほどstaleしづらいので、自分は実装メモも実装と同じレポジトリで管理している。
ドキュメント自体はsphinxで生成しているが、rstはつらいのでmarkdown っぽく書ける拡張を使っている。 myst-parser.readthedocs.io
素のmarkdownだと論文の引用を書くのが面倒だが、sphinxの拡張を入れるとbibtexを読めるようになる。
Sphinxのテーマはsphinx-book-themeを使っている。前はfuroを使っていた。ここらへんは好みで。
Github actions
spgrep/deploy.yml at 14ba9c01931e5da24ff5943d5c162fc3fb1acc45 · spglib/spgrep · GitHub
Sphinxで生成したドキュメントをgh-pagesにデプロイするのはactions-gh-pagesで自動化している。
PyPIにアップロードするのもgh-action-pypi-publishで自動化している。
これらのリリース時のworkflowはgit push origin --tag
したときだけ走るように設定している。
-
電子状態の既約表現を求める前提で書かれていたり、MITなどのライセンスと組み合わせられないものだったり。↩