[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003944] __shape_matching のバグ



電脳 Ruby のみなさま: 京大気象学研究室 M2 の松葉です.

gphys.rb の中の __shape_matching というメソッドにバグを見つけましたので,
パッチを作成してみました.添付いたします.GPhys のバージョンは 1.5.0-1 です.

どういうバグかと一応説明しておきますと,たとえば,[lon, lat, z, time] = [32, 32, 32, 7]
であるような GPhys オブジェクトに対して,[lat] の一次元データを足すようなことを考えると,
match する軸を探すときに index または rindex で一致する軸を探そうとするので,目的の真ん中の
32 にたどり着けないというものです.

滅多に遭遇することではないかと思いますが,取り込んでいただけると助かります.

サンプルスクリプトも付けておきます (意味のある計算ではありませんが,動作確認のため).

---------- ここから ----------
require 'numru/gphys'
include NumRu

nx = NArray.float(10).indgen!  # 0,1,2,..
ny = NArray.float(10).indgen!  # 0,1,2,..
nz = NArray.float(10).indgen!  # 0,1,2,..
nt = NArray.float(10).indgen!  # 0,1,2,..
nm = NArray.float(10).indgen!  # 0,1,2,..

vx = VArray.new( nx, {"long_name"=>"x coord","units"=>"m"}, "x")
vy = VArray.new( ny, {"long_name"=>"y coord","units"=>"m"}, "y")
vz = VArray.new( nz, {"long_name"=>"z coord","units"=>"m"}, "z")
vt = VArray.new( nt, {"long_name"=>"time","units"=>"s"}, "t")
vm = VArray.new( nm, {"long_name"=>"member","units"=>""}, "m")

xax = Axis.new.set_pos(vx)
yax = Axis.new.set_pos(vy)
zax = Axis.new.set_pos(vz)
tax = Axis.new.set_pos(vt)
max = Axis.new.set_pos(vm)

grid = Grid.new(xax, yax, zax, tax, max)
ndata = NArray.float(vx.length, vy.length, vz.length, vt.length, vm.length).indgen!
vdata = VArray.new(ndata, {'long_name'=>"dummy data"}, "z")
gdata = GPhys.new(grid, vdata)

cut_gdata = gdata[0, false, 0, 0]
p gdata + cut_gdata # パッチを当てないとここでエラーが出ます
---------- ここまで ----------


--
松葉 史剛 (Fumitaka MATSUBA)
京都大学大学院 理学研究科 地球惑星科学専攻
地球物理学教室 気象学研究室 M2


Attachment: gphys.patch
Description: Binary data