Module: Kumi::Dev::IR

Defined in:
lib/kumi/dev/ir.rb

Class Method Summary collapse

Class Method Details

.format_value(val) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/kumi/dev/ir.rb', line 33

def self.format_value(val)
  case val
  when true, false
    val.to_s
  when Symbol
    ":#{val}"
  when Array
    val.inspect
  else
    val.to_s
  end
end

.to_json(ir_module, pretty: true) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/kumi/dev/ir.rb', line 46

def to_json(ir_module, pretty: true)
  raise "nil IR" unless ir_module

  data = {
    inputs: ir_module.inputs,
    decls: ir_module.decls.map do |decl|
      {
        name: decl.name,
        kind: decl.kind,
        shape: decl.shape,
        ops: decl.ops.map do |op|
          {
            tag: op.tag,
            attrs: op.attrs,
            args: op.args
          }
        end
      }
    end
  }

  if pretty
    JSON.pretty_generate(data)
  else
    JSON.generate(data)
  end
end

.to_text(ir_module) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/kumi/dev/ir.rb', line 10

def to_text(ir_module)
  raise "nil IR" unless ir_module

  lines = []
  lines << "IR Module"
  lines << "decls: #{ir_module.decls.size}"

  ir_module.decls.each_with_index do |decl, i|
    lines << "decl[#{i}] #{decl.kind}:#{decl.name} shape=#{decl.shape} ops=#{decl.ops.size}"

    decl.ops.each_with_index do |op, j|
      # Sort attribute keys for deterministic output
      sorted_attrs = op.attrs.keys.sort.map { |k| "#{k}=#{format_value(op.attrs[k])}" }.join(" ")
      args_str = op.args.inspect
      lines << "  #{j}: #{op.tag} #{sorted_attrs} #{args_str}".rstrip
    end
  end

  lines.join("\n") + "\n"
end