def delete_at(*args)
if args.size > self.rank
raise ArgumentError, "too many arguments"
end
shp = self.shape
ind = []
self.rank.times do |i|
n = shp[i]
case a=args[i]
when Integer
a = n+a if a<0
raise IndexError, "index(%d) out of range"%[a] if a<0
x = [0...a,a+1...n]
when Range
b = a.first
b = n+b if b<0
raise IndexError, "index(%s) out of range"%[a] if b<0
e = a.last
e = n+e if e<0
e -= 1 if a.exclude_end?
raise IndexError, "index(%s) out of range"%[a] if e<0
x = [0...b,e+1...n]
when Array
x = (0...n).to_a
x -= a.map do |j|
raise IndexError, "contains non-integer" unless Integer===j
(j<0) ? n+j : j
end
else
if a
raise ArgumentError, "invalid argument"
else
x = true
end
end
ind << x
end
self[*ind]
end