code: def test_example1():
      """Just a few simple compositions."""
      # Get function objects. Generate random name for transforms
      code = Function(vert_template)
      t1 = Function(transformScale)
      t2 = Function(transformZOffset)
      t3 = Function(transformScale)
  
      # We need to create a variable in order to use it in two places
      pos = Variable("attribute vec4 a_position")
  
      # Compose everything together
      code["position"] = t1(t2(pos))
      code["correction"] = t1(
          pos
      )  # Look, we use t1 again, different sig
      code[
          "endtransform"
      ] = t3  # function pointer rather than function call
      code["nlights"] = "4"
      t1["scale"] = t2
      t3["scale"] = (3.0, 4.0, 5.0)
      t2["offset"] = "1.0"
  
      code2 = Function(frag_template)
      code2["color"] = Varying("v_position")
  
      code["gl_PointSize"] = "3.0"
      code[code2["color"]] = pos
      print(code)
  
file_path: vispy/vispy/visuals/shaders/tests/test_function.py
imports: from vispy.visuals.shaders import Function, MainFunction, Variable, Varying, FunctionChain, StatementList
  from vispy.visuals.shaders.expression import FunctionCall, TextExpression
  from vispy.testing import assert_in, assert_not_in, assert_is, run_tests_if_main, assert_raises, assert_equal
label_desc: Use image node_id 1 for calling a global function with example usage: test_example1() without return types