Python 初心者への短いメモ#
本マニュアルは Python チュートリアルではありませんが、qc-rs を操作するとき常に出てくる Python の機能がいくつか あります。この付録は、各章に散らばる「Python メモ」を 1 か所にまとめたリファレンスです。Python を知っているなら 飛ばしてください。
キーワード引数#
qc-rs の呼び出しは各値を名前でラベル付けします:
qc.chk.new(atom="H 0 0 0; F 0 0 0.9", ao="cc-pvdz", unit="angstrom", charge=0, spin=1)
atom=, ao=, … はキーワード引数:順序は問わず、呼び出しが自己説明的になります。qc-rs 全体でこのスタイルを
使います。シグネチャの *(例 scf(mychk, *, ref="r", …))は、それ以降の引数がキーワード専用 — 名前を付けねば
ならない — ことを意味します。
f 文字列#
f 文字列は式をテキストに埋め込みます;:.6f は浮動小数を小数 6 桁で整形します:
print(f"energy = {mychk.scf.energy:.6f} hartree") # energy = -76.026772 hartree
三重引用符文字列#
"""… """ は複数行文字列 — 1 行 1 原子で幾何を書く自然な方法です:
atom = """
O 0.000 0.000 0.117
H 0.000 0.757 -0.469
H 0.000 -0.757 -0.469
"""
先頭/末尾の空行やインデントは問題ありません;qc-rs は無視します。
リスト 対 辞書#
リスト
[...]は順序付き列:ao=["cc-pvtz", "cc-pvdz"]は原子ごとの基底の設定ではありません。辞書
{key: value}は名前を値に対応づけます:ao={"O": "cc-pvtz", "H": "cc-pvdz"}は各元素に独自の基底を 与えます。多くの qc-rs オプション(ao=,pcm=,iop=)が辞書を受け付けます。
メソッドチェーン#
各ワークフロー動詞は新しいチェックポイントを返すので、左から右へチェーンできます:
mychk = qc.chk.new(atom=..., ao="cc-pvdz").scf(ref="r").run()
は「チェックポイントを作る → SCF ステップを追加 → 実行」と読めます。関数形式
qc.scf(qc.chk.new(...), ref="r").run() は同一ですが、内側から外側へ読みます。
配列を読む(numpy)#
いくつかのアクセサは NumPy 配列を返します。np.asarray(...) で確実に配列にし、.shape が次元、np.round(...)
が表示を整えます:
import numpy as np
g = np.asarray(mychk.scf.gradient) # 形 (natom, 3)
print(g.shape, np.round(g, 4))
仮想環境と uv#
仮想環境(venv)は独自のパッケージを持つ隔離された Python で、プロジェクトが衝突しません。qc-rs は uv
でこれを管理します。覚えておくこと 2 つ:
ノートブック/エディタのカーネルは qc-rs が入った venv でなければならず、さもないと
import qcが失敗します (エディタの章)。import sys; print(sys.executable)で確認。uv add <pkg>は編集可能な qc-rs 拡張を prune します — その後再ビルドします(make install)。
ノートブック:%matplotlib inline#
Jupyter ノートブックでは、この「マジック」でプロットがセル内に表示されます:
%matplotlib inline
mychk.plot_convergence()
マジックはセルで設定します — セル内で pip install しないでください(パッケージは uv で環境に入れます)。
基底データの importlib#
同梱の基底ファイルは通常の Python モジュールです;importlib で 1 つ読み込みます:
import importlib
cc_pvdz = importlib.import_module("qc.basis.cc_pvdz")
cc_pvdz.O.description # "cc-pvdz:O"
本マニュアルを追うのに必要な Python はこれで全部です — 残りはすべて qc-rs と化学です。