開発版ドキュメント · 0.2.7 12b76261 · 入門例の検証対象 0.2.4 · 版情報 · 既知の制限

更新履歴#

2026-10-27(UTC)に公開しました:PyPI 0.2.6、GitHub Release、Zenodo DOI 10.5281/zenodo.23680359。conda-forge feedstock の PR #16 は2026-10-28(UTC)にマージされ、conda-forge では0.2.6のパッケージを利用できます。

v0.2.6 の週次開発活動#

v0.2.6 までの GWexpy の週次開発活動。カテゴリ別に、マージを除くコミット数と編集されたソース行数を示します。

不変の v0.2.6 リリースタグまでの週次活動です。積み上げ棒はカテゴリ別にマージを除くコミット数と編集されたソース行数を示し、リリースマーカーは v0.2.6 を含む到達可能な安定タグを示します。#

週次 CSV データをダウンロード

このスナップショットはコミット a1ff8e2f18ef4e599727d6df6fdff61fce7019bd までを集計しています。英語版と日本語版は同じ週次データを使用します。棒の高さは週ごとの合計の対数を表し、色付きの区分はカテゴリの割合を示します。編集行数は追加行と削除行の合計で、生成ファイルとバイナリ変更は除外します。

[0.2.7] - 2026-11-03#

このメンテナンスリリースでは、存在しないローカル GWF パスが TimeSeries と TimeSeriesDict のネイティブリーダーに渡ることを防ぎます。

修正#

  • ローカル GWF ファイルの欠落:TimeSeries と TimeSeriesDict は、存在しないローカルソースをネイティブ GWF リーダーに渡す前に FileNotFoundError を送出し、#766 で報告されたプロセスクラッシュのリスクを回避します。

変更#

  • リリース管理:契約で選択した v2 レビュー証跡と main のみの保護参照ポリシーで v0.2.7 を登録し、過去のリリース契約は維持します。

[0.2.6] - 2026-10-24#

このメンテナンスリリースでは、ドキュメント上の契約を明確化し、診断警告を改善し、旧来の同梱 GUI を独立した pyaggui プロジェクトへ分離した後のリポジトリ整理を完了します。新しい公開 API、依存関係、保存形式は追加しません。検証済みの科学データの値、dtype、軸は維持します。応答関数の出力スペクトログラムには対象 ASD の単位を付与し、ASD 単位が一致しない行は拒否します。

修正#

  • 応答関数のスペクトログラム単位:出力スペクトログラムに対象時系列の単位ではなく対象 ASD の単位を付与し、ASD 単位が異なる行を拒否します。

  • ASD 周波数グリッドの拒否診断:ASD 応答関数で周波数グリッドを検証する際、拒否理由を区別して具体的で有用な警告を出します。警告カテゴリと stack level は維持します(#790、PR #794)。

ドキュメント#

  • TimeSeries.spectrogram2():平均化を行わない periodogram の実行経路を記し、追加のキーワード引数が scipy.signal.periodogram に渡されること、そこで method= が拒否されることを明記します(#779、PR #798)。GWpy 4.0.1 では、nproc に 1 より大きい値を指定すると AttributeError になるため、既定値の nproc=1 を使用してください。GWpy 4.0.2 は本リリースのレビューでは未検証です。

  • TimeSeriesDict.append():辞書を inplace で更新する動作と、self を返す契約を明記します(#640、PR #798)。

  • GUI 移行ガイド:英語・日本語のユーザーガイドと how-to ドキュメントを更新し、独立した pyaggui と GWexpy Studio を案内します(#645、PR #803)。

削除#

  • 旧来の同梱 GUI:ADR 0001 に基づく分離に続き、非推奨の gwexpy/gui/ 実装と tests/gui/ のテスト、GUI 専用の開発依存関係、パッケージ除外設定、CI fixture を完全に削除しました。誤って再導入されないよう境界テストを追加しました(#645、PR #802、PR #803)。

  • 旧 NDS ライブワークフロー:GUI 整理後にテストを選択していなかった手動の nds-live.yml ワークフローを削除しました。NDS ライブラリの I/O とオフライン解析の機能は維持します。ライブ向けの代替ワークフローは提供しません。

既知の制限事項#

以下の問題は v0.2.6 でも未解決です。該当する条件に対する回避策は検証されていません。各問題は v0.2.7 以降の個別パッチ候補ですが、v0.2.7 への収録を約束するものではありません。

  • #766:存在しないファイルを framel または自動バックエンド選択で GWF 読み込みすると、ネイティブ segmentation fault が発生してプロセスが終了することがあります。安全な回避策は検証されていません。

  • #767:単位が整合しない PSD が bkg_table に渡ると、PercentileThreshold.threshold() が警告後に生の数値から計算を続け、物理的解釈が曖昧な閾値を返すことがあります。その結果を信頼しないでください。安全な回避策は検証されていません。

  • #768:standardize_matrix は無次元の z-score を生成した後も入力単位を保持することがあり、後続処理で単位を考慮した解釈を誤る可能性があります。回避策は検証されていません。

  • #769:StandardizeTransform は標準化後も単位を保持することがあり、未認識の method を z-score として黙って処理することがあります。回避策は検証されていません。

  • #770:TimeSeriesMatrix.radian() と .degree() は値を変換しても、コンテナと要素の単位メタデータが変換後の値と一致しないことがあります。回避策は検証されていません。

  • #771:manifest を使わない HDF5 コレクションで要素の読み込みに失敗すると、その要素が黙ってスキップされ、部分データまたは空データが返ることがあります。正常終了しても保存された全要素が含まれるとは限りません。回避策は検証されていません。

  • #773:系列と単位が整合しない誤差棒の値が、ROOT の to_tgraph に渡す補助処理で確認なしに受け入れられます。ROOT 前の経路での実測では、非互換な単位がエラーなしに受け入れられ、mm の誤差系列が系列の単位 m に変換されませんでした。ROOT を使う to_tgraph の端から端までの経路は、リリース環境で ROOT が利用できないため検証していません。v0.2.6 の既知の制限であり、修正や検証済みの回避策はありません。

  • #774:HDF5 の frequency_unit が空でない不正な値の場合、Hz として黙って読み込まれ、周波数軸の単位を誤って示すことがあります。回避策は検証されていません。

  • #777:SeriesMatrix.to_hdf5 は Quantity のカスタム属性を警告なしに省略することがあり、メタデータが失われます。回避策は検証されていません。

  • #778:WhitenTransform.inverse_transform は、元の物理単位(strain)を復元せず無次元のデータを返すことを再現しました。辞書のキーも A/B から row0/row1 に変わりました。v0.2.6 の既知の制限であり、修正や検証済みの回避策はありません。

Published on 2026-10-04 UTC: PyPI 0.2.5 and GitHub Release. Published on 2026-09-26 UTC: PyPI 0.2.4, conda-forge, GitHub Release, and Zenodo DOI 10.5281/zenodo.22978439.

v0.2.4 の週次開発活動#

v0.2.4 までの GWexpy の週次開発活動。カテゴリ別に、マージを除くコミット数と編集されたソース行数を示します。

不変の v0.2.4 リリースタグまでの週次活動です。積み上げ棒はカテゴリ別にマージを除くコミット数と編集されたソース行数を示し、リリースマーカーは v0.2.4 を含む到達可能な安定タグを示します。#

週次 CSV データをダウンロード

このスナップショットの終点はコミット 522e52a082925da4dd37966d82a7616bdd2a5248 です。日英の図は同じ週次データを使用します。棒の高さは週次合計の対数、色分けした部分はカテゴリの割合を表します。編集行数は追加行数と削除行数の合計で、生成ファイルとバイナリの変更を除きます。

以前の v0.2.3 リリースのスナップショット(75d3d1a89ebc8942af1f3228152fea99d2d3420e)も、SVG と週次 CSV から参照できます。

公開前の候補 3ade51de26c9adf21c4a7ad076837967e61c8038 のスナップショットも、SVG と週次 CSV から参照できます。

以前の v0.2.2 時点の集計も、SVG と週次 CSV で確認できます。

v0.2.2 リリースは GitHub Releases から取得でき、Zenodo DOI 10.5281/zenodo.22228340 でアーカイブされています。

0.2.5 - 2026-10-04#

このパッチリリースでは、科学データの I/O の信頼性を高め、複数の読み込み・結合経路で不要な処理を減らします。公開 API、依存関係、保存スキーマは追加しません。未選択のネイティブ DTTXML ペイロードと同時書き込み中の SDB について明記した挙動を除き、検証済みの値、dtype、軸、単位を維持します。

修正#

  • NetCDF4 の行列:対応する行列レイアウトではセルの単位と軸を保持します。不正な行列構造、安全でない混合 dtype 変換、および曖昧なデータを返すことになる旧形式の不規則な時間軸を拒否します。

  • Zarr の値とメタデータ:検証済みの整数・複素数サンプル、軸、単位を保持します。安全でない混合 dtype 変換と整合しない軸を拒否します。

  • HDF5 コレクション:マニフェスト付きの読み込みでは、ペイロードの欠落、読み込み不能、差し替えを拒否します。マニフェストなしの探索は従来どおり許容します。

  • HDF5 ヒストグラムコレクション:layout="dataset" を指定しても、HistogramDict と HistogramList は各要素を values と edges を含むグループとして書き込みます。要素ごとに dataset を使うヒストグラム形式は確立されていません。これらのコレクションで検証対象となっているのはグループ形式です。

  • TDMS と GL500 GBD ファイル:特性を確認したファームウェアの範囲で、波形増分の欠落や不正、および必須 GL500 ヘッダーフィールドの不正を検出して拒否します。

  • WAV と FLAC のメタデータ:取得できる音声タグを来歴情報に保持します。

  • オプションの I/O バックエンド:対応する Zarr と NetCDF4 の経路では、任意パッケージがない場合にバックエンド固有の ImportError を送出します。

  • CSV の周波数系列読み込み:対応する2列入力では、不均一な周波数間隔を含めて周波数軸を正しく保ちます。

読み込み動作#

  • ネイティブ DTTXML の選択読み込み:ネイティブパーサーを使う読み込みでは、受け入れ済みの選択範囲から完全に外れたペイロードの decode を省略できます。XML構造と選択データの検証は引き続き行い、省略されたペイロードだけに起因する警告や decode error は表面化しません。外部 dttxml 経路は変更しません。

  • 同時書き込み中の SDB:検証と選択データの読み込みには、同一の SQLite snapshot を使います。別プロセスが読み込み中に commit した場合も、異なる時点のデータを混在させず、一貫した snapshot の結果を返します。

性能とリソース使用量#

  • 複数ソースの時系列結合と選択された CSV、WAV、WIN、NetCDF の経路では、重複する解析、オブジェクト生成、配列コピーの一部を避けながら、検証済みの公開結果を維持します。計測上の効果はワークロードによって異なり、全般的な高速化は保証しません。

  • 単一チャネルの WAV 選択では、デコード後に使用しないチャネルオブジェクトを作成しません。音声バックエンドはインターリーブされたファイル全体を引き続き読み込みます。

  • 計測した大規模なネイティブ DTTXML PSD fixture 1件では、ピークメモリが19.6%低下する一方、warm 処理時間は12.5%増加し、cold 処理時間は同程度でした。これは特定ワークロードにおけるメモリと処理速度のトレードオフです。

  • 計測した複数セルの NetCDF fixture 1件では、全配列のコピー削減後、warm wall time と CPU time の中央値が約33%改善しました。結果は入力サイズと形式に左右され、他の経路の性能変化は主張しません。

0.2.4 - 2026-09-26#

本パッチリリースでは、特徴が確認された DiagGUI XML の周波数、時系列、FFT、STF、伝達関数製品への対応を改善しました。対応するレイアウトではシリアライズされた値と軸を保持し、特徴が確認されていないレイアウトは処理を拒否します。入力に記載されていない物理単位、校正方向、FFT 正規化は推測しません。公開 API や依存関係は追加していません。

修正#

  • DiagGUI XML 周波数リーダー (#726):特徴が確認された ASD、伝達関数、coherence のレイアウトについて、FrequencySeries、FrequencySeriesDict、FrequencySeriesMatrix の読み込みを修正しました。埋め込み周波数列、不等間隔の軸、複素数値、対応する double 精度を、native とインストール済み parser の両経路で保持します。

  • DiagGUI XML TimeSeries (#730):特徴が確認された TimeSeries 製品向けに native fallback parser を追加し、シリアライズされた次元、サンプル数、base64 データを厳密に検証します。

  • DiagGUI Spectrum FFT (#731):特徴が確認された Spectrum subtype 0 と 4 を追加しました。線形または埋め込みの周波数軸と複素数サンプルを保持し、未対応のレイアウトは処理を拒否します。

  • DiagGUI STF 製品 (#732):FrequencySeriesMatrix 向けに特徴が確認された TransferFunction subtype 1 と 4 を追加し、複素応答とシリアライズされた周波数軸を保持します。

  • DiagGUI TransferFunction subtype 6 (#733):external parser 経路で、特徴が確認された複素位相とシリアライズされた周波数値を厳密に保持します。曖昧または未対応のレイアウトは処理を拒否します。

  • DiagGUI TimeSeriesMatrix 識別子 (#734):TimeSeriesMatrix 読み込み用の標準識別子 xml.diaggui を登録しました。

互換性に関する注意#

  • 埋め込み float32 周波数ビンは理想的な格子に丸めず、シリアライズされた精度で保持します。f0/df による構築で全ビンを厳密に再現できない場合、df は None となり、FrequencySeries.ifft() は利用できません。逆 FFT を行うには、選択した一様周波数格子へ明示的に再格子化または補間する必要があります。この操作はサンプル位置と値を変えるため、埋め込み軸と科学的に同等とは限りません。

[0.2.3] - 2026-09-05#

2026-09-05(UTC)に公開しました:PyPI 0.2.3、conda-forge、GitHub Release、Zenodo DOI 10.5281/zenodo.22344992。

このメンテナンスリリースでは、監査対象の GWpy 派生 API 全体について、GWpy 4.0.1/4.0.2 との互換性を修正しています。過去の自動差分検証の証跡は、実行時コードの候補 d55717e9aed9ef5c22bb5d8ed0df95e19a313545 と、レビューおよび証跡の対象ソース ff47d66ce985c295193a8d8cd1acef3ddd61add1 に記録されています。その実行時コードには、人間による科学計算とデータモデルの承認があります。リリース責任者は2026-09-04に、変更していない4件の GWpy との一致に伴うリスク、信号処理メソッド、非秒単位の不規則軸に関する信号処理内部の再構築時の基準情報を再承認しました。この承認は6つのリスク群に限定され、他の契約は対象外です。過去の承認は候補 c7b79db7fee2e646069679a0efe3d65c7ed4e562 と、開示済みの5件のリスクだけに結び付いています。承認の集約記録を参照してください。この承認は後続のソース改訂を対象に含みません。このリリースで公開 API や依存パッケージを追加していません。

リリース責任者は2026-09-05に、実行時コードのツリー 88c9de982f4b284afbb5845c13cecb2d90d938dc に対し、ScalarField が継承する縮約を含むスカラー再構築の差分を別途承認しました。この限定承認は既存の例外の範囲を保持し、公開そのものを許可するものではありません。

今回の追加修正では、NumPy 2 におけるスカラー縮約結果のメモリ確保を修正し、CI 環境の準備と監査証跡の対応付けを更新しています。ソースを更新するたびに、同一候補に対する科学計算とデータモデルのレビュー、リリースのセキュリティレビュー、候補全体の品質検証、および19構成のリリース適格性検証を新たに行う必要があります。ソース 75d3d1a89ebc8942af1f3228152fea99d2d3420e の最終判定が合格となり、リリース責任者は2026-09-05に公開を承認しました。以後に実行時コードやデータモデルの意味を変更した場合、集約した承認は無効となり、再承認が必要です。文書への記録だけを変更するコミットは実行時コードの候補を変更しません。

現在の一覧証跡は、575個の論理メンバー、62個のテスト選択指定、比較先の GWpy バージョンごとに396件の実行済みケースを対象としています。過去の c7 の承認も同じ575個の論理メンバーを対象としていますが、テスト選択指定は59個、実行ケースはバージョンごとに384件でした。生成した一覧の1,150行は、論理メンバーとバージョンの組み合わせを数えた別の件数です。

自動検証の証跡を伴う実装#

  • NumPy 2 のスカラー統計量:Array3D、Array4D、ScalarField の縮約では、厳格な copy=False の制約で失敗する代わりに、0次元の Quantity 結果に必要なメモリを確保できます。値、単位、縮約軸の規則は保持します。

  • HDF5 コレクション:TimeSeriesDict への追記時に、対象を指定せず既存内容を切り捨てるモードで開く問題を修正しました。通常の names=、group=、追記、名前の重複、旧形式のマニフェスト、リンクの安全性に関する結果は、インストール済み GWpy を比較基準として一致させています。非公開の厳密な時刻情報を記録する付随データは、引き続き追加情報として保持します。

  • 通常の HDF5 の自動識別:TimeSeries と TimeSeriesDict は、通常の .h5 / .hdf5 の自動読み書きで GWpy と一致するようになりました。構造に基づく NDScope の識別は、優先順位の低い汎用 HDF5 経路より先に行います。他の曖昧なクラス群や GWexpy 独自のクラス群では、引き続き形式を明示します。

  • HDF5 の読み取り区間の安全性(#611):GWpy 4.0.x では、HDF5 コレクションのデータと要求区間が完全に交わらない場合、負の終了インデックスが末尾から解釈され、指定区間外のサンプルを返すことがあります。GWexpy は親の読み取り処理が成功した後、完全に交わらない要素だけを長さ0の系列にします。複数の状態が混在するコレクションでもキーと順序を保持し、交わらない要素だけを空にします。部分的な重なり、pad=、親の読み取りエラー、呼び出し元が所有するソースの扱いは GWpy の意味を保持します。安全処理で作った空の系列は、クラス、dtype、単位、名前とチャンネル、サンプリング間隔を保持します。公開属性の t0 と span は保存された系列の開始境界に一致し、元データの非公開の厳密な時刻基準は継承しません。

  • コンストラクターと時間軸(過去の c7 候補で承認):GWpy が対応する t0 と epoch の入力は、例外を捕捉して再試行する処理を介さず、親の処理を通ります。位置引数とキーワード引数を一貫して対応付け、既存の厳密な t0_ns の基準情報は別に保持します。コピー、スライス、切り出し、追記、対応する時間軸変更では、結果のサンプリング間隔に応じて非公開の厳密な状態を保持または無効化します。

  • 時刻と周波数の変換(過去の c7 候補で承認):スカラー入力と年月日などの成分入力による to_gps() と tconvert()、from_gps() の入力、および FrequencySeries.ifft() の時刻メタデータは、比較対象の GWpy と一致します。不正な日付形式の値は、ベクトルとして解釈し直すことなく失敗します。

  • スペクトル処理、信号処理、統計処理(過去の c7 候補で承認):既定の CSD、Rayleigh、ヘテロダイン、復調、RMS、再サンプリング、縮約、軸に応じた結果型は、GWpy の値、単位、形状、メタデータ、例外クラスに従います。

  • 描画、CSV、コレクション:描画メソッドは GWpy の位置引数の並びをすべて受け付け、引数を重複指定した場合は Python と整合するエラーになります。通常の CSV は GWpy の標準経路を使い、既存の拡張専用引数は明示的に指定する方式を維持します。コレクションの切り出し、先頭への追加、旧来の filterba() 互換処理は、既存の呼び出し契約を保持します。

  • 特殊配列とフィールド(過去の c7 候補で承認):継承したコンストラクターの引数対応付け、転置、BifrequencyMap の描画、ScalarField の有限差分、単位変換、格子の検証、百分率による比較について、GWpy との互換性、または不正な入力を拒否するデータモデルの契約を明示しています。

互換性に関する注意#

  • non_intersecting_window_safety は、このリリースで承認された GWpy の既定挙動からの唯一の相違です。HDF5 の要求区間がデータと完全に交わらないとき、上流の負のインデックスの解釈によって指定区間外のデータが選ばれることを防ぎます。GWpy の挙動互換性ポリシーを参照してください。

  • #611 の安全例外は「個別に承認済みで変更なし」(approved-separately-unchanged)です。独立した人間承認とリリースノートの確認条件は引き続き満たしており、今回の再承認で承認し直すものではありません。対象は、読み取り区間が完全に交わらない場合に限定されます。

  • 記録済みの科学計算とデータモデルに対する人間承認は、実行時コードの候補 d55717e9aed9ef5c22bb5d8ed0df95e19a313545 に対するものであり、以下の GWpy との一致および信号処理に関する6つのリスク群に厳密に限定されます。他の契約を承認するものではありません。過去の c7 候補に対する5件のリスクの承認は、別途記録しています。

    1. 異なる単位を組み合わせた CSD の V²/Hz 表記。

    2. 公開 Rayleigh 処理における親のセグメント選択、非公開の補正経路、および既知の有限回モンテカルロ計算の制限。

    3. Array2D/Plane2D の min/max で更新されないインデックス。

    4. 数値配列の swapaxes/transpose で更新されないメタデータ。

    現在の信号処理のリスク群は、無次元の信号出力、周波数 Quantity の数値をそのまま扱う処理、float32 の RMS のアンダーフロー、および非秒単位の不規則軸に関する信号処理内部の再構築時の基準情報を対象としています。

    最後の2群では、特定の Array2D/Plane2D の縮約と数値配列の軸の並べ替えについて、既に開示している未更新の軸メタデータを保持します。補正を行う経路やメタデータを考慮する GWexpy 独自の経路が既にある場合は、引き続き明示的に選択します。

[0.2.2] - 2026-09-01#

exact HDF5 epoch metadata を GWexpy の private state として保持しつつ、時系列選択の既定挙動を GWpy と互換に戻したメンテナンスリリースです。

修正#

  • TimeSeries crop 互換性:TimeSeries.crop() は GWpy がサポートする引数を GWpy に委譲するようになり、通常および高 sample rate で、既定の sample 選択、t0、dt、成功または失敗の挙動が GWpy と一致します。

  • Exact epoch の伝播:slice と crop は base operation を完了してから private exact state を伝播します。cadence を整数 nanosecond で表現できない場合は、GWpy では成功する operation を失敗させず、派生した exact authority を破棄します。

  • Lazy I/O registration:collection-first の time-series および frequency-series I/O は、scalar I/O と同じ idempotent registry bootstrap を実行します。反復 operation の後も reader と writer の identity および登録順を維持します。

[0.2.1] - 2026-08-31#

public API を変更せずに HDF5 exact-epoch の退行を修正し、lazy bootstrap I/O registration を復元したメンテナンスリリースです。

[0.2.0] - 2026-08-26#

このマイナーリリースでは、正確な時刻、相互運用可能な永続化、決定論的な来歴、および公開 GWpy 互換性のための v0.2.0 セマンティック契約ベースラインを確立しました。

追加#

  • time(正確な GPS 状態):TimeSeries と関連するサポート対象操作は、キーワード専用引数として指定された GPS ナノ秒の起点を、コピー、スライス、pickle、MNE、および HDF5 サイドカーを通じて保持します。必要な場合、正確な状態は binary64 の時刻座標とは別に保持されます。

  • HDF5 と来歴:ネイティブ HDF5 サイドカーは、GWpy で読めるコアペイロードを変更せずに、正確な epoch 状態、メタデータ、および構造化された来歴を保存します。来歴対応のパス名トランザクションは、上限付き助言ロックによりローカル POSIX プロセスを調整します。append 操作と呼び出し元が開いたコンテナは別個の dataset を保持し、パス名の置換は直列化され、最後に書き込んだ側を採用します。

  • GWF 読み取り:TimeSeries、TimeSeriesDict、StateVector、および StateVectorDict は、spawn 安全な parallel= 読み取りをサポートします。nproc= は互換性エイリアスとして残ります。複数 worker の読み取りは単一のローカル frame path だけを受け付け、キャッシュ、URI/composite 表記、または未サポートの入れ子実行では I/O 前に失敗します。

  • coupling:公開 v1 の coupling-segment schema、pandas/Astropy adapter、JSON エンベロープ、正準座標単位、および有限精度の格子に対する正確な検査を利用できます。significance は v1 schema の対象外です。

  • スペクトル推定:TimeSeries.psd() と TimeSeries.asd() は method="median-mean" を受け付けます。公開 median_bias(n) は FINDCHIRP 互換の有限標本補正を提供します。PSD/ASD はサポート対象 backend 全体で name、channel、および epoch を GWexpy が保持することを保証します。一方、数値、unit、および周波数軸については backend が引き続き決定権を持ちます。

変更#

  • bootstrap と I/O:単純な import gwexpy では、コンストラクタや I/O が即時には登録されなくなりました。コンストラクタの登録には gwexpy.register_all(include_io=False) を、コンストラクタと I/O の両方の登録には gwexpy.register_all() を呼び出します。サポート対象の公開 I/O entry point はハンドラをオンデマンドで登録します。

  • SeriesMatrix B0:480 セル Phase A のコンテナ契約を固定しました。SpectrogramMatrix と次元を持つ生の ndarray の加算および減算は、TypeError によりアトミックに失敗します。より広範な B1 合成ランタイムは、明示的な人間による D21/data-model sign-off を待って保留のままです(adopted: false)。

削除(破壊的変更)#

  • 廃止された開発者向けプロキシ import である gwexpy.utils.shell、gwexpy.utils.sphinx、gwexpy.utils.sphinx.ex2rst、および gwexpy.utils.sphinx.zenodo を削除しました。シェルヘルパーには subprocess と shutil.which を使用し、保守されているドキュメントツールは直接使用してください。Zenodo には保守されている client またはプロジェクトの release tooling を用途に応じて使用します。

互換性の修正#

  • GWpy 4 の実行時プロキシは、選別した公開 table、TimeSeries、LAL、およびその他の utility API を公開するようになりました。オプションの FrameL 互換性プロキシは遅延読み込みです。python-framel なしでも import でき、FrameL が提供する symbol が要求されたときだけ元の dependency error を報告します。

更新履歴#

flowchart LR
    baseline["v0.1.14 ベースライン"] --> integration["v0.2 契約統合"]
    integration --> median_mean["#686 median-mean スペクトル振り分け"]
    median_mean --> source["v0.2.0 リリースソースのメタデータ"]

0.1.14 - 2026-08-15#

削除(破壊的変更)#

  • io (SDB): 文書化されていない sqlite および sqlite3 形式のエイリアスと .sqlite/.sqlite3 GUI フォールバックが削除されました。代わりに、正規の format="sdb" 名と .sdb 拡張子を使用してください (#635)。

    前に

    後

    format="sqlite" または format="sqlite3" は SDB リーダーを選択しました。

    format="sdb" を使用します。削除されたエイリアスにより IORegistryError が発生します。

    .sqlite/.sqlite3 パスは、GUI フォールバックによって SDB にルーティングされました。

    アーカイブの名前を .sdb に変更するか、ダイレクト I/O で format="sdb" を選択します。サポートされていない GUI パスでは RuntimeError が発生します。

動作が見えるバグ修正#

  • io (ATS.MTH5): TimeSeries.read(..., format="ats.mth5") は、mth5>=0.6.8 からサポートされている mth5.read_file(..., file_type="metronix") API を使用するようになりました。リーダーは生の ATSS サンプル値を保存し、Ex/Ey を mV/km に、Hx/Hy/Hz を nT にマッピングし、データ、開始時間、サンプル レート、コンポーネント、またはユニットのメタデータが欠落しているか矛盾している場合にフェールクローズします。公開されたパスは単一シリーズのみのままです。 TimeSeriesDict.read(..., format="ats.mth5") は、オプションの互換性のない辞書ルートを入力する代わりに、依存関係を変更します。ソースのタイミングと単位には権限があるため、epoch=、timezone=、unit=、および不明なリーダーのオーバーライドは無視されるのではなく、明示的に失敗するようになりました (#619)。

    前に

    後

    リーダーが時代遅れのネストされた mth5.io.metronix...read_atss API を呼び出し、シリーズを返す前に失敗する可能性がありました。

    リーダーは、サポートされているトップレベル API を呼び出し、返されたチャネル コントラクトを検証します。

    TimeSeriesDict.read(..., format="ats.mth5") は単一チャネル実装にディスパッチできます。

    サポートされていない収集ルートはすぐに失敗し、呼び出し元を TimeSeries.read に誘導します。

    リーダーのオーバーライドは受け入れられますが、無視されるため、ソースのタイミングと単位は予告なしに変更されません。

    サポートされていないタイミング、単位、および不明なオーバーライドは、依存関係の検索の前に発生します。

  • io (CSV/SDB cadence): 数値および構成されたコンポーネント列の CSV タイムスタンプは浮動小数点変換またはリサンプリングの前に検証され、SDB は時間軸を構築する前に整数の Unix 秒タイムスタンプをデータベースの格納順序で検証します。不正な形式の CSV 行は物理的な行を報告します。タイムスタンプの重複、逆方向、欠落、または大きすぎるタイムスタンプのギャップは、黙って受け入れられたり修復されたりするのではなく、ValueError を生成するようになりました。有限の、正の CSV sample_rate はソース ケイデンスを宣言し、単一行に対して受け入れられます。これがないと、従来の 1 秒フォールバックが残ります。 resample= は、別個の有限の正のターゲット ケイデンスのままであり、補間された値は、返されたターゲット レートの時間軸と一致したままになります。 UTC コンポーネントのケイデンスは連続的な GPS インスタントを使用するため、うるう秒のギャップは完全に埋められません。絶対 float64 軸には丸め誤差と間隔が必要です厳密にケイデンスの半分以下です。リサンプリングは、割り当て前の完全なトップレベルの単一または複数ファイル読み取り全体で、要求されたチャネル出力値 10,000,000 に制限されます (#648、#649)。

  • io (WIN): WIN 読み取りでは、正当なチャネルの遅​​延開始、早期終了、チャネルローカル t0 を維持しながら、連続 1 秒のグローバル パケット ケイデンスが必要になりました。これらは、内部チャネル ギャップと再出現、チャネル ブロックの重複、サンプル レートの変更、パケット時間の重複または逆方向、グローバル ギャップ、および不正な形式、切り詰められた、または長すぎるペイロードでフェール クローズされます。制限された長さとサンプル数のチェックにより、オーバーサイズの読み取り、累積デルタにより整数のラップアラウンドが回避され、BCD 年 99 から 00 まで世紀が進み、UTC 解釈では依然としてトップレベルの読み取りごとに 1 回警告が出されます (#647)。

  • io (SDB): usUnits 列を提供するアーカイブは、すべての行をサポートされている米国の慣用単位系コード 1 として検証し、NULL、テキスト、非整数、またはその他の値でフェールクローズされるようになりました。この列のないアーカイブでは、従来の米国慣習単位の仮定が維持されます。 usUnits はメタデータであり、データ チャネルとして返されません。

  • io (タイムゾーン): 読者は、ソース定義の絶対時刻、単純常用時刻、および相対サンプル インデックスを区別できるようになりました。呼び出し元が提供する timezone= は、単純な明示的な epoch= または構成された CSV コンポーネント列のみをローカライズできます。絶対ソース時間を再解釈することはできなくなりました。絶対/数値/対応エポック オーバーライドはインスタントを保持し、timezone= が無視されることを警告しますが、これらの形式は受け入れられませんタイムゾーン入力が失敗して閉じられました。不正な形式のオフセット、非有限オフセット、およびブール値のタイムゾーン/エポック値は、強制されるのではなく拒否されます。夏時間のフォールドまたはギャップに該当する地方公時は、インスタントを黙って選択または正規化する代わりに、ValueError を発生させるようになりました (#633、#651)。

    前に

    後

    2024-01-01 12:00:00 UTC の震源は東京標準時間として再解釈され、GPS 1388145618 から 1388113218 (-9 時間) に変更される可能性があります。

    ソースのタイムスタンプは GPS 1388145618 で絶対値のままです。単純な明示的な epoch= のみをローカライズできます。

    timezone= は、SDB、ATS、TDMS、DTT XML、オーディオ、WAV、NDScope HDF5、および直接 HDF5/TXT 収集ルートによってサイレントにドロップされる可能性があります。

    サポートされていないタイムゾーン入力では、オプションのバックエンドまたはソース トラバーサルの前に、コンテキストに応じた ValueError が発生します。

    America/New_York 内のあいまいな 2024-11-03 01:30 または存在しない 2024-03-10 02:30 に、replace(tzinfo=...) によってオフセットが割り当てられました。

    単純な現地時間は UTC の往復によってチェックされます。 DST が折り畳まれ、ギャップが閉じられなくなります。

  • 時間 (GPS/UTC 変換): NumPy datetime64[s/ms/us/ns] のスカラーとベクトルは、入力 dtype によって表される瞬間を整数ナノ秒まで保持しながら、時間対応の Astropy 表現を通じて変換されるようになりました。したがって、デフォルトの datetime64 ベクトルは、正確な LIGOTimeGPS 要素のオブジェクト配列を返します。 dtype=float は明示的な binary64 出力モードのままです。スカラー tconvert(datetime64) はまったく同じルートを使用します。今はfrom_gps()スカラー、ベクトル、および Astropy Time 入力に対して 1 つの丸め規則を使用して、タイムゾーン対応の UTC datetime 値を返します。 Python datetime は 23:59:60 を表すことができないため、UTC うるう秒内の GPS インスタントはベクトル入力に対してアトミックに ValueError を生成します (#646、#650)。

    前に

    後

    datetime64[ns] スカラーは、.item() を通じて Unix ナノ秒の整数になる可能性がありますが、ベクトルはすぐにバイナリの 64 GPS 秒に丸められます。

    サポートされているすべての datetime64 解決では、日時セマンティクスが保持されます。スカラー出力とデフォルトのベクトル出力は、LIGOTimeGPS に正確な整数ナノ秒を保持します。

    Vector ルートと Astropy ルートは、スカラー GWpy ルートとは異なるセマンティクスでタイムゾーン ナイーブな日時を返す可能性があります。

    すべての from_gps() ルートは同じ UTC 対応インスタントを返し、ホストのタイムゾーンには依存しません。

  • io (WIN/CSV 警告): WIN ヘッダー時間は明示的に UTC として解釈され、複数ファイルの読み取りでもトップレベルの警告が 1 つ発行されます (#632 部分的)。 CSV 数値時間ルートとサンプルインデックス ルートも同様に、timezone= が無視されると 1 つの警告を生成しますが、コンポーネント列は設定された常用時間をローカライズし続けます (#634 部分)。

既知の制限事項#

  • io (CSV タイム スケール): 数値 CSV タイムスタンプは従来の GPS 秒解釈を保持します。 v0.1.14 では time_scale= または time_unit= は追加されません。読み取る前に非 GPS タイムスタンプを変換します。より広範な時間スケールのあいまいさは、v0.2.0 の #634 によって追跡されたままです。

開発とCI#

  • CI: I/O 適合ジェネレーターのスモーク チェックでは、60 秒の実稼働タイムアウトが強制され、制限された SIGTERM/SIGKILL のクリーンアップ、リープ、および診断出力テールを使用してプロセス グループ全体が終了するようになりました。 PR 高速ゲートは専用の I/O 適合性スイートを繰り返すことはなくなり、ワークフロー チェックアウトはマージベースまたは祖先チェックで必要な場合にのみ完全な履歴をフェッチします (#629、#630)。

0.1.13 - 2026-08-08#

動作が見えるバグ修正#

  • timeseries: TimeSeries.rms(stride=1, *, ignore_nan=True) は再び秒単位の位置数値ストライドを受け入れ、無次元のトレンド系列を返します。数量ストライドと一般的な削減キーワードは拒否されるため、パブリック GWpy 互換 API には 1 つの明確な意味があります (#451)。

  • タイプ: astropy Quantity と SeriesMatrix (TimeSeriesMatrix、FrequencySeriesMatrix、SpectrogramMatrix) の間の算術では、Quantity が左側にある場合、行列の型、そのセルごとの単位、およびすべての軸のメタデータが保持されるようになりました。以前の (2 * u.s) * matrix は、すべてのセル単位、行と列のキー、および時間/周波数軸を含む生の行列データを値とする裸の Quantity を返していました。破棄: m のセルの行列の場合、(2 * u.s) * matrix は m s ではなく s の Quantity を返したので、すべてのセルが行列自体の単位でオフになり、エラーや警告は発生しませんでした。左側の行列 (matrix * (2 * u.s)) の同じ式はすでに正しいため、2 つの順序は一致しませんでした (#575)。

  • タイプ: SeriesMatrix の比較演算子は要素ごとに行われ、形状、行、列、軸を無次元のセル単位で保持するブール行列コンテナーを返します。オペランドは比較前に単位変換されるため、matrix_m < quantity_cm は生の数値ではなく物理値を比較し、互換性のない単位を比較すると、黙って間違った答えを返す代わりに UnitConversionError が発生します (#576)。

  • タイプ: #577 で報告された高速算術パスのガード欠陥は削除され、インプレース演算子はアトミックになりました。途中で障害が発生すると、オペランドは半分更新されるのではなく、変更されないままになります。

  • タイプ: SpectrogramMatrix.clip() / .round() (およびその上に構築される .copy()) は、以前は操作で dtype が変更されるたびに周波数軸 (frequencies、f0、df) をサイレントに破棄していました。時間軸、行/列のラベル、セルのメタデータとともに保存されるようになりました (#623)。

  • タイプ: SeriesMatrix.clip(min, max) 単位の処理が逆転しました。単位を持つ行列に対する単純な数値または無次元の境界は黙って受け入れられましたが、同等ではあるがスケールが異なる Quantity 境界は誤って処理されました。 clip() は、行列の単位と同等の Quantity バウンドを受け入れ (変換、たとえばメートル行列に対する clip(1*u.cm, 2*u.cm))、無次元の裸の数値に対して UnitConversionError を生成するようになりました。結合、または単位を含む行列に対して次元的に互換性のない結合。 clip() はさらに、単位保持限界を適用する前に、行列内のすべてのセルが 同一 単位 (単に次元的に等しいものではなく、たとえば m と cm が 1 つの行列に混在している) を共有することを要求します。そうでない場合は、UnitConversionError を発生させます。異種単位行列の場合は、matrix.value を直接クリップします。これにより、これに関連するハザードでは、np.clip(matrix, ...) (matrix.clip(...) とは対照的に) が、NumPy の _wrapfunc の下で、誤ったエイリアス化されたメタデータ結果に暗黙的にフォールバックします。 out= ガード — そのフォールバック パスに飲み込まれます。両方とも NotImplementedError を発生させますが、これは飲み込まれません (#623)。

  • タイプ: matrix ** True / matrix ** False は Python/NumPy 整数セマンティクス (True == 1、False == 0) と一致するようになりました: matrix ** True は元の値と単位を保持し、matrix ** False は値 1 を無次元の結果で返します (#623)。

  • タイプ: SeriesMatrix.astype() (操作によって dtype が変更されるたびに、clip()/round() によって内部的に使用されます (例: float/Quantity の範囲に対して整数行列をクリップする)) xindex、meta、rows およびcopy() とは異なり、cols はコピーされずに変更されません。クリップされた SpectrogramMatrix の times 軸はソースのエイリアスになる可能性があるため、1 つを変更します静かに他のものを破壊しました。 astype() は、4 つすべてに対する copy() の独立性保証を反映するようになりました (#623)。

  • タイプ: 裸の NumPy 整数スカラー オペランド (Python float のサブクラスに発生する Python int または np.float64 とは対照的な np.int64(2) など) は、プレーンな数値が含まれるどこでも受け入れられるようになりました。以前は、spectrogram_matrix * np.int64(2) および spectrogram_matrix ** np.int64(2) は TypeError: operand 'SpectrogramMatrix' does not support ufuncs を生成していました。これは、SpectrogramMatrix 独自のオペランド受け入れチェックでは int/ float/complex がリストされていたためですが、リストされていなかったためです。np.number。これとは別に、TimeSeriesMatrix/FrequencySeriesMatrix 上の matrix ** np.int64(n) は常に正しい結果を計算しましたが、新しい (#577e) スカラー指数正規化が裸の np.number を渡したため、すべての呼び出しで例外とフォールバックの保証されたパスが取られ、完全なトレースバックがログに記録され、PerformanceWarning が生成されました。 MetaDataMatrix のセル単位の計算。int/float/complex。どちらも使用前に正規化されるようになりました (#623)。

  • io (WIN): WIN リーダーはチャネルごとのサンプリング レートをバイト 3 のみからデコードしましたが、レートは 12 ビット フィールドで、その上位 4 ビットはバイト 2 の下位ニブルにあります。 したがって、256 Hz 以上のすべてのレートは 256 を法として切り捨てられ、1000 Hz は 232 Hz として読み取られました。リーダーはそのレート (xlen = (srate - 1) * datawide) からパケットのペイロード長も導出するため、バイト ストリームの位置がずれており、デコードされた サンプル自体 はガベージでした。時間軸だけではありません。例外は発生しませんでした。リーダーは、もっともらしい TimeSeriesDict を返しました。完全な 12 ビット レートがデコードされ、ObsPy のリーダー (obspy/io/win/core.py、アップストリーム obspy#3641) と一致します。 255 Hz 以下のレートは影響を受けません。先頭の絶対サンプルを伝送するチャネル ブロックを記述することができないゼロのエンコード レートでは、パケットのスライスを誤るのではなく、ValueError が発生するようになりました。ここでは仕様を参照していません4096 Hz のセンチネルとしてゼロを文書化しています (#610)。

  • io (zarr): ストアを読み取ると、指定されたルールではなくディクショナリの反復順序によって選択されたチャネルが返されるため、同じ変更されていないマルチチャネル ストアを 2 回読み取ると、例外も警告も発生せずに異なるデータが返される可能性があります。ペイロードが読み取られる前にチャネル選択が解決されるようになりました。使用可能な配列名が並べ替えられ、欠落している配列に名前を付けるか、名前を繰り返す channels= セレクターによって ValueError が発生します。黙ってスキップされるのではなく。シングルシリーズ リーダーは、選択が正確に 1 つのチャネルに解決されることを要求し、それ以外の場合は、ユーザーに代わって 1 つを選択するのではなく、ValueError を発生させます (#614)。

  • io (zarr): TimeSeries.read(source, format="zarr") は、zarr リーダーに到達する前に IsADirectoryError を生成しました。これは、明示的な形式が汎用レジストリ パスをインターセプトすることがなく、zarr ディレクトリ ストアがファイルとして開かれたためです。したがって、文書化されたエントリ ポイントは機能しませんでした。 TimeSeries.read と TimeSeriesDict.read は、傍受を反映して、format="zarr" (および format="nc"/"netcdf4") をリーダーに直接ディスパッチするようになりました。TimeSeriesDict.read は .zarr サフィックス (#620) に対してすでに実行されています。

  • io (NetCDF4): 書き込み→読み取りのラウンドトリップで、指定された時間軸が返されませんでした。 t0 は日時を介した変換を通じて、dt は整数ナノ秒の量子化を通じて伝達されたため、現実的な GPS エポック (t0 が約 1e9 秒で、binary64 には余裕の精度がない) では、エポックとサンプル間隔の両方が乱れて戻り、ファイル内のすべてのタイムスタンプが静かにシフトしました。ファイルはt0 を正確な binary64 16 進数リテラルと整数の GPS 秒/ナノ秒を加えたものとして保存し、dt を正確な整数比として保存する、バージョン管理されたタイミング スキーマで記述されるようになりました。そのため、軸はビットごとにラウンドトリップします。以前のバージョンで書き込まれたファイルにはスキーマ マーカーがありません。それらはまだ読み取り可能であり、これを読み取ると、劣化したものを提示するのではなく、タイミング精度が制限されていることを示す RuntimeWarning が発行されます。軸を正確に設定します (#615)。

  • timeseries: crop() は実体化されたタイムスタンプ インデックスを通じてサンプルを選択したため、大規模な GPS エポックの浮動小数点キャンセルによって境界が 1 サンプル分移動し、dt が数 ulp だけ混乱する可能性があります。乱れた dt によって sample_rate が変化し、切り捨てられた nfft の導出によってそれが O(1/nfft) の周波数軸誤差に増幅されるため、クロップ後に計算されたスペクトルは、何もせずにシフトされる可能性があります。育てるものなら何でも。通常の軸上の切り抜きは、t0、dt、およびキャンセル対応許容値から計算された位置スライスになり、ソース dt は切り取られた座標から再導出されるのではなく保持されます。不規則な軸は GWpy の既存の動作を維持します。同じ修正が TimeSeriesMatrix.crop (#617) にも適用されます。

  • timeseries: TimeSeriesDict.read は、リーダーが添付した _gwexpy_io 読み取り来歴を破棄しました。これは、リーダーの結果をコレクション クラスで再ラップしても属性が渡されなかったためです。来歴は再ラップ後も存続するため、辞書がどのように読まれたかの記録は、返されたオブジェクトで利用できます (#618)。

  • 相互運用 (ROOT): from_root は、生のビン バッファーを float64 として再解釈することにより、2 次元ヒストグラムの内容を読み取ります。 TH2F には float32 の内容が格納されるため、バッファーが間違った幅でデコードされ、一見もっともらしいが意味のない値が例外なく返されました。コンテンツは、クラスのネイティブ スカラー dtype で ROOT アクセサーを通じて読み取られるようになりました。(対応する整数幅として TH1C/S/I/L、float32 として TH1F/TH2F、float64 として TH1D/TH2D)、また、Histogram は整数入力配列を float64 にプロモートしなくなり、整数型の ROOT ヒストグラムは整数の内容を保持します。ビン エラーも同様に、代わりに GetBinError を通じて読み取られます。Sumw2 バッファー (#593) から再構築されます。

  • フィールド: Quantity (またはベア スカラー、または Unit) とフィールド コレクション (FieldList、FieldDict、したがって VectorField および TensorField) 間の算術演算で、コレクションには演算子コントラクトがなかったため、コンポーネントごとの物理単位と軸のメタデータが失われました。独自のおよび Astropy の ndarray ディスパッチによってそれが消費されました。コレクションはバイナリ、リフレクト、および明示的なインプレース演算子: 各コンポーネントは個別に操作され、その軸インデックス、軸名、ドメイン、オフセット、名前、エポック、およびチャネルは、ソースと共有されるのではなく、結果にコピーされます。コンポーネントが置き換えられる前に寸法エラーが発生するため、インプレース操作が失敗するとコレクションはそのまま残ります (#578)。

  • プロット: stride が振幅 pcolormesh および quiver 層に転送されたため、VectorField.plot(stride=...) は TypeError: got an unexpected keyword argument 'stride' を発生させました。これは、スカラー レイヤーが描画される前に消費され、常に意図されていた矢筒デシメーションにのみ適用されるようになりました (#559)。

  • ドキュメント (セグメント): SegmentTable は、実装に存在しないメソッドを文書化した参照です。このリファレンスは出荷された API (#605) と一致するようになりました。

  • docs (interop): gwinc_ docstring が存在しないクラスメソッドを指していました。また、モジュールに記載されているテスト カバレッジが実際に実行されるテストと一致しませんでした。両方とも実装について説明します (#608)。

  • ci: 相互運用ゲートは、テストが収集されたことを確認せずに JUnit 出力を集約したため、テストが収集されなかった実行は成功を報告しました。収集されたテストのないゲートは失敗するようになりました (#511)。

互換性#

  • タイプ (API 絞り込み、パッチ リリース): NumPy ufunc を SeriesMatrix (np.sqrt(matrix)、np.negative(matrix)、np.add(a, b)、np.add(a, b, out=target)、np.add.reduce(matrix)、np.add.accumulate(matrix)、np.multiply.outer(a, b)) に直接適用すると、次のエラーが発生します。

    TypeError: operand 'TimeSeriesMatrix' does not support ufuncs (__array_ufunc__=None)
    

    以前は、これらの呼び出しはサイレントに実行され、未定義の結果が返されるか、警告なしにメタデータが破棄されました。これにより、パッチ リリースでの公開範囲が狭まり、プロジェクトのリリース ポリシーでは、契約違反を修正する場合に許可されています。左側の Quantity がセル単位のユニットを飲み込むのを阻止するのと同じメカニズム (__array_ufunc__ = None、リフレクトされた演算子を介して quantity * matrix を戻す) も、NumPy を作成します。直接の ufunc ディスパッチを拒否します。間違った単位の結果をサイレントに返すことは、明示的な失敗よりも悪いものとして扱われます。

    すべての操作は、型、セルごとの単位、およびメタデータを保持する明示的な演算子スイート (+ - * / // % divmod ** @、そのリフレクトおよびインプレース形式、6 つの比較、および単項 + - abs()) を通じて引き続き利用できます。生の NumPy 結果の場合は、matrix.value を操作します。これにより、設計によりユニットとメタデータが削除されることに注意してください。

    NumPy/GWpy ufunc の完全な互換性は v0.2.0 (#637) に延期されており、SeriesMatrix セマンティック コントラクトの再設計のリリース ブロッカーとなっています。現在の ndarray サブクラス データ モデルでこれを復元するには、.unit または .value パブリック セマンティクスの変更が必要であることが測定されており、これはパッチ リリースの範囲外です (#575、#576、#577、#623)。

  • タイプ: matrix_m + matrix_cm は、以前は UnitConversionError を発行していましたが、右側のオペランドを左側のオペランドのセルごとの単位に変換して成功するようになりました。以前は失敗していた結果が値を返すようになりました。以前は成功していた結果は変更されません (#575)。

  • タイプ (API の絞り込み、パッチ リリース): divmod(matrix, operand) は明示的にサポートされていないため、TypeError が発生します。この修正の以前のドラフトでは、ゼロ以外の約数の単位を黙って無視する機能する __divmod__/__rdivmod__ が追加されていました。これにより、ユニット認識の divmod を出荷するのではなく、この変更の前に main で divmod がすでに抱えていた明示的な障害が維持されます (機能の回帰ではありません (#623))。

  • タイプ (API の絞り込み、パッチ リリース): 単位を含む SeriesMatrix と無次元オペランドの間の % および // は、左側のオペランドの単位を単位変換なしで計算された値にサイレントにコピーするのではなく、明示的に TypeError を生成するようになりました (上記の #576 修正と同じ欠陥クラス。 %///)。無次元チェックには正確な —単に次元が等しいだけでなく、すべてのセル上の単位であるため、u.dimensionless_unscaled セルと u.percent セルを混合する行列は、どちらのセルが最初に来るかに関係なく拒否されます (以前はチェックが最初のセルに対してのみ比較されていたため、500% はセルの順序に応じて黙って 500 として扱われる可能性がありました)。無次元の % および // は影響を受けません。足し算、引き算、比較は、ユニットセーフ。 v0.1.x では、モジュロ、フロア除算、および divmod は、単位を持つ SeriesMatrix オブジェクトではサポートされていません。値のみの算術演算を実行するのではなく、明示的に計算されます。正しいユニット認識のフロア分割/剰余の実装は、v0.2.0 セマンティック再設計 (#637) (#623) に延期されます。

  • タイプ: 行列の有限性チェックには、mask = np.isfinite(matrix.value) を使用します。これは、直接の ufunc アプリケーション (np.isfinite を含む) が TypeError を生成するようになった、文書化された v0.1.13 の代替案です (上記の ufunc 絞り込みエントリを参照)。このパッチ リリース (#623) では新しい API は追加されません。

  • io (API の絞り込み、パッチ リリース): ウィンドウ化された読み取りパスを持たないリーダーは、start= および end= を受け入れてドロップし、要求されたスパンであるかのようにファイル全体を返しました。引数は代わりに拒否されるようになりました。これは、ats.mth5 および xml.diaggui/dttxml リーダーに影響します。

    電話

    前に

    後

    TimeSeriesDict.read(src, format="ats.mth5", start=t0, end=t1)

    スパンを無視して完全なファイルを返します

    IoNotImplementedError (NotImplementedError サブクラス) を発生させます

    TimeSeriesDict.read(src, format="dttxml", start=t0, end=t1)

    上記のように

    上記のように

    解決策は例外メッセージにあります。ソースを完全に読み取り、結果 (TimeSeries.read(source, format=...).crop(start, end)) を切り取ります。どちらのセレクターも通過しない呼び出しは影響を受けません (#611)。

  • io (GWF) (API 絞り込み、パッチ リリース): parallel= および nproc= は GWF 読み取りパスによって受け入れられ、その後破棄されたため、並列読み取りを要求する呼び出し元はシリアル読み取りを取得しましたが、それを示すものはありませんでした。並列 GWF 読み取りはまだ実装されていません。議論は今そう言っています。

    電話

    前に

    後

    read(..., parallel=4) / read(..., nproc=4)

    シリアル読み取り、リクエストはサイレントにドロップされました

    NotImplementedError を発生させます

    read(..., parallel=True)

    シリアル読み取り

    NotImplementedError を発生させます

    read(..., parallel=1) / nproc=1 / いずれかを None に設定

    シリアル読み取り

    変更なし — シリアル読み取り

    read(..., nproc=0) または非整数

    静かに落とした

    ValueError を発生させます

    read(..., parallel=2, nproc=2)

    二人のうちの一人が黙って勝った

    TypeError を発生させます

    並列 GWF 読み取りの実装は v0.2.0 (#588) まで延期されます。

  • io (ndscope HDF5) (API の絞り込み、パッチ リリース): ndscope HDF5 ライターは、圧縮などのデータセット作成オプションを含む任意のキーワード引数を受け入れ、無視したため、圧縮を要求されたファイルは圧縮なしで書き込まれ、何も通知されませんでした。不明なライター キーワードでは、ターゲットが開かれる前に TypeError が発生するため、部分ファイルは生成されません。 v0.1.13 ではデータセット作成オプションはサポートされていません。サポートされるセットは v0.2.0 (#590) で定義されています。

  • io (zarr、GBD、NetCDF4) (API 絞り込み、パッチ リリース): これらの形式の単一シリーズ リーダーはマルチチャネル ソースの最初のチャネルを返し、存在しない配列を指定する channels= セレクターは報告されずに黙ってスキップされました。どちらも明示的に失敗するようになりました。

    電話

    前に

    後

    マルチチャンネルソースの単一シリーズ読み取り

    任意のチャネルを返します

    ValueError を発生させます。 channels= を渡して 1 つ選択します

    channels=["missing"]

    サイレントに少数のチャンネルを返すか、何も返しません

    欠落しているチャネルに名前を付ける ValueError を発生させます

    channels=["a", "a"]

    複製がサイレントに折りたたまれました

    ValueError を発生させます

    セレクターはペイロードが読み取られる前にソースのチャンネル リストに対して検証されるため、無効な選択にはコストはかかりません (#614、#615)。

  • ヒストグラム (API 絞り込み、パッチ リリース): Histogram には算術規約がありません。quantity * histogram などの式が失敗するか、サイレントに値を生成するかは、ヒストグラムの unit/value 属性と Astropy の Quantity ディスパッチの間の偶発的な相互作用によって決まりました。ヒストグラム演算の不確実性の伝播は定義されていないため、バランスを偶然に任せるのではなく、+ - * / とその反映フォームおよびインプレース フォームは、Histogram で TypeError を発生させるようになり、__array_ufunc__ = None は、演算子を迂回するルーティングではなく、同じ方法で NumPy ディスパッチを失敗させます。伝播ルールが定義されるまで (たとえば、.value を介して) 値を明示的に変換します (#579)。

  • 相互運用 (ROOT) (API 絞り込み、パッチ リリース): from_root は、TProfile、TProfile2D、および TH2Poly オブジェクトを受け入れ、それらのビンに TH1/TH2 セマンティクスがあるかのようにデコードしましたが、それらはありません。これらのクラスは、誤って解釈された結果を返すのではなく、クラス名を指定する TypeError を発生させるようになりました (#593)。

既知の制限事項#

  • #577c (インプレース out= 更新) は、このアプローチでは実現できず、機能するインプレース更新ではなく、明示的な TypeError のままです。

  • 最初に報告された #577a/#577b の症状は、この変更のベース (デッド コード パス) に対して再現されませんでした。このリリースでは、当初の説明どおりにそれらが修正されたとは主張していません。

  • Quantity == SeriesMatrix はスカラー False を返し、SeriesMatrix == Quantity はブール行列を返します。この非対称性は astropy に由来しており、ここでは修正されません。

0.1.12 - 2026-07-31#

これは、メタデータの整合性、統計の正確性、およびリリース ツールのパッチ リリースです。 NDScope HDF5 のサイレント チャネル ドロップ バグ (#541) を解決し、レイリー統計ヌル モデルと関連するいくつかのエッジ ケース (#506) を修正し、フェールクローズ検証、正確な SHA ピンニング、および文書化された信頼境界 (#536) でリリース公開ワークフローを強化します。

動作が見えるバグ修正#

  • io: ndscope HDF5 ファイルを読み取ると、データを保持するグループが rate_hz 属性も sample_rate 属性も持たない場合、そのグループをスキップするのではなく、問題のあるグループを指定する ValueError が発生するようになりました。以前は、このようなグループはサイレントに削除されていたため、メタデータが不完全なチャネルが 1 つ含まれるマルチチャネル ファイルは、そのチャネルが欠落している TimeSeriesDict を返し、エラー、警告、またはデータが削除されたことを示すその他の兆候はありませんでした。失った。グループは、gps_start と raw/mean/min/max データセットの少なくとも 1 つを保持する場合、データを保持します。 gps_start のないグループ、および ndscope データセットを保持しないグループはデータを保持せず、以前と同様にスキップされ続けます。明示的な channels= 引数によって除外されたチャネルは決して読み取られないため、影響を受けません。フォーマットの自動検出には、サンプリング レート属性のいずれかであるため、このエラーは明示的な format= なしで TimeSeriesDict.read()/TimeSeriesMatrix.read() を通じて発生します。以前は、すべてのグループに属性が欠如しているファイルは識別に失敗し、別のリーダーに渡され、無関係なエラーの背後に損失が隠蔽されていました。これで、#534/#535 (#541) での外部メタデータの互換性作業が完了しました。

リリースツール#

  • ci: リリース パブリケーション ワークフローは、release.yml に代わって、単一のフェールクローズされた publish-release.yml になりました。 build、smoke、または publish が使用する前に、リリース参照を正確な 40 文字の SHA に解決し、検証するリビジョンとは別にバリデーター コードをチェックアウトし、すべてのアクションを完全なコミット SHA に固定し、タグ プッシュと pypi 環境の背後で PyPI パブリケーションをゲートします。また、OIDC id-token: write をパブリッシュ ジョブのみに制限します。手動ディスパッチは予行演習であり、--ref main を使用して起動する必要があります。 scripts/validate_release.py と RELEASING.md が一緒に追加されます。バリデーターは、最初に出現したものを読み取るのではなく、重複するリリース メタデータ (2 つの ## [version] CHANGELOG 見出し、または CITATION.cff 内の反復されたトップレベル version/date-released) を拒否し、リリースノート ジェネレーターのフェールクローズ動作。 RELEASING.md は、信頼境界が実際にどこにあるかを文書化し、リポジトリおよび PyPI 構成によって強制される制御を、機械的に強制されない操作ルールから分離し、タグのプッシュ前に監査人がチェックする必要があるリードバック フィールドを記録します (enforcement、target、conditions、rules[].type、 bypass_actors と信頼できる発行元バインディングには GitHub API リードバックがありません)、ワークフローのデュアル チェックアウト自体が変更されたタグ リビジョンから保護されることは「ない」と明示的に述べています。 creation/update/deletion ルールはその操作を禁止するのではなくリストされたアクターに制限するため、必要な bypass_actors 状態は両方に一度ではなくルールセットごとに与えられます。タグ作成ルールセットは許可されたアクターを列挙する必要があります。一方、タグ整合性ルールセットには何もリストする必要はありません (#536)。

  • ci: publish-release.yml の pypa/gh-action-pypi-publish ピンは、それが指すコミット SHA ではなく、v1.14.2 の注釈付きタグ オブジェクト SHA を使用したため、ピン付けされた参照はコンテナ イメージに解決されず、publish ジョブは何かをアップロードする前に失敗しました。剥がされたコミット SHA (dc37677b2e1c63e2034f94d8a5b11f265b73ba33) に再固定されました。失敗した実行によってパッケージは PyPI に公開されませんでした。

再現性に関する注意: 以下の rayleigh_test エントリは数値出力を変更します。影響を受ける統計モデルは 70bc11f55 (2026-03-28) で導入され、v0.1.1 から v0.1.11 までのすべてのリリース (11 のリリースで、すべて PyPI 上にあります) で変更されずに出荷されました。これらのバージョンで生成された p 値はこれらと比較できないため、プールしないでください。古い出力を復元するためのフラグはありません。再現する必要がある分析以前の番号は、それを作成したバージョンに固定する必要があります。

  • 統計: rayleigh_pvalue() / TimeSeries.rayleigh_test() は、指数分布した power サンプルからのヌル分布をシミュレートし、GWpy の rayleigh_spectrogram() が実際に報告するパワーベースの統計と一致します。以前は、ヌルはレイリー分布の 振幅 サンプルから抽出され、レイリー分布の変動係数によって再スケーリングされていました。平均値と一致しても分布形状は一致しません。報告された p 値は、stride/fftlength 比に依存する量だけ系統的に誤って校正されていました。修正されたヌルは、正確な瞬間 E[R^2] = (n-1)/(n+1) に対して検証されます。これは、グリーンウッドの統計量に換算される指数サンプルのサンプル変動係数から得られます (#506)。

  • 統計: TimeSeries.rayleigh_test() は、データに関係のない定数 39 をデフォルトとするのではなく、fftlength、stride、overlap から n_samples を導出するようになりました。カウントは、GWpy が列ごとに平均するピリオドグラム セグメントの数であり、セグメントが重複する場合は常に dt * df ではありません。GWpy はシリーズを nstride + noverlap サンプルに分割するため、rayleigh_test() のデフォルトはパス -- overlap=None をデフォルトのハン ウィンドウに推奨される 50% に解決します -- は dt * df を 2 回生成します。上記のヌル分布のみを修正すると、デフォルト パスが以前より 悪い キャリブレーションのままになります。これは、一部の構成で古い 39 が偶然間違った分布形状を補正したためです。 n_samples は、下位互換性のために明示的に渡すことができます。という値派生したものと一致しない場合は、UserWarning が発行されます。デフォルト値が変更されたため、inspect.signature() は異なるデフォルト (#506) を報告することに注意してください。

  • 統計: overlap が 0 または GWpy が推奨するウィンドウのオーバーラップ (デフォルトのハンの 50%) 以外に解決された場合、TimeSeries.rayleigh_test() は ValueError を生成するようになり、切り捨てられる秒からサンプルへの変換に 1 サンプルのスラックが許可されます。 75% のオーバーラップでは、GWpy はデータの約 36% しか使用していないにもかかわらず、エラーや警告を出さずに結果を返していました。また、この条件では各セグメントのパワーが互いに独立で同じ指数分布に従うとは近似的にもみなせなくなるため、セグメント数を補正しても帰無分布を適用できません (#506)。

  • 統計: rayleigh_pvalue() は DC ビンを報告し、サンプルの FFT 長が偶数の場合はナイキスト ビンを NaN として報告し、ナイキスト ビンを識別できるように nfft= キーワードを受け入れるようになりました。実数値入力の DC 係数とナイキスト FFT 係数は純粋に実数であるため、そのパワーは指数関数ではなく chi2_1 に従います。約 77% の確率で純粋なガウス ノイズに対して発生した指数ヌルに対してスコアを付けます。名目上の alpha=0.05 で、これだけでも to_segments() の拒否権率が 100% 近くに固定されています。奇数の FFT 長には正確なナイキスト ビンがなく、最後の片側ビンがスコアリングされたままになります。これは、v0.1.11 (#465) で compute_student_t_nu() に追加された DC/ナイキスト処理を反映しています。 chi2_1 null を使用してこれらのビンでの検出パワーを回復することは、将来のリリースに残されています (#506)。

  • 統計: TimeSeries.rayleigh_spectrogram() は、GWpy の rayleigh() に委任するのではなく、独自のセグメントごとの平均を取得するようになりました。これにより、セグメントの開始が fftlength - overlap によって進みますが、overlap を使用してセグメントがカウントされます。これらは正確に 50% のオーバーラップでのみ一致するため、奇数の FFT 長の場合 (推奨されるハン オーバーラップが nfft // 2 ではない場合)、またはその他の明示的なオーバーラップの場合、GWpy は有効なセグメントを省略するか、短いセグメントを要求します。のcount とスライスの開始は同じホップから行われるようになりました。 これにより、正確にこれらの構成で、gwpy と GWexpy <=v0.1.11 の両方に関連して、統計値から導出された p 値だけでなく、報告される統計値自体が変更されます。 rayleigh_test() の推奨オーバーラップ パスは変更されていません。直接の rayleigh_spectrogram() 呼び出しは引き続きデフォルトの overlap=0 になり、これも変更されません。 TimeSeries.rayleigh_test() は拒否します発散的なオーバーラップは完全に重複するため、これは明示的なオーバーラップのみを渡す直接の rayleigh_spectrogram() 呼び出し元に影響します (#506)。

  • 統計: rayleigh_pvalue()、_get_rayleigh_stat_null_distribution()、および _simulate_rayleigh_null() は、n_samples < 2 のときに ValueError を発生させるようになりました。この統計は n セグメントにわたるサンプルの変動係数であるため、n == 1 はすべてゼロの null を生成し、それに対してすべての観測値のスコアは p == 0 となり、n <= 0 は同じ効果を持つすべて NaN null を生成しました (どちらもサイレント)。以前の n <= 0 ケースディストリビューション層でのみ発生します。ディストリビューション層が共有キャッシュに記録されるため (#506)、境界は >= 2 になり、3 つのエントリ ポイントすべてに適用されます。

既知の制限事項#

  • 統計: to_segments() は依然として多重比較補正を適用しません。任意の 周波数ビンに p < alpha があるときにフラグを立てます。正しくキャリブレーションされた p 値と 63 のスコア付きビンでは、デフォルトの alpha=0.05 で約 96% の確率で拒否されるため、上記はビンごとのキャリブレーションに対する修正であり、偽の拒否に対する修正ではありません**。それに応じて alpha を選択するか、周波数範囲を制限します。

  • 統計: rayleigh_pvalue() は依然として p == 0 を正確に返すことができますが、compute_gauch() は p 値を 1/n_monte_carlo で下限とします。この非対称性はここでは変更されておらず、#507 で追跡されています。

  • ドキュメント: Rayleigh/GauCh チュートリアルの日本語翻訳カタログには、新しい v0.1.12 ノートがまだ含まれていません。その間、ノートブックには明示的な日本語セルが含まれています。

0.1.11 - 2026-07-25#

これは、時間/メタデータの整合性と統計の堅牢性を実現するパッチ リリースです。 MNE 相互運用エポック/メタデータ処理 (#493) を修正し、GPS 絶対時間軸と Student-t 非ガウス指標の DC/ナイキスト フィットの正確さを復元し (#465)、レイリーおよび GauCh 統計検定のモンテカルロ rng=/seed= 再現性を追加します。 (#464)。

動作が見えるバグ修正#

再現性に関する注意: 以下の 2 つの statistics エントリ (GPS 時間軸と DC/ナイキスト nu フィット) は、<=v0.1.10 を基準にして数値出力を変更します。どちらも、以前に間違っていた値の正確性を修正するものであり、新しいオプトイン動作ではありません。v0.1.11 より前の出力を復元するフラグはありません。 gwexpy<=0.1.10 で計算された結果の正確な再現に依存する分析は、そのバージョン範囲に固定される必要があります。

  • 相互運用: to_mne_rawarray() は、入力エポック (t0) が存在しない場合に info["meas_date"] を設定し、黙って無視するのではなく、既存の info["meas_date"] (~1us 以内) に対して検証するようになりました。不一致がある場合、エポックが正しくない、またはエポックが欠落している mne.io.Raw が生成されるのではなく、ValueError が生成されるようになりました。マルチチャネル変換では、スタックされたすべてのチャネルが「正確に」一致するエポックを共有する必要があります。(以前はチェックされていませんでした)、異なる取得時間からのサンプルをサイレントにインターリーブするのではなく、不一致時に ValueError を発生させます。うるう秒に該当する t0 値は、引き続き LeapSecondConversionError を引き上げます。 from_mne_raw() は、GPS エポックを再構築するときに raw.first_samp を考慮するようになり (以前は無視され、トリミング/再開された Raw オブジェクトのエポックは過小評価されていました)、unit_map を適用して設定されます。unit_map が省略された場合の AttributeError の修正を含む、チャネル単位の修正 (#493)。

  • 統計: compute_student_t_nu() / TimeSeries.student_t_spectrogram() は、開始からの相対秒数ではなく、GPS 時間軸 (入力 TimeSeries の t0 と STFT 相対時間) を返すようになりました。 fftlength、stride (および overlap)、sample_rate、window、および frange が検証されるようになりました。非有限/非正の値により、不透明なダウンストリーム障害の代わりに ValueError が発生します。stride > fftlength は、セグメント間のサンプルをスキップするギャップ分析をサイレントに実行するのではなく、明示的に ValueError を生成するようになりました (scipy.signal.stft は、エラーなしで負の noverlap を受け入れます)。基礎となる scipy.signal.stft 呼び出しは、scipy のデフォルトに依存するのではなく、明示的に window="hann", detrend=False, boundary="zeros", padded=True を渡すようになりました。 #465 を部分的にアドレス指定します (#465 の DC/ナイキスト ビン バイアスの半分は次のエントリによって修正されます)。

    移行メモ (#465、#502): 以前に返された times に ts.t0 (または同等の GPS オフセット) を追加した呼び出し元は、そのステップを削除する必要があります。返された時刻はすでに GPS 絶対値であり、エポックを 2 回追加すると結果が t0 秒シフトするためです。 0 で始まる相対秒軸を想定してこれらの時間をインデックスまたはスライスするコードは、新しい GPS 絶対軸。

  • 統計: compute_student_t_nu() は DC (インデックス 0) に適合するようになり、セグメント長が偶数の場合、ナイキスト (最後の片側ビン) 周波数ビンは、それらのビンに対しても独立しているかのように実数部と虚数部を連結するのではなく、実数の FFT 係数のみを使用して実行されます。実数値信号の DC/ナイキスト FFT 係数は純粋に実数であるため、前の re+im 連結は定数ゼロの虚数半分をフィットに供給しました。推定された Student-t nu を 0 に向けて崩壊させ、実際の入力に関係なく、DC で系統的な誤った非ガウス検出を生成します。これは GWexpy 固有の正確性の修正であり、GWpy の互換性変更ではありません (GWpy には同等の Student-t Fit API がありません)。 DC/ナイキストは浮動小数点周波数比較ではなく、有効セグメントから計算された構造的に識別されます (インデックス 0 / 最後の片側ビン)。長さ (要求された値がそれを超えると、scipy.signal.stft は nperseg を len(ts) にサイレントに縮小します。これにより、要求された fftlength * sample_rate に対するパリティが反転する可能性があります)。 compute_student_t_nu() は、ValueError による複素数値入力も拒否するようになりました (以前はサイレントであり、scipy.signal.stft は複素入力の return_onesided=True を無視します。これにより、この bin 分類が壊れます)。 #465を完了します。

  • 統計: compute_gauch() / TimeSeries.gauch() および rayleigh_pvalue() / TimeSeries.rayleigh_test() は、再現可能なモンテカルロヌル分布のために rng= (numpy.random.Generator) または seed= を受け入れるようになりました。デフォルト (rng/seed なし) パスは変更されていません。従来のグローバル numpy.random 状態から引き継がれるため、既存の numpy.random.seed(...) 呼び出しは以前とまったく同じように制御し続けます。通過rng=/seed= は、代わりに専用の numpy.random.Generator を使用し、共有のプロセス グローバル null 分散キャッシュをバイパスします (以前は (n, n_trials) によってのみキー設定されており、特定の描画をリクエストする方法はありませんでした)。デフォルト パスのキャッシュ設定はロックを使用してシリアル化されるようになり、同じ (n, n_trials) キーに対する同時呼び出し元がそれぞれ冗長に再計算して上書きする可能性があるという既存の競合が修正されました。キャッシュされた配布。 compute_gauch() の結果は、n_monte_carlo を記録し、指定された場合は seed (または rng_provided/ seed_unused) を .metadata に記録するようになりました。 rayleigh_pvalue() によって返される Spectrogram は、.copy()/スライス/シリアル化後に存続しないインスタンス属性と同じレコードを記録します。 rng と seed の両方を渡すと、次のことを示す UserWarning が発行されるようになりました。seed は無視されます (#464)。

依存関係#

  • inspiral-range を gw および all のオプションの依存関係エクストラに追加しました (コア/必須の依存関係は変更ありません) (#487)。

既知の制限事項#

*オリジナルのリリース後に 2026 年 7 月 26 日に追加されました。 2026 年 7 月 25 日に公開された Zenodo レコードは不変のスナップショットであり、このセクションは含まれていません (#506 を参照)。

  • 統計: rayleigh_pvalue() / TimeSeries.rayleigh_test() は、振幅 (レイリー分布) サンプルからヌル分布をシミュレートしますが、比較される統計 (GWpy からの TimeSeries.rayleigh_spectrogram()) はパワー (指数分布) PSD セグメントから計算されます。 2 つの分布は、平均を一致させた後でも形状が異なるため、報告される p 値が体系的に誤って校正されます。効果は、stride/fftlength 比: 偽陽性率は、一部の構成では公称値に近い場合 (例: stride/fftlength ~= 2 の場合 ~5%)、他の構成では高くなる可能性があります (例: stride/fftlength ~= 20 の場合 ~11%)。これにより、非ガウス性/スペクトル ラインの一貫性のない過大または過小検出が発生します。これは既存の問題であり、このリリースの rng=/seed= の再現作業によっては導入されません。修正は v0.1.12 で行われる予定です。rayleigh_pvalue() の数値出力を変更します (#506 を参照)。

[0.1.10] - 2026-07-18#

数値正則化、軸の規則性、ヒストグラムの重み、TimeSeries のリサンプリングにおける dtype と境界の契約を対象としたバグ修正リリースです。

動作が見えるバグ修正#

  • numerics: TimeSeriesMatrix.partial_correlation_matrix() のデフォルトが 1e-8 から eps="auto" に変更され、WhitenTransform のデフォルトも 1e-12 から eps="auto" に変更されました。LaplaceGram.normalize_per_sigma() のデフォルトも 1e-30 から eps="auto" に変更されました。これらのデフォルトでは入力に応じて正則化の大きさが調整されるため、strain スケールの偏相関とホワイトニングがゼロ近傍に潰れなくなります。以前の動作を維持するには、従来の値を明示的に渡してください。互換性のため、partial_correlation_matrix(eps=None) は追加のリッジを無効にする動作を引き続き維持します。3 つの API はすべて、非有限入力と無効な epsilon 値を ValueError として拒否するようになりました (#482)。

  • types: AxisDescriptor.regular は、表現された隣接区間を狭く制限された区間スケール許容誤差で比較するようになりました。通常の浮動小数点の規則格子は受け入れつつ、誤った delta を生じる可能性がある、大きなオフセットを持ち実質的に等しくない float32 区間は拒否します (#492)。

  • histogram: ヒストグラム座標が整数 dtype の場合でも、Histogram.fill() がフロー・ビンの値や分散の累積を含め、スカラー重みの小数部分を保持するようになりました (#489)。

  • timeseries: 時間ビンの resample() は、closed="right" を「最小値を含む最初のビン」に続く右閉区間のビンとして実装するようになりました。また、ビン格子を構築する前に enum オプション、幅、オフセットを検証します (#491)。

  • timeseries: 整数の fill_value を表現できる場合、TimeSeries.asfreq() は整数のソース dtype と正確な値を保持するようになりました。範囲外の整数の fill は、情報を失う dtype 昇格を起こす代わりに ValueError を送出します。小数、複素数、NaN、無限大の fill は引き続き、それらを表現できる dtype に昇格します (#490)。

[0.1.9] - 2026-07-11#

バグ修正リリースです。0.1.8 から延期されていた GWF 読み取りパスの NaN パディング統一を完了し (#481)、#461 のフォローアップ監査で明らかになった 2 つのフィッティングバグを修正しました。具体的には、x_range の境界が正確に一致する場合の fit_series における sigma の切り出しの off-by-one と、検証されていない run_mcmc(n_walkers=...) によって emcee 内部のエラーがそのまま表面化する問題です (#466)。

動作が見えるバグ修正#

  • GWF 固有の読み取り(format="gwf" を指定した TimeSeries.read/TimeSeriesDict.read/TimeSeriesMatrix.read)では、gap="pad" のデフォルトが 0.0 ではなく NaN パディングになり、0.1.8 で導入された SeriesMatrix.append の NaN デフォルトとの統一が完了しました。GWF のギャップがゼロで埋まることに依存していたコードでは、明示的な pad= 値を渡してください。欠損領域(ファイル間のギャップ、または利用可能なデータを超えて延長された要求区間)を、浮動小数点でない GWF チャネル dtype に対して NaN でパディングすると、範囲外の整数 fill 値によるデータの暗黙の破損や、NumPy の不透明な cannot convert float NaN to integer エラーの漏出ではなく、明確な ValueError が送出されるようになりました (#481)。

バグ修正#

  • fitting: x_range の上限がデータ・ビンの端と正確に一致する場合でも、fit_series(..., sigma=..., x_range=...) が偽の Sigma length mismatch ValueError でクラッシュしなくなりました。sigma 配列は、フィット対象データに対して Series.crop() が実際に使用したものと同じインデックス範囲で切り出されます (#466)。

  • fitting: FitResult.run_mcmc() は emcee.EnsembleSampler を呼び出す前に n_walkers >= 2 * ndim を検証するようになりました。必要な最小値を示す明確な ValueError を送出し、gwexpy レベルのコンテキストなしに emcee 内部の RuntimeError が表面化することを防ぎます (#466)。

開発#

  • メンテナー専用の .harness/ AI ワークフローファイルを公開リポジトリの外へ移動し、ハーネスが存在しない場合はプライベート・ハーネス同期テストをスキップします (#483)。

[0.1.8] - 2026-07-04#

バグ修正および I/O 堅牢化リリースです。obspy.Stream 入力時の from_obspy のクラッシュを修正し (#452)、SeriesMatrix / I/O 層を堅牢化しました。#443 のフォローアップ監査で明らかになったギャップ処理、メタデータのエイリアシング、キーのラウンドトリップ、リーダーの失敗モードを、明示的な契約と回帰テストによって修正しています (#450)。

動作が見えるバグ修正#

  • SeriesMatrix.append(gap="pad")(およびこれを基盤とする行列のマルチソース統合パス)は、デフォルトでギャップを 0.0 ではなく NaN でパディングするようになり、マルチソース・リーダーですでに使用されている欠損データの規約に一致しました。ギャップがゼロで埋まることに依存していたコードでは、明示的な pad= 値を渡すか、削減・FFT・フィルタリングの前に NaN を処理してください。浮動小数点でない行列 dtype のギャップを NaN でパディングすると、無効な fill 値を暗黙に挿入する代わりに ValueError が送出されます。

  • io/netcdf4: チャネルごとの Series 構築に失敗しても、単純な dict に劣化しなくなりました(これまでは下流で不透明な AttributeError が遅れて発生していました)。リーダーは発生源で明確な ValueError を送出します。

  • io/netcdf4: 時間座標の検出では、明示的に命名された座標(time/Time/TIME/t)が優先され、datetime64 座標へフォールバックする場合は警告されるようになりました。複数の候補があり選択が曖昧な場合は、より強い警告になります。軸を明示的に選択するには time_coord= を渡してください。

  • io/zarr: epoch が保存されていないストアを読み取ると UserWarning が発生するようになりました(以前は GPS epoch 1980 が黙ってデフォルトとして使用されていました)。新しい t0_override= 引数で epoch を明示的に設定できます。

  • io/sdb: 数値への強制変換で破棄された非数値は、黙って失われなくなりました。リーダーは影響を受けた列と件数を含む警告を出します。

バグ修正#

  • interop/obspy: obspy.Stream を渡したとき、TimeSeries.from_obspy が不透明な AttributeError でクラッシュしなくなりました。単一トレースの Stream は直接変換され、複数トレースの Stream では、新しい TimeSeriesDict.from_obspy / to_obspy メソッドを案内する明確な TypeError が送出されます。from_neo(Block/Segment)、from_torch(1 次元でないテンソル)、from_root(コンテナ入力)の各コンバーターにも同等の明確なエラーガードが追加されました (#452)。

  • SeriesMatrix のメタデータ・エイリアシングが完全に解消されました。rows/cols/ meta/attrs は _get_meta_for_constructor(crop/append/diff/pad/interpolate が使用)内、行列の数学演算(trace、matmul、schur、abs、…)内、および __array_ufunc__ 内でディープコピーされるため、派生オブジェクトのメタデータを変更しても元のオブジェクトが破損しなくなりました。これは 0.1.6 で提供された astype/real/imag の修正 (#442) を、残りの構築パスにも拡張するものです。

  • io/hdf5: SeriesMatrix の行・列キーは書き込み時に JSON エンコードされるようになりました(NetCDF4/Zarr のエンコーダーに合わせて key_format="json")。そのため、タプルキーや数値キーが文字列に変わらず HDF5 のラウンドトリップ後も保持されます。従来の文字列キー形式のファイルも引き続き読み取り可能です。

  • io/dttxml: JSON キーのデコードで、ネストされたリストを再帰的にタプルへ変換するようになりました(Zarr デコーダーと同じ動作)。これにより、ラウンドトリップ後もタプルキーとハッシュ可能性が保持されます。

  • interop:to_xarray()(および to_xarray_frequencyseries())は、未設定の channel/name をリテラル文字列 "None" として永続化しなくなりました。従来は、これが不正な Channel("None") として往復変換されていました。channel メタデータは、to_dict/from_dict、to_xarray/from_xarray、to_hdf5/from_hdf5 の往復変換で保持されます。

動作の変更#

  • interop: TimeSeries.from_dict/from_json/from_xarray/from_pandas/ from_hdf5_dataset/from_netcdf4/from_polars(および基盤となる interop ヘルパー)は、ソースオブジェクトが保持できないメタデータを補うため、channel/unit/name/t0/dt のキーワード引数を明示的に受け付けるようになりました。明示的な引数は常に保存値より優先されます(user > source)。

  • interop: t0/dt を復元または推定できない場合、コンバーター(from_dict、from_pandas、from_hdf5、from_netcdf4、from_polars)は黙って処理する代わりに UserWarning とともに t0=0/dt=1 へフォールバックするようになりました。Zarr リーダーと同じ動作です。フォールバック値は変更されていないため、これは後方互換な(SemVer MINOR)追加です。警告を抑制するには t0=/dt= を明示的に渡してください。

依存関係#

  • メジャーバージョンによる API 破壊から保護するため、I/O バックエンドに上限バージョンを追加しました。h5py>=3.0,<4(core)、obspy<2、nptdms<2、netCDF4<2、zarr>=2,<4(extras)が対象です。これらの上限は現在テスト済みのメジャー系列内に収まりますが、すでに新しいメジャーバージョンを固定している環境では依存関係の解決に影響する可能性があります (#450, D1)。

テスト#

  • interop:resolve_timing/resolve_meta ヘルパー、dict/json/xarray/hdf5/netcdf4 間の channel 往復変換、"None" 文字列の防止、偽値となるゼロの t0=0.0 の扱い、ユーザー指定メタデータによる上書き、各変換器の新しいタイミング情報欠落時 UserWarning に対する回帰テストを追加しました。

  • HDF5/NetCDF4/Zarr 間の行列キーのラウンドトリップ契約、複数ソースリーダーとギャップパディングのカバレッジ、SDB/Zarr リーダーの警告テスト、および SDB と Zarr バックエンド用の I/O 適合性ジェネレーターとバリデーターを追加しました。

既知の制限事項#

  • GWF 固有の読み込みパディングは、引き続き既存のゼロパディング経路(gwexpy/timeseries/_gwf_io.py)に従います。GWF のパディングを行列およびコアの NaN 規約に統一する作業は、後続の issue に持ち越します。

[0.1.7] - 2026-06-27#

数値ロバスト性を強化するリリースです。statistics、fitting、spectral モジュールを対象としたフェーズ1の監査により、サイレントな失敗や退化入力に関する一連のバグが明らかになりました。本リリースでは、明示的な入力契約ガードと対応する回帰テスト一式を追加し、不正な入力が Inf/NaN や誤った結果を黙って生成するのではなく、明確なエラーを発生させるようにしました。

バグ修正#

  • fitting/core: LSQ コストクラスが dy を検証するようになりました。ゼロ、負値、有限でない値、または複素数の要素に対して、フィッティングが黙って失敗したり Inf/NaN の結果を生じたりする代わりに ValueError を発生させます (#469)。

  • fitting/gls: GLS クラスに共分散/逆共分散の条件数ガードと PSD チェックを追加しました (#457 via #472)。

  • fitting/models: モデル形状関数に退化パラメータのガードを追加しました (#455 via #471)。

  • statistics: rayleigh_test、gauch、dq_flag、student_t_indicator 全体で、退化入力および有限でない入力をガードするようにしました。全要素が NaN の入力、p=0 による誤った veto、Inf によって破損した分布、IndexError、サイズの不正なセグメントを明示的に処理します (#459 via #470)。

  • statistics/roc: calculate_roc と evaluate_detection_performance が入力契約を適用するようになりました。空のクラス、形状の不一致、有限でないスコア、同率 FPR によるバイアスでは ValueError を発生させ、sklearn 形式の {-1, +1} ラベルを正しく処理します (#468)。

  • spectral: bootstrap_spectrogram のエッジケースをガードするようにしました。浮動小数点値の切り捨て、NaN/Inf のエネルギー、rebin_width の検証、共分散の平均値補完、幅ゼロの信頼区間に関する警告に対応しています (#460 via #473)。

テスト#

  • 上記の修正を対象とする入力契約の回帰テスト一式を追加しました: tests/fitting/test_lsq_cost_dy_contract.py、tests/fitting/test_gls_contracts.py、tests/fitting/test_models_domain_contract.py、tests/statistics/test_degenerate_input_contract.py、tests/statistics/test_roc_input_contract.py、tests/spectral/test_bootstrap_spectrogram_contract.py。

メンテナンス#

  • CI ワークフロー全体の gwexpy セットアップを一元化し、共有 setup-gwexpy コンポジットアクションによって nightly のずれを修正しました (#454)。

  • CHANGELOG.md から標準化された GitHub Release ノートを生成するリリースノート用ツール(tools/gen_release_notes.py、tools/publish_releases.sh)を追加しました。

ドキュメント#

  • tech_notes/ にフェーズ1の数値ロバスト性調査および補足レポートを追加しました (#462)。

[0.1.6] - 2026-06-11#

プロット/I/O のフォローアップ修正 (#440、#441、#442 via #443)、開発依存関係の一斉更新 (#431)、FrequencySeries コレクションのレジストリ監査テスト (#438) を含む、バグ修正およびメンテナンスリリースです。

バグ修正#

  • Plot のサブプロット形状計算を修正し、展開数が常に _expand_args と一致するようにしました。引数の順序にかかわらずすべての引数を数えるため、先頭の Spectrogram や行列が後続のコンテナを隠すことはなくなりました。重複していたカウントループは単一のヘルパーに統合し、先頭の行列は唯一の引数である場合に限ってグリッド形状を維持します (#440)。

  • すべての TimeSeries リーダーがパスのリストまたはタプルを処理するようになりました。マージの意味が明確な形式(tdms、ats、csv、netcdf4、gbd、ndscope HDF5、zarr、sdb、win、dttxml)では、共有マルチソースヘルパーを介して時間方向にチャンネルを連結し、空白を NaN でパディングします。一方、自己完結型の形式(wav、audio)では、判別しにくいバックエンドの TypeError ではなく明確な ValueError を発生させます (#441)。

  • GWF エイリアス登録が予期しないエラーを黙って飲み込まなくなりました。想定されたバックエンド不在の検索では従来どおり None を返し、それ以外の場合は警告を発します (#442)。

  • SeriesMatrix の pickle 化時に、pickle 化できないため削除された attrs のエントリを一覧する警告を発するようにしました。これらを黙って削除することはありません (#442)。

  • SeriesMatrix.astype()、.real、.imag、.conj()、.transpose()/.T、.reshape() が .copy() と同様に attrs をディープコピーするようになりました。そのため、結果の attrs を変更しても元の行列に影響しません (#442)。

  • 複数ファイルの NetCDF4/Zarr を TimeSeriesMatrix に読み込む際、dict リーダーのショートカットによって行列の行/列キーを失うことなく保持するようになりました。また、NetCDF4 に専用の行列ライターを追加しました。

  • 複数ファイルの行列セグメントのマージで pad=np.nan を渡すようになり、ファイル間の空白はエラーを発生させず NaN でパディングされます。

メンテナンス#

  • requirements-dev.txt の開発依存関係グループ(24 パッケージ)を更新しました (#431)。

テスト#

  • tests/timeseries/test_rms_compat.py を追加し、GWpy と互換な TimeSeries.rms(stride) の挙動(GWpy との一致、#451 の整数の位置引数に関する回帰、末尾の不完全な区間の除外、区間ごとの NaN 伝播)と、GWexpy の拡張(時間または無次元の Quantity による stride、単位の保持、1サンプル未満、ゼロ、負、不規則な stride に対する ValueError)を固定しました。test_stats_mixin.py::test_rms_with_unit の対象を Series に変更しました。

  • コンテナが混在する引数順、単一の 2D/3D/4D 行列、および _expand_args の展開数との一致を対象とするプロット形状テストを追加しました。

  • マージ、空白のパディング、重複エラー、空リストの拒否、単一ファイル専用であることを示す明確なエラーを対象とするマルチソースリーダーのテストを追加しました。

  • pickle 化時の attrs 警告と、派生行列における attrs の独立性を対象とする回帰テストを追加しました。

  • frequencyseries/io: レジストリバックエンドの監査テストと、FrequencySeries コレクションの読み書きフォールバックに関する開発者向け注記を追加しました (#438)。動作の変更はありません。

[0.1.5] - 2026-06-10#

プロットおよび I/O の緊急修正に焦点を当てたパッチリリースです。

バグ修正#

  • TimeSeriesDict.plot() を修正し、複数チャンネルの辞書を空白または無効な図にするのではなく、個別のサブプロットに展開するようにしました(#432)。

  • ObsPy をバックエンドとする地震データリーダーを修正し、TimeSeriesDict のキーを安定した文字列トレース名(例:"IU.ANMO.00.BHZ")にしました。これにより、文字列による確実な検索が可能になります(#435)。

  • TimeSeriesDict.read(..., format="mseed") に miniSEED パスのリストまたはタプルを渡せるようにしました(#433)。

  • gwexpy.frequencyseries のインポート時 I/O 登録を修正し、FrequencySeries の読み込み形式が GWpy のデフォルト I/O レジストリから認識できるようにしました(#437)。

テスト#

  • TimeSeriesDict.plot() の回帰テストを追加しました。

  • 文字列キー、パスのリストによる miniSEED 入力、空リストの拒否に対する地震波 I/O テストを追加しました。

  • サブプロセスで分離した FrequencySeries I/O 登録テストを追加しました。

ドキュメント#

  • GWexpy は GWpy を基盤とする独立したパッケージであり、GWpy プロジェクトの公式コンポーネントではないことを明確化しました。

  • README のインストール注記を更新し、conda-forge feedstock が利用可能である一方、conda-forge パッケージは最新の PyPI リリースより遅れる場合があることを反映しました。

延期#

  • FrequencySeries コレクションの読み書きに関する広範なレジストリバックエンド移行は #438 に延期しました。

  • 依存関係の一括確認(#431)は v0.2.0-prep レーンに延期しました。

0.1.4 - 2026-05-20#

追加#

  • io/conformance: gwf、hdf.ndscope、hdf5、csv、txt、wav を対象とする、契約駆動型 I/O 適合性ベースラインの初版を追加。

  • io/contracts: フィクスチャ生成、カバレッジ状況、CI ジョブ、オプション依存関係がない場合の挙動に関する v3 公開 I/O 契約ポリシーフィールドを追加。

  • ci/io: io-conformance ゲートを追加し、I/O ゲートのドキュメントを拡充。

  • time: to_gps() にオプトインの dtype= 出力モードを追加。デフォルトは引き続き GWpy 互換で、dtype=float / dtype="float" は通常の float 値を返し、dtype="quantity" は .times と直接比較できる秒単位の Quantity を返す。

修正#

  • io/dttxml: load_dttxml_products() を修正し、DTTXML の TS エントリを生の dict ペイロードとして保持して TimeSeries.get() と衝突しないようにした。

  • io/gwf: PR 高速ゲート用に GWF バックエンドを準備し、バックエンド固有の GWF チャネルメタデータの差異を許容。

ドキュメント#

  • feedback: README、ドキュメントハブのページ、フッターリンク、ロードマップ、トラブルシューティングページを更新し、軽微なバグ報告や機能リクエストを公開フィードバックフォームへ案内するようにした。セキュリティ報告は引き続きリポジトリのセキュリティポリシーへ案内する。

テスト#

  • io/conformance: v0.1.4 のブロッキング対象フォーマットのベースラインについて、決定論的なフィクスチャ生成器と読み書きのラウンドトリップカバレッジを追加。

  • io/dttxml: read_timeseriesdict_dttxml() による DTTXML TS dict 解析の回帰テストを追加。

  • netcdf: 生成された NetCDF フィクスチャが明示的な時間座標を公開することを必須とするフィクスチャ生成契約を追加(#393)。

  • timeseries/gwf: マルチチャネル GWF のリストソース読み込みと、parallel > 1 でのパディング済みギャップ読み込みの回帰テストを追加。

既知の問題#

  • io/zarr: 基本的な create_array() フィクスチャ生成中に Zarr 3.1.5 が停止する環境では、オプションの io-zarr ゲートがハングすることがある。Zarr は v0.1.4 の基本ブロッキングゲートの対象外とし、オプションバックエンドの堅牢化課題として追跡する。

0.1.3 - 2026-05-12#

修正#

  • timeseries/gwf: TimeSeries および TimeSeriesDict 入力での複数ファイル GWF 読み込みを修正。

  • timeseries/matrix: TimeSeriesMatrix.read() における ndscope HDF5 の自動検出を修正。

  • io/contracts: 公開 I/O ドキュメントと契約メタデータを現在の自動検出動作に合わせて整合。

  • frequencyseries/csv: 元の周波数列の値を保持する専用 CSV 高速パスを追加。

  • timeseries/zarr: zarr 3 での行列ラウンドトリップカバレッジを修正し、タイムアウトしやすいフィクスチャ動作を削除。

  • plot/geomap: 読み込み可能な GMT 共有ライブラリがない PyGMT インストールを、インポート時に失敗させず利用不能なオプションバックエンドとして扱う。

既知の問題#

  • netcdf: 同梱の NetCDF フィクスチャは、場合によっては TimeSeries リーダーの時間座標契約に失敗することがある(#393)。生成された NetCDF のラウンドトリップカバレッジは引き続き成功する。NetCDF フィクスチャに依存するユーザーは、ファイルが明示的な時間座標を公開していることを確認すること。

0.1.2 - 2026-05-08#

v0.1.2 ホットフィックスの限定スコープ#

  • io/gwpy4: 公開 I/O プロキシのインポートと GWF のリスト/dict 読み込み経路に対する限定的な互換性ホットフィックス。

  • io/formats: ヒストグラム HDF5、ATS/MTH5、音声、地震、SegmentTable span CSV、FrequencySeries DTT XML の各フローについて、リーダーの自動識別と互換性を対象とした修正。

  • integration: 限定的な取り込み更新には、このトラックに必要な最小限の #369 landing/demo インポート部分のみを含める。

  • release status: v0.1.2 のバージョンメタデータとリリースノートは確定しているが、タグ作成、PyPI 公開、Zenodo 公開、新規リリーススモークテストの再実行、conda-forge の更新はまだ保留中。

パッケージングとオプション依存関係(issue #251)#

  • packaging: pyproject.toml に netcdf4 extra(netCDF4、xarray)と zarr extra(zarr)を追加し、両方を all 便利 extra に含めた。

  • packaging: 公開済み PyPI 配布物から実験的な gwexpy.gui パッケージ、コンソールスクリプト、gui extra を削除。GUI 作業はリリース後の安定化トラックが完了するまでソース/開発専用とする。

  • packaging: トップレベルのテスト、ドキュメントのサンプルデータ、パッケージ内部の Sphinx ヘルパー shim をビルド済み配布物から除外し、初回リリース成果物の衛生管理を強化。

  • packaging: requirements-dev.txt の手編集された末尾を削除し、analysis extras を pyproject.toml のみで管理するようにした。

  • interop: _optional.py の _EXTRA_MAP を修正。存在しない extras(interop、bio、stats、eda)を、素の pip install <package> にフォールバックする None エントリに置き換え、netCDF4/xarray は netcdf4 extra、zarr は zarr extra を指すようにした。

  • io: ensure_dependency() のエラーヒントを pip install <pkg>[<extra>] から pip install 'gwexpy[<extra>]' に修正。

  • io: _import_pydub、_import_obspy、_import_nptdms、_import_zarr、_import_xarray のエラーメッセージに pip install 'gwexpy[<extra>]' のヒントを追加。

  • fitting: gwexpy.fitting.__getattr__ のエラーメッセージで pip install 'gwexpy[fitting]' を提案するようにした。

  • ci: io-optional ゲートを test_seismic_public_io.py まで拡張し、test_optional_deps.py に gwexpy[extra] ヒントのアサーションと TestSeismicImportGuard を追加。

  • docs: インストールガイドを更新し、netcdf4、zarr extras を追加するとともに、gui が all に含まれないことを明記。

インフラストラクチャと CI#

  • ci: CI パイプラインを包括的に安定化し、すべての ModuleNotFoundError と SyntaxError のリグレッションを解消。

  • ci: 破損した .ipynb ファイルを早期検出するため、主要なテストワークフローに必須の Notebook 構文検証 を追加。

  • ci: すべての GitHub Actions 環境で科学計算依存関係(control、statsmodels、scikit-learn など)を復元・標準化。

  • docs: チュートリアルノートブック全体を「リセットして再折り返し」し、warnings.catch_warnings() ブロックのインデントエラーを修正。

追加#

  • fields: VectorField と TensorField が NumPy ndarray から直接初期化できるようになった(VectorField は 5D、TensorField は 6D)。後方互換性のある辞書初期化を壊さず、コンポーネント ScalarField を自動生成する。

変更#

  • fields: ScalarField の二項算術は、オペランドの時間/周波数領域、空間領域、または座標グリッドが一致しない場合に ValueError で即時失敗するようになった。算術演算の前にフィールドを明示的に整列すること。将来の再グリッド/補間 API では、明示的なグリッド整列ワークフローを追跡する。

  • plot: FieldPlot のラベルで、単位のないメタデータに空の単位括弧を表示しないようにし、最新のスカラー・カラーバーを公開属性 last_field_colorbar で参照できるようにした。明示的な label="" カラーバーラベルは引き続きサポートする。

ドキュメント#

  • docs: Class Index を 5 つの主要カテゴリ(Core、Field、Signal、Analysis、Utilities)に統合し、日本語訳を標準化(例:TimeSeriesMatrix は「時系列行列」)。

  • docs: 主要なガイダンスページ(io_formats、numerical_stability、time_utilities、architecture)を、判断表と意思決定中心の構成で再設計。

  • docs: Sphinx RTD テーマにカスタム CSS を適用し、現代的なタイポグラフィ、レスポンシブテーブル、カード型ナビゲーションによって視覚デザインを洗練。

  • docs: SEO/OGP メタデータ、サイトマップ、自動更新の「Last updated」タイムスタンプを統合。

インフラストラクチャ#

  • ci: リンク切れ、用語の一貫性、JA/EN の同期を監視する週次ドキュメント健全性チェック(docs-weekly-health.yml)を実装。

  • ci: 完全実行(Light)には papermill、構文検証(Heavy)には nbval を使うノートブックテストパイプラインを標準化。

  • ci: リポジトリサイズと差分の明瞭性を管理するため、nbstripout を pre-commit フックに統合。

  • pre-commit: 自動品質ゲートチェックリスト付きの GitHub Actions PR テンプレートを追加。

0.1.1 - 2026-04-28#

追加#

  • SegmentTable:外部ファイルから初期化するためのファクトリーメソッド read() と read_csv() を追加しました。

  • SegmentTable:反復可能プロトコル(__iter__)と、行単位で直接処理するための RowProxy に対応しました。

  • チュートリアル:SegmentTable、Noise Generation、Spectral Fitting の包括的な新規ノートブックを追加しました。

  • インフラストラクチャ:pytest --nbmake と GitHub Actions によるチュートリアル実行の自動テストを導入しました。

  • analysis/coupling:CouplingFunctionAnalysis に from_time_windows()、from_time_windows_batch()、bkg_window パラメータを追加しました(Phase 1)。

  • analysis/coupling_result:CouplingResult に to_csv()、from_csv()、to_txt()、from_txt()、to_summary_csv() によるファイルエクスポートを追加しました(Phase 2)。

  • analysis/coupling_result:CouplingResult に plot_significance()、plot_asdgram()、plot_snrgram() の可視化メソッドを追加しました(Phase 3)。

  • analysis/coupling_result:複数の結果を集約するコンテナ CouplingResultCollection を追加しました(Phase 2)。

  • analysis/stats:spectral_stats() から取得するスペクトル統計コンテナ SpectralStats を追加しました(Phase 2)。

  • analysis/response:ResponseFunctionResult に plot_projection_summary() と plot_response_matrix() の可視化メソッドを追加しました(Phase 3)。

  • analysis:ResponseFunctionResult、ResponseFunctionAnalysis、estimate_response_function、detect_step_segments を gwexpy.analysis から公開しました(Phase 4)。

  • docs:Sphinx API リファレンスに coupling_result、response、threshold、stats モジュールを追加しました(Phase 4)。

  • チュートリアル:case_coupling_analysis.ipynb / case_response_analysis.ipynb に Phase 1–3 の利用例を追補しました(Phase 4)。

変更#

  • SegmentTable:add_series_column() が、直感的な遅延読み込みのための単純な loader(segment) callable を受け付けるようになりました。

  • noise/peaks:実装との一貫性を保つため、lorentzian_line() のパラメータ名を fwhm から gamma に変更しました。

修正#

  • fitting/highlevel:fit_bootstrap_spectrum における PSD と共分散行列の周波数ビンの位置合わせを修正しました。

  • fitting/highlevel:fit_bootstrap_spectrum から未対応の stride パラメータを削除しました。

  • table/segment_plot:既存の Axes オブジェクトを segments() に渡したときに発生する TypeError を修正しました。

以前の未リリース項目(0.1.1 に統合)#

  • interop/multitaper:from_mtspec / from_mtspec_array が cls パラメータを無視し、CI 付き入力でも常に FrequencySeriesDict を返していた問題を修正しました。

  • interop/meshio:cell_data のみを持つ meshio.Mesh を from_meshio に渡した場合の誤った補間経路を廃止し、明確な ValueError を送出するようにしました。

  • interop/pyroomacoustics:room.rir のインデックス順序(マイク ↔ ソース)を修正しました。

  • interop/openems:HDF5 データセットの "Time" / "frequency" 属性を優先して使用する処理を修正しました。

0.1.0 - 2026-03-15#

リリース概要#

GWexpy の初期安定版リリースです。API の安定性、GWpy 互換性、再現可能なコミッショニングワークフローに重点を置きます。ここでは出版状況を主張しません。

変更#

  • バージョン:0.1.0b2 から 0.1.0 に更新しました(安定版リリース)。

  • GWpy API UX 互換性:主要なスペクトル API の呼び出し規約を GWpy 4.x の使用パターンに合わせました。

    • TimeSeries.transfer_function が GWpy 形式の位置引数による呼び出しを受け付けるようになりました。

      • transfer_function(other, fftlength, overlap, window, average, ...)

    • TimeSeriesDict / TimeSeriesList が次のスペクトル解析引数を位置引数で受け付けるようになりました:

      • csd、coherence、csd_matrix、coherence_matrix

      • キーワード引数に加えて、位置引数 (fftlength, overlap) にも対応しました

    • fftlength/overlap を位置引数とキーワード引数で混在指定すると、内容が明確な TypeError が発生するようになりました。

  • Authors: スパム防止のため pyproject.toml からメールアドレスを削除しました(連絡は GitHub Issues または論文経由でお願いします)

追加#

  • 互換性ポリシー文書:

    • docs/developers/compatibility/gwpy/API_UX_POLICY_20260303.md

  • GWpy 互換性テスト:

    • tests/timeseries/test_transfer_function_compat.py

    • tests/timeseries/test_collections_spectral_compat.py

    • tests/timeseries/test_fft_param_compat.py

    • コレクション API における位置引数とキーワード引数の競合、および数値として無効な other のエッジケースを確認します。

  • 互換性ゲート用 CI ワークフロー:

    • .github/workflows/test-compat-gwpy.yml

    • 対象を絞った GWpy 互換性テストと tests/timeseries を、バージョンを固定した numpy<2.0 および astropy<7.0 で実行します。

  • 出版用資料:

    • 論文ソース:docs/gwexpy-paper/main.tex

    • 出版準備計画:docs/developers/plans/for_paper_publication.md

0.1.0b2 - 2026-02-23#

変更#

  • API の統一:すべてのスペクトル解析関数のシグネチャを、サンプル数ベースのパラメーター(nperseg/noverlap)ではなく、時間ベースのパラメーター(秒単位の fftlength/overlap)を使うよう標準化しました。これにより gwexpy が GWpy の規約にそろい、ユーザー体験が向上します。

    • 対象となる関数:

      • gwexpy.spectral.bootstrap_spectrogram() - fftlength と overlap(秒)を受け付けるようになりました

      • gwexpy.fitting.fit_bootstrap_spectrum() - fftlength と overlap(秒)を受け付けるようになりました

      • gwexpy.spectrogram.Spectrogram.bootstrap() と .bootstrap_asd() - fftlength と overlap(秒)を受け付けるようになりました

      • gwexpy.fields.signal.* のスペクトル関数(spectral_density、compute_psd、freq_space_map、coherence_map) - fftlength と overlap(秒)を受け付けるようになりました

      • gwexpy.timeseries.TimeSeriesMatrix のスペクトルメソッド(_vectorized_psd、_vectorized_csd、_vectorized_coherence) - fftlength と overlap(秒)を受け付けるようになりました

    • 移行に関する注意:非推奨の nperseg または noverlap パラメーターを使うと、代わりに fftlength と overlap を使うよう案内する TypeError が発生します。非推奨期間は設けず、破壊的変更を直ちに適用します。

    • 新しいモジュール:gwexpy.utils.fft_args がパラメーターの検証と変換用のヘルパー関数を提供します:

      • parse_fftlength_or_overlap() - 時間の値(float、int、Quantity)を秒とサンプル数に変換します

      • check_deprecated_kwargs() - 非推奨パラメーターを検出して拒否します

      • get_default_overlap() - 窓関数に適したデフォルトのオーバーラップ値を返します(GWpy 互換)

    • GWpy 互換性:すべての関数が時間ベースの FFT パラメーターについて GWpy の規約に従うようになり、相互運用性が向上し、API の混乱が減少します。

改善#

  • 数値安定性:低振幅の重力波データ(O(1e-21))に対する包括的な数値堅牢化戦略を実装しました。

    • 適応的ホワイトニング:whiten() が入力分散に応じた適応的な eps を使うようになり、静かなチャンネルでの信号消失を防ぎます。

    • 堅牢な ICA:ica_fit() に内部標準化と相対許容誤差を組み込み、ダイナミックレンジの大きいデータを扱えるようにしました。

    • 安全な対数表示:可視化ツールが動的な下限値計算を使うようになり、dB プロットでの -inf やクリップされた値を防ぎます。

    • 機械精度:数値定数が float32/float64 の機械精度に適応するようになりました。

修正#

  • GBD:Graphtec の .gbd を読み込む際にアンプのレンジスケーリングを適用し、アナログチャンネルを生カウントからボルトへ正しく変換します。また、Alarm/AlarmOut/Pulse*/Logic* をデジタル状態チャンネル(0/1、無次元)として扱います。デジタルチャンネルのマッピングは digital_channels=... で上書きできます。

0.1.0b1 - 2026-02-01#

初回公開リリース#

  • これは gwexpy の初回公開ベータリリースです。これまでの開発履歴(内部バージョン 0.4.0 まで)をここに統合しました。

重要な注意事項#

  • gwpy 互換性: このリリースは gwpy>=3.0.0,<4.0.0 と互換性があります。gwpy 4.0.0 では破壊的な API 変更が導入されましたが、まだサポートされていません。ユーザーは gwpy 3.x がインストールされていることを確認してください。

リファクタリング#

  • 例外処理: NDS、GUI、IO モジュールにおける広範な except Exception パターンを排除しました。より予測しやすいエラー処理とデバッグ性の向上のため、特定の例外型(OSError、ValueError、KeyError など)に置き換えました。

  • GUI アーキテクチャ: GUI コンポーネントにおける UI 層とコアロジック層の関心の分離を改善しました。

追加#

  • コアデータ構造:

    • メタデータ管理機能を備えた TimeSeries、FrequencySeries、Spectrogram クラス。

    • マルチチャンネルデータを扱う TimeSeriesMatrix、FrequencySeriesMatrix、SpectrogramMatrix。

    • 4D 実験領域のセマンティクスに対応する ScalarField、VectorField、TensorField。

  • 数値セマンティクス:

    • 微積分メソッドにおける単位の厳密な伝播。

    • 特異点を防ぐため、積分における DC 成分の扱いを修正しました。

  • 高度な信号処理:

    • 機能的な Short-Time Laplace Transform(stlt)。

    • さまざまな集約手法に対応した高性能なリサンプリング。

    • ホワイトニングおよび標準化モデル。

  • 相互運用性:

    • 各種ファイル形式に対応: TDMS、GBD、WIN、ATS、SDB/SQLite、WAV。

    • ML フレームワーク(Torch/TensorFlow)および ROOT(CERN)との統合。

    • 地磁気地電流データ向け MTH5 に対応。

  • フィッティングと統計:

    • iminuit および emcee(MCMC)に対応した包括的な fitting モジュール。

    • 行列構造向けの統計的集約および補間。

  • GUI:

    • リアルタイムストリーミングデータの可視化と解析を行うインタラクティブ GUI。

改善#

  • 型安全性: コードベース全体で型アノテーションを大幅に拡充しました:

    • GUI(UI 層、NDS モジュール、ストリーミング、エンジン)に厳密な型ヒントを追加しました。

    • Protocol ベースの型安全な super() 呼び出しにより TimeSeriesMatrix ミックスインを強化しました。

    • IO および GUI モジュールの構造化データ向けに TypedDict 定義を導入しました。

    • MyPy の対象範囲を gui/nds/ および gui/ui/ ディレクトリまで拡大しました。

  • CI の安定性:

    • GUI テストで非推奨の qtbot.waitForWindowShown() を qtbot.waitExposed() に置き換えました。

    • テスト設定に警告フィルターを追加し、サードパーティ(NumPy、pandas)の非推奨警告を抑制しました。

    • カバレッジと除外のバランスを改善するため、MyPy の除外パターンを調整しました。

  • ROOT/NumPy のベクトル化を最適化しました。

  • 保守性向上のため noise モジュールをリファクタリングしました。

修正#

  • GUI テスト: ウィンドウの表示タイミングに関連する不安定なテスト問題を解消しました。

  • 型エラー:初期化されていない属性や戻り値型アノテーションの欠落など、さまざまな MyPy エラーを修正しました。

  • 複素行列演算における単位の伝播を修正しました。

  • 片側スペクトルにおける IFFT の振幅スケーリングを修正しました。