バージョン 1 への移行

注釈

このページは、 pyfemtet 0.x で書かれたあなたのコードを 1.x 用に移行するためのガイド です。

pyfemtet のバージョンを確認するには、下記のコマンドを実行してください。

py -m pip show pyfemtet

仮想環境などを使用している場合、コマンドは以下の通りです。:

python -m pip show pyfemtet

すでにバージョン 1.x であり、あなたのコードも 1.x で書かれている場合、このページを読む必要はありません。

バージョンが 0.x であっても、 pyfemtet をアップデートしない場合はこのページを読む必要はありません。

注釈

pyfemtet をアップデートしたい場合は、PyFemtet のインストール または 手動で PyFemtet をインストールする をご覧ください。

PyFemtet バージョン 1 では、操作性や開発効率の向上のため多くの関数や引数が変更されています。

バージョン 0.9 は v1 への移行バージョンとして、従来の関数や引数も引き続き利用できますが、変更・削除された機能については警告が表示されます。

バージョン 1 での主要な変更点はこのページに実装例とともに掲載しています。あなたの運用しているスクリプトの変更が必要な場合、以下の例を参考にしてください。

ModelError などの例外のインポート

これらの例外クラスは pyfemtet.opt.exceptions モジュールに移動されます。

# < 1.0.0
from pyfemtet.core import ModelError, MeshError, SolveError

# >= 1.0.0
from pyfemtet.opt.exceptions import ModelError, MeshError, SolveError

add_objective() と add_constraints()

引数 name

引数 name は第一位置引数になり、必須になります。

def some_objective(Femtet):
   ...

# < 1.0.0
femopt.add_objective(some_objective, 'objective name')

# >= 1.0.0
femopt.add_objective('objective name', some_objective)

# The samples below works with both versions
femopt.add_objective(name='objective name', fun=some_objective)
femopt.add_objective(fun=some_objective, name='objective name')

引数 args

引数 args は配列として認識されます。

# < 1.0.0
femopt.add_objective(..., args=femopt.opt)

# The samples below works with both versions
femopt.add_objective(..., args=(femopt.opt,))
# or
femopt.add_objective(..., args=[femopt.opt])

FemtetInterface 以外を使っている場合のユーザー定義関数の引数

FemtetInterface 以外のインターフェース(例えば、 ExcelInterface )を使っている場合、ユーザー定義関数の第一引数は PyFemtet から自動的に与えられるようになります。

この項目は、FemtetInterface とその派生クラス(例えば FemtetWithNXInterface )を使っている方には影響がありません。

# < 1.0.0
def user_defined(opt):
    ...

# >= 1.0.0
def user_defined(fem, opt):
    ...

# The samples below works with both versions
femopt.add_objective(fun=user_defined, args=(opt,))

注釈

第一引数として何が与えられるかは、お使いのインターフェースによって異なります。例えば、 ExcelInterface の場合 Excel(R) の COM オブジェクトが与えられます。

より詳しくは、 開発中最新バージョンの API リファレンス~Interface.object_pass_to_fun 項目を参照してください。もしインターフェースクラスの項目に object_pass_to_fun の項目がなければ、継承元クラスの項目をご覧ください。

opt.variables.get_variables() メソッド

opt.variables.get_variables() メソッドは廃止されます. 代わりに opt.get_variables() をお使いください。

# < 1.0.0
def constraint(_, opt: AbstractOptimizer):
   d = opt.variables.get_variables()  # d is dict[str, float]
   ...

# >= 1.0.0
def constraint(_, opt: AbstractOptimizer):
   d: dict[str, float]  = opt.get_variables()  # d is dict[str, float]
   ...

history_path 引数

history_path 引数は現在 femopt.oprimize にあります。

# < 1.0.0
femopt = FEMOpt(
   history_path'sample.csv',
)
...
femopt.optimize()

# >= 1.0.0
femopt = FEMOpt()
...
femopt.optimize(
   history_path='sample.csv'
)