code: def test_external_function(self):
      test_self = self
  
      class Resolver(type_inference.Resolver):
          def res_name(self, ns, types_ns, name):
              test_self.assertEqual(name, qual_names.QN("g"))
              return {str}, g
  
          def res_call(
              self, ns, types_ns, node, f_type, args, keywords
          ):
              test_self.assertEqual(f_type, (str,))
              test_self.assertEqual(
                  anno.getanno(node.func, anno.Basic.QN),
                  qual_names.QN("g"),
              )
              return {float}, None
  
      def g() -> float:
          return 1.0
  
      def test_fn():
          a = g()
          return a
  
      node, _ = TestTranspiler(Resolver).transform(test_fn, None)
      fn_body = node.body
  
      self.assertTypes(fn_body[0].value.func, str)
      self.assertTypes(fn_body[0].targets[0], float)
      self.assertTypes(fn_body[1].value, float)
  
imports: import unittest
  from typing import Any, Callable, List
  from nvidia.dali._autograph.pyct import anno
  from nvidia.dali._autograph.pyct import cfg
  from nvidia.dali._autograph.pyct import qual_names
  from nvidia.dali._autograph.pyct import transpiler
  from nvidia.dali._autograph.pyct.static_analysis import activity
  from nvidia.dali._autograph.pyct.static_analysis import reaching_definitions
  from nvidia.dali._autograph.pyct.static_analysis import reaching_fndefs
  from nvidia.dali._autograph.pyct.static_analysis import type_inference
label_desc: Use image node_id 16 for calling the TypeInferenceAnalyzerTest obj's underlying member method code with example usage: obj.test_external_function() and returns: int, a, unknown,  g, unknown,  None