class_docstr: Resolve documentation links using searchindex.js generated by Sphinx
  
  Parameters
  ----------
  doc_url : str
      The base URL of the project website.
  searchindex : str
      Filename of searchindex, relative to doc_url.
  extra_modules_test : list of str
      List of extra module names to test.
  relative : bool
      Return relative links (only useful for links to documentation of this
      package).
docstr: Get a valid link, False if not found
docstr_tok: ["Get","a","valid","link",",","False","if","not","found"]
code: def _get_link(self, cobj):
      """Get a valid link, False if not found"""
  
      fname_idx = None
      full_name = cobj["module_short"] + "." + cobj["name"]
      if full_name in self._searchindex["objects"]:
          value = self._searchindex["objects"][full_name]
          if isinstance(value, dict):
              value = value[next(iter(value.keys()))]
          fname_idx = value[0]
      elif cobj["module_short"] in self._searchindex["objects"]:
          value = self._searchindex["objects"][cobj["module_short"]]
          if cobj["name"] in value.keys():
              fname_idx = value[cobj["name"]][0]
  
      if fname_idx is not None:
          fname = self._searchindex["filenames"][fname_idx]
          if fname[-4:] == ".rst":
              fname = fname[:-4]
          fname += ".html"
  
          if self._is_windows:
              fname = fname.replace("/", "\\")
              link = os.path.join(self.doc_url, fname)
          else:
              link = posixpath.join(self.doc_url, fname)
  
          if hasattr(link, "decode"):
              link = link.decode("utf-8", "replace")
  
          if link in self._page_cache:
              html = self._page_cache[link]
          else:
              html = get_data(link)
              self._page_cache[link] = html
  
          # test if cobj appears in page
          comb_names = [cobj["module_short"] + "." + cobj["name"]]
          if self.extra_modules_test is not None:
              for mod in self.extra_modules_test:
                  comb_names.append(mod + "." + cobj["name"])
          url = False
          if hasattr(html, "decode"):
              # Decode bytes under Python 3
              html = html.decode("utf-8", "replace")
  
          for comb_name in comb_names:
              if hasattr(comb_name, "decode"):
                  # Decode bytes under Python 3
                  comb_name = comb_name.decode("utf-8", "replace")
              if comb_name in html:
                  url = link + "#" + comb_name
          link = url
      else:
          link = False
  
      return link
  
imports: from __future__ import division, print_function
  from time import time
  import ast
  import os
  import re
  import shutil
  import traceback
  import glob
  import sys
  import gzip
  import posixpath
  import subprocess
  import warnings
  from sklearn.externals import six
  from docutils.core import publish_string
  import token
  import tokenize
  import numpy
  import joblib
label_desc: Use image node_id 2 for calling the SphinxDocLinkResolver obj's underlying member method code with example usage: obj._get_link(cobj) and returns: link