code: def test_softmax_expr():
      expr = ast.SoftmaxExpr([ast.NumVal(2.0), ast.NumVal(3.0)])
  
      expected_code = """
  def score(input)
      softmax([2.0, 3.0])
  end
  def softmax(x)
      m = x.max
      exps = []
      s = 0.0
      x.each_with_index do |v, i|
          exps[i] = Math.exp(v - m)
          s += exps[i]
      end
      exps.map { |i| i / s }
  end
  """
  
      interpreter = RubyInterpreter()
      assert_code_equal(interpreter.interpret(expr), expected_code)
  
imports: from itertools import product
  import pytest
  from m2cgen import ast
  from m2cgen.interpreters import RubyInterpreter
  from tests.utils import assert_code_equal
label_desc: Use image node_id 18 for calling a global function with example usage: test_softmax_expr() without return types