科学計算アプリケーションでの明示的な単位の使用を称賛します。明示的な単位を使用することは、歯を磨くのと似ています。それは前もっていくらかの退屈さを追加します、しかしあなたが得る型安全性は長期的に多くのトラブルを救うことができます。たとえば、1億2500万ドルのオービターを惑星に衝突させないように。
また、おそらくこれら2つの他のPythonユニット/数量パッケージもチェックする必要があります。
Unum
Scientific.Physics.PhysicalQuantity
私はかつてScientific.Physics.PhysicalQuantityを調査しました。それは私のニーズを完全には満たしていませんでしたが、あなたのニーズを満足させるかもしれません。簡単な説明から、必要な機能を判断するのは困難です。
単位変換と次元分析のために独自のPythonパッケージを作成することになりましたが、リリース用に適切にパッケージ化されていません。GPU加速分子力学用のOpenMMシステムのPythonバインディングでユニットシステムを使用しています。あなたは私のPythonユニットコードのsvnリポジトリを閲覧することができます:
SimTKpythonユニット
最終的には、配布用にパッケージ化する予定です。おもしろいと思ったら教えてください。それは私がそれをより早くパッケージ化する動機になるかもしれません。SimTK pythonユニットシステムを設計するときに探していた機能には、次のものがあります。
- 単位は、必ずしも内部でSI単位として保存されるとは限りません。これは私にとって非常に重要です。なぜなら、私たちにとって重要なアプリケーション分野の1つは分子スケールであるからです。内部でSI単位を使用すると、一般的に使用される分子力の計算で指数オーバーフローが発生する可能性があります。内部的には、すべての単位系はSimTKで等しく基本的です。
- C++のBoost.Unitsシステムと同様のパワーと柔軟性が必要でした。私がそのシステムに精通していることと、優秀なエンジニアの大規模なグループの監視の下で設計されていることの両方の理由からです。Boost.Unitsは、巧妙に作成された第2世代の次元分析システムです。したがって、SimTKユニットシステムは第3世代システムであると主張するかもしれません:)。Boost.Unitsはランタイムコストのない「ゼロオーバーヘッド」システムですが、SimTKユニットを含むすべてのPython数量実装は、おそらくランタイムコストを正確にすることに注意してください。
- numpy配列と互換性のあるディメンション化された数量が必要ですが、必ずしもpythonnumpyパッケージは必要ありません。言い換えると、数量は、numpy配列または組み込みのPythonタイプのいずれかに基づくことができます。
あなたにとって重要な機能は何ですか?