olca-ipc と olca-schema で、ほかのプロセスの参照に使える製品フローや、それを出力するプロセスを自動で作ろうとしています。
長さ(Length)のフロー特性の設定がうまくいきません。FlowProperty と Unit を自分で ID を付けて作り、o.Ref() でフローに渡しています。また、new_input と new_output で交換を付けたプロセスを client.put_all で入れようとすると「no valid @type」というエラーが出ます。どこが間違っているのでしょうか。
1 件の回答
長さのように openLCA に既にあるフロー特性は、一般には新しく作らず、探して使います。 参照データの入ったデータベースで IPC サーバが動いていれば、次のように書けます。
import olca_schema as o
import olca_ipc as ipc
client = ipc.Client()
length = client.find(o.FlowProperty, "Length")
flow = o.new_product("some flow", length)データセットを作るときの誤りとして、次が挙がっています。
- フロー特性には単位グループ(unit group)を設定する
- データセットの ID は自動で付くので、自分で設定しなくてよい
- データセットを作るのに
o.Ref()を使わない - 必要なデータセットはすべて
client.put()でデータベースに入れる - 交換(
new_inputやnew_outputで作った Exchange)は、データベースに入れなくてよい。交換をプロセスと一緒にclient.put_all(ArgonIn, mypart, myprocess)のように渡していた例では、ERROR:root:failed to insert model: -32602: Invalid parameters: no valid @type attribute present in requestが出ていた。PyCharm のような Python エディタを使うとよいかもしれない、とも書かれている。PyCharm では、交換を渡した箇所にgot 'Exchange' insteadという型の警告が出て、受け付ける型の一覧に Exchange は入っていない
単位グループとフロー特性から自分で作る場合は、ファクトリ関数を unit_group = o.new_unit_group("Units of length", "m")、length = o.new_flow_property("Length", unit_group)、flow = o.new_product("some flow", length) の順に使うと短く書けます。ただ、上のとおり、既にあるフロー特性を新しく作るのは一般には避けるべきです。
参考にしたスレッド
- olca_schema: how to create flow that is reference flow trough olca_schemaask.openLCA2024-05
- Definition of input and output in OpenLCA IPCask.openLCA2024-11
