class Matrix
Monkey patching the Matrix
class to implement matrix splicing.
Public Instance Methods
[](i, j)
click to toggle source
# File lib/rubyml.rb, line 9 def [](i, j) if i.class == Fixnum && j == ':' row(i) elsif j.class == Fixnum && i == ':' column(j) else redirect(i, j) end end
redirect(i, j)
click to toggle source
# File lib/rubyml.rb, line 19 def redirect(i, j) if i.class == String && j.class == String redirect2(i, j) else old_element(i, j) end end
redirect2(i, j)
click to toggle source
# File lib/rubyml.rb, line 27 def redirect2(i, j) if i.include?(':') || j.include?(':') redirect3(i, j) else old_element(i, j) end end
redirect3(i, j)
click to toggle source
# File lib/rubyml.rb, line 35 def redirect3(i, j) rs, re = i.split(':').map { |e| e == '' ? 0 : Integer(e) } cs, ce = j.split(':').map { |e| e == '' ? 0 : Integer(e) } redirect4(rs, re, cs, ce, [i, j]) end
redirect4(rs, re, cs, ce, orig)
click to toggle source
# File lib/rubyml.rb, line 41 def redirect4(rs, re, cs, ce, orig) if orig[0] == ':' rs = 0 re = row_count end if orig[1] == ':' cs = 0 ce = column_count end redirect5(rs, re, cs, ce, orig) end
redirect5(rs, re, cs, ce, orig)
click to toggle source
# File lib/rubyml.rb, line 53 def redirect5(rs, re, cs, ce, orig) re = rs + 1 unless orig[0].include?(':') ce = cs + 1 unless orig[1].include?(':') redirect6(rs, re, cs, ce) end
redirect6(rs, re, cs, ce)
click to toggle source
# File lib/rubyml.rb, line 59 def redirect6(rs, re, cs, ce) rs = rs.nil? ? 0 : rs cs = cs.nil? ? 0 : cs re = re.nil? ? row_count : re ce = ce.nil? ? column_count : ce redirect7(rs, re, cs, ce) end
redirect7(rs, re, cs, ce)
click to toggle source
# File lib/rubyml.rb, line 67 def redirect7(rs, re, cs, ce) return Matrix.rows([]) if rs >= re && cs >= ce return Matrix.rows([[]] * (re - rs)) if cs == ce return Matrix.columns([[]] * (ce - cs)) if re == rs redirect8(rs, re, cs, ce) end
redirect8(rs, re, cs, ce)
click to toggle source
# File lib/rubyml.rb, line 74 def redirect8(rs, re, cs, ce) rv = row_vectors[rs..re - 1].map(&:to_a) nrv = rv.map { |e| e[cs..ce - 1] } Matrix.rows(nrv) end