class_docstr: Find the Python/Cython source file for a Cython module.
class_docstr_tok: ["Find","the","Python\/Cython","source","file","for","a","Cython","module","."]
docstr: Determine source file path.  Called by the function call tracer.
docstr_tok: ["Determine","source","file","path",".","Called","by","the","function","call","tracer","."]
code: def dynamic_source_filename(self, filename, frame):
      """
      Determine source file path.  Called by the function call tracer.
      """
      source_file = frame.f_code.co_filename
      try:
          return self._file_path_map[source_file]
      except KeyError:
          pass
      if standalone():
          abs_path = self.module_file
      else:
          abs_path = _find_dep_file_path(filename, source_file)
  
      if self.py_file and source_file[-3:].lower() == ".py":
          # always let coverage.py handle this case itself
          self._file_path_map[source_file] = self.py_file
          return self.py_file
  
      assert self._c_files_map is not None
      if abs_path not in self._c_files_map:
          self._c_files_map[abs_path] = (self.c_file, source_file, None)
      self._file_path_map[source_file] = abs_path
      return abs_path
  
imports: from __future__ import absolute_import
  import re
  import os.path
  import sys
  from collections import defaultdict
  from coverage.plugin import CoveragePlugin, FileTracer, FileReporter
  from coverage.files import canonical_filename
  from .Utils import find_root_package_dir, is_package_dir, open_source_file
  from .None import __version__
label_desc: Use image node_id 3 for calling the CythonModuleTracer obj's underlying member method code with example usage: obj.dynamic_source_filename(filename, frame) and returns: abs_path, self, self