code: def _find_source_files(self, filename):
      basename, ext = os.path.splitext(filename)
      ext = ext.lower()
      if ext in MODULE_FILE_EXTENSIONS:
          pass
      elif ext == ".pyd":
          # Windows extension module
          platform_suffix = re.search(
              r"[.]cp[0-9]+-win[_a-z0-9]*$", basename, re.I
          )
          if platform_suffix:
              basename = basename[: platform_suffix.start()]
      elif ext == ".so":
          # Linux/Unix/Mac extension module
          platform_suffix = re.search(
              r"[.](?:cpython|pypy)-[0-9]+[-_a-z0-9]*$", basename, re.I
          )
          if platform_suffix:
              basename = basename[: platform_suffix.start()]
      elif ext == ".pxi":
          # if we get here, it means that the first traced line of a Cython module was
          # not in the main module but in an include file, so try a little harder to
          # find the main source file
          self._find_c_source_files(os.path.dirname(filename), filename)
          if filename in self._c_files_map:
              return self._c_files_map[filename][0], None
          if standalone():
              raise AssertionError(filename)
      else:
          # none of our business
          return None, None
  
      c_file = (
          filename
          if ext in C_FILE_EXTENSIONS
          else _find_c_source(basename)
      )
      if c_file is None:
          # a module "pkg/mod.so" can have a source file "pkg/pkg.mod.c"
          package_root = find_root_package_dir.uncached(filename)
          package_path = os.path.relpath(basename, package_root).split(
              os.path.sep
          )
          if len(package_path) > 1:
              test_basepath = os.path.join(
                  os.path.dirname(filename), ".".join(package_path)
              )
              c_file = _find_c_source(test_basepath)
  
      py_source_file = None
      if c_file:
          py_source_file = os.path.splitext(c_file)[0] + ".py"
          if not os.path.exists(py_source_file):
              py_source_file = None
  
          try:
              with OpenFile(c_file) as f:
                  if "/* Generated by Cython " not in f.read(30):
                      return None, None  # not a Cython file
          except (IOError, OSError):
              c_file = None
  
      return c_file, py_source_file
  
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 4 for calling the Plugin obj's underlying member method code with example usage: obj._find_source_files(filename) and returns: c_file,  py_source_file, None,  None, None,  None, self,  None