code: def test_softmax_expr():
      expr = ast.SoftmaxExpr([ast.NumVal(2.0), ast.NumVal(3.0)])
  
      expected_code = """
  using static System.Math;
  namespace ML {
      public static class Model {
          public static double[] Score(double[] input) {
              return Softmax(new double[2] {2.0, 3.0});
          }
          private static double[] Softmax(double[] x) {
              int size = x.Length;
              double[] result = new double[size];
              double max = x[0];
              for (int i = 1; i < size; ++i) {
                  if (x[i] > max)
                      max = x[i];
              }
              double sum = 0.0;
              for (int i = 0; i < size; ++i) {
                  result[i] = Exp(x[i] - max);
                  sum += result[i];
              }
              for (int i = 0; i < size; ++i)
                  result[i] /= sum;
              return result;
          }
      }
  }
  """
  
      interpreter = CSharpInterpreter()
      assert_code_equal(interpreter.interpret(expr), expected_code)
  
imports: from itertools import product
  import pytest
  from m2cgen import ast
  from m2cgen.interpreters import CSharpInterpreter
  from tests.utils import assert_code_equal
label_desc: Use image node_id 20 for calling a global function with example usage: test_softmax_expr() without return types