Skip to main content
May 11, 2026
カスタム PyBaMM モデルと Li-S 対応、ECM 容量の共最適化、Python SDK のデフォルトプロジェクト、構造化された検証イシュー

リチウム硫黄化学を持つカスタム PyBaMM モデル

/models/upload-custom エンドポイントが chemistry フィールドを受け付ける ようになり(デフォルトは lithium_ion)、Li-S モデルは実行時に化学を考慮した 初期状態のシムと、より厳しい IDAKLU 許容誤差を得る。manage-projects SDK スキルは アップロードワークフロー全体を文書化している。pybamm.Serialise().save_custom_model(filename=...) → マルチパートアップロード → client.model.get(id)is_custom_model: true を 返す、という流れであり、serialise_custom_model() が返す辞書を直接 json.dumps しようとすると誰もが遭遇する EventType-not-JSON-serializable の 落とし穴も含まれている。

ECM フィット: 容量の共最適化とセグメントごとの初期 SoC

プロジェクトスコープの ECM フィットに対する、相互に関連するいくつかの改善。 ocv_soc_curve(およびオプションの bounds_capacity)を与えると、Q を単一の シードに固定する代わりに、外側の最小二乗ループで RC の beta ノットと共に セル容量 Q を共最適化できる。25 °C のレートテストトレースでは、フィットされた 容量がすべてのノットスケジュールにわたってクーロンカウンティングの真値の 0.9 % 以内に収まるようになった。initial_soc がリスト(測定値ごとに 1 エントリ) を受け付けるようになり、複数測定のフィットがギャップをまたいでクーロンを積分する 代わりに、各セグメント境界で SoC をリセットする。省略した場合、新しい自動シード ルーチンが V[s] = OCV(soc0) − I[s]·R0(soc0) の求根によって各セグメントの soc0 を精緻化する。num_knotsnum_knots_r0knot_scheduleclamp_max_ratio/fit-from-measurements/fit-from-file の第一級 パラメータになった。境界クランプのデフォルトも max_ratio=1.0 から 10.0 に 緩められた。これは R0 を潰し、レートテストの順方向シミュレーションで pybamm IDAKLU の CONV_FAIL を引き起こしていた。

Python SDK のデフォルトプロジェクト

Ionworks クライアントが、構築時に project_id= 引数または新しい IONWORKS_PROJECT_ID 環境変数からデフォルトの project_id を解決するように なり、呼び出し側が毎回 project_id を引き回す必要がなくなった。従来の PROJECT_ID 環境変数も引き続き動作するが、DeprecationWarning を発する。 すべての client.study.* メソッドは(リソース ID の後に)オプションのキーワード として project_id を取り、デフォルトはクライアントの値となる。パイプラインと 最適化はこれをペイロードに自動注入する。

構造化された測定検証イシュー

MeasurementValidationError.errorslist[ValidationIssue] になった。これは 安定した IssueCode(StrEnum)、severity、人間が読める message、JSON ネイティブの payload を持つ凍結データクラスである。下流のコードは、メッセージ 文字列を grep する代わりに e.has_code(IssueCode.CURRENT_SIGN_REVERSED) で チェックの同一性によって分岐できる。ionworksdata の自動修正パスは新しいコードを キーにするようになった。IssueCodeValidationIssue はトップレベルの ionworks パッケージから再エクスポートされる。
改善
  • organization_id が約 15 個のテーブルで NOT NULL になり、すべての RLS ポリシーがそれを直接読み取るよう書き換えられ(has_permission_via_* 関数 チェーンを置き換える)、複合 (project_id, organization_id) 外部キーが プロジェクトスコープのテーブルでの組織ドリフトを防ぐようになった。
  • シミュレーションボードの CRUD が、organization_id をサーバー側で解決する 適切なバックエンド API /projects/{project_id}/studies/{study_id}/simulation_boards に移行された。これにより、より厳格な RLS によって直接の Supabase 挿入が黙って 拒否されていた stage 上の空白の Visualization タブが修正された。
  • 最適化の Performance Detail および Performance Summary タブが、埋もれていた validation_warning / validation_not_supported イシューをタブの上のトップ レベルのアラートとして表面化するようになった。まれに発生する「空だが有効」な ケースには、タブ内に情報「データなし」アラートを表示する。
  • Visualization タブの防御的 UX: ボードが利用できない場合でも Data/Visualization トグルは表示され続け、ユーザーを空白ページに閉じ込める代わりに Data への 切り替えを促す警告アラートを表示する。
修正
  • 単一シミュレーション結果ページが、新規ナビゲーションでデータ読み込み前に 「Simulation not found」を一瞬表示しなくなった。
改善
  • ionworks-schema が、パイプラインに既にあった ConstraintPenaltyCMAESOptionsPSOOptionsDEOptionsLatinHypercubeUniform の スキーマクラスを獲得し、加えて目的関数、データフィット、パラメータ推定器、 正則化器、分布サンプラーにわたる約 40 個のパイロット対象クラスに Field(description=...) の充実が施された。新しい Sphinx ドキュメントの骨格が サブモジュールごとにリファレンスページを自動生成し、各スキーマクラスを intersphinx 経由で対応する ionworkspipeline ページにクロスリンクする。
修正
  • EmptySolutionAttributeError(不正なパラメータの組み合わせで SUNDIALS が IC で諦めた際に発生する)が、データフィット全体をクラッシュさせる代わりに、 既存のフィット失敗ペナルティパスにルーティングされるようになった。クラウド フィットは生き続け、問題のあるサンプルには巨大なコストが付くだけになる。
改善
  • 新しい client.urls.measurement(measurement_id, project_id) ヘルパーが、 測定値のウェブアプリディープリンクを返すようになり、呼び出し側が frontend/src/routes/paths.ts に対して URL を手作りする必要がなくなった。
改善
  • manage-projects/models/upload-custom のマルチパートワークフローと、 Model / ParameterizedModel の区別を文書化するようになった。
  • upload-data およびその他の検証対応スキルを、エラー文字列の部分一致の 代わりに新しい IssueCode / ValidationIssue API と e.has_code(...) パターンを参照するよう更新した。