pygmt.grdtrack()の引数順序
ここ2年ほどは地図情報の描画のために PyGMT を用いている. 「生 GMT 」のような特殊な記載を極力減らし, Pythonicな分かりやすい関数や引数が与えられている点は, (自分のような)GMTをあまり使っていない人にとっても恩恵を授かれる.
ここでは,PyGMTの関数 grdtrack() で少し気になった点を記載する.
PyGMTは2020年の Version 0.1.0 リリースから,約4ヶ月間隔でマイナーアップデートを行っており,2023年5月8日現在では Version 0.9.0 が最新である.初期バージョンではラッパーの種類が少なく,使用には苦労したが,現在はGMTの多くのコマンドがPyGMTに取り込まれており,既に十分実用的である.
一方,そのような開発の速さは,バージョン間のマイナーチェンジによる弊害を生むことも多い.
grdtrack()
は,gridファイルから指定した座標値の物理量を抽出する関数である.引数には,gridファイルのパスかDataArrayを指定するgrid
と,抽出したい座標値データを含むDataFrameなどを指定するpoints
を指定する必要がある.
Version 0.6.1までは,次のような引数を取っていた.
-
v0.6.1のgrdtrack()
grdtrack.py
def grdtrack(points, grid, newcolname=None, outfile=None, **kwargs): r""" Sample grids at specified (x,y) locations. ... Parameters ---------- points : str or {table-like} Pass in either a file name to an ASCII data table, a 2D {table-classes}. grid : xarray.DataArray or str Gridded array from which to sample values from, or a filename (netcdf format).
この関数では,第1引数にpoints
,第2引数にgrid
を必ず与えなければならない.
一方,次のVersion 0.7.0では引数の取り方が変わっていた.
-
v0.7.0のgrdtrack()
grdtrack.py
def grdtrack(grid, points=None, newcolname=None, outfile=None, **kwargs): r""" Sample grids at specified (x,y) locations. ... Parameters ---------- grid : xarray.DataArray or str Gridded array from which to sample values from, or a filename (netcdf format). points : str or {table-like} Pass in either a file name to an ASCII data table, a 2D {table-classes}.
この関数の記載では,必ず第1引数にgrid
を与える必要があり,points
の与える位置は制約されない.
ただし,関数を作用させるにはpoints
またはprofile
のどちらかを指定する必要がある.
つまり,v0.6.1からv0.7.0以上にアップデートした場合,grdtrack()
を使用していれば引数の順序を変える必要があるということだ.幸い,grid
はnetCDF形式,points
はtable形式のため,仮に順序を変えていなくてもエラーを吐いてプログラムは止まる.だが,これらのファイル形式などが同一の引数だった場合,エラーを吐かずに大きなバグを生み出している可能性がある.
…とはいえ,v0.6.1以前にWarningが出されていたかもしれない.見落としていたらそれまでだが,今後もPyGMTの最新バージョンを使っていく際には,注意して実行していく必要がありそうだ.