-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Move generic FFT into its own package? #172
Comments
I think we'd definitely support this |
Hey, excellent. What makes the most sense as far as execution? Would you like me (or some other volunteer that isn't one of the main devs here) to make the repo and set up tests and stuff and then transfer it (?) to JuliaApproximation or something? To be honest I don't have a great understanding of the Maybe @mfherbst has an opinion as well? |
Yes exactly. I don't think me or @MikaelSlevinsky have time to do this ourselves so just needs someone to take the initiative. I don't have strong opinions on where it ends up. |
Sorry guys for the silence on my end, have been pretty busy lately. Yes having a generic FFT routine in a separate package would be very much appreciated on my end. In DFTK we currently use a local copy of Structure-wise I guess the suggested "outsourcing" of the generic FFT of this package to |
Just saying that there's also interest on our side, as we are looking for a generic FFT for use in SpeedyWeather.jl. Very happy to contribute, but I currently don't have an overview of what's needed where. If someone could come up with a plan what's needed, happy to execute some of the steps in it. |
It just takes someone to take the lead, which would include deciding "what's needed where". @mfherbst gave a reasonsable proposal. |
I'd be a happy user of a separate package for generic FFT's |
I went ahead and created a GenericFFT package: https://github.com/JuliaApproximation/GenericFFT.jl This is just a way to get started. I copied the code from fftbigfloats.jl and added some tests for the Double64 type from DoubleFloats.jl (which by my experiments currently seems the most performant 128 bit floating point number type). My own packages work with GenericFFT.jl as a drop-in replacement for the dependency on FastTransforms.jl. Can anyone interested try it out with your own code and report any issues you find? We can make progress that way. It seemed more difficult to integrate with FourierTransforms.jl, but I have no strong feelings about where this code ends up - as long as I can use fft and dct routines with arbitrary floating point numbers I'll be happy. Hopefully sooner or later someone becomes interested in optimizing the transforms. |
Thanks! Sorry to have been radio silent on this for so long. I appreciate the initiative you took for it. I have a couple comments/questions, but I'll open them as issues on that page. |
The GenericFFT.jl package has been registered at version 0.1.0. There were some tweaks to dependencies, but the transform itself is the exact same code as it was here in FastTransforms so it should be functionally equivalent for everyone who used FastTransforms for that purpose. FastTransforms extended DSP.conv for general AbstractFloat types in terms of the FFT. That part was removed from GenericFFT, in order not to depend on DSP. An issue was filed to fix this upstream so hopefully in the future 'conv' will just work. |
Thanks everyone here for the quick responses! |
The generic Bluestein-based FFT in this package is great, and I use it often. But this package has a lot of heavy dependencies that I don't really want to add to my projects, and the FFT is very often the only functionality I use from it. Would it make sense to potentially move/mirror it to its own package, or potentially even put it in
AbstractFFTs.jl
? As it stands, to avoid cluttering the dependency tree of my projects I even sometimes just copy that single file (with proper attribution, to be clear).If the idea is not objectionable but you don't feel like doing it, would you object to somebody else (for example me) copying it and creating, say,
Bluestein.jl
?I see an existing issue (#86) asking something similar, where the proposed solution is that
FourierTransforms.jl
will provide nice multidimensional transforms. But that package isn't registered and hasn't seen a commit since 2019. While eventually that seems like a very natural home for such functionality, maybe something that is registered and offers something lighter in the mean time would make sense.The text was updated successfully, but these errors were encountered: