docs: def analyze_one(self, nm, importernm=None, imptyp=0, level=-1):
          """
          break the name being imported up so we get:
          a.b.c -> [a, b, c] ; ..z -> ['', '', z]
          """
          #print '## analyze_one', nm, importernm, imptyp, level
          if not nm:
              nm = importernm
              importernm = None
              level = 0
          nmparts = nm.split('.')
  
          if level < 0:
              # behaviour up to Python 2.4 (and default in Python 2.5)
              # first see if we could be importing a relative name
              contexts = [None]
              if importernm:
                  if self.ispackage(importernm):
                      contexts.insert(0, importernm)
                  else:
                      pkgnm = ".".join(importernm.split(".")[:-1])
                      if pkgnm:
                          contexts.insert(0, pkgnm)
          elif level == 0:
              # absolute import, do not try relative
              importernm = None
              contexts = [None]
          elif level > 0:
              # relative import, do not try absolute
              if self.ispackage(importernm):
                  level -= 1
              if level > 0:
                  importernm = ".".join(importernm.split('.')[:-level])
              contexts = [importernm, None]
              importernm = None
  
          _all = None
  
          assert contexts
  
          # so contexts is [pkgnm, None] or just [None]
          if nmparts[-1] == '*':
              del nmparts[-1]
              _all = []
          nms = []
          for context in contexts:
              ctx = context
              for i, nm in enumerate(nmparts):
                  if ctx:
                      fqname = ctx + '.' + nm
                  else:
                      fqname = nm
                  mod = self.modules.get(fqname, UNTRIED)
                  if mod is UNTRIED:
                      logger.debug('Analyzing %s', fqname)
                      mod = self.doimport(nm, ctx, fqname)
                  if mod:
                      nms.append(mod.__name__)
                      ctx = fqname
                  else:
                      break
              else:
                  # no break, point i beyond end
                  i = i + 1
              if i:
                  break
          # now nms is the list of modules that went into sys.modules
          # just as result of the structure of the name being imported
          # however, each mod has been scanned and that list is in mod.imports
          if i<len(nmparts):
              if ctx:
                  if hasattr(self.modules[ctx], nmparts[i]):
                      return nms
                  if not self.ispackage(ctx):
                      return nms
              self.warnings["W: no module named %s (%s import by %s)" % (fqname, imptyps[imptyp], importernm or "__main__")] = 1
              if fqname in self.modules:
                  del self.modules[fqname]
              return nms
          if _all is None:
              return nms
          bottommod = self.modules[ctx]
          if bottommod.ispackage():
              for nm in bottommod._all:
                  if not hasattr(bottommod, nm):
                      mod = self.doimport(nm, ctx, ctx+'.'+nm)
                      if mod:
                          nms.append(mod.__name__)
                      else:
                          bottommod.warnings.append("W: name %s not found" % nm)
          return nms