docs: def IFFT_filter(Signal, SampleFreq, lowerFreq, upperFreq, PyCUDA = False):
      """
      Filters data using fft -> zeroing out fft bins -> ifft
  
      Parameters
      ----------
      Signal : ndarray
          Signal to be filtered
      SampleFreq : float
          Sample frequency of signal
      lowerFreq : float
          Lower frequency of bandpass to allow through filter
      upperFreq : float
         Upper frequency of bandpass to allow through filter
      PyCUDA : bool, optional
         If True, uses PyCUDA to accelerate the FFT and IFFT
         via using your NVIDIA-GPU
         If False, performs FFT and IFFT with conventional
         scipy.fftpack
  
      Returns
      -------
      FilteredData : ndarray
          Array containing the filtered data
      """
      if PyCUDA==True:
          Signalfft=calc_fft_with_PyCUDA(Signal)
      else:
          print("starting fft")
          Signalfft = scipy.fftpack.fft(Signal)
      print("starting freq calc")
      freqs = _np.fft.fftfreq(len(Signal)) * SampleFreq
      print("starting bin zeroing")
      Signalfft[_np.where(freqs < lowerFreq)] = 0
      Signalfft[_np.where(freqs > upperFreq)] = 0
      if PyCUDA==True:
          FilteredSignal = 2 * calc_ifft_with_PyCUDA(Signalfft)
      else:
          print("starting ifft")
          FilteredSignal = 2 * scipy.fftpack.ifft(Signalfft)
      print("done")
      return _np.real(FilteredSignal)