Add Chebyshev (cosine) transforms implemented via FFTs

PR #16999: https://github.com/numpy/numpy/pull/16999 Hello all, this PR adds the two 1D Chebyshev transform functions `chebyfft` and `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and `irfft`, respectively. As far as I understand, `pockefft` does not support cosine transforms natively; for this reason, an even extension of the input vector is constructed, whose real FFT corresponds to a cosine transform. The motivation behind these two additions is the ability to quickly perform direct and inverse Chebyshev transforms with `numpy`, without the need to write scripts that do the necessary (although minor) modifications. Chebyshev transforms are used often e.g. in the spectral integration of PDE problems; thus, I believe having them implemented in `numpy` would be useful to many people in the community. I'm happy to get comments/feedback on this feature, and on whether it's something more people would be interested in. Also, I'm not entirely sure what part of this functionality is/isn't present in `scipy`, so that the two `fft` modules remain consistent with one another. Best, Chris -- Sent from: http://numpy-discussion.10968.n7.nabble.com/

On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <cv1038@wildcats.unh.edu> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999
Hello all, this PR adds the two 1D Chebyshev transform functions `chebyfft` and `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and `irfft`, respectively. As far as I understand, `pockefft` does not support cosine transforms natively; for this reason, an even extension of the input vector is constructed, whose real FFT corresponds to a cosine transform.
The motivation behind these two additions is the ability to quickly perform direct and inverse Chebyshev transforms with `numpy`, without the need to write scripts that do the necessary (although minor) modifications. Chebyshev transforms are used often e.g. in the spectral integration of PDE problems; thus, I believe having them implemented in `numpy` would be useful to many people in the community.
I'm happy to get comments/feedback on this feature, and on whether it's something more people would be interested in. Also, I'm not entirely sure what part of this functionality is/isn't present in `scipy`, so that the two `fft` modules remain consistent with one another.
Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point. As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list. Cheers, Ralf

On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <cv1038@wildcats.unh.edu> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999
Hello all, this PR adds the two 1D Chebyshev transform functions `chebyfft` and `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and `irfft`, respectively. As far as I understand, `pockefft` does not support cosine transforms natively; for this reason, an even extension of the input vector is constructed, whose real FFT corresponds to a cosine transform.
The motivation behind these two additions is the ability to quickly perform direct and inverse Chebyshev transforms with `numpy`, without the need to write scripts that do the necessary (although minor) modifications. Chebyshev transforms are used often e.g. in the spectral integration of PDE problems; thus, I believe having them implemented in `numpy` would be useful to many people in the community.
I'm happy to get comments/feedback on this feature, and on whether it's something more people would be interested in. Also, I'm not entirely sure what part of this functionality is/isn't present in `scipy`, so that the two `fft` modules remain consistent with one another.
Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.
As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.
Chebfun <https://github.com/chebfun/chebfun> is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials. Chuck

On Tue, Aug 4, 2020 at 6:10 PM Charles R Harris <charlesr.harris@gmail.com> wrote:
On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers <ralf.gommers@gmail.com> wrote:
On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <cv1038@wildcats.unh.edu> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999
Hello all, this PR adds the two 1D Chebyshev transform functions `chebyfft` and `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and `irfft`, respectively. As far as I understand, `pockefft` does not support cosine transforms natively; for this reason, an even extension of the input vector is constructed, whose real FFT corresponds to a cosine transform.
The motivation behind these two additions is the ability to quickly perform direct and inverse Chebyshev transforms with `numpy`, without the need to write scripts that do the necessary (although minor) modifications. Chebyshev transforms are used often e.g. in the spectral integration of PDE problems; thus, I believe having them implemented in `numpy` would be useful to many people in the community.
I'm happy to get comments/feedback on this feature, and on whether it's something more people would be interested in. Also, I'm not entirely sure what part of this functionality is/isn't present in `scipy`, so that the two `fft` modules remain consistent with one another.
Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.
As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.
Chebfun <https://github.com/chebfun/chebfun> is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials.
I am quite sure that Chebyshev transforms are useful, but it does feel like something more directly suitable for SciPy than NumPy. The current division for submodules like numpy.fft/scipy.fft and numpy.linalg/scipy.linalg exists for outdated historical reasons, but at this point it is easiest for users to understand if has SciPy has a strict superset of NumPy's functionality here. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion

On Wed, Aug 5, 2020 at 8:16 PM Ben Nathanson <numpy_gsod@bigriver.xyz> wrote:
scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields.
Exactly this sentence might be useful on top of the FFT page.
Is the right page reference/routines.fft.html? I can submit a PR.
A PR would be great, thanks Ben. And yes, that's the right page. Cheers, Ralf _______________________________________________
NumPy-Discussion mailing list NumPy-Discussion@python.org https://mail.python.org/mailman/listinfo/numpy-discussion

Stephan Hoyer-2 wrote
On Tue, Aug 4, 2020 at 6:10 PM Charles R Harris <
charlesr.harris@
> wrote:
On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers <
ralf.gommers@
>
wrote:
On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <
cv1038@.unh
>
wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999
Hello all, this PR adds the two 1D Chebyshev transform functions `chebyfft` and `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and `irfft`, respectively. As far as I understand, `pockefft` does not support cosine transforms natively; for this reason, an even extension of the input vector is constructed, whose real FFT corresponds to a cosine transform.
The motivation behind these two additions is the ability to quickly perform direct and inverse Chebyshev transforms with `numpy`, without the need to write scripts that do the necessary (although minor) modifications. Chebyshev transforms are used often e.g. in the spectral integration of PDE problems; thus, I believe having them implemented in `numpy` would be useful to many people in the community.
I'm happy to get comments/feedback on this feature, and on whether it's something more people would be interested in. Also, I'm not entirely sure what part of this functionality is/isn't present in `scipy`, so that the two `fft` modules remain consistent with one another.
Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.
As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.
Chebfun <https://github.com/chebfun/chebfun> is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials.
I am quite sure that Chebyshev transforms are useful, but it does feel like something more directly suitable for SciPy than NumPy. The current division for submodules like numpy.fft/scipy.fft and numpy.linalg/scipy.linalg exists for outdated historical reasons, but at this point it is easiest for users to understand if has SciPy has a strict superset of NumPy's functionality here.
Chuck
_______________________________________________ NumPy-Discussion mailing list
NumPy-Discussion@
_______________________________________________ NumPy-Discussion mailing list
NumPy-Discussion@
Thank you all for the replies and feedback! I now have a better understanding of the differences between the NumPy and SciPy FFT modules; it certainly looks like SciPy would be a more appropriate place for such a feature.
Chebfun is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials.
Chuck
Thank you Chuck for your comment; yes I'm aware of Chebfun and of Trefethen's work in general, it's mostly the work of his and some of his past grad students that got me interested in Chebyshev methods in the first place! Chris -- Sent from: http://numpy-discussion.10968.n7.nabble.com/
participants (6)
-
Ben Nathanson
-
Charles R Harris
-
Chris Val
-
Chris Vavaliaris
-
Ralf Gommers
-
Stephan Hoyer