code: def cache_call_signatures(
      evaluator, context, bracket_leaf, code_lines, user_pos
  ):
      """This function calculates the cache key."""
      line_index = user_pos[0] - 1
  
      before_cursor = code_lines[line_index][: user_pos[1]]
      other_lines = code_lines[bracket_leaf.start_pos[0] : line_index]
      whole = "".join(other_lines + [before_cursor])
      before_bracket = re.match(r".*\(", whole, re.DOTALL)
  
      module_path = context.get_root_context().py__file__()
      if module_path is None:
          yield None  # Don't cache!
      else:
          yield (module_path, before_bracket, bracket_leaf.start_pos)
      yield evaluate_goto_definition(
          evaluator, context, bracket_leaf.get_previous_leaf()
      )
  
imports: import re
  from collections import namedtuple
  from textwrap import dedent
  from parso.python.parser import Parser
  from parso.python import tree
  from jedi._compatibility import u
  from jedi.evaluate.syntax_tree import eval_atom
  from jedi.evaluate.helpers import evaluate_call_of_leaf
  from jedi.evaluate.compiled import get_string_context_set
  from jedi.cache import call_signature_time_cache
label_desc: Use image node_id 10 for calling a global function with example usage: cache_call_signatures(evaluator, context, bracket_leaf, code_lines, user_pos) without return types