code: def make_selector_fn(selector):
      """
      If selector is a function, return selector.
      Otherwise, return a function corresponding to the selector string. Examples
      of valid selector strings and the corresponding functions:
          x       lambda obj: obj['x']
          x.y     lambda obj: obj['x']['y']
          x,y     lambda obj: (obj['x'], obj['y'])
      """
      if isinstance(selector, str):
          if "," in selector:
              parts = selector.split(",")
              part_selectors = [
                  make_selector_fn(part) for part in parts
              ]
              return lambda obj: tuple(
                  sel(obj) for sel in part_selectors
              )
          elif "." in selector:
              parts = selector.split(".")
              part_selectors = [
                  make_selector_fn(part) for part in parts
              ]
  
              def f(obj):
                  for sel in part_selectors:
                      obj = sel(obj)
                  return obj
  
              return f
          else:
              key = selector.strip()
              return lambda obj: obj[key]
      elif isinstance(selector, types.FunctionType):
          return selector
      else:
          raise TypeError
  
imports: import collections
  import inspect
  import json
  import types
  import unittest
  import warnings
  import math
  import numpy
label_desc: Use image node_id 1 for calling a global function with example usage: make_selector_fn(selector) and returns: function, selector, f, function, obj