docs: def from_Note(note, width=80, tuning=None):
      """Return a string made out of ASCII tablature representing a Note object
      or note string.
  
      Throw a RangeError if a suitable fret can't be found.
  
      'tuning' should be a StringTuning object or None for the default tuning.
  
      To force a certain fingering you can use a 'string' and 'fret' attribute
      on the Note. If the fingering is valid, it will get used instead of the
      default one.
      """
      if tuning is None:
          tuning = default_tuning
      result = begin_track(tuning)
      min = 1000
      (s, f) = (-1, -1)
  
      # Do an attribute check
      if hasattr(note, 'string') and hasattr(note, 'fret'):
          n = tuning.get_Note(note.string, note.fret)
          if n is not None and int(n) == int(note):
              (s, f) = (note.string, note.fret)
              min = 0
  
      if min == 1000:
          for (string, fret) in enumerate(tuning.find_frets(note)):
              if fret is not None:
                  if fret < min:
                      min = fret
                      (s, f) = (string, fret)
      l = len(result[0])
      w = max(4, (width - l) - 1)
  
      # Build ASCII
      if min != 1000:
          fret = str(f)
          for i in range(len(result)):
              d = len(fret)
              if i != s:
                  result[i] += '-' * w + '|'
              else:
                  d = w - len(fret)
                  result[i] += '-' * (d / 2) + fret
                  d = (w - d / 2) - len(fret)
                  result[i] += '-' * d + '|'
      else:
          raise RangeError("No fret found that could play note '%s'. "
                  "Note out of range." % note)
      result.reverse()
      return os.linesep.join(result)