docs: def taper(self):
          """Taper the spectrum by adding zero throughput to each end.
          This is similar to :meth:`TabularSourceSpectrum.taper`.
  
          There is no check to see if the spectrum is already tapered.
          Hence, calling this on a tapered spectrum will result in
          multiple zero-throughput entries at both ends.
  
          The wavelengths to use for the new first and last points are
          calculated by using the same ratio as for the two interior points
          used at each end.
  
          Returns
          -------
          OutElement : `TabularSpectralElement`
              Tapered spectrum.
  
          """
          OutElement = TabularSpectralElement()
  
          wcopy = N.zeros(self._wavetable.size + 2, dtype=N.float64)
          fcopy = N.zeros(self._throughputtable.size + 2, dtype=N.float64)
  
          wcopy[1:-1] = self._wavetable
          fcopy[1:-1] = self._throughputtable
  
          fcopy[0] = 0.0
          fcopy[-1] = 0.0
  
          # The wavelengths to use for the first and last points are
          # calculated by using the same ratio as for the 2 interior points
          wcopy[0] = wcopy[1]*wcopy[1]/wcopy[2]
          wcopy[-1] = wcopy[-2]*wcopy[-2]/wcopy[-3]
  
          OutElement._wavetable = wcopy
          OutElement._throughputtable = fcopy
  
          return OutElement